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 2022/10/31 19:00:34 UTC

[camel-quarkus] 03/19: controlbus: Added action option tests (fixes #4009)

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

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

commit a424a2b118cc4b19071eba1c958e1a845bd5affd
Author: Darren Coleman <dc...@redhat.com>
AuthorDate: Mon Oct 10 11:22:29 2022 +0100

    controlbus: Added action option tests (fixes #4009)
---
 .../pages/reference/extensions/controlbus.adoc     | 25 +++++++
 .../runtime/src/main/doc/limitations.adoc          |  3 +
 .../controlbus/runtime/src/main/doc/usage.adoc     | 11 +++
 .../foundation/controlbus/pom.xml                  | 21 ++++++
 .../controlbus/it/ControlbusResource.java          | 47 +++++++++++--
 .../component/controlbus/it/ControlbusRoute.java   | 22 +++++-
 .../controlbus/it/RestartRoutePolicy.java}         | 52 +++++++++------
 .../component/controlbus/it/RouteStats.java}       | 27 ++------
 .../component/controlbus/it/ControlbusTest.java    | 78 +++++++++++++++++++++-
 .../controlbus-statistics}/pom.xml                 | 52 ++++++---------
 .../controlbus/it/ControlbusResource.java          | 17 ++---
 .../component/controlbus/it/ControlbusRoute.java   | 10 +--
 .../component/controlbus/it/ControlbusTest.java    | 15 ++---
 integration-tests-jvm/pom.xml                      |  1 +
 14 files changed, 271 insertions(+), 110 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/controlbus.adoc b/docs/modules/ROOT/pages/reference/extensions/controlbus.adoc
index 6e9bf5ed28..2791345494 100644
--- a/docs/modules/ROOT/pages/reference/extensions/controlbus.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/controlbus.adoc
@@ -44,3 +44,28 @@ Or add the coordinates to your existing project:
 ifeval::[{doc-show-user-guide-link} == true]
 Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications.
 endif::[]
+
+[id="extensions-controlbus-usage"]
+== Usage
+[id="extensions-controlbus-usage-statistics"]
+=== Statistics
+
+When using the `stats` command endpoint, the `camel-quarkus-management` extension must be added as a project dependency to enable JMX. Maven users will have to add the following to their `pom.xml`:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-management</artifactId>
+</dependency>
+----
+
+
+[id="extensions-controlbus-camel-quarkus-limitations"]
+== Camel Quarkus limitations
+
+[id="extensions-controlbus-limitations-statistics"]
+=== Statistics
+
+The `stats` action is not available in native mode as JMX is not supported in the Graal VM.  Therefore, attempting to build a native image with the `camel-quarkus-management` extension on the classpath will result in a build failure.
+
diff --git a/extensions/controlbus/runtime/src/main/doc/limitations.adoc b/extensions/controlbus/runtime/src/main/doc/limitations.adoc
new file mode 100644
index 0000000000..f168db0742
--- /dev/null
+++ b/extensions/controlbus/runtime/src/main/doc/limitations.adoc
@@ -0,0 +1,3 @@
+=== Statistics
+
+The `stats` action is not available in native mode as JMX is not supported in the Graal VM.  Therefore, attempting to build a native image with the `camel-quarkus-management` extension on the classpath will result in a build failure.
\ No newline at end of file
diff --git a/extensions/controlbus/runtime/src/main/doc/usage.adoc b/extensions/controlbus/runtime/src/main/doc/usage.adoc
new file mode 100644
index 0000000000..cbe7cdd4c9
--- /dev/null
+++ b/extensions/controlbus/runtime/src/main/doc/usage.adoc
@@ -0,0 +1,11 @@
+=== Statistics
+
+When using the `stats` command endpoint, the `camel-quarkus-management` extension must be added as a project dependency to enable JMX. Maven users will have to add the following to their `pom.xml`:
+
+[source,xml]
+----
+<dependency>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-management</artifactId>
+</dependency>
+----
\ No newline at end of file
diff --git a/integration-test-groups/foundation/controlbus/pom.xml b/integration-test-groups/foundation/controlbus/pom.xml
index 3ae0a4cf11..e41d9db706 100644
--- a/integration-test-groups/foundation/controlbus/pom.xml
+++ b/integration-test-groups/foundation/controlbus/pom.xml
@@ -39,10 +39,18 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-direct</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-log</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-resteasy-jsonb</artifactId>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
@@ -120,6 +128,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-log-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
             </dependencies>
         </profile>
     </profiles>
