camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject [camel] branch master updated: CAMEL-12389: Log a WARN when extending CamelTestSupport/CamelSpringTestSupport when doing Spring Boot testing as they are not intended/supporting this.
Date Wed, 21 Mar 2018 15:31:56 GMT
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 f66a873  CAMEL-12389: Log a WARN when extending CamelTestSupport/CamelSpringTestSupport
when doing Spring Boot testing as they are not intended/supporting this.
f66a873 is described below

commit f66a87380a99f766806ed5b6d295cbfaa193fff8
Author: Claus Ibsen <claus.ibsen@gmail.com>
AuthorDate: Wed Mar 21 16:31:41 2018 +0100

    CAMEL-12389: Log a WARN when extending CamelTestSupport/CamelSpringTestSupport when doing
Spring Boot testing as they are not intended/supporting this.
---
 .../spring/boot/issues/StreamCachingTest.java      | 16 +-------
 .../camel/test/spring/CamelSpringTestSupport.java  |  3 +-
 .../apache/camel/test/junit4/CamelTestSupport.java | 44 +++++++++++++++++++---
 3 files changed, 41 insertions(+), 22 deletions(-)

diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
index d0a5fea..2d73101 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
@@ -29,14 +29,11 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.boot.SpringTypeConverter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
 import org.springframework.core.convert.ConversionService;
-import org.springframework.core.convert.converter.Converter;
 import org.springframework.core.convert.support.DefaultConversionService;
 
 public class StreamCachingTest extends CamelTestSupport {
+    // this is not a spring boot test as its standalone Camel testing by extending CamelTestSupport
 
     public static final String URI_END_OF_ROUTE = "mock:end_of_route";
 
@@ -76,21 +73,10 @@ public class StreamCachingTest extends CamelTestSupport {
     /**
      * Copied from org.apache.camel.spring.boot.TypeConversionConfiguration (they are package
protected)
      **/
-    @Bean
     SpringTypeConverter springTypeConverter(CamelContext camelContext, ConversionService[]
conversionServices) {
         SpringTypeConverter springTypeConverter = new SpringTypeConverter(asList(conversionServices));
         camelContext.getTypeConverterRegistry().addFallbackTypeConverter(springTypeConverter,
true);
         return springTypeConverter;
     }
 
-    @ConditionalOnMissingBean
-    @Bean
-    ConversionService defaultCamelConversionService(ApplicationContext applicationContext)
{
-        DefaultConversionService service = new DefaultConversionService();
-        for (Converter converter : applicationContext.getBeansOfType(Converter.class).values())
{
-            service.addConverter(converter);
-        }
-        return service;
-    }
-
 }
\ No newline at end of file
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestSupport.java
b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestSupport.java
index b855b40..d69ebf1 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestSupport.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestSupport.java
@@ -35,7 +35,8 @@ import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.GenericApplicationContext;
 
 /**
- * @version 
+ * Base test-class for classic Spring application such as standalone, web applications.
+ * Do <tt>not</tt> use this class for Spring Boot testing, instead use <code>@RunWith(CamelSpringBootRunner.class)</code>.
  */
 public abstract class CamelSpringTestSupport extends CamelTestSupport {
     protected static ThreadLocal<AbstractApplicationContext> threadAppContext = new
ThreadLocal<AbstractApplicationContext>();
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
index 9157d55..85e9a92 100644
--- a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
@@ -21,6 +21,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -87,8 +88,7 @@ import org.slf4j.LoggerFactory;
 /**
  * A useful base class which creates a {@link org.apache.camel.CamelContext} with some routes
  * along with a {@link org.apache.camel.ProducerTemplate} for use in the test case
- *
- * @version
+ * Do <tt>not</tt> use this class for Spring Boot testing, instead use <code>@RunWith(CamelSpringBootRunner.class)</code>.
  */
 public abstract class CamelTestSupport extends TestSupport {
 
@@ -256,6 +256,7 @@ public abstract class CamelTestSupport extends TestSupport {
             // test is per class, so only setup once (the first time)
             boolean first = INIT.get() == null;
             if (first) {
+                doSpringBootWarning();
                 doPreSetup();
                 doSetUp();
                 doPostSetup();
@@ -266,6 +267,7 @@ public abstract class CamelTestSupport extends TestSupport {
             }
         } else {
             // test is per test so always setup
+            doSpringBootWarning();
             doPreSetup();
             doSetUp();
             doPostSetup();
@@ -289,6 +291,18 @@ public abstract class CamelTestSupport extends TestSupport {
         // noop
     }
 
+    /**
+     * Detects if this is a Spring-Boot test and reports a warning as these base classes
is not intended
+     * for testing Camel on Spring Boot.
+     */
+    protected void doSpringBootWarning() {
+        boolean springBoot = hasClassAnnotation("org.springframework.boot.test.context.SpringBootTest");
+        if (springBoot) {
+            log.warn("Spring Boot detected: The CamelTestSupport/CamelSpringTestSupport class
is not intended for Camel testing with Spring Boot."
+                + " Prefer to not extend this class, but use @RunWith(CamelSpringBootRunner.class)
instead.");
+        }
+    }
+
     private void doSetUp() throws Exception {
         log.debug("setUp test");
         // jmx is enabled if we have configured to use it, or if dump route coverage is enabled
(it requires JMX)
@@ -632,10 +646,28 @@ public abstract class CamelTestSupport extends TestSupport {
      * we would just use CDI to inject this
      */
     protected void applyCamelPostProcessor() throws Exception {
-        // use the default bean post processor from camel-core
-        DefaultCamelBeanPostProcessor processor = new DefaultCamelBeanPostProcessor(context);
-        processor.postProcessBeforeInitialization(this, getClass().getName());
-        processor.postProcessAfterInitialization(this, getClass().getName());
+        // use the default bean post processor from camel-core if the test class is not dependency
injected already by Spring
+        boolean spring = hasClassAnnotation("org.springframework.boot.test.context.SpringBootTest",
"org.springframework.context.annotation.ComponentScan");
+        if (!spring) {
+            DefaultCamelBeanPostProcessor processor = new DefaultCamelBeanPostProcessor(context);
+            processor.postProcessBeforeInitialization(this, getClass().getName());
+            processor.postProcessAfterInitialization(this, getClass().getName());
+        }
+    }
+
+    /**
+     * Does this test class have any of the following annotations on the class-level.
+     */
+    protected boolean hasClassAnnotation(String... names) {
+        for (String name : names) {
+            for (Annotation ann : getClass().getAnnotations()) {
+                String annName = ann.annotationType().getName();
+                if (annName.equals(name)) {
+                    return true;
+                }
+            }
+        }
+        return false;
     }
 
     protected void stopCamelContext() throws Exception {

-- 
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.

Mime
View raw message