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 73b2c96f3bacb649d6f9b6e84e2eca02663404ab Author: aldettinger <aldettin...@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();