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

[camel] 09/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest 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 de6f06d87d0dbd1676a060b37e1b6843ce1e0b79
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jul 24 16:35:27 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest with JUnit 5
---
 .../spring/boot/mockendpoints/AdviceWithTest.java  | 11 ++++----
 .../MockEndpointsAndSkipDirtiesContextTest.java    |  9 +++---
 .../boot/mockendpoints/MockEndpointsTest.java      |  9 +++---
 .../camel/spring/boot/routefilter/BarTest.java     |  7 ++---
 .../routefilter/FooExcludeRouteAnnotationTest.java |  9 +++---
 .../camel/spring/boot/routefilter/FooTest.java     |  7 ++---
 .../spring/CamelSpringBootExecutionListener.java   | 10 +++++++
 ...utionListener.java => CamelSpringBootTest.java} | 32 ++++++++++------------
 ...ringTestContextLoaderTestExecutionListener.java |  9 ++----
 .../spring/DisableJmxTestExecutionListener.java    | 10 +++++++
 .../spring/StopWatchTestExecutionListener.java     | 10 +++++++
 11 files changed, 71 insertions(+), 52 deletions(-)

diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
index bea0229..c902c50 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
@@ -21,17 +21,16 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.UseAdviceWith;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.UseAdviceWith;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @UseAdviceWith
 @SpringBootApplication
 @SpringBootTest(classes = AdviceWithTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
index 6133451..c7ac277 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
@@ -22,17 +22,16 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringRouteBuilder;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.MockEndpointsAndSkip;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.MockEndpointsAndSkip;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @MockEndpointsAndSkip("direct:b")
 @SpringBootApplication
 @SpringBootTest(classes = MockEndpointsAndSkipDirtiesContextTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
index bacfc31..13c95e6 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
@@ -19,15 +19,14 @@ package org.apache.camel.spring.boot.mockendpoints;
 import org.apache.camel.CamelContext;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.MockEndpoints;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.MockEndpoints;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @MockEndpoints
 @SpringBootApplication
 @SpringBootTest(classes = MockEndpointsTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
index f563e8a..5d5e25a 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
@@ -19,14 +19,13 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication
 @SpringBootTest(classes = BarTest.class,
     properties = {"camel.springboot.java-routes-include-pattern=**/Bar*"})
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
index badc9a4..288c84a 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
@@ -19,15 +19,14 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.ExcludeRoutes;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.ExcludeRoutes;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication()
 @SpringBootTest(classes = FooTest.class)
 @ExcludeRoutes({BarRoute.class, DrinkRoute.class})
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
index f12b309..5b69324 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
@@ -19,14 +19,13 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication()
 @SpringBootTest(classes = FooTest.class,
     properties = {"camel.springboot.java-routes-exclude-pattern=**/Bar*,**/Drink*"})
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
index 4192e5e..3e88a3f 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
@@ -20,6 +20,7 @@ import org.apache.camel.spring.SpringCamelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -29,6 +30,15 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
 
     private static final Logger LOG = LoggerFactory.getLogger(CamelSpringBootExecutionListener.class);
 
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 3000;
+    }
+
     @Override
     public void prepareTestInstance(TestContext testContext) throws Exception {
         LOG.info("@RunWith(CamelSpringBootRunner.class) preparing: {}", testContext.getTestClass());
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
similarity index 50%
copy from components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
copy to components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
index f3aaee6..7114927 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
@@ -16,24 +16,22 @@
  */
 package org.apache.camel.test.junit5.spring;
 
-import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.springframework.test.context.TestContext;
-import org.springframework.test.context.support.AbstractTestExecutionListener;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-/**
- * Provides reset to pre-test state behavior for global enable/disable of JMX
- * support in Camel through the use of {@link DisableJmx}.
- * Tries to ensure that the pre-test value is restored.
- */
-public class DisableJmxTestExecutionListener extends AbstractTestExecutionListener {
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-    @Override
-    public void afterTestClass(TestContext testContext) throws Exception {
-        if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
-            System.clearProperty(JmxSystemPropertyKeys.DISABLED);
-        } else {
-            System.setProperty(JmxSystemPropertyKeys.DISABLED, CamelSpringTestHelper.getOriginalJmxDisabled());
-        }
-    }
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+@ExtendWith(SpringExtension.class)
+@TestExecutionListeners(value = {CamelSpringTestContextLoaderTestExecutionListener.class, DisableJmxTestExecutionListener.class, CamelSpringBootExecutionListener.class,
+                                 StopWatchTestExecutionListener.class}, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
+public @interface CamelSpringBootTest {
 
 }
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
index a749104..88e7d36 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
@@ -31,15 +31,12 @@ import org.springframework.test.context.support.AbstractTestExecutionListener;
 public class CamelSpringTestContextLoaderTestExecutionListener extends AbstractTestExecutionListener {
 
     /**
-     * The default implementation returns {@link org.springframework.core.Ordered#LOWEST_PRECEDENCE},
-     * thereby ensuring that custom listeners are ordered after default
-     * listeners supplied by the framework. Can be overridden by subclasses
-     * as necessary.
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
      */
     @Override
     public int getOrder() {
-        //set Camel first
-        return Ordered.HIGHEST_PRECEDENCE;
+        return Ordered.HIGHEST_PRECEDENCE + 1000;
     }
 
     @Override
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
index f3aaee6..10e6c74 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
@@ -17,6 +17,7 @@
 package org.apache.camel.test.junit5.spring;
 
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -27,6 +28,15 @@ import org.springframework.test.context.support.AbstractTestExecutionListener;
  */
 public class DisableJmxTestExecutionListener extends AbstractTestExecutionListener {
 
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 2000;
+    }
+
     @Override
     public void afterTestClass(TestContext testContext) throws Exception {
         if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
index 535a7dc..e4c5115 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
@@ -20,6 +20,7 @@ import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.TimeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -37,6 +38,15 @@ public class StopWatchTestExecutionListener extends AbstractTestExecutionListene
         return threadStopWatch.get();
     }
     
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 4000;
+    }
+    
     @Override
     public void beforeTestMethod(TestContext testContext) throws Exception {
         StopWatch stopWatch = new StopWatch();