This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 89348b7ba2 fix: Add ES cluster health check before running test fixes 
#8321
89348b7ba2 is described below

commit 89348b7ba27e125b6567156b9954e706bc9c0060
Author: GaĆ«lle Fournier <[email protected]>
AuthorDate: Mon Feb 23 08:24:37 2026 +0100

    fix: Add ES cluster health check before running test fixes #8321
    
    Co-authored-by: Jiri Ondrusek <[email protected]>
---
 .../elasticsearch/it/ElasticsearchTest.java        | 83 +++++++++++++++++++++-
 1 file changed, 81 insertions(+), 2 deletions(-)

diff --git 
a/integration-tests-jvm/elasticsearch/src/test/java/org/apache/camel/quarkus/component/elasticsearch/it/ElasticsearchTest.java
 
b/integration-tests-jvm/elasticsearch/src/test/java/org/apache/camel/quarkus/component/elasticsearch/it/ElasticsearchTest.java
index 1da78075ea..9d3f4c23eb 100644
--- 
a/integration-tests-jvm/elasticsearch/src/test/java/org/apache/camel/quarkus/component/elasticsearch/it/ElasticsearchTest.java
+++ 
b/integration-tests-jvm/elasticsearch/src/test/java/org/apache/camel/quarkus/component/elasticsearch/it/ElasticsearchTest.java
@@ -16,6 +16,13 @@
  */
 package org.apache.camel.quarkus.component.elasticsearch.it;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.Objects;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
@@ -24,17 +31,26 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.awaitility.Awaitility;
+import org.awaitility.core.ConditionTimeoutException;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.jboss.logging.Logger;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
 import static org.hamcrest.Matchers.is;
 
-@Disabled //https://github.com/apache/camel-quarkus/issues/8319
 @QuarkusTest
 @QuarkusTestResource(ElasticsearchTestResource.class)
 class ElasticsearchTest {
+    private static final Logger LOG = 
Logger.getLogger(ElasticsearchTest.class);
+
+    @BeforeEach
+    public void beforeEach() throws ConditionTimeoutException {
+        // Ensure the Elasticsearch cluster is ready before each test
+        waitClusterReady();
+    }
 
     @AfterEach
     public void afterEach() {
@@ -354,6 +370,69 @@ class ElasticsearchTest {
         });
     }
 
+    /**
+     * Queries the Elasticsearch cluster health status and waits until it's 
green or yellow.
+     * Retries with Awaitility until the cluster is ready.
+     *
+     * @throws ConditionTimeoutException if the request fails after all retries
+     */
+    private void waitClusterReady() throws ConditionTimeoutException {
+        String hostAddresses = 
ConfigProvider.getConfig().getValue("camel.component.elasticsearch.host-addresses",
+                String.class);
+        String username = 
ConfigProvider.getConfig().getValue("camel.component.elasticsearch.user", 
String.class);
+        String password = 
ConfigProvider.getConfig().getValue("camel.component.elasticsearch.password", 
String.class);
+
+        Awaitility.await()
+                .pollInterval(500, TimeUnit.MILLISECONDS)
+                .atMost(10, TimeUnit.SECONDS)
+                .until(() -> {
+                    try {
+                        URL url = new 
URL(String.format("http://%s/_cluster/health";, hostAddresses));
+                        HttpURLConnection connection = (HttpURLConnection) 
url.openConnection();
+
+                        // Set up Basic Authentication
+                        String auth = String.format("%s:%s", username, 
password);
+                        String encodedAuth = 
Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
+                        connection.setRequestProperty("Authorization", "Basic 
" + encodedAuth);
+                        connection.setRequestMethod("GET");
+                        connection.setConnectTimeout(5000);
+                        connection.setReadTimeout(5000);
+
+                        int responseCode = connection.getResponseCode();
+                        if (responseCode == HttpURLConnection.HTTP_OK) {
+                            try (BufferedReader reader = new BufferedReader(
+                                    new 
InputStreamReader(connection.getInputStream()))) {
+                                StringBuilder response = new StringBuilder();
+                                String line;
+                                while ((line = reader.readLine()) != null) {
+                                    response.append(line);
+                                }
+                                String healthJson = response.toString();
+
+                                // Check if cluster status is green or yellow
+                                if (healthJson.contains("\"status\":\"green\"")
+                                        || 
healthJson.contains("\"status\":\"yellow\"")) {
+                                    LOG.info("Cluster health is ready: " + 
healthJson);
+                                    return healthJson;
+                                } else {
+                                    LOG.info("Cluster not ready yet, current 
status: "
+                                            + healthJson);
+                                    return null;
+                                }
+                            }
+                        } else {
+                            LOG.info("Cluster health check returned code: " + 
responseCode
+                                    + ", retrying...");
+                            return null;
+                        }
+                    } catch (Exception e) {
+                        LOG.info("Failed to query cluster health: " + 
e.getMessage()
+                                + ", retrying...");
+                        return null;
+                    }
+                }, Objects::nonNull);
+    }
+
     /**
      * This method returns array of component names used in test routes.
      * It can be handy e.g. for testing quarkus managed elasticsearch client.

Reply via email to