You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/03/29 09:47:15 UTC

[camel-quarkus] 02/02: Add test coverage for health check interval and failure-threshold

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

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

commit 262cdddb0e3a73e1ce0e53a7e69ef3388a5eb47b
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Mar 24 13:35:06 2021 +0000

    Add test coverage for health check interval and failure-threshold
    
    Fixes #2366
---
 integration-tests/microprofile/pom.xml             |  5 +++
 .../it/health/MicroProfileHealthRouteBuilder.java  |  6 ++++
 .../src/main/resources/application.properties      | 15 ++++++---
 .../it/health/MicroProfileHealthTest.java          | 38 ++++++++++++++++++++++
 4 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/integration-tests/microprofile/pom.xml b/integration-tests/microprofile/pom.xml
index 1f0a24f..3fc3174 100644
--- a/integration-tests/microprofile/pom.xml
+++ b/integration-tests/microprofile/pom.xml
@@ -66,6 +66,11 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
 
         <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
         <dependency>
diff --git a/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthRouteBuilder.java b/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthRouteBuilder.java
index aa0710a..a01a9b6 100644
--- a/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthRouteBuilder.java
+++ b/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthRouteBuilder.java
@@ -23,5 +23,11 @@ public class MicroProfileHealthRouteBuilder extends RouteBuilder {
     public void configure() {
         from("direct:start").routeId("healthyRoute")
                 .setBody(constant("Hello Camel Quarkus"));
+
+        from("direct:disabled").routeId("disabledHealthRoute")
+                .log("This route will not show up in health checks as it is disabled in application.properties");
+
+        from("direct:checkIntervalThreshold").routeId("checkIntervalThreshold")
+                .log("This route is used to check to test health check interval / threshold");
     }
 }
diff --git a/integration-tests/microprofile/src/main/resources/application.properties b/integration-tests/microprofile/src/main/resources/application.properties
index 63749c9..344af22 100644
--- a/integration-tests/microprofile/src/main/resources/application.properties
+++ b/integration-tests/microprofile/src/main/resources/application.properties
@@ -25,7 +25,14 @@ quarkus.camel.metrics.enable-message-history = true
 #
 camel.context.name = quarkus-camel-example
 
-# Uncomment to turn on/off the message history
-# Note that on camel 3.1.x is off by default but is on by default on previous releases.
-#
-# camel.context.message-history = false
\ No newline at end of file
+# Required due to https://issues.apache.org/jira/browse/CAMEL-16395
+camel.health.config[healthyRoute].parent=routes
+camel.health.config[healthyRoute].enabled=true
+
+# Prevent unwanted routes appearing in the health check output
+camel.health.config[disabledHealthRoute].parent=routes
+camel.health.config[disabledHealthRoute].enabled=false
+
+camel.health.config[checkIntervalThreshold].parent = routes
+camel.health.config[checkIntervalThreshold].interval = 100
+camel.health.config[checkIntervalThreshold].failure-threshold = 2
diff --git a/integration-tests/microprofile/src/test/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthTest.java b/integration-tests/microprofile/src/test/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthTest.java
index 4d934b8..4f08d1e 100644
--- a/integration-tests/microprofile/src/test/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthTest.java
+++ b/integration-tests/microprofile/src/test/java/org/apache/camel/quarkus/component/microprofile/it/health/MicroProfileHealthTest.java
@@ -16,9 +16,14 @@
  */
 package org.apache.camel.quarkus.component.microprofile.it.health;
 
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import io.restassured.path.json.JsonPath;
+import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -156,4 +161,37 @@ class MicroProfileHealthTest {
                     .statusCode(204);
         }
     }
+
+    @Test
+    public void testFailureThreshold() throws InterruptedException {
+        try {
+            RestAssured.get("/microprofile-health/route/checkIntervalThreshold/stop")
+                    .then()
+                    .statusCode(204);
+
+            // Configured failure threshold and interval should allow the initial health state be UP
+            RestAssured.when().get("/health").then()
+                    .contentType(ContentType.JSON)
+                    .header("Content-Type", containsString("charset=UTF-8"))
+                    .body("status", is("UP"),
+                            "checks.data.'route:checkIntervalThreshold'", containsInAnyOrder(null, null, "UP"));
+
+            // Poll the health endpoint until the threshold / interval is exceeded and the health state transitions to DOWN
+            Awaitility.await().atMost(10, TimeUnit.SECONDS).pollDelay(50, TimeUnit.MILLISECONDS).until(() -> {
+                JsonPath result = RestAssured.when().get("/health").then()
+                        .contentType(ContentType.JSON)
+                        .header("Content-Type", containsString("charset=UTF-8"))
+                        .extract()
+                        .jsonPath();
+
+                String status = result.getString("status");
+                List<String> routeStatus = result.getList("checks.data.'route:checkIntervalThreshold'");
+                return status.equals("DOWN") && routeStatus.contains("DOWN");
+            });
+        } finally {
+            RestAssured.get("/microprofile-health/route/checkIntervalThreshold/start")
+                    .then()
+                    .statusCode(204);
+        }
+    }
 }