You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2019/12/05 09:32:55 UTC

[camel-quarkus] branch master updated: Do not use hard coded ports in integration-tests #508

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c57b8a8  Do not use hard coded ports in integration-tests #508
c57b8a8 is described below

commit c57b8a873f0f8d4f829698a48d144378de7658d6
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Wed Dec 4 14:56:17 2019 +0100

    Do not use hard coded ports in integration-tests #508
---
 integration-tests/hystrix/pom.xml                  |  7 ++
 .../component/hystrix/it/HystrixRoutes.java        |  4 +-
 .../quarkus/component/hystrix/it/HystrixTest.java  |  2 +
 .../component/hystrix/it/HystrixTestResource.java} | 22 +++---
 .../quarkus/component/jdbc/CamelJdbcTest.java      |  3 +
 integration-tests/kafka/pom.xml                    | 19 +++++
 .../component/kafka/CamelKafkaResource.java        | 40 +++++------
 .../quarkus/component/kafka/CamelKafkaSupport.java |  4 +-
 .../src/main/resources/application.properties      |  8 +--
 .../component/kafka/it/CamelKafkaTestResource.java | 36 ++++++++--
 integration-tests/mongodb/pom.xml                  |  9 +++
 .../component/mongodb/it/MongoDbResource.java      | 12 +++-
 .../quarkus/component/mongodb/it/MongoDbTest.java  | 40 ++---------
 .../component/mongodb/it/MongoDbTestResource.java  | 74 +++++++++++++++++++
 integration-tests/netty-http/pom.xml               |  7 ++
 .../quarkus/component/netty/http/CamelRoute.java   |  6 +-
 .../quarkus/component/netty/http/CamelTest.java    | 12 +++-
 .../netty/http/NettyHttpTestResource.java}         | 20 +++---
 integration-tests/netty/pom.xml                    |  7 ++
 .../camel/quarkus/component/netty/CamelRoute.java  | 15 +---
 .../camel/quarkus/component/netty/Poetry.java      | 56 ---------------
 .../camel/quarkus/component/netty/NettyTest.java   | 21 +++---
 .../component/netty/NettyTestResource.java}        | 20 ++++--
 integration-tests/paho/pom.xml                     |  9 +++
 .../component/paho/it/ActiveMQTestResource.java    | 36 ++++++++--
 integration-tests/pom.xml                          |  5 ++
 integration-tests/sjms/.gitignore                  |  1 +
 integration-tests/sjms/pom.xml                     | 19 +++--
 .../sjms/src/main/resources/application.properties |  5 --
 .../quarkus/component/sjms/it/CamelSjmsTest.java   |  8 ++-
 ...estResource.java => CamelSjmsTestResource.java} | 40 +++++++++--
 integration-tests/support/core-main/pom.xml        |  2 +-
 integration-tests/support/core/pom.xml             |  2 +-
 integration-tests/support/pom.xml                  |  5 +-
 .../support/{ => test-support}/pom.xml             | 27 ++++---
 .../camel/quarkus/test/AvailablePortFinder.java    | 83 ++++++++++++++++++++++
 pom.xml                                            |  8 +++
 37 files changed, 475 insertions(+), 219 deletions(-)

diff --git a/integration-tests/hystrix/pom.xml b/integration-tests/hystrix/pom.xml
index 086cc42..13677b0 100644
--- a/integration-tests/hystrix/pom.xml
+++ b/integration-tests/hystrix/pom.xml
@@ -58,6 +58,13 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/integration-tests/hystrix/src/main/java/org/apache/camel/quarkus/component/hystrix/it/HystrixRoutes.java b/integration-tests/hystrix/src/main/java/org/apache/camel/quarkus/component/hystrix/it/HystrixRoutes.java
index 56ea292..8aa4026 100644
--- a/integration-tests/hystrix/src/main/java/org/apache/camel/quarkus/component/hystrix/it/HystrixRoutes.java
+++ b/integration-tests/hystrix/src/main/java/org/apache/camel/quarkus/component/hystrix/it/HystrixRoutes.java
@@ -36,14 +36,14 @@ public class HystrixRoutes extends RouteBuilder {
                 .circuitBreaker()
                 .throwException(new IllegalStateException("Forced exception"))
                 .onFallbackViaNetwork()
-                .to("netty-http:http://localhost:8999/network/fallback")
+                .to("netty-http:http://localhost:{{camel.netty.test-port}}/network/fallback")
                 .end();
 
         from("direct:delay")
                 .delay(simple("${header.delayMilliseconds}"))
                 .setBody(constant("Hello Camel Quarkus Hystrix"));
 
-        from("netty-http:http://0.0.0.0:8999/network/fallback")
+        from("netty-http:http://0.0.0.0:{{camel.netty.test-port}}/network/fallback")
                 .setBody(constant("Fallback via network response"));
     }
 }
diff --git a/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTest.java b/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTest.java
index 6056c81..1a9ef03 100644
--- a/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTest.java
+++ b/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.component.hystrix.it;
 
+import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 
@@ -23,6 +24,7 @@ import org.junit.jupiter.api.Test;
 import static org.hamcrest.core.Is.is;
 
 @QuarkusTest
