You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2019/08/05 13:35:38 UTC

[camel] 05/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5

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

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e044da13e5e7687730619071cedba84e4170ac7e
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Jul 4 11:35:54 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5
---
 .../camel/component/consul/ConsulCatalogTest.java  |  16 +--
 .../component/consul/ConsulClientKeyValueTest.java |   7 +-
 .../component/consul/ConsulCoordinatesTest.java    |  20 ++--
 .../camel/component/consul/ConsulEventTest.java    |   9 +-
 .../component/consul/ConsulEventWatchTest.java     |   2 +-
 .../camel/component/consul/ConsulHealthTest.java   |  14 +--
 .../camel/component/consul/ConsulKeyValueTest.java |   7 +-
 .../component/consul/ConsulKeyValueWatchTest.java  |   2 +-
 .../camel/component/consul/ConsulRegistryTest.java |  32 +++---
 .../component/consul/ConsulRegistryUtilsTest.java  |   6 +-
 .../camel/component/consul/ConsulSessionTest.java  |  18 ++--
 .../camel/component/consul/ConsulTestSupport.java  |  17 ++--
 .../cloud/ConsulDefaultServiceCallRouteTest.java   |   2 +-
 .../cloud/ConsulRibbonServiceCallRouteTest.java    |   2 +-
 .../ConsulServiceCallWithRegistrationTest.java     |  60 ++++++-----
 .../consul/cloud/ConsulServiceDiscoveryTest.java   |   5 +-
 .../cloud/ConsulServiceRegistrationTestBase.java   |   5 +-
 .../consul/cloud/ConsulServiceRegistryTest.java    |   4 +-
 .../ConsulClusteredRoutePolicyFactoryTest.java     |  14 +--
 .../cluster/ConsulClusteredRoutePolicyTest.java    |  14 +--
 .../component/consul/cluster/ConsulMasterTest.java |  14 +--
 components/camel-testcontainers/pom.xml            |   6 +-
 .../testcontainers/ContainerAwareTestSupport.java  | 112 +++++++++++++++++++++
 .../ContainerAwareTestSupportIT.java               |  54 ++++++++++
 24 files changed, 315 insertions(+), 127 deletions(-)

diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
index d96305b..097daec 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
@@ -21,8 +21,8 @@ import java.util.List;
 import com.orbitz.consul.model.health.Node;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulCatalogActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulCatalogTest extends ConsulTestSupport {
 
@@ -34,9 +34,9 @@ public class ConsulCatalogTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Test
@@ -47,9 +47,9 @@ public class ConsulCatalogTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
index ef6cc27..0835d8c 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
@@ -24,7 +24,8 @@ import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulKeyValueActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulClientKeyValueTest extends ConsulTestSupport {
 
@@ -49,8 +50,8 @@ public class ConsulClientKeyValueTest extends ConsulTestSupport {
 
         Optional<String> keyVal = getConsul().keyValueClient().getValueAsString(key);
 
-        assertTrue(keyVal.isPresent());
-        assertEquals(val, keyVal.get());
+        Assertions.assertTrue(keyVal.isPresent());
+        Assertions.assertEquals(val, keyVal.get());
     }
 
     @BindToRegistry("consulClient")
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
index 1b9d280..fc8a855 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
@@ -22,9 +22,9 @@ import com.orbitz.consul.model.coordinate.Coordinate;
 import com.orbitz.consul.model.coordinate.Datacenter;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulCoordinatesActions;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class ConsulCoordinatesTest extends ConsulTestSupport {
 
@@ -36,12 +36,12 @@ public class ConsulCoordinatesTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
-    @Ignore("Disabled as it seems that nodes is always 0")
+    @Disabled("Disabled as it seems that nodes is always 0")
     @Test
     public void testNodes() throws Exception {
         List<Coordinate> ref = getConsul().coordinateClient().getNodes();
@@ -50,9 +50,9 @@ public class ConsulCoordinatesTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
index 6daed84..5050343 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
@@ -23,7 +23,8 @@ import com.orbitz.consul.model.event.Event;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulEventActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulEventTest extends ConsulTestSupport {
 
@@ -48,9 +49,9 @@ public class ConsulEventTest extends ConsulTestSupport {
         EventResponse response = getConsul().eventClient().listEvents(key);
         List<Event> events = response.getEvents();
 
-        assertFalse(events.isEmpty());
-        assertTrue(events.get(0).getPayload().isPresent());
-        assertEquals(val, events.get(0).getPayload().get());
+        Assertions.assertFalse(events.isEmpty());
+        Assertions.assertTrue(events.get(0).getPayload().isPresent());
+        Assertions.assertEquals(val, events.get(0).getPayload().get());
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
index 8550295..b546e1c 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
@@ -21,7 +21,7 @@ import java.util.List;
 import com.orbitz.consul.EventClient;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulEventWatchTest extends ConsulTestSupport {
     private String key;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
index 79e2cfe..79855b7 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
@@ -27,8 +27,8 @@ import com.orbitz.consul.model.agent.Registration;
 import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulHealthActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulHealthTest extends ConsulTestSupport {
     private AgentClient client;
@@ -85,14 +85,14 @@ public class ConsulHealthTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertEquals(2, ref.size());
-        Assert.assertEquals(2, res.size());
-        Assert.assertEquals(ref, res);
+        Assertions.assertEquals(2, ref.size());
+        Assertions.assertEquals(2, res.size());
+        Assertions.assertEquals(ref, res);
 
-        assertTrue(registrations.stream().anyMatch(
+        Assertions.assertTrue(registrations.stream().anyMatch(
             r -> r.getPort().isPresent() && r.getPort().get() == res.get(0).getService().getPort() && r.getId().equalsIgnoreCase(res.get(0).getService().getId())
         ));
-        assertTrue(registrations.stream().anyMatch(
+        Assertions.assertTrue(registrations.stream().anyMatch(
             r -> r.getPort().isPresent() && r.getPort().get() == res.get(1).getService().getPort() && r.getId().equalsIgnoreCase(res.get(1).getService().getId())
         ));
     }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
index dc03889..1a61f29 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
@@ -21,7 +21,8 @@ import java.util.Optional;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulKeyValueActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulKeyValueTest extends ConsulTestSupport {
 
@@ -46,8 +47,8 @@ public class ConsulKeyValueTest extends ConsulTestSupport {
 
         Optional<String> keyVal = getConsul().keyValueClient().getValueAsString(key);
 
-        assertTrue(keyVal.isPresent());
-        assertEquals(val, keyVal.get());
+        Assertions.assertTrue(keyVal.isPresent());
+        Assertions.assertEquals(val, keyVal.get());
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
index 716e25e..7dcfab9 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
@@ -22,7 +22,7 @@ import java.util.Random;
 import com.orbitz.consul.KeyValueClient;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulKeyValueWatchTest extends ConsulTestSupport {
     private String key;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
index 67cc2fd..68e94fd 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
@@ -23,14 +23,14 @@ import java.util.Set;
 
 import com.orbitz.consul.Consul;
 import org.apache.camel.NoSuchBeanException;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import org.testcontainers.containers.GenericContainer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Unit test for Camel Registry implementation for Consul
@@ -49,7 +49,7 @@ public class ConsulRegistryTest implements Serializable {
         }
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUp() {
         container = ConsulTestSupport.consulContainer();
         container.start();
@@ -57,7 +57,7 @@ public class ConsulRegistryTest implements Serializable {
         registry = new ConsulRegistry(container.getContainerIpAddress(), container.getMappedPort(Consul.DEFAULT_HTTP_PORT));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         container.stop();
     }
@@ -67,7 +67,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("stringTestKey", "stringValue");
         String result = (String) registry.lookupByName("stringTestKey");
         registry.remove("stringTestKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("stringValue", result);
     }
 
@@ -77,7 +77,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("uniqueKey", "stringValueTwo");
         String result = (String) registry.lookupByName("uniqueKey");
         registry.remove("uniqueKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("stringValueTwo", result);
     }
 
@@ -86,7 +86,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("namedKey", "namedValue");
         String result = (String) registry.lookupByName("namedKey");
         registry.remove("namedKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("namedValue", result);
     }
 
@@ -104,7 +104,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("testClass", consulTestClass);
         ConsulTestClass consulTestClassClone = registry.lookupByNameAndType("testClass", consulTestClass.getClass());
         registry.remove("testClass");
-        assertNotNull(consulTestClassClone);
+        Assertions.assertNotNull(consulTestClassClone);
         assertEquals(consulTestClass.getClass(), consulTestClassClone.getClass());
     }
 
@@ -128,7 +128,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.remove("testClassOne");
         registry.remove("testClassTwo");
         HashMap<String, ConsulTestClass> emptyHashMap = new HashMap<>();
-        assertNotNull(consulTestClassMap);
+        Assertions.assertNotNull(consulTestClassMap);
         assertEquals(consulTestClassMap.getClass(), emptyHashMap.getClass());
         assertEquals(2, consulTestClassMap.size());
     }
@@ -153,7 +153,7 @@ public class ConsulRegistryTest implements Serializable {
         ConsulTestClass classTwo = new ConsulTestClass();
         registry.put("classTwo", classTwo);
         Set<? extends ConsulTestClass> results = registry.findByType(classOne.getClass());
-        assertNotNull(results);
+        Assertions.assertNotNull(results);
         HashSet<ConsulTestClass> hashSet = new HashSet<>();
         registry.remove("classOne");
         registry.remove("classTwo");
@@ -165,8 +165,8 @@ public class ConsulRegistryTest implements Serializable {
 
     }
 
-    @Test(expected = NoSuchBeanException.class)
+    @Test
     public void deleteNonExisting() {
-        registry.remove("nonExisting");
+        Assertions.assertThrows(NoSuchBeanException.class, () -> registry.remove("nonExisting"));
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
index f56045d..221e569 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
@@ -21,10 +21,10 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.component.consul.ConsulRegistry.ConsulRegistryUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author <a href="https://github.com/ppalaga">Peter Palaga</a>
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
index 63fa765..300feaa 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
@@ -24,8 +24,8 @@ import com.orbitz.consul.model.session.SessionCreatedResponse;
 import com.orbitz.consul.model.session.SessionInfo;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulSessionActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulSessionTest extends ConsulTestSupport {
 
@@ -40,8 +40,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions, list.size());
-            Assert.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions, list.size());
+            Assertions.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
 
         SessionCreatedResponse res = fluentTemplate()
@@ -50,7 +50,7 @@ public class ConsulSessionTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(SessionCreatedResponse.class);
 
-        Assert.assertNotNull(res.getId());
+        Assertions.assertNotNull(res.getId());
 
         {
             List<SessionInfo> list = fluentTemplate()
@@ -58,8 +58,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions + 1, list.size());
-            Assert.assertTrue(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions + 1, list.size());
+            Assertions.assertTrue(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
 
         {
@@ -74,8 +74,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions, list.size());
-            Assert.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions, list.size());
+            Assertions.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
     }
 
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
index bc1d6cd..a5e8831 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
@@ -24,10 +24,10 @@ import com.orbitz.consul.Consul;
 import com.orbitz.consul.KeyValueClient;
 
 import org.apache.camel.BindToRegistry;
-import org.apache.camel.test.testcontainers.ContainerAwareTestSupport;
+import org.apache.camel.test.junit5.testcontainers.ContainerAwareTestSupport;
 import org.apache.camel.test.testcontainers.Wait;
-import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.testcontainers.containers.GenericContainer;
 
 public class ConsulTestSupport extends ContainerAwareTestSupport {
@@ -35,8 +35,13 @@ public class ConsulTestSupport extends ContainerAwareTestSupport {
     public static final String CONTAINER_NAME = "consul";
     public static final String KV_PREFIX = "/camel";
 
-    @Rule
-    public final TestName testName = new TestName();
+    protected String testName;
+
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp();
+        testName = testInfo.getDisplayName();
+    }
 
     @BindToRegistry("consul")
     public ConsulComponent getConsulComponent() {
@@ -69,7 +74,7 @@ public class ConsulTestSupport extends ContainerAwareTestSupport {
     }
 
     protected String generateKey() {
-        return KV_PREFIX + "/" + testName.getMethodName() + "/" + generateRandomString();
+        return KV_PREFIX + "/" + testName + "/" + generateRandomString();
     }
 
     protected String consulUrl() {
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
index c21ed04..1f054d0 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.test.AvailablePortFinder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulDefaultServiceCallRouteTest extends ConsulTestSupport {
     private static final String SERVICE_NAME = "http-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
index eb7c769..ec26483 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.test.AvailablePortFinder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulRibbonServiceCallRouteTest extends ConsulTestSupport {
     private static final String SERVICE_NAME = "http-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
index e7f6a80..9cb0334 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
@@ -23,9 +23,12 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.cloud.ServiceRegistrationRoutePolicy;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class ConsulServiceCallWithRegistrationTest extends ConsulTestSupport {
     private static final String SERVICE_HOST = "localhost";
 
@@ -90,43 +93,36 @@ public class ConsulServiceCallWithRegistrationTest extends ConsulTestSupport {
 
         context.start();
 
-        assertEquals("ping on " + port, template.requestBody("direct:start", "ping", String.class));
+        Assertions.assertEquals("ping on " + port, template.requestBody("direct:start", "ping", String.class));
     }
 
-    @Test(expected = CamelExecutionException.class)
+    @Test
     public void testServiceCallFailure() throws Exception {
-        final int port = SocketUtils.findAvailableTcpPort();
-        final String serviceId = UUID.randomUUID().toString();
-        final String serviceName = UUID.randomUUID().toString();
 
-        context.addRoutes(new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                // context path is had coded so it should fail as it not exposed
-                // by jetty
-                from("direct:start")
-                    .serviceCall()
-                        .name(serviceName + "/bad/path")
-                        .component("http")
-                        .defaultLoadBalancer()
-                        .consulServiceDiscovery()
-                            .url(consulUrl())
-                        .end()
-                    .end()
-                    .log("${body}");
+        assertThrows(CamelExecutionException.class, () -> {
 
-                fromF("undertow:http://%s:%d/service/path", SERVICE_HOST, port)
-                    .routeId(serviceId)
-                    .routeGroup(serviceName)
-                    .routePolicy(new ServiceRegistrationRoutePolicy())
-                    .transform()
-                    .simple("${in.body} on " + port);
-            }
-        });
+            final int port = SocketUtils.findAvailableTcpPort();
+            final String serviceId = UUID.randomUUID().toString();
+            final String serviceName = UUID.randomUUID().toString();
 
-        context.start();
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    // context path is had coded so it should fail as it not
+                    // exposed
+                    // by jetty
+                    from("direct:start").serviceCall().name(serviceName + "/bad/path").component("http").defaultLoadBalancer().consulServiceDiscovery().url(consulUrl()).end().end()
+                        .log("${body}");
 
-        template.requestBody("direct:start", "ping", String.class);
-        fail("Should have failed");
+                    fromF("undertow:http://%s:%d/service/path", SERVICE_HOST, port).routeId(serviceId).routeGroup(serviceName).routePolicy(new ServiceRegistrationRoutePolicy())
+                        .transform().simple("${in.body} on " + port);
+                }
+            });
+
+            context.start();
+
+            template.requestBody("direct:start", "ping", String.class);
+            Assertions.fail("Should have failed");
+        });
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
index 8023c29..196500f 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
@@ -29,9 +29,12 @@ import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.component.consul.ConsulConfiguration;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.assertj.core.api.Assertions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
 public class ConsulServiceDiscoveryTest extends ConsulTestSupport {
     private AgentClient client;
     private List<Registration> registrations;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
index b9a3bed..231cf88 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
@@ -28,9 +28,12 @@ import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.component.consul.ConsulTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public abstract class ConsulServiceRegistrationTestBase extends ConsulTestSupport {
     protected static final String SERVICE_ID = UUID.randomUUID().toString();
     protected static final String SERVICE_NAME = "my-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
index 2c7f574..b4e0df0 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
@@ -24,7 +24,9 @@ import com.orbitz.consul.model.catalog.CatalogService;
 import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.cloud.DefaultServiceDefinition;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ConsulServiceRegistryTest extends ConsulTestSupport {
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
index bdd59df..7d996d5 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
@@ -31,16 +31,18 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.cluster.ClusteredRoutePolicyFactory;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulClusteredRoutePolicyFactoryTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulClusteredRoutePolicyFactoryTest.class);
@@ -62,8 +64,8 @@ public class ConsulClusteredRoutePolicyFactoryTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
index cb06bb6..a7867d3 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
@@ -31,16 +31,18 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.cluster.ClusteredRoutePolicy;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulClusteredRoutePolicyTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulClusteredRoutePolicyTest.class);
@@ -62,8 +64,8 @@ public class ConsulClusteredRoutePolicyTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
index 90129b2..0a609ff 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
@@ -30,16 +30,18 @@ import com.orbitz.consul.Consul;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulMasterTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulMasterTest.class);
@@ -61,8 +63,8 @@ public class ConsulMasterTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-testcontainers/pom.xml b/components/camel-testcontainers/pom.xml
index c882cf5..7686ef5 100644
--- a/components/camel-testcontainers/pom.xml
+++ b/components/camel-testcontainers/pom.xml
@@ -49,7 +49,11 @@
             <artifactId>testcontainers</artifactId>
             <version>${testcontainers-version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${testcontainers-version}</version>
+        </dependency>
         <!-- optional dependencies for running tests -->
         <dependency>
             <groupId>org.assertj</groupId>
diff --git a/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java b/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java
new file mode 100644
index 0000000..c5381ff
--- /dev/null
+++ b/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java
@@ -0,0 +1,112 @@
+/*
+ * 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.test.junit5.testcontainers;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.test.testcontainers.ContainerPropertiesFunction;
+import org.apache.camel.test.testcontainers.Containers;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+
+public class ContainerAwareTestSupport extends CamelTestSupport {
+    private List<GenericContainer<?>> containers = new CopyOnWriteArrayList<>();
+
+    // ******************
+    // Setup
+    // ******************
+
+    @Override
+    protected void setupResources() throws Exception {
+        super.setupResources();
+
+        containers.clear();
+        containers.addAll(createContainers());
+
+        final Network network = containerNetwork();
+        final long timeout = containersStartupTimeout();
+
+        Containers.start(containers, network, timeout);
+    }
+
+    @Override
+    protected void cleanupResources() throws Exception {
+        super.cleanupResources();
+
+        Containers.stop(containers, containerShutdownTimeout());
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        final CamelContext context = super.createCamelContext();
+        final PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+
+        pc.addFunction(new ContainerPropertiesFunction(containers));
+
+        return context;
+    }
+
+    // ******************
+    // Containers set-up
+    // ******************
+
+    protected GenericContainer<?> createContainer() {
+        return null;
+    }
+
+    protected List<GenericContainer<?>> createContainers() {
+        GenericContainer<?> container = createContainer();
+
+        return container == null
+            ? Collections.emptyList()
+            : Collections.singletonList(container);
+    }
+
+    protected long containersStartupTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected long containerShutdownTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected Network containerNetwork() {
+        return null;
+    }
+
+    // ******************
+    // Helpers
+    // ******************
+
+    protected GenericContainer<?> getContainer(String containerName) {
+        return Containers.lookup(containers, containerName);
+    }
+
+    protected String getContainerHost(String containerName) {
+        return getContainer(containerName).getContainerIpAddress();
+    }
+
+    protected int getContainerPort(String containerName, int originalPort) {
+        return getContainer(containerName).getMappedPort(originalPort);
+    }
+}
diff --git a/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java b/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java
new file mode 100644
index 0000000..1a608ea
--- /dev/null
+++ b/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java
@@ -0,0 +1,54 @@
+/*
+ * 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.test.junit5.testcontainers;
+
+import org.apache.camel.test.testcontainers.Wait;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.containers.GenericContainer;
+
+public class ContainerAwareTestSupportIT extends ContainerAwareTestSupport {
+    @Test
+    public void testPropertyPlaceholders() throws Exception {
+        final GenericContainer<?> container = getContainer("myconsul");
+
+        final String host = context.resolvePropertyPlaceholders("{{container:host:myconsul}}");
+        Assertions.assertThat(host).isEqualTo(container.getContainerIpAddress());
+
+        final String port = context.resolvePropertyPlaceholders("{{container:port:8500@myconsul}}");
+        Assertions.assertThat(port).isEqualTo("" + container.getMappedPort(8500));
+    }
+
+    @Override
+    protected GenericContainer<?> createContainer() {
+        return new GenericContainer<>("consul:1.5.1")
+            .withNetworkAliases("myconsul")
+            .withExposedPorts(8500)
+            .waitingFor(Wait.forLogMessageContaining("Synced node info", 1))
+            .withCommand(
+                "agent",
+                "-dev",
+                "-server",
+                "-bootstrap",
+                "-client",
+                "0.0.0.0",
+                "-log-level",
+                "trace"
+            );
+    }
+
+}