diff --git a/integration-test-groups/foundation/eip/pom.xml b/integration-test-groups/foundation/eip/pom.xml
index f6ea876..e8babb8 100644
--- a/integration-test-groups/foundation/eip/pom.xml
+++ b/integration-test-groups/foundation/eip/pom.xml
@@ -67,6 +67,11 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</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-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipResource.java b/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipResource.java
index fd0940f..0091b96 100644
--- a/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipResource.java
+++ b/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipResource.java
@@ -61,10 +61,16 @@
     @Path("/mock/{name}/{count}/{timeout}/{part}")
     @Produces(MediaType.TEXT_PLAIN)
     @GET
-    public String mockHeader(@PathParam("name") String name, @PathParam("count") int count, @PathParam("timeout") int timeout,
+    public String mockHeader(@PathParam("name") String name, @PathParam("count") String count,
+            @PathParam("timeout") int timeout,
             @PathParam("part") String part) {
         MockEndpoint mock = context.getEndpoint("mock:" + name, MockEndpoint.class);
-        mock.setExpectedMessageCount(count);
+
+        if (count.endsWith("+")) {
+            mock.setMinimumExpectedMessageCount(Integer.valueOf(count.substring(0, count.length() - 1)));
+        } else {
+            mock.setExpectedMessageCount(Integer.valueOf(count));
+        }
         try {
             mock.assertIsSatisfied(timeout);
         } catch (InterruptedException e1) {
diff --git a/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipRoutes.java b/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipRoutes.java
index 0fe86eb..a8e14ae 100644
--- a/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipRoutes.java
+++ b/integration-test-groups/foundation/eip/src/main/java/org/apache/camel/quarkus/eip/it/EipRoutes.java
@@ -92,6 +92,10 @@
         from("direct:routingSlip")
                 .routingSlip(header("routingSlipHeader"));
 
+        from("direct:sample")
+                .sample()
+                .to("mock:sample");
+
     }
 
     @Produces
diff --git a/integration-test-groups/foundation/eip/src/test/java/org/apache/camel/quarkus/eip/it/EipTest.java b/integration-test-groups/foundation/eip/src/test/java/org/apache/camel/quarkus/eip/it/EipTest.java
index 41fd986..85d720a 100644
--- a/integration-test-groups/foundation/eip/src/test/java/org/apache/camel/quarkus/eip/it/EipTest.java
+++ b/integration-test-groups/foundation/eip/src/test/java/org/apache/camel/quarkus/eip/it/EipTest.java
@@ -22,12 +22,16 @@
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.assertj.core.api.Assertions;
 import org.hamcrest.Matchers;
+import org.jboss.logging.Logger;
 import org.junit.jupiter.api.Test;
 
 @QuarkusTest
 class EipTest {
 
+    private static final Logger LOG = Logger.getLogger(EipTest.class);
+
     @Test
     public void claimCheckByHeader() {
         RestAssured.given()
@@ -314,4 +318,35 @@
 
     }
 
+    @Test
+    public void sample() {
+        final int durationSec = 2;
+        LOG.infof("About to sent messages for %d seconds", durationSec);
+        final long deadline = System.currentTimeMillis() + (durationSec * 1000); // two seconds ahead
+        int i = 0;
+        while (System.currentTimeMillis() < deadline) {
+            /* Send messages for 2 seconds */
+            RestAssured.given()
+                    .contentType(ContentType.TEXT)
+                    .body("message-" + i++)
+                    .post("/eip/route/sample")
+                    .then()
+                    .statusCode(200);
+        }
+        LOG.infof("Sent %d messages", i);
+        /*
+         * We should normally get just 2 samples in 2 seconds using the default sample rate of 1 message per second
+         * But timing is hard in programming, let's allow one more
+         */
+        int overratedSampleUpperBound = durationSec + 1;
+        Assertions.assertThat(i).isGreaterThan(overratedSampleUpperBound);
+        String[] samples = RestAssured.get("/eip/mock/sample/1+/5000/body")
+                .then()
+                .statusCode(200)
+                .extract()
+                .body().asString().split(",");
+        LOG.infof("Got %d samples", samples.length);
+        Assertions.assertThat(samples.length).isBetween(1, overratedSampleUpperBound);
+    }
+
 }
diff --git a/integration-tests/foundation-grouped/pom.xml b/integration-tests/foundation-grouped/pom.xml
index 92712a2..5c3a46c 100644
--- a/integration-tests/foundation-grouped/pom.xml
+++ b/integration-tests/foundation-grouped/pom.xml
@@ -143,6 +143,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.awaitility</groupId>
             <artifactId>awaitility</artifactId>
             <scope>test</scope>
