You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/06/19 13:18:59 UTC

svn commit: r786457 - in /camel/trunk/components/camel-test/src/main/java/org/apache/camel/test: CamelTestSupport.java junit4/CamelSpringTestSupport.java junit4/CamelTestSupport.java

Author: ningjiang
Date: Fri Jun 19 11:18:58 2009
New Revision: 786457

URL: http://svn.apache.org/viewvc?rev=786457&view=rev
Log:
CAMEL-1704 updated the CamelTestSupport codes

Modified:
    camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/CamelTestSupport.java
    camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelSpringTestSupport.java
    camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java

Modified: camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/CamelTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/CamelTestSupport.java?rev=786457&r1=786456&r2=786457&view=diff
==============================================================================
--- camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/CamelTestSupport.java (original)
+++ camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/CamelTestSupport.java Fri Jun 19 11:18:58 2009
@@ -26,6 +26,7 @@
 import javax.naming.InitialContext;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
@@ -42,8 +43,6 @@
 import org.apache.camel.spi.Language;
 import org.apache.camel.spring.CamelBeanPostProcessor;
 import org.apache.camel.util.CamelContextHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 /**
  * A useful base class which creates a {@link org.apache.camel.CamelContext} with some routes
@@ -52,8 +51,10 @@
  * @version $Revision$
  */
 public abstract class CamelTestSupport extends TestSupport {    
+    
     protected CamelContext context;
     protected ProducerTemplate template;
+    protected ConsumerTemplate consumer;
     private boolean useRouteBuilder = true;
     private Service camelContextService;
 
@@ -84,6 +85,7 @@
         assertValidContext(context);
 
         template = context.createProducerTemplate();
+        consumer = context.createConsumerTemplate();
 
         postProcessTest();
         
@@ -98,11 +100,15 @@
         } else {
             log.debug("Using route builder from the created context: " + context);
         }
+        log.debug("Routing Rules are: " + context.getRoutes());
     }
 
     @Override
     protected void tearDown() throws Exception {
         log.debug("tearDown test: " + getName());
+        if (consumer != null) {
+            consumer.stop();
+        }
         if (template != null) {
             template.stop();
         }
@@ -125,7 +131,7 @@
         } else {
             if (context != null) {
                 context.stop();
-            }
+            }    
         }
     }
 