+@QuarkusTestResource(HystrixTestResource.class)
 class HystrixTest {
 
     @Test
diff --git a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java b/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTestResource.java
similarity index 62%
copy from integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
copy to integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTestResource.java
index 0799ebf..bf84634 100644
--- a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
+++ b/integration-tests/hystrix/src/test/java/org/apache/camel/quarkus/component/hystrix/it/HystrixTestResource.java
@@ -14,20 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.netty.http;
+package org.apache.camel.quarkus.component.hystrix.it;
 
-import org.apache.camel.builder.RouteBuilder;
+import java.util.Map;
+import java.util.Objects;
 
-public class CamelRoute extends RouteBuilder {
+import org.apache.camel.quarkus.test.AvailablePortFinder;
 
-    @Override
-    public void configure() {
-        from("netty-http:http://0.0.0.0:8999/foo")
-                .transform().constant("Netty Hello World");
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
 
-        /* /producer proxying /foo */
-        from("netty-http:http://0.0.0.0:8999/producer")
-                .to("netty-http:http://localhost:8999/foo");
+public class HystrixTestResource implements QuarkusTestResourceLifecycleManager {
+    @Override
+    public Map<String, String> start() {
+        return AvailablePortFinder.reserveNetworkPorts(Objects::toString, "camel.netty.test-port");
+    }
 
+    @Override
+    public void stop() {
     }
 }
diff --git a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
index 4571932..d14aea4 100644
--- a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
+++ b/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/CamelJdbcTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.quarkus.component.jdbc;
 
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.h2.H2DatabaseTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
@@ -24,6 +26,7 @@ import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.is;
 
 @QuarkusTest
+@QuarkusTestResource(H2DatabaseTestResource.class)
 public class CamelJdbcTest {
 
     @Test
diff --git a/integration-tests/kafka/pom.xml b/integration-tests/kafka/pom.xml
index a02282d..8349bc0 100644
--- a/integration-tests/kafka/pom.xml
+++ b/integration-tests/kafka/pom.xml
@@ -29,6 +29,10 @@
     <name>Camel Quarkus :: Integration Tests :: Kafka</name>
     <description>Integration tests for Camel Quarkus Kafka extension</description>
 
+    <properties>
+        <rerun.failing.test.count>2</rerun.failing.test.count>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -68,6 +72,13 @@
             <scope>test</scope>
         </dependency>
 
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <!-- test dependencies - kafka -->
         <dependency>
             <groupId>io.debezium</groupId>
@@ -100,6 +111,13 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <rerunFailingTestsCount>${rerun.failing.test.count}</rerunFailingTestsCount>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
@@ -123,6 +141,7 @@
                                     <goal>verify</goal>
                                 </goals>
                                 <configuration>
+                                    <rerunFailingTestsCount>${rerun.failing.test.count}</rerunFailingTestsCount>
                                     <systemProperties>
                                         <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                                     </systemProperties>
diff --git a/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaResource.java b/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaResource.java
index 748e82d..6639e8b 100644
--- a/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaResource.java
+++ b/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaResource.java
@@ -29,6 +29,8 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.clients.producer.RecordMetadata;
 
@@ -39,32 +41,30 @@ public class CamelKafkaResource {
     @POST
     @Produces(MediaType.APPLICATION_JSON)
     public JsonObject post(@PathParam("topicName") String topicName, String message) throws Exception {
-        RecordMetadata meta = CamelKafkaSupport.createProducer()
-                .send(new ProducerRecord<>(topicName, 1, message))
-                .get();
+        try (Producer<Integer, String> producer = CamelKafkaSupport.createProducer()) {
+            RecordMetadata meta = producer.send(new ProducerRecord<>(topicName, 1, message)).get();
 
-        return Json.createObjectBuilder()
-                .add("topicName", meta.topic())
-                .add("partition", meta.partition())
-                .add("offset", meta.offset())
-                .build();
+            return Json.createObjectBuilder()
+                    .add("topicName", meta.topic())
+                    .add("partition", meta.partition())
+                    .add("offset", meta.offset())
+                    .build();
+        }
     }
 
     @Path("/kafka/{topicName}")
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public JsonObject get(@PathParam("topicName") String topicName) {
-        ConsumerRecord<Integer, String> record = CamelKafkaSupport.createConsumer(topicName)
-                .poll(Duration.ofSeconds(60))
-                .iterator()
-                .next();
-
-        return Json.createObjectBuilder()
-                .add("topicName", record.topic())
-                .add("partition", record.partition())
-                .add("offset", record.offset())
-                .add("key", record.key())
-                .add("body", record.value())
-                .build();
+        try (KafkaConsumer<Integer, String> consumer = CamelKafkaSupport.createConsumer(topicName)) {
+            ConsumerRecord<Integer, String> record = consumer.poll(Duration.ofSeconds(60)).iterator().next();
+            return Json.createObjectBuilder()
+                    .add("topicName", record.topic())
+                    .add("partition", record.partition())
+                    .add("offset", record.offset())
+                    .add("key", record.key())
+                    .add("body", record.value())
+                    .build();
+        }
     }
 }
diff --git a/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaSupport.java b/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaSupport.java
index baa2eee..8cba566 100644
--- a/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaSupport.java
+++ b/integration-tests/kafka/src/main/java/org/apache/camel/quarkus/component/kafka/CamelKafkaSupport.java
@@ -35,7 +35,7 @@ public final class CamelKafkaSupport {
 
     public static KafkaConsumer<Integer, String> createConsumer(String topicName) {
         Properties props = new Properties();
-        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:19092");
+        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, System.getProperty("camel.component.kafka.brokers"));
         props.put(ConsumerConfig.GROUP_ID_CONFIG, "test");
         props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class.getName());
         props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
@@ -50,7 +50,7 @@ public final class CamelKafkaSupport {
 
     public static Producer<Integer, String> createProducer() {
         Properties props = new Properties();
-        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:19092");
+        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, System.getProperty("camel.component.kafka.brokers"));
         props.put(ProducerConfig.CLIENT_ID_CONFIG, "test-consumer");
         props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class.getName());
         props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
diff --git a/integration-tests/kafka/src/main/resources/application.properties b/integration-tests/kafka/src/main/resources/application.properties
index a41a269..fafb51f 100644
--- a/integration-tests/kafka/src/main/resources/application.properties
+++ b/integration-tests/kafka/src/main/resources/application.properties
@@ -16,7 +16,7 @@
 ## ---------------------------------------------------------------------------
 
 #
-# Quarkus
+# Quarkus - Log
 #
 quarkus.log.file.enable = false
 quarkus.log.category."org.apache.camel.quarkus.core.deployment".level = INFO
@@ -24,7 +24,5 @@ quarkus.log.category."org.apache.camel.quarkus.component.kafka".level = DEBUG
 quarkus.log.category."org.apache.zookeeper".level = WARNING
 quarkus.log.category."org.apache.kafka".level = WARNING
 
-#
-# Camel
-#
-camel.component.kafka.brokers = localhost:19092
\ No newline at end of file
+%quiet.quarkus.log.category."kafka".level = WARNING
+%quiet.quarkus.log.category."kafka.log".level = FATAL
diff --git a/integration-tests/kafka/src/test/java/org/apache/camel/quarkus/component/kafka/it/CamelKafkaTestResource.java b/integration-tests/kafka/src/test/java/org/apache/camel/quarkus/component/kafka/it/CamelKafkaTestResource.java
index d33a466..a28083a 100644
--- a/integration-tests/kafka/src/test/java/org/apache/camel/quarkus/component/kafka/it/CamelKafkaTestResource.java
+++ b/integration-tests/kafka/src/test/java/org/apache/camel/quarkus/component/kafka/it/CamelKafkaTestResource.java
@@ -17,43 +17,67 @@
 package org.apache.camel.quarkus.component.kafka.it;
 
 import java.io.File;
+import java.nio.file.Files;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Properties;
 
 import io.debezium.kafka.KafkaCluster;
-import io.debezium.util.Testing;
 import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.apache.camel.quarkus.core.CamelMain;
+import org.apache.camel.quarkus.test.AvailablePortFinder;
 
 public class CamelKafkaTestResource implements QuarkusTestResourceLifecycleManager {
     private KafkaCluster kafka;
+    private CamelMain main;
+
+    @Override
+    public void inject(Object testInstance) {
+        if (testInstance instanceof CamelKafkaTest) {
+            this.main = ((CamelKafkaTest) testInstance).main;
+        }
+    }
 
     @Override
     public Map<String, String> start() {
         try {
+            final int zkPort = AvailablePortFinder.getNextAvailable();
+            final int kafkaPort = AvailablePortFinder.getNextAvailable();
+            final File directory = Files.createTempDirectory("kafka-data-").toFile();
+
             Properties props = new Properties();
             props.setProperty("zookeeper.connection.timeout.ms", "45000");
 
-            File directory = Testing.Files.createTestingDirectory("kafka-data", true);
-
             kafka = new KafkaCluster()
-                    .withPorts(2182, 19092)
+                    .withPorts(zkPort, kafkaPort)
                     .addBrokers(1)
                     .usingDirectory(directory)
                     .deleteDataUponShutdown(true)
                     .withKafkaConfiguration(props)
                     .deleteDataPriorToStartup(true)
                     .startup();
+
+            return Collections.singletonMap("camel.component.kafka.brokers", "localhost:" + kafkaPort);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        return Collections.emptyMap();
     }
 
     @Override
     public void stop() {
+        if (main != null) {
+            try {
+                main.stop();
+            } catch (Exception e) {
+                // ignored
+            }
+        }
         if (kafka != null) {
-            kafka.shutdown();
+            try {
+                kafka.shutdown();
+            } catch (Exception e) {
+                // ignored
+            }
         }
     }
 }
diff --git a/integration-tests/mongodb/pom.xml b/integration-tests/mongodb/pom.xml
index 2e59c13..297b5a6 100644
--- a/integration-tests/mongodb/pom.xml
+++ b/integration-tests/mongodb/pom.xml
@@ -54,6 +54,15 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- test dependencies - mongodb -->
         <dependency>
             <groupId>de.flapdoodle.embed</groupId>
             <artifactId>de.flapdoodle.embed.mongo</artifactId>
diff --git a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
index 9022649..cc63cd4 100644
--- a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
+++ b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
@@ -18,9 +18,9 @@ package org.apache.camel.quarkus.component.mongodb.it;
 
 import java.net.URI;
 import java.net.URISyntaxException;
-
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonArrayBuilder;
@@ -34,16 +34,15 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import com.mongodb.MongoClient;
 import com.mongodb.client.MongoCursor;
 import com.mongodb.client.MongoIterable;
-
 import org.apache.camel.ProducerTemplate;
 import org.bson.Document;
 
 @Path("/mongodb")
 @ApplicationScoped
 public class MongoDbResource {
-
     @Inject
     ProducerTemplate producerTemplate;
 
@@ -65,6 +64,7 @@ public class MongoDbResource {
     @GET
     @Path("/collection/{collectionName}")
     @Produces(MediaType.APPLICATION_JSON)
+    @SuppressWarnings("unchecked")
     public JsonArray getCollection(@PathParam("collectionName") String collectionName) {
         JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
 
@@ -83,4 +83,10 @@ public class MongoDbResource {
 
         return arrayBuilder.build();
     }
+
+    @javax.enterprise.inject.Produces
+    @Named("camelMongoClient")
+    public MongoClient camelMongoClient() {
+        return new MongoClient("localhost", Integer.getInteger("camel.mongodb.test-port"));
+    }
 }
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
index 688746f..4ed13a7 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
@@ -16,49 +16,21 @@
  */
 package org.apache.camel.quarkus.component.mongodb.it;
 
-import de.flapdoodle.embed.mongo.MongodExecutable;
-import de.flapdoodle.embed.mongo.MongodStarter;
-import de.flapdoodle.embed.mongo.config.IMongodConfig;
-import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
-import de.flapdoodle.embed.mongo.config.Net;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.process.runtime.Network;
+import java.util.List;
+import java.util.Map;
+
+import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import io.restassured.path.json.JsonPath;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @QuarkusTest
+@QuarkusTestResource(MongoDbTestResource.class)
 class MongoDbTest {
-
-    private static MongodExecutable MONGO;
-
-    @BeforeAll
-    public static void beforeAll() throws IOException {
-        IMongodConfig config = new MongodConfigBuilder()
-                .net(new Net(27017, Network.localhostIsIPv6()))
-                .version(Version.Main.V4_0)
-                .build();
-        MONGO = MongodStarter.getDefaultInstance().prepare(config);
-        MONGO.start();
-    }
-
-    @AfterAll
-    public static void afterAll() {
-        if (MONGO != null) {
-            MONGO.stop();
-        }
-    }
-
     @Test
     public void testMongoDbComponent() {
         // Write to collection
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
new file mode 100644
index 0000000..d64fee0
--- /dev/null
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
@@ -0,0 +1,74 @@
+/*
+ * 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.mongodb.it;
+
+import java.util.Collections;
+import java.util.Map;
+
+import de.flapdoodle.embed.mongo.MongodExecutable;
+import de.flapdoodle.embed.mongo.MongodProcess;
+import de.flapdoodle.embed.mongo.MongodStarter;
+import de.flapdoodle.embed.mongo.config.IMongodConfig;
+import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
+import de.flapdoodle.embed.mongo.config.Net;
+import de.flapdoodle.embed.mongo.distribution.Version;
+import de.flapdoodle.embed.process.runtime.Network;
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.apache.camel.quarkus.test.AvailablePortFinder;
+
+public class MongoDbTestResource implements QuarkusTestResourceLifecycleManager {
+    private MongodExecutable mongo;
+    private MongodProcess mongoProcess;
+
+    @Override
+    public Map<String, String> start() {
+        try {
+            final int port = AvailablePortFinder.getNextAvailable();
+
+            IMongodConfig config = new MongodConfigBuilder()
+                    .net(new Net("localhost", port, Network.localhostIsIPv6()))
+                    .version(Version.Main.V4_0)
+                    .build();
+
+            mongo = MongodStarter.getDefaultInstance().prepare(config);
+            mongoProcess = mongo.start();
+
+            return Collections.singletonMap("camel.mongodb.test-port", Integer.toString(port));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void stop() {
+        try {
+            if (mongoProcess != null) {
+                mongoProcess.stop();
+            }
+        } catch (Exception e) {
+            // ignored
+        }
+        try {
+            if (mongo != null) {
+                mongo.stop();
+            }
+        } catch (Exception e) {
+            // ignored
+        }
+    }
+}
diff --git a/integration-tests/netty-http/pom.xml b/integration-tests/netty-http/pom.xml
index a977e30..999b269 100644
--- a/integration-tests/netty-http/pom.xml
+++ b/integration-tests/netty-http/pom.xml
@@ -53,6 +53,13 @@
             <scope>test</scope>
         </dependency>
 
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java b/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
index 0799ebf..db5ea37 100644
--- a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
+++ b/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
@@ -22,12 +22,12 @@ public class CamelRoute extends RouteBuilder {
 
     @Override
     public void configure() {
-        from("netty-http:http://0.0.0.0:8999/foo")
+        from("netty-http:http://0.0.0.0:{{camel.netty.test-port}}/foo")
                 .transform().constant("Netty Hello World");
 
         /* /producer proxying /foo */
-        from("netty-http:http://0.0.0.0:8999/producer")
-                .to("netty-http:http://localhost:8999/foo");
+        from("netty-http:http://0.0.0.0:{{camel.netty.test-port}}/producer")
+                .to("netty-http:http://localhost:{{camel.netty.test-port}}/foo");
 
     }
 }
diff --git a/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/CamelTest.java b/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/CamelTest.java
index 7ac2cdd..eaba3de 100644
--- a/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/CamelTest.java
+++ b/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/CamelTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.quarkus.component.netty.http;
 
 import java.net.URI;
 
+import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 
@@ -26,17 +27,24 @@ import org.junit.jupiter.api.Test;
 import static org.hamcrest.Matchers.is;
 
 @QuarkusTest
+@QuarkusTestResource(NettyHttpTestResource.class)
 public class CamelTest {
 
     @Test
     public void testNetty4Http() throws Exception {
-        RestAssured.when().get(new URI("http://localhost:8999/foo"))
+        final int port = Integer.getInteger("camel.netty.test-port");
+        final String uri = String.format("http://localhost:%d/foo", port);
+
+        RestAssured.when().get(new URI(uri))
                 .then().body(is("Netty Hello World"));
     }
 
     @Test
     public void netty4HttpProducer() throws Exception {
-        RestAssured.when().get(new URI("http://localhost:8999/producer"))
+        final int port = Integer.getInteger("camel.netty.test-port");
+        final String uri = String.format("http://localhost:%d/producer", port);
+
+        RestAssured.when().get(new URI(uri))
                 .then().statusCode(200).body(is("Netty Hello World"));
     }
 
diff --git a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java b/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/NettyHttpTestResource.java
similarity index 66%
copy from integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
copy to integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/NettyHttpTestResource.java
index 0799ebf..fe7ead2 100644
--- a/integration-tests/netty-http/src/main/java/org/apache/camel/quarkus/component/netty/http/CamelRoute.java
+++ b/integration-tests/netty-http/src/test/java/org/apache/camel/quarkus/component/netty/http/NettyHttpTestResource.java
@@ -16,18 +16,20 @@
  */
 package org.apache.camel.quarkus.component.netty.http;
 
-import org.apache.camel.builder.RouteBuilder;
+import java.util.Map;
+import java.util.Objects;
 
-public class CamelRoute extends RouteBuilder {
+import org.apache.camel.quarkus.test.AvailablePortFinder;
 
-    @Override
-    public void configure() {
-        from("netty-http:http://0.0.0.0:8999/foo")
-                .transform().constant("Netty Hello World");
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
 
-        /* /producer proxying /foo */
-        from("netty-http:http://0.0.0.0:8999/producer")
-                .to("netty-http:http://localhost:8999/foo");
+public class NettyHttpTestResource implements QuarkusTestResourceLifecycleManager {
+    @Override
+    public Map<String, String> start() {
+        return AvailablePortFinder.reserveNetworkPorts(Objects::toString, "camel.netty.test-port");
+    }
 
+    @Override
+    public void stop() {
     }
 }
diff --git a/integration-tests/netty/pom.xml b/integration-tests/netty/pom.xml
index 030b51e..b38a4d8 100644
--- a/integration-tests/netty/pom.xml
+++ b/integration-tests/netty/pom.xml
@@ -52,6 +52,13 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/CamelRoute.java b/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/CamelRoute.java
index bfd2c58..b19ca3e 100644
--- a/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/CamelRoute.java
+++ b/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/CamelRoute.java
@@ -19,20 +19,9 @@ package org.apache.camel.quarkus.component.netty;
 import org.apache.camel.builder.RouteBuilder;
 
 public class CamelRoute extends RouteBuilder {
-
     @Override
     public void configure() {
-
-        from("netty:tcp://0.0.0.0:8994?textline=true&sync=true")
-                .process().message(message -> {
-                    if (message.getBody() instanceof Poetry) {
-                        Poetry poetry = (Poetry) message.getBody();
-                        poetry.setPoet("Dr. Sarojini Naidu");
-                        message.setBody(poetry);
-                        return;
-                    }
-                    message.setBody("When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.");
-                });
-
+        from("netty:tcp://0.0.0.0:{{camel.netty.test-port}}?textline=true&sync=true")
+                .setBody().constant("When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.");
     }
 }
diff --git a/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/Poetry.java b/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/Poetry.java
deleted file mode 100644
index 593347e..0000000
--- a/integration-tests/netty/src/main/java/org/apache/camel/quarkus/component/netty/Poetry.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.netty;
-
-import java.io.Serializable;
-
-public class Poetry implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String poet = "?";
-    private String poem = "ONCE in the dream of a night I stood\n"
-            + "Lone in the light of a magical wood,\n"
-            + "Soul-deep in visions that poppy-like sprang;\n"
-            + "And spirits of Truth were the birds that sang,\n"
-            + "And spirits of Love were the stars that glowed,\n"
-            + "And spirits of Peace were the streams that flowed\n"
-            + "In that magical wood in the land of sleep."
-            + "\n"
-            + "Lone in the light of that magical grove,\n"
-            + "I felt the stars of the spirits of Love\n"
-            + "Gather and gleam round my delicate youth,\n"
-            + "And I heard the song of the spirits of Truth;\n"
-            + "To quench my longing I bent me low\n"
-            + "By the streams of the spirits of Peace that flow\n"
-            + "In that magical wood in the land of sleep.";
-
-    public String getPoet() {
-        return poet;
-    }
-
-    public void setPoet(String poet) {
-        this.poet = poet;
-    }
-
-    public String getPoem() {
-        return poem;
-    }
-
-    public void setPoem(String poem) {
-        this.poem = poem;
-    }
-
-}
diff --git a/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTest.java b/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTest.java
index 6f5eb6c..1012fff 100644
--- a/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTest.java
+++ b/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTest.java
@@ -16,29 +16,34 @@
  */
 package org.apache.camel.quarkus.component.netty;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
 import java.net.Socket;
 
-import io.quarkus.test.junit.QuarkusTest;
-
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+
 @QuarkusTest
+@QuarkusTestResource(NettyTestResource.class)
 class NettyTest {
+    private static final String POEM = "Epitaph in Kohima, India marking the WWII Battle of Kohima and Imphal, Burma Campaign - Attributed to John Maxwell Edmonds";
+    private static final String EXPECTED_RESPONSE = "When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.";
 
     @Test
     public void testPoem() throws IOException {
-        final String poem = "Epitaph in Kohima, India marking the WWII Battle of Kohima and Imphal, Burma Campaign - Attributed to John Maxwell Edmonds";
-        final String expectedResponse = "When You Go Home, Tell Them Of Us And Say, For Your Tomorrow, We Gave Our Today.";
 
         try (
-                final Socket socket = new Socket("localhost", 8994);
+                final Socket socket = new Socket("localhost", Integer.getInteger("camel.netty.test-port"));
                 final PrintWriter outputWriter = new PrintWriter(socket.getOutputStream(), true);
                 final BufferedReader inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));) {
-            outputWriter.println(poem);
+            outputWriter.println(POEM);
             String response = inputReader.readLine();
-            Assertions.assertTrue(response.equalsIgnoreCase(expectedResponse), "Response did not match expected response");
+            Assertions.assertTrue(response.equalsIgnoreCase(EXPECTED_RESPONSE), "Response did not match expected response");
         }
 
     }
diff --git a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/TestResources.java b/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTestResource.java
similarity index 61%
rename from integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/TestResources.java
rename to integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTestResource.java
index 55cfb12..79e8452 100644
--- a/integration-tests/jdbc/src/test/java/org/apache/camel/quarkus/component/jdbc/TestResources.java
+++ b/integration-tests/netty/src/test/java/org/apache/camel/quarkus/component/netty/NettyTestResource.java
@@ -14,11 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.jdbc;
+package org.apache.camel.quarkus.component.netty;
 
-import io.quarkus.test.common.QuarkusTestResource;
-import io.quarkus.test.h2.H2DatabaseTestResource;
+import java.util.Map;
+import java.util.Objects;
 
-@QuarkusTestResource(H2DatabaseTestResource.class)
-public class TestResources {
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.apache.camel.quarkus.test.AvailablePortFinder;
+
+public class NettyTestResource implements QuarkusTestResourceLifecycleManager {
+    @Override
+    public Map<String, String> start() {
+        return AvailablePortFinder.reserveNetworkPorts(Objects::toString, "camel.netty.test-port");
+    }
+
+    @Override
+    public void stop() {
+    }
 }
diff --git a/integration-tests/paho/pom.xml b/integration-tests/paho/pom.xml
index 22e85e5..51368d8 100644
--- a/integration-tests/paho/pom.xml
+++ b/integration-tests/paho/pom.xml
@@ -50,6 +50,15 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- test dependencies - activemq -->
         <dependency>
             <groupId>org.apache.activemq</groupId>
             <artifactId>activemq-kahadb-store</artifactId>
diff --git a/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/ActiveMQTestResource.java b/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/ActiveMQTestResource.java
index 9eb9e8d..aded327 100644
--- a/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/ActiveMQTestResource.java
+++ b/integration-tests/paho/src/test/java/org/apache/camel/quarkus/component/paho/it/ActiveMQTestResource.java
@@ -17,16 +17,23 @@
 
 package org.apache.camel.quarkus.component.paho.it;
 
+import java.io.File;
+import java.io.IOException;
 import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Map;
 
-import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.TransportConnector;
+import org.apache.camel.quarkus.test.AvailablePortFinder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+
 public class ActiveMQTestResource implements QuarkusTestResourceLifecycleManager {
     private static final Logger LOGGER = LoggerFactory.getLogger(ActiveMQTestResource.class);
     private BrokerService broker;
@@ -34,17 +41,24 @@ public class ActiveMQTestResource implements QuarkusTestResourceLifecycleManager
     @Override
     public Map<String, String> start() {
         try {
-            broker = new BrokerService();
+            final int port = AvailablePortFinder.getNextAvailable();
+            final String transportUri = String.format("mqtt://127.0.0.1:%d", port);
+            final String brokerUri = String.format("tcp://127.0.0.1:%d", port);
+            final File dataDirectory = Files.createTempDirectory("paho-data-").toFile();
+
             TransportConnector mqtt = new TransportConnector();
-            mqtt.setUri(new URI("mqtt://127.0.0.1:1883"));
+            mqtt.setUri(new URI(transportUri));
+
+            broker = new BrokerService();
             broker.addConnector(mqtt);
-            broker.setDataDirectory("target");
+            broker.setDataDirectoryFile(dataDirectory);
             broker.start();
+
+            return Collections.singletonMap("camel.component.paho.brokerUrl", brokerUri);
         } catch (Exception e) {
             LOGGER.error("Starting the ActiveMQ broker with exception.", e);
             throw new RuntimeException("Starting the ActiveMQ broker with exception.", e);
         }
-        return Collections.emptyMap();
     }
 
     @Override
@@ -55,7 +69,17 @@ public class ActiveMQTestResource implements QuarkusTestResourceLifecycleManager
             }
         } catch (Exception e) {
             LOGGER.error("Stopping the ActiveMQ broker with exception.", e);
-            throw new RuntimeException("Stopping the ActiveMQ broker with exception.", e);
+        }
+
+        try {
+            if (broker != null) {
+                Files.walk(broker.getDataDirectoryFile().toPath())
+                        .sorted(Comparator.reverseOrder())
+                        .map(Path::toFile)
+                        .forEach(File::delete);
+            }
+        } catch (IOException e) {
+            LOGGER.error("Error cleaning up ActiveMQ data directory", e);
         }
     }
 }
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index b8223d0..5c09179 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -57,6 +57,11 @@
                 <artifactId>camel-quarkus-integration-test-support-core-main-ext</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-integration-test-support</artifactId>
+                <version>${project.version}</version>
+            </dependency>
 
 
             <dependency>
diff --git a/integration-tests/sjms/.gitignore b/integration-tests/sjms/.gitignore
new file mode 100644
index 0000000..adbb97d
--- /dev/null
+++ b/integration-tests/sjms/.gitignore
@@ -0,0 +1 @@
+data/
\ No newline at end of file
diff --git a/integration-tests/sjms/pom.xml b/integration-tests/sjms/pom.xml
index d01e22d..c573403 100644
--- a/integration-tests/sjms/pom.xml
+++ b/integration-tests/sjms/pom.xml
@@ -67,6 +67,20 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- test dependencies - camel-quarkus -->
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-integration-test-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- test dependencies - activemq -->
+        <dependency>
             <groupId>org.apache.activemq</groupId>
             <artifactId>artemis-server</artifactId>
             <scope>test</scope>
@@ -86,11 +100,6 @@
             <artifactId>commons-logging-jboss-logging</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/integration-tests/sjms/src/main/resources/application.properties b/integration-tests/sjms/src/main/resources/application.properties
index 9df1630..be0a82f 100644
--- a/integration-tests/sjms/src/main/resources/application.properties
+++ b/integration-tests/sjms/src/main/resources/application.properties
@@ -22,8 +22,3 @@ quarkus.log.file.enable = false
 quarkus.log.category."org.apache.camel.quarkus.core.deployment".level = INFO
 quarkus.log.category."org.apache.camel.quarkus.component.sjms".level = DEBUG
 quarkus.log.category."org.apache.activemq.artemis".level = WARN
-
-#
-# Quarkus - Artemis
-#
-quarkus.artemis.url = tcp://localhost:61616
\ No newline at end of file
diff --git a/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTest.java b/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTest.java
index 17c6da2..62b184c 100644
--- a/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTest.java
+++ b/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTest.java
@@ -18,17 +18,23 @@ package org.apache.camel.quarkus.component.sjms.it;
 
 import java.util.UUID;
 
+import javax.inject.Inject;
+
 import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
+import org.apache.camel.quarkus.core.CamelMain;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 @QuarkusTest
-@QuarkusTestResource(ArtemisTestResource.class)
+@QuarkusTestResource(CamelSjmsTestResource.class)
 public class CamelSjmsTest {
+    @Inject
+    CamelMain main;
+
     @Test
     void testQueueBridge() {
         String body = UUID.randomUUID().toString();
diff --git a/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/ArtemisTestResource.java b/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTestResource.java
similarity index 59%
rename from integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/ArtemisTestResource.java
rename to integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTestResource.java
index 17e1ecf..6338287 100644
--- a/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/ArtemisTestResource.java
+++ b/integration-tests/sjms/src/test/java/org/apache/camel/quarkus/component/sjms/it/CamelSjmsTestResource.java
@@ -20,31 +20,59 @@ import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.Map;
 
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
 import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ;
+import org.apache.camel.quarkus.core.CamelMain;
+import org.apache.camel.quarkus.test.AvailablePortFinder;
 import org.apache.commons.io.FileUtils;
 
-import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
-
-public class ArtemisTestResource implements QuarkusTestResourceLifecycleManager {
-
+public class CamelSjmsTestResource implements QuarkusTestResourceLifecycleManager {
+    private CamelMain main;
     private EmbeddedActiveMQ embedded;
 
     @Override
+    public void inject(Object testInstance) {
+        if (testInstance instanceof CamelSjmsTest) {
+            this.main = ((CamelSjmsTest) testInstance).main;
+        }
+    }
+
+    @Override
     public Map<String, String> start() {
         try {
             FileUtils.deleteDirectory(Paths.get("./target/artemis").toFile());
+
+            final int port = AvailablePortFinder.getNextAvailable();
+            final String url = String.format("tcp://127.0.0.1:%d", port);
+
+            ConfigurationImpl cfg = new ConfigurationImpl();
+            cfg.addAcceptorConfiguration("activemq", url);
+            cfg.setSecurityEnabled(false);
+
             embedded = new EmbeddedActiveMQ();
+            embedded.setConfiguration(cfg);
             embedded.start();
+
+            return Collections.singletonMap("quarkus.artemis.url", url);
         } catch (Exception e) {
             throw new RuntimeException("Could not start embedded ActiveMQ server", e);
         }
-        return Collections.emptyMap();
     }
 
     @Override
     public void stop() {
         try {
-            embedded.stop();
+            if (main != null) {
+                main.stop();
+            }
+        } catch (Exception e) {
+            // ignored
+        }
+        try {
+            if (embedded != null) {
+                embedded.stop();
+            }
         } catch (Exception e) {
             throw new RuntimeException("Could not stop embedded ActiveMQ server", e);
         }
diff --git a/integration-tests/support/core-main/pom.xml b/integration-tests/support/core-main/pom.xml
index 423980f..426399e 100644
--- a/integration-tests/support/core-main/pom.xml
+++ b/integration-tests/support/core-main/pom.xml
@@ -21,8 +21,8 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests-support</artifactId>
         <version>1.0.0-SNAPSHOT</version>
+        <artifactId>camel-quarkus-integration-tests-support-parent</artifactId>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
diff --git a/integration-tests/support/core/pom.xml b/integration-tests/support/core/pom.xml
index a7bf042..f3c7d03 100644
--- a/integration-tests/support/core/pom.xml
+++ b/integration-tests/support/core/pom.xml
@@ -21,7 +21,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests-support</artifactId>
+        <artifactId>camel-quarkus-integration-tests-support-parent</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
diff --git a/integration-tests/support/pom.xml b/integration-tests/support/pom.xml
index a22d218..3ae6b54 100644
--- a/integration-tests/support/pom.xml
+++ b/integration-tests/support/pom.xml
@@ -27,15 +27,16 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>camel-quarkus-integration-tests-support</artifactId>
+    <artifactId>camel-quarkus-integration-tests-support-parent</artifactId>
     <packaging>pom</packaging>
 
-    <name>Camel Quarkus :: Integration Tests :: Support</name>
+    <name>Camel Quarkus :: Integration Tests :: Support :: Parent</name>
     <description>Ancillary modules required by some integration tests. Hosted outside the integration-tests directory
         so that we can keep a flat hierarchy in the integration-tests directory.
     </description>
 
     <modules>
+        <module>test-support</module>
         <module>core</module>
         <module>core-main</module>
     </modules>
diff --git a/integration-tests/support/pom.xml b/integration-tests/support/test-support/pom.xml
similarity index 73%
copy from integration-tests/support/pom.xml
copy to integration-tests/support/test-support/pom.xml
index a22d218..b903053 100644
--- a/integration-tests/support/pom.xml
+++ b/integration-tests/support/test-support/pom.xml
@@ -18,26 +18,25 @@
 
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests</artifactId>
+        <artifactId>camel-quarkus-integration-tests-support-parent</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-integration-tests-support</artifactId>
-    <packaging>pom</packaging>
-
+    <artifactId>camel-quarkus-integration-test-support</artifactId>
     <name>Camel Quarkus :: Integration Tests :: Support</name>
-    <description>Ancillary modules required by some integration tests. Hosted outside the integration-tests directory
-        so that we can keep a flat hierarchy in the integration-tests directory.
-    </description>
-
-    <modules>
-        <module>core</module>
-        <module>core-main</module>
-    </modules>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/AvailablePortFinder.java b/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/AvailablePortFinder.java
new file mode 100644
index 0000000..6400871
--- /dev/null
+++ b/integration-tests/support/test-support/src/main/java/org/apache/camel/quarkus/test/AvailablePortFinder.java
@@ -0,0 +1,83 @@
+/*
+ * 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.test;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Finds currently available server ports.
+ */
+public final class AvailablePortFinder {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AvailablePortFinder.class);
+
+    /**
+     * Creates a new instance.
+     */
+    private AvailablePortFinder() {
+        // Do nothing
+    }
+
+    /**
+     * Gets the next available port.
+     *
+     * @throws IllegalStateException if there are no ports available
+     * @return the available port
+     */
+    public static int getNextAvailable() {
+        try (ServerSocket ss = new ServerSocket()) {
+            ss.setReuseAddress(true);
+            ss.bind(new InetSocketAddress((InetAddress) null, 0), 1);
+
+            int port = ss.getLocalPort();
+
+            LOGGER.info("getNextAvailable() -> {}", port);
+
+            return port;
+        } catch (IOException e) {
+            throw new IllegalStateException("Cannot find free port", e);
+        }
+    }
+
+    /**
+     * Reserve a list of random and not in use network ports and place them in Map.
+     */
+    public static Map<String, Integer> reserveNetworkPorts(String... names) {
+        return reserveNetworkPorts(Function.identity(), names);
+    }
+
+    /**
+     * Reserve a list of random and not in use network ports and place them in Map.
+     */
+    public static <T> Map<String, T> reserveNetworkPorts(Function<Integer, T> converter, String... names) {
+        Map<String, T> reservedPorts = new HashMap<>();
+
+        for (String name : names) {
+            reservedPorts.put(name, converter.apply(getNextAvailable()));
+        }
+
+        return reservedPorts;
+    }
+}
diff --git a/pom.xml b/pom.xml
index 2eb5715..8a2ef1f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,6 +73,7 @@
         <maven-source-plugin.version>3.1.0</maven-source-plugin.version>
         <maven-assembly-plugin.version>3.1.1</maven-assembly-plugin.version>
         <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
+        <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
 
         <!-- maven-release-plugin -->
         <tagNameFormat>@{project.version}</tagNameFormat>
@@ -234,6 +235,7 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
+                    <version>${maven-surefire-plugin.version}</version>
                     <configuration>
                         <failIfNoTests>false</failIfNoTests>
                         <systemProperties>
@@ -243,6 +245,12 @@
                 </plugin>
 
                 <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-failsafe-plugin</artifactId>
+                    <version>${maven-surefire-plugin.version}</version>
+                </plugin>
+
+                <plugin>
                     <groupId>org.codehaus.mojo</groupId>
                     <artifactId>exec-maven-plugin</artifactId>
                     <version>${exec-maven-plugin.version}</version>