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:13 UTC

[camel-quarkus] branch master updated (e6c3860 -> 262cddd)

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

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


    from e6c3860  Revert Disable doc xref checks as there is no camel-3.9.x branch yet
     new fb3bc03  Add test coverage for a custom HealthCheckRepository
     new 262cddd  Add test coverage for health check interval and failure-threshold

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 integration-tests/microprofile/pom.xml             |  5 ++
 .../it/health/CustomHealthCheckRepository.java     | 82 ++++++++++++++++++++++
 .../it/health/MicroProfileHealthRouteBuilder.java  |  6 ++
 .../src/main/resources/application.properties      | 15 ++--
 .../it/health/MicroProfileHealthTest.java          | 39 ++++++++++
 5 files changed, 143 insertions(+), 4 deletions(-)
 create mode 100644 integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/CustomHealthCheckRepository.java

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

Posted by ja...@apache.org.
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);
+        }
+    }
 }

[camel-quarkus] 01/02: Add test coverage for a custom HealthCheckRepository

Posted by ja...@apache.org.
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 fb3bc03708e3afd6523810e98474ebb0ddbcaaa5
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Mar 23 16:09:14 2021 +0000

    Add test coverage for a custom HealthCheckRepository
    
    Fixes #2365
---
 .../it/health/CustomHealthCheckRepository.java     | 82 ++++++++++++++++++++++
 .../it/health/MicroProfileHealthTest.java          |  1 +
 2 files changed, 83 insertions(+)

diff --git a/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/CustomHealthCheckRepository.java b/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/CustomHealthCheckRepository.java
new file mode 100644
index 0000000..c54665d
--- /dev/null
+++ b/integration-tests/microprofile/src/main/java/org/apache/camel/quarkus/component/microprofile/it/health/CustomHealthCheckRepository.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.microprofile.it.health;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.health.HealthCheckConfiguration;
+import org.apache.camel.health.HealthCheckRepository;
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.impl.health.AbstractHealthCheck;
+
+/**
+ * Fictitious HealthCheckRepository returning a hard coded check to verify auto discovery is working
+ */
+public class CustomHealthCheckRepository implements HealthCheckRepository {
+
+    private final HealthCheck check = new AlwaysUpHealthCheck();
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        // Noop
+    }
+
+    @Override
+    public void setConfigurations(Map<String, HealthCheckConfiguration> configurations) {
+        // Noop
+    }
+
+    @Override
+    public Map<String, HealthCheckConfiguration> getConfigurations() {
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public void addConfiguration(String id, HealthCheckConfiguration configuration) {
+        // Noop
+    }
+
+    @Override
+    public Stream<HealthCheck> stream() {
+        return Stream.of(check);
+    }
+
+    @Override
+    public String getId() {
+        return "custom-health-repo";
+    }
+
+    static final class AlwaysUpHealthCheck extends AbstractHealthCheck {
+
+        protected AlwaysUpHealthCheck() {
+            super("custom", "always-up");
+        }
+
+        @Override
+        protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+            builder.up().build();
+        }
+    }
+}
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 49e36ba..4d934b8 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
@@ -39,6 +39,7 @@ class MicroProfileHealthTest {
                         containsInAnyOrder("camel-readiness-checks", "camel-liveness-checks", "camel-context-check"),
                         "checks.data.contextStatus", containsInAnyOrder(null, null, "Started"),
                         "checks.data.'route:healthyRoute'", containsInAnyOrder(null, null, "UP"),
+                        "checks.data.always-up", containsInAnyOrder(null, "UP", "UP"),
                         "checks.data.name", containsInAnyOrder(null, null, "quarkus-camel-example"));
     }