@@ -134,7 +140,7 @@
             camelContextService.start();
         } else {
             if (context instanceof DefaultCamelContext) {
-                DefaultCamelContext defaultCamelContext = (DefaultCamelContext) context;
+                DefaultCamelContext defaultCamelContext = (DefaultCamelContext)context;
                 if (!defaultCamelContext.isStarted()) {
                     defaultCamelContext.start();
                 }
@@ -168,7 +174,7 @@
     }
 
     /**
-     * Factory method which derived classes can use to create a {@link org.apache.camel.builder.RouteBuilder}
+     * Factory method which derived classes can use to create a {@link RouteBuilder}
      * to define the routes for testing
      */
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -186,7 +192,7 @@
      * @see #createRouteBuilder()
      */
     protected RouteBuilder[] createRouteBuilders() throws Exception {
-        return new RouteBuilder[]{createRouteBuilder()};
+        return new RouteBuilder[] {createRouteBuilder()};
     }
 
     /**

Modified: camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelSpringTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelSpringTestSupport.java?rev=786457&r1=786456&r2=786457&view=diff
==============================================================================
--- camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelSpringTestSupport.java (original)
+++ camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelSpringTestSupport.java Fri Jun 19 11:18:58 2009
@@ -16,32 +16,42 @@
  */
 package org.apache.camel.test.junit4;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Route;
+import org.apache.camel.impl.DefaultPackageScanClassResolver;
+import org.apache.camel.impl.scan.AssignableToPackageScanFilter;
+import org.apache.camel.impl.scan.InvertingPackageScanFilter;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.util.ObjectHelper;
 import org.junit.After;
 import org.junit.Before;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.GenericApplicationContext;
 
 /**
  * @version $Revision$
  */
 public abstract class CamelSpringTestSupport extends CamelTestSupport {
     protected AbstractXmlApplicationContext applicationContext;
-
     protected abstract AbstractXmlApplicationContext createApplicationContext();
 
+    @Override
     @Before
     public void setUp() throws Exception {
         applicationContext = createApplicationContext();
         assertNotNull("Should have created a valid spring context", applicationContext);
-
         super.setUp();
     }
 
+    @Override
     @After
     public void tearDown() throws Exception {
         super.tearDown();
@@ -50,6 +60,67 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
+    private static class ExcludingPackageScanClassResolver extends DefaultPackageScanClassResolver {
+
+        public void setExcludedClasses(Set<Class> excludedClasses) {
+            excludedClasses = excludedClasses == null ? Collections.EMPTY_SET : excludedClasses;
+            addFilter(new InvertingPackageScanFilter(new AssignableToPackageScanFilter(excludedClasses)));
+        }
+
+    }
+
+    /**
+     * Create a parent context that initializes a
+     * {@link org.apache.camel.spi.PackageScanClassResolver} to exclude a set of given classes from
+     * being resolved. Typically this is used at test time to exclude certain routes,
+     * which might otherwise be just noisy, from being discovered and initialized.
+     * <p/>
+     * To use this filtering mechanism it is necessary to provide the
+     * {@link ApplicationContext} returned from here as the parent context to
+     * your test context e.g.
+     *
+     * <pre>
+     * protected AbstractXmlApplicationContext createApplicationContext() {
+     *     return new ClassPathXmlApplicationContext(new String[] {&quot;test-context.xml&quot;}, getRouteExcludingApplicationContext());
+     * }
+     * </pre>
+     *
+     * This will, in turn, call the template methods <code>excludedRoutes</code>
+     * and <code>excludedRoute</code> to determine the classes to be excluded from scanning.
+     *
+     * @see org.apache.camel.spring.config.scan.SpringComponentScanTest for an example.
+     * @return ApplicationContext a parent {@link ApplicationContext} configured
+     *         to exclude certain classes from package scanning
+     */
+    protected ApplicationContext getRouteExcludingApplicationContext() {
+        GenericApplicationContext routeExcludingContext = new GenericApplicationContext();
+        routeExcludingContext.registerBeanDefinition("excludingResolver", new RootBeanDefinition(ExcludingPackageScanClassResolver.class));
+        routeExcludingContext.refresh();
+
+        ExcludingPackageScanClassResolver excludingResolver = (ExcludingPackageScanClassResolver)routeExcludingContext.getBean("excludingResolver");
+        excludingResolver.setExcludedClasses(new HashSet<Class>(Arrays.asList(excludeRoutes())));
+
+        return routeExcludingContext;
+    }
+
+    /**
+     * Template method used to exclude {@link org.apache.camel.Routes} from the test time context
+     * route scanning
+     *
+     * @return Class[] the classes to be excluded from test time context route scanning
+     */
+    protected Class[] excludeRoutes() {
+        Class excludedRoute = excludeRoute();
+        return excludedRoute != null ? new Class[] {excludedRoute} : new Class[0];
+    }
+
+    /**
+     * Template method used to exclude a {@link org.apache.camel.Routes} from the test camel context
+     */
+    protected Class excludeRoute() {
+        return null;
+    }
 
     /**
      * Looks up the mandatory spring bean of the given name and type, failing if

Modified: camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java?rev=786457&r1=786456&r2=786457&view=diff
==============================================================================
--- camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java (original)
+++ camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java Fri Jun 19 11:18:58 2009
@@ -26,6 +26,7 @@
 import javax.naming.InitialContext;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
@@ -42,8 +43,6 @@
 import org.apache.camel.spi.Language;
 import org.apache.camel.spring.CamelBeanPostProcessor;
 import org.apache.camel.util.CamelContextHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.junit.After;
 import org.junit.Before;
 
@@ -54,8 +53,10 @@
  * @version $Revision$
  */
 public abstract class CamelTestSupport extends TestSupport {    
+    
     protected CamelContext context;
     protected ProducerTemplate template;
+    protected ConsumerTemplate consumer;
     private boolean useRouteBuilder = true;
     private Service camelContextService;
 
@@ -86,6 +87,7 @@
         assertValidContext(context);
 
         template = context.createProducerTemplate();
+        consumer = context.createConsumerTemplate();
 
         postProcessTest();
         
@@ -100,17 +102,21 @@
         } else {
             log.debug("Using route builder from the created context: " + context);
         }
+        log.debug("Routing Rules are: " + context.getRoutes());
     }
 
     @After
     public void tearDown() throws Exception {
-        
+        log.debug("tearDown test ");
+        if (consumer != null) {
+            consumer.stop();
+        }
         if (template != null) {
             template.stop();
         }
         stopCamelContext();
     }
-    
+
     /**
      * Lets post process this test instance to process any Camel annotations.
      * Note that using Spring Test or Guice is a more powerful approach.
@@ -120,14 +126,14 @@
         processor.setCamelContext(context);
         processor.postProcessBeforeInitialization(this, "this");
     }
-
+    
     protected void stopCamelContext() throws Exception {
         if (camelContextService != null) {
             camelContextService.stop();
         } else {
             if (context != null) {
                 context.stop();
-            }
+            }    
         }
     }
 
@@ -136,7 +142,7 @@
             camelContextService.start();
         } else {
             if (context instanceof DefaultCamelContext) {
-                DefaultCamelContext defaultCamelContext = (DefaultCamelContext) context;
+                DefaultCamelContext defaultCamelContext = (DefaultCamelContext)context;
                 if (!defaultCamelContext.isStarted()) {
                     defaultCamelContext.start();
                 }
@@ -169,7 +175,7 @@
     }
 
     /**
-     * Factory method which derived classes can use to create a {@link org.apache.camel.builder.RouteBuilder}
+     * Factory method which derived classes can use to create a {@link RouteBuilder}
      * to define the routes for testing
      */
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -187,7 +193,7 @@
      * @see #createRouteBuilder()
      */
     protected RouteBuilder[] createRouteBuilders() throws Exception {
-        return new RouteBuilder[]{createRouteBuilder()};
+        return new RouteBuilder[] {createRouteBuilder()};
     }
 
     /**
@@ -348,5 +354,4 @@
     protected void enableJMX() {
         System.setProperty(JmxSystemPropertyKeys.DISABLED, "false");
     }
-
 }
\ No newline at end of file