You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/09/10 08:45:10 UTC
[camel] branch master updated: CAMEL-15486 Move skipping of context
start to method `beforeTestClass` (#4177)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new efc34ab CAMEL-15486 Move skipping of context start to method `beforeTestClass` (#4177)
efc34ab is described below
commit efc34ab2b98f3697ebb482cf1645fda6f0794797
Author: Michel Erard <mi...@gmail.com>
AuthorDate: Thu Sep 10 10:44:57 2020 +0200
CAMEL-15486 Move skipping of context start to method `beforeTestClass` (#4177)
* CAMEL-15486 Move skipping of context start to method `beforeTestClass` to have the settings earlier in the test lifecycle.
* CAMEL-15486 Prevent Camel context from being started in both cases: before the class and before the test.
Co-authored-by: tker7 <mi...@six-group.com>
---
.../junit5/CamelSpringBootExecutionListener.java | 31 +++++++++++++++-------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringBootExecutionListener.java b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringBootExecutionListener.java
index cfd1ba4..1b836dd 100644
--- a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringBootExecutionListener.java
+++ b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringBootExecutionListener.java
@@ -28,6 +28,7 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
protected static ThreadLocal<ConfigurableApplicationContext> threadApplicationContext = new ThreadLocal<>();
private static final Logger LOG = LoggerFactory.getLogger(CamelSpringBootExecutionListener.class);
+ private static final String PROPERTY_SKIP_STARTING_CAMEL_CONTEXT = "skipStartingCamelContext";
/**
* Returns the precedence that is used by Spring to choose the appropriate execution order of test listeners.
@@ -40,6 +41,12 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
}
@Override
+ public void beforeTestClass(TestContext testContext) throws Exception {
+ // prevent other extensions to start the Camel context
+ preventContextStart();
+ }
+
+ @Override
public void prepareTestInstance(TestContext testContext) throws Exception {
LOG.info("CamelSpringBootExecutionListener preparing: {}", testContext.getTestClass());
@@ -49,13 +56,8 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
CamelAnnotationsHandler.handleDisableJmx(null, testClass);
CamelAnnotationsHandler.handleExcludeRoutes(null, testClass);
- // we are customizing the Camel context with
- // CamelAnnotationsHandler so we do not want to start it
- // automatically, which would happen when SpringCamelContext
- // is added to Spring ApplicationContext, so we set the flag
- // not to start it just yet
- SpringCamelContext.setNoStart(true);
- System.setProperty("skipStartingCamelContext", "true");
+ // prevent the Camel context to be started to be able to extend it.
+ preventContextStart();
ConfigurableApplicationContext context = (ConfigurableApplicationContext) testContext.getApplicationContext();
CamelAnnotationsHandler.handleUseOverridePropertiesWithPropertiesComponent(context, testClass);
@@ -67,10 +69,21 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
CamelAnnotationsHandler.handleMockEndpoints(context, testClass);
CamelAnnotationsHandler.handleMockEndpointsAndSkip(context, testClass);
- System.clearProperty("skipStartingCamelContext");
+ System.clearProperty(PROPERTY_SKIP_STARTING_CAMEL_CONTEXT);
SpringCamelContext.setNoStart(false);
}
+ /**
+ * Sets the {@link SpringCamelContext#setNoStart(boolean)} and the system property
+ * <code>skipStartingCamelContext</code>to <code>true</code> to let us customizing the Camel context with
+ * {@link CamelAnnotationsHandler} before it has been started. It's needed as early as possible to prevent other
+ * extensions to start it <b>and</b> before every test run.
+ */
+ private void preventContextStart() {
+ SpringCamelContext.setNoStart(true);
+ System.setProperty(PROPERTY_SKIP_STARTING_CAMEL_CONTEXT, "true");
+ }
+
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
LOG.info("CamelSpringBootExecutionListener before: {}.{}", testContext.getTestClass(),
@@ -83,7 +96,7 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
threadApplicationContext.set(context);
// mark Camel to be startable again and start Camel
- System.clearProperty("skipStartingCamelContext");
+ System.clearProperty(PROPERTY_SKIP_STARTING_CAMEL_CONTEXT);
// route coverage need to know the test method
CamelAnnotationsHandler.handleRouteCoverage(context, testClass, s -> testName);