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);
+ }
+ }
}