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 2011/01/28 16:40:18 UTC

svn commit: r1064736 - in /camel/trunk/components: camel-core-xml/src/main/java/org/apache/camel/core/xml/ camel-spring/src/main/java/org/apache/camel/component/test/ camel-spring/src/test/java/org/apache/camel/spring/mock/ camel-spring/src/test/resour...

Author: davsclaus
Date: Fri Jan 28 15:40:17 2011
New Revision: 1064736

URL: http://svn.apache.org/viewvc?rev=1064736&view=rev
Log:
CAMEL-3578: Any endpoints can now easily be mocked during test. CAMEL-2630: Mock endpoint now has DSL for arrived to set expectations about timespan between messages arrived on the mock.

Added:
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml
      - copied, changed from r1062109, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/spring.xml
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml
Modified:
    camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/test/TestEndpoint.java

Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=1064736&r1=1064735&r2=1064736&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java Fri Jan 28 15:40:17 2011
@@ -65,6 +65,7 @@ import org.apache.camel.processor.interc
 import org.apache.camel.processor.interceptor.Tracer;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.EventFactory;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ExecutorServiceStrategy;
@@ -234,6 +235,16 @@ public abstract class AbstractCamelConte
                 }
             }
         }
+        // set endpoint strategies if defined
+        Map<String, EndpointStrategy> endpointStrategies = getContext().getRegistry().lookupByType(EndpointStrategy.class);
+        if (endpointStrategies != null && !endpointStrategies.isEmpty()) {
+            for (String id : endpointStrategies.keySet()) {
+                EndpointStrategy strategy = endpointStrategies.get(id);
+                LOG.info("Using custom EndpointStrategy with id: " + id + " and implementation: " + strategy);
+                getContext().addRegisterEndpointCallback(strategy);
+            }
+        }
+        // shutdown
         ShutdownStrategy shutdownStrategy = getBeanForType(ShutdownStrategy.class);
         if (shutdownStrategy != null) {
             LOG.info("Using custom ShutdownStrategy: " + shutdownStrategy);

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/test/TestEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/test/TestEndpoint.java?rev=1064736&r1=1064735&r2=1064736&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/test/TestEndpoint.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/test/TestEndpoint.java Fri Jan 28 15:40:17 2011
@@ -23,7 +23,6 @@ import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.Service;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.commons.logging.Log;
@@ -36,7 +35,7 @@ import org.apache.commons.logging.LogFac
  *
  * @version $Revision$
  */
-public class TestEndpoint extends MockEndpoint implements Service {
+public class TestEndpoint extends MockEndpoint {
     private static final transient Log LOG = LogFactory.getLog(TestEndpoint.class);
     private final Endpoint expectedMessageEndpoint;
     private long timeout = 2000L;
@@ -46,12 +45,12 @@ public class TestEndpoint extends MockEn
         this.expectedMessageEndpoint = expectedMessageEndpoint;
     }
 
-    @SuppressWarnings("unchecked")
-    public void start() throws Exception {
+    @Override
+    protected void doStart() throws Exception {
         if (LOG.isDebugEnabled()) {
             LOG.debug("Consuming expected messages from: " + expectedMessageEndpoint);
         }
-        final List expectedBodies = new ArrayList();
+        final List<Object> expectedBodies = new ArrayList<Object>();
         EndpointHelper.pollEndpoint(expectedMessageEndpoint, new Processor() {
             public void process(Exchange exchange) throws Exception {
                 Object body = getInBody(exchange);
@@ -65,9 +64,6 @@ public class TestEndpoint extends MockEn
         expectedBodiesReceived(expectedBodies);
     }
 
-    public void stop() throws Exception {
-    }
-
     /**
      * This method allows us to convert or coerce the expected message body into some other type
      */

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java?rev=1064736&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java Fri Jan 28 15:40:17 2011
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.mock;
+
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @version $Revision$
+ */
+public class InterceptSendToMockEndpointStrategyTest extends SpringTestSupport {
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml");
+    }
+
+    public void testAdvisedMockEndpoints() throws Exception {
+        getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        // additional test to ensure correct endpoints in registry
+        assertNotNull(context.hasEndpoint("direct:start"));
+        assertNotNull(context.hasEndpoint("direct:foo"));
+        assertNotNull(context.hasEndpoint("log:foo"));
+        assertNotNull(context.hasEndpoint("mock:result"));
+        // all the endpoints was mocked
+        assertNotNull(context.hasEndpoint("mock:direct:start"));
+        assertNotNull(context.hasEndpoint("mock:direct:foo"));
+        assertNotNull(context.hasEndpoint("mock:log:foo"));
+    }
+
+}

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml (from r1062109, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/spring.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/spring.xml&r1=1062109&r2=1064736&rev=1064736&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/spring.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml Fri Jan 28 15:40:17 2011
@@ -18,23 +18,14 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
-       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
-    ">
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
-  <!-- START SNIPPET: example -->
-  <camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-      <from uri="file:src/test/data?noop=true"/>
-      <filter>
-        <xpath>/person/city = 'London'</xpath>
-        <to uri="mock:matched"/>
-      </filter>
-    </route>
-  </camelContext>
-
-  <bean id="myBean" class="org.apache.camel.spring.mock.MyAssertions" scope="singleton"/>
-  <!-- END SNIPPET: example -->
+    <!-- START SNIPPET: e1 -->
+    <!-- the Camel route is defined in another XML file -->
+    <import resource="camel-route.xml"/>
 
+    <!-- bean which enables mocking all endpoints -->
+    <bean id="mockAllEndpoints" class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>
+    <!-- END SNIPPET: e1 -->
 
 </beans>

Added: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml?rev=1064736&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml (added)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml Fri Jan 28 15:40:17 2011
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+    <!-- START SNIPPET: e1 -->
+    <!-- this camel route is in the camel-route.xml file -->
+    <camelContext xmlns="http://camel.apache.org/schema/spring">
+
+        <route>
+            <from uri="direct:start"/>
+            <to uri="direct:foo"/>
+            <to uri="log:foo"/>
+            <to uri="mock:result"/>
+        </route>
+
+        <route>
+            <from uri="direct:foo"/>
+            <transform>
+                <constant>Bye World</constant>
+            </transform>
+        </route>
+
+    </camelContext>
+    <!-- END SNIPPET: e1 -->
+
+</beans>