diff --git a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
index c806f16618..82c4ba0638 100644
--- a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
+++ b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
@@ -35,29 +35,62 @@ public class ControlbusResource {
     @Inject
     ProducerTemplate producerTemplate;
 
+    @Inject
+    RestartRoutePolicy restartRoutePolicy;
+
     @Path("/status")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String status() throws Exception {
-        final String message = producerTemplate.requestBody("direct:status", "", String.class);
-        LOG.infof("Received from controlbus: %s", message);
-        return message;
+        return this.process("status");
     }
 
     @Path("/start")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String start() throws Exception {
-        final String message = producerTemplate.requestBody("direct:startRoute", "", String.class);
-        LOG.infof("Received from controlbus: %s", message);
-        return message;
+        return this.process("startRoute");
     }
 
     @Path("/stop")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     public String stop() throws Exception {
-        final String message = producerTemplate.requestBody("direct:stopRoute", "", String.class);
+        return this.process("stopRoute");
+    }
+
+    @Path("/suspend")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String suspend() throws Exception {
+        return this.process("suspendRoute");
+    }
+
+    @Path("/resume")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String resume() throws Exception {
+        return this.process("resumeRoute");
+    }
+
+    @Path("/fail")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String fail() throws Exception {
+        return this.process("failRoute");
+    }
+
+    @Path("/restart")
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public RouteStats restart() throws Exception {
+        restartRoutePolicy.reset();
+        this.process("restartRoute");
+        return new RouteStats(restartRoutePolicy.getStart(), restartRoutePolicy.getStop());
+    }
+
+    private String process(String endpointName) throws Exception {
+        final String message = producerTemplate.requestBody("direct:" + endpointName, "", String.class);
         LOG.infof("Received from controlbus: %s", message);
         return message;
     }
diff --git a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
index ce0565222a..364b631910 100644
--- a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
+++ b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
@@ -16,18 +16,26 @@
  */
 package org.apache.camel.quarkus.component.controlbus.it;
 
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.jboss.logging.Logger;
 
+@ApplicationScoped
 public class ControlbusRoute extends RouteBuilder {
 
     private static final Logger LOG = Logger.getLogger(ControlbusResource.class);
 
+    @Inject
+    RestartRoutePolicy routePolicy;
+
     @Override
     public void configure() throws Exception {
         from("direct:control")
                 .routeId("control")
-                .process(e -> LOG.info("control:" + e.getMessage().getBody(String.class)));
+                .routePolicy(routePolicy)
+                .log("control: ${body}");
 
         from("direct:status")
                 .transform()
@@ -38,5 +46,17 @@ public class ControlbusRoute extends RouteBuilder {
 
         from("direct:startRoute")
                 .to("controlbus:route?routeId=control&action=start");
+
+        from("direct:suspendRoute")
+                .to("controlbus:route?routeId=control&action=suspend");
+
+        from("direct:resumeRoute")
+                .to("controlbus:route?routeId=control&action=resume");
+
+        from("direct:failRoute")
+                .to("controlbus:route?routeId=control&action=fail");
+
+        from("direct:restartRoute")
+                .to("controlbus:route?routeId=control&action=restart");
     }
 }
diff --git a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RestartRoutePolicy.java
similarity index 54%
copy from integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
copy to integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RestartRoutePolicy.java
index af190f34a0..1577fe038a 100644
--- a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
+++ b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RestartRoutePolicy.java
@@ -16,27 +16,37 @@
  */
 package org.apache.camel.quarkus.component.controlbus.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import io.restassured.http.ContentType;
-import org.junit.jupiter.api.Test;
-
-@QuarkusTest
-class ControlbusTest {
-
-    @Test
-    public void test() {
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Started"));
-
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/stop")
-                .then().statusCode(200);
-
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Stopped"));
+import javax.inject.Singleton;
+
+import org.apache.camel.Route;
+import org.apache.camel.support.RoutePolicySupport;
+
+@Singleton
+public class RestartRoutePolicy extends RoutePolicySupport {
+
+    private int startCount = 0;
+    private int stopCount = 0;
+
+    @Override
+    public void onStart(Route route) {
+        this.startCount++;
+    }
+
+    @Override
+    public void onStop(Route route) {
+        this.stopCount++;
     }
 
+    public int getStart() {
+        return this.startCount;
+    }
+
+    public int getStop() {
+        return this.stopCount;
+    }
+
+    public void reset() {
+        this.startCount = 0;
+        this.stopCount = 0;
+    }
 }
diff --git a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RouteStats.java
similarity index 54%
copy from integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
copy to integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RouteStats.java
index af190f34a0..4b5dddccd3 100644
--- a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
+++ b/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/RouteStats.java
@@ -16,27 +16,12 @@
  */
 package org.apache.camel.quarkus.component.controlbus.it;
 
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import io.restassured.http.ContentType;
-import org.junit.jupiter.api.Test;
+public class RouteStats {
+    public int startCount;
+    public int stopCount;
 
-@QuarkusTest
-class ControlbusTest {
-
-    @Test
-    public void test() {
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Started"));
-
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/stop")
-                .then().statusCode(200);
-
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Stopped"));
+    public RouteStats(int startCount, int stopCount) {
+        this.startCount = startCount;
+        this.stopCount = stopCount;
     }
-
 }
diff --git a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java b/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
index af190f34a0..ddd18d28ea 100644
--- a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
+++ b/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
@@ -19,16 +19,27 @@ package org.apache.camel.quarkus.component.controlbus.it;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+
 @QuarkusTest
 class ControlbusTest {
 
+    @BeforeEach
+    public void startRoute() {
+        String status = RestAssured.get("/controlbus/status").asString();
+        if ("Stopped".equals(status)) {
+            RestAssured.get("/controlbus/start");
+        }
+    }
+
     @Test
-    public void test() {
+    public void testStopStart() {
         RestAssured.given()
                 .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Started"));
+                .then().body(equalTo("Started"));
 
         RestAssured.given()
                 .contentType(ContentType.TEXT).get("/controlbus/stop")
@@ -36,7 +47,68 @@ class ControlbusTest {
 
         RestAssured.given()
                 .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Stopped"));
+                .then().body(equalTo("Stopped"));
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/start")
+                .then().statusCode(200);
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
+    }
+
+    @Test
+    public void testSuspendResume() {
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/suspend")
+                .then().statusCode(200);
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Suspended"));
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/resume")
+                .then().statusCode(200);
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
     }
 
+    @Test
+    public void testFail() {
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/fail")
+                .then().statusCode(200);
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Stopped"));
+    }
+
+    @Test
+    public void testRestart() {
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
+
+        RestAssured.given()
+                .get("/controlbus/restart")
+                .then().body("startCount", equalTo(1))
+                .body("stopCount", equalTo(1));
+
+        RestAssured.given()
+                .contentType(ContentType.TEXT).get("/controlbus/status")
+                .then().body(equalTo("Started"));
+    }
 }
diff --git a/integration-test-groups/foundation/controlbus/pom.xml b/integration-tests-jvm/controlbus-statistics/pom.xml
similarity index 75%
copy from integration-test-groups/foundation/controlbus/pom.xml
copy to integration-tests-jvm/controlbus-statistics/pom.xml
index 3ae0a4cf11..385772615b 100644
--- a/integration-test-groups/foundation/controlbus/pom.xml
+++ b/integration-tests-jvm/controlbus-statistics/pom.xml
@@ -23,12 +23,12 @@
         <groupId>org.apache.camel.quarkus</groupId>
         <artifactId>camel-quarkus-build-parent-it</artifactId>
         <version>2.13.1-SNAPSHOT</version>
-        <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
+        <relativePath>../../poms/build-parent-it/pom.xml</relativePath>
     </parent>
 
-    <artifactId>camel-quarkus-integration-test-controlbus</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: Control Bus</name>
-    <description>Integration tests for Camel Quarkus Control Bus extension</description>
+    <artifactId>camel-quarkus-integration-test-controlbus-statistics</artifactId>
+    <name>Camel Quarkus :: Integration Tests :: Controlbus Statistics</name>
+    <description>Integration tests for Camel Quarkus Controlbus Statistics extension</description>
 
     <dependencies>
         <dependency>
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-direct</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-management</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
@@ -58,33 +62,6 @@
     </dependencies>
 
     <profiles>
-        <profile>
-            <id>native</id>
-            <activation>
-                <property>
-                    <name>native</name>
-                </property>
-            </activation>
-            <properties>
-                <quarkus.package.type>native</quarkus.package.type>
-            </properties>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-failsafe-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>integration-test</goal>
-                                    <goal>verify</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
         <profile>
             <id>virtualDependencies</id>
             <activation>
@@ -120,6 +97,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-management-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
             </dependencies>
         </profile>
     </profiles>
diff --git a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java b/integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
similarity index 80%
copy from integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
copy to integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
index c806f16618..4eaecc9aa3 100644
--- a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
+++ b/integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusResource.java
@@ -44,20 +44,11 @@ public class ControlbusResource {
         return message;
     }
 
-    @Path("/start")
+    @Path("/stats")
     @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String start() throws Exception {
-        final String message = producerTemplate.requestBody("direct:startRoute", "", String.class);
-        LOG.infof("Received from controlbus: %s", message);
-        return message;
-    }
-
-    @Path("/stop")
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String stop() throws Exception {
-        final String message = producerTemplate.requestBody("direct:stopRoute", "", String.class);
+    @Produces(MediaType.APPLICATION_XML)
+    public String stats() throws Exception {
+        final String message = producerTemplate.requestBody("direct:statsRoute", "", String.class);
         LOG.infof("Received from controlbus: %s", message);
         return message;
     }
diff --git a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java b/integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
similarity index 91%
copy from integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
copy to integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
index ce0565222a..879c95c554 100644
--- a/integration-test-groups/foundation/controlbus/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
+++ b/integration-tests-jvm/controlbus-statistics/src/main/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusRoute.java
@@ -16,9 +16,12 @@
  */
 package org.apache.camel.quarkus.component.controlbus.it;
 
+import javax.enterprise.context.ApplicationScoped;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.jboss.logging.Logger;
 
+@ApplicationScoped
 public class ControlbusRoute extends RouteBuilder {
 
     private static final Logger LOG = Logger.getLogger(ControlbusResource.class);
@@ -33,10 +36,7 @@ public class ControlbusRoute extends RouteBuilder {
                 .transform()
                 .exchange(e -> e.getContext().getRouteController().getRouteStatus("control").name());
 
-        from("direct:stopRoute")
-                .to("controlbus:route?routeId=control&action=stop");
-
-        from("direct:startRoute")
-                .to("controlbus:route?routeId=control&action=start");
+        from("direct:statsRoute")
+                .to("controlbus:route?routeId=control&action=stats");
     }
 }
diff --git a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java b/integration-tests-jvm/controlbus-statistics/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
similarity index 75%
copy from integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
copy to integration-tests-jvm/controlbus-statistics/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
index af190f34a0..172d718113 100644
--- a/integration-test-groups/foundation/controlbus/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
+++ b/integration-tests-jvm/controlbus-statistics/src/test/java/org/apache/camel/quarkus/component/controlbus/it/ControlbusTest.java
@@ -21,22 +21,21 @@ import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+
 @QuarkusTest
 class ControlbusTest {
 
     @Test
-    public void test() {
+    public void testStats() {
         RestAssured.given()
                 .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Started"));
-
-        RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/stop")
-                .then().statusCode(200);
+                .then().body(equalTo("Started"));
 
         RestAssured.given()
-                .contentType(ContentType.TEXT).get("/controlbus/status")
-                .then().body(org.hamcrest.CoreMatchers.equalTo("Stopped"));
+                .get("controlbus/stats")
+                .then().body("routeStat.@id", equalTo("control"))
+                .body("routeStat.@state", equalTo("Started"));
     }
 
 }
diff --git a/integration-tests-jvm/pom.xml b/integration-tests-jvm/pom.xml
index ab91c08165..ea0a53c641 100644
--- a/integration-tests-jvm/pom.xml
+++ b/integration-tests-jvm/pom.xml
@@ -50,6 +50,7 @@
         <module>cmis</module>
         <module>coap</module>
         <module>cometd</module>
+        <module>controlbus-statistics</module>
         <module>corda</module>
         <module>couchbase</module>
         <module>debug</module>