Author: davsclaus
Date: Wed May 11 09:06:03 2011
New Revision: 1101791
URL: http://svn.apache.org/viewvc?rev=1101791&view=rev
Log:
CAMEL-3960: camel-test with junit4 now supports per class setup/shutdown of
CamelContext. This allows to re-use the context when having multiple test
methods for faster unit testing.
Added:
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java
- copied, changed from r1101417,
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
Modified:
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbConverterTest.java
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/TestSupportNodeIdFactory.java
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/TestSupport.java
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
camel/trunk/components/camel-test/src/test/resources/log4j.properties
Modified:
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbConverterTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbConverterTest.java?rev=1101791&r1=1101790&r2=1101791&view=diff
==============================================================================
---
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbConverterTest.java
(original)
+++
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbConverterTest.java
Wed May 11 09:06:03 2011
@@ -16,7 +16,6 @@
*/
package org.apache.camel.converter.jaxb;
-import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.util.JAXBSource;
import javax.xml.parsers.ParserConfigurationException;
Modified:
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/TestSupportNodeIdFactory.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/TestSupportNodeIdFactory.java?rev=1101791&r1=1101790&r2=1101791&view=diff
==============================================================================
---
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/TestSupportNodeIdFactory.java
(original)
+++
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/TestSupportNodeIdFactory.java
Wed May 11 09:06:03 2011
@@ -19,8 +19,12 @@ package org.apache.camel.test;
import org.apache.camel.impl.DefaultNodeIdFactory;
public class TestSupportNodeIdFactory extends DefaultNodeIdFactory {
- // start tests with fresh counters
+
+ /**
+ * Start tests with fresh counters
+ */
public static void resetCounters() {
resetAllCounters();
}
+
}
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=1101791&r1=1101790&r2=1101791&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
Wed May 11 09:06:03 2011
@@ -21,6 +21,7 @@ import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -46,7 +47,10 @@ import org.apache.camel.model.ProcessorD
import org.apache.camel.spi.Language;
import org.apache.camel.spring.CamelBeanPostProcessor;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A useful base class which creates a {@link org.apache.camel.CamelContext}
with some routes
@@ -56,24 +60,37 @@ import org.junit.Before;
*/
public abstract class CamelTestSupport extends TestSupport {
- protected volatile CamelContext context;
- protected volatile ProducerTemplate template;
- protected volatile ConsumerTemplate consumer;
+ protected static volatile CamelContext context;
+ protected static volatile ProducerTemplate template;
+ protected static volatile ConsumerTemplate consumer;
+ protected static volatile Service camelContextService;
+ private static final Logger LOG =
LoggerFactory.getLogger(TestSupport.class);
+ private static final AtomicBoolean INIT = new AtomicBoolean();
private boolean useRouteBuilder = true;
- private Service camelContextService;
private final DebugBreakpoint breakpoint = new DebugBreakpoint();
/**
* Use the RouteBuilder or not
- * @return
- * If the return value is true, the camel context will be started in the
setup method.
- * If the return value is false, the camel context will not be started in
the setup method.
+ * @return <tt>true</tt> then {@link CamelContext} will be auto started,
+ * <tt>false</tt> then {@link CamelContext} will <b>not</b> be auto
started (you will have to start it manually)
*/
public boolean isUseRouteBuilder() {
return useRouteBuilder;
}
/**
+ * Override to control whether {@link CamelContext} should be setup per
test or per class.
+ * <p/>
+ * By default it will be setup/teardown per test (per test method). If you
want to re-use
+ * {@link CamelContext} between test methods you can override this method
and return <tt>true</tt>
+ *
+ * @return <tt>true</tt> per class, <tt>false</tt> per test.
+ */
+ public boolean isCreateCamelContextPerClass() {
+ return false;
+ }
+
+ /**
* Override to enable auto mocking endpoints based on the pattern.
* <p/>
* Return <tt>*</tt> to mock all endpoints.
@@ -97,8 +114,8 @@ public abstract class CamelTestSupport e
* and stop the context; such as for Spring when the ApplicationContext is
* started and stopped, rather than directly stopping the CamelContext
*/
- public void setCamelContextService(Service camelContextService) {
- this.camelContextService = camelContextService;
+ public void setCamelContextService(Service service) {
+ camelContextService = service;
}
@Before
@@ -107,6 +124,20 @@ public abstract class CamelTestSupport e
log.info("Testing: " + getTestMethodName() + "(" +
getClass().getName() + ")");
log.info("********************************************************************************");
+ boolean first = INIT.compareAndSet(false, true);
+ if (isCreateCamelContextPerClass()) {
+ if (first) {
+ doSetUp();
+ }
+ // must always post process to do IoC and reset mocks between tests
+ postProcessTest();
+ resetMocks();
+ } else {
+ doSetUp();
+ }
+ }
+
+ protected void doSetUp() throws Exception {
log.debug("setUp test");
if (!useJmx()) {
disableJMX();
@@ -152,22 +183,34 @@ public abstract class CamelTestSupport e
log.debug("Routing Rules are: " + context.getRoutes());
assertValidContext(context);
+
+ INIT.set(true);
}
@After
public void tearDown() throws Exception {
- log.info("Testing done: " + this);
+
log.info("********************************************************************************");
+ log.info("Testing done: " + getTestMethodName() + "(" +
getClass().getName() + ")");
+
log.info("********************************************************************************");
- log.debug("tearDown test");
- if (consumer != null) {
- consumer.stop();
- }
- if (template != null) {
- template.stop();
+ if (isCreateCamelContextPerClass()) {
+ // we tear down in after class
+ return;
}
+
+ LOG.debug("tearDown test");
+ doStopTemplates();
stopCamelContext();
}
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ INIT.set(false);
+ LOG.debug("tearDownAfterClass test");
+ doStopTemplates();
+ doStopCamelContext();
+ }
+
/**
* Returns the timeout to use when shutting down (unit in seconds).
* <p/>
@@ -208,14 +251,31 @@ public abstract class CamelTestSupport e
processor.setCamelContext(context);
processor.postProcessBeforeInitialization(this, "this");
}
-
+
protected void stopCamelContext() throws Exception {
+ doStopCamelContext();
+ }
+
+ private static void doStopCamelContext() throws Exception {
if (camelContextService != null) {
camelContextService.stop();
+ camelContextService = null;
} else {
if (context != null) {
context.stop();
- }
+ context = null;
+ }
+ }
+ }
+
+ private static void doStopTemplates() throws Exception {
+ if (consumer != null) {
+ consumer.stop();
+ consumer = null;
+ }
+ if (template != null) {
+ template.stop();
+ template = null;
}
}
Modified:
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/TestSupport.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/TestSupport.java?rev=1101791&r1=1101790&r2=1101791&view=diff
==============================================================================
---
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/TestSupport.java
(original)
+++
camel/trunk/components/camel-test/src/main/java/org/apache/camel/test/junit4/TestSupport.java
Wed May 11 09:06:03 2011
@@ -40,6 +40,8 @@ import org.apache.camel.processor.Delega
import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.PredicateAssertHelper;
import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.rules.TestName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,9 +51,15 @@ import org.slf4j.LoggerFactory;
* @version
*/
public abstract class TestSupport extends Assert {
- private static final Logger LOG =
LoggerFactory.getLogger(TestSupport.class);
- protected transient Logger log = LoggerFactory.getLogger(getClass());
-
+
+ private static final Logger LOG =
LoggerFactory.getLogger(TestSupport.class);
+ protected transient Logger log = LoggerFactory.getLogger(getClass());
+
+ // CHECKSTYLE:OFF
+ @Rule
+ public TestName testName = new TestName();
+ // CHECKSTYLE:ON
+
// Builder methods for expressions used when testing
//
-------------------------------------------------------------------------
@@ -482,7 +490,9 @@ public abstract class TestSupport extend
* Is this Java 1.5
*
* @return <tt>true</tt> if its Java 1.5, <tt>false</tt> if its not (for
example Java 1.6 or better)
+ * @deprecated will be removed in the near future as Camel now requires
JDK1.6+
*/
+ @Deprecated
public static boolean isJava15() {
String javaVersion =
System.getProperty("java.version").toLowerCase(Locale.US);
return javaVersion.startsWith("1.5");
@@ -494,9 +504,7 @@ public abstract class TestSupport extend
* @return the method name
*/
public String getTestMethodName() {
- // TODO: When using latest junit we can use @Rule to remember the test
name
- //
http://kentbeck.github.com/junit/javadoc/latest/org/junit/rules/TestName.html
- return "";
+ return testName.getMethodName();
}
}
Copied:
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java
(from r1101417,
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java?p2=camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java&p1=camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java&r1=1101417&r2=1101791&rev=1101791&view=diff
==============================================================================
---
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
(original)
+++
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java
Wed May 11 09:06:03 2011
@@ -24,15 +24,13 @@ import org.apache.camel.component.mock.M
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
-// END SNIPPET: example
-
/**
* Tests filtering using Camel Test
*
* @version
*/
// START SNIPPET: example
-public class FilterJUnit4Test extends CamelTestSupport {
+public class FilterCreateCamelContextPerClassTest extends CamelTestSupport {
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@@ -40,6 +38,14 @@ public class FilterJUnit4Test extends Ca
@Produce(uri = "direct:start")
protected ProducerTemplate template;
+ @Override
+ public boolean isCreateCamelContextPerClass() {
+ // we override this method and return true, to tell Camel test-kit that
+ // it should only create CamelContext once (per class), so we will
+ // re-use the CamelContext between each test method in this class
+ return true;
+ }
+
@Test
public void testSendMatchingMessage() throws Exception {
String expectedBody = "<matched/>";
Modified:
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java?rev=1101791&r1=1101790&r2=1101791&view=diff
==============================================================================
---
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
(original)
+++
camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
Wed May 11 09:06:03 2011
@@ -24,8 +24,6 @@ import org.apache.camel.component.mock.M
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
-// END SNIPPET: example
-
/**
* Tests filtering using Camel Test
*
@@ -68,4 +66,5 @@ public class FilterJUnit4Test extends Ca
}
};
}
-}
\ No newline at end of file
+}
+// END SNIPPET: example
Modified: camel/trunk/components/camel-test/src/test/resources/log4j.properties
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/test/resources/log4j.properties?rev=1101791&r1=1101790&r2=1101791&view=diff
==============================================================================
--- camel/trunk/components/camel-test/src/test/resources/log4j.properties
(original)
+++ camel/trunk/components/camel-test/src/test/resources/log4j.properties Wed
May 11 09:06:03 2011
@@ -22,6 +22,7 @@ log4j.rootLogger=INFO, file
log4j.logger.org.springframework=WARN
#log4j.logger.org.apache.camel=DEBUG
+#log4j.logger.org.apache.camel.test.junit4=DEBUG
# CONSOLE appender not used by default
log4j.appender.out=org.apache.log4j.ConsoleAppender