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/03/05 15:16:03 UTC

svn commit: r1078291 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/test/java/org/apache/camel/issues/ camel-core/src/test/java/org/apache/camel/processor/interceptor...

Author: davsclaus
Date: Sat Mar  5 14:16:03 2011
New Revision: 1078291

URL: http://svn.apache.org/viewvc?rev=1078291&view=rev
Log:
CAMEL-3757: Fixed mocking existing endpoints, stripping off parameters.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedErrorHandlerAndOnExceptionTest.java
      - copied, changed from r1078258, camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsHavingParameterTest.java
      - copied, changed from r1078258, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java
    camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java
      - copied, changed from r1078258, camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java?rev=1078291&r1=1078290&r2=1078291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java Sat Mar  5 14:16:03 2011
@@ -68,7 +68,6 @@ public abstract class AdviceWithRouteBui
      * @throws Exception can be thrown if error occurred
      */
     public void mockEndpoints() throws Exception {
-        getContext().removeEndpoints("*");
         getContext().addRegisterEndpointCallback(new InterceptSendToMockEndpointStrategy(null));
     }
 
@@ -80,7 +79,6 @@ public abstract class AdviceWithRouteBui
      * @see org.apache.camel.util.EndpointHelper#matchEndpoint(String, String)
      */
     public void mockEndpoints(String pattern) throws Exception {
-        getContext().removeEndpoints(pattern);
         getContext().addRegisterEndpointCallback(new InterceptSendToMockEndpointStrategy(pattern));
     }
 
@@ -95,7 +93,6 @@ public abstract class AdviceWithRouteBui
      */
     public AdviceWithBuilder weaveById(String pattern) {
         ObjectHelper.notNull(originalRoute, "originalRoute", this);
-
         return new AdviceWithBuilder(this, pattern, null);
     }
 
@@ -110,7 +107,6 @@ public abstract class AdviceWithRouteBui
      */
     public AdviceWithBuilder weaveByToString(String pattern) {
         ObjectHelper.notNull(originalRoute, "originalRoute", this);
-
         return new AdviceWithBuilder(this, null, pattern);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java?rev=1078291&r1=1078290&r2=1078291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java Sat Mar  5 14:16:03 2011
@@ -114,6 +114,7 @@ public class InterceptSendToEndpoint imp
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Sending to endpoint: " + getEndpointUri() + " is intercepted and detoured to: " + detour + " for exchange: " + exchange);
                 }
+                LOG.info("Sending to endpoint: " + getEndpointUri() + " is intercepted and detoured to: " + detour + " for exchange: " + exchange);
                 // add header with the real endpoint uri
                 exchange.getIn().setHeader(Exchange.INTERCEPTED_ENDPOINT, delegate.getEndpointUri());
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java?rev=1078291&r1=1078290&r2=1078291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToMockEndpointStrategy.java Sat Mar  5 14:16:03 2011
@@ -21,6 +21,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.util.EndpointHelper;
+import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,6 +74,10 @@ public class InterceptSendToMockEndpoint
             // create mock endpoint which we will use as interceptor
             // replace :// from scheme to make it easy to lookup the mock endpoint without having double :// in uri
             String key = "mock:" + endpoint.getEndpointKey().replaceFirst("://", ":");
+            // strip off parameters as well
+            if (key.contains("?")) {
+                key = ObjectHelper.before(key, "?");
+            }
             LOG.info("Adviced endpoint [" + uri + "] with mock endpoint [" + key + "]");
 
             MockEndpoint mock = endpoint.getCamelContext().getEndpoint(key, MockEndpoint.class);

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedErrorHandlerAndOnExceptionTest.java (from r1078258, camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedErrorHandlerAndOnExceptionTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedErrorHandlerAndOnExceptionTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java&r1=1078258&r2=1078291&rev=1078291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedErrorHandlerAndOnExceptionTest.java Sat Mar  5 14:16:03 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.issues;
 
+import java.io.FileNotFoundException;
 import java.net.ConnectException;
 
 import org.apache.camel.CamelExecutionException;
@@ -29,9 +30,9 @@ import org.apache.camel.model.RouteDefin
  *
  * @version 
  */
-public class RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest extends ContextTestSupport {
+public class RouteScopedErrorHandlerAndOnExceptionTest extends ContextTestSupport {
 
-    public void testIssue() throws Exception {
+    public void testOnException() throws Exception {
         RouteDefinition route = context.getRouteDefinitions().get(0);
         route.adviceWith(context, new RouteBuilder() {
             @Override
@@ -42,7 +43,7 @@ public class RouteScopedOnExceptionWithI
             }
         });
 
-        getMockEndpoint("mock:global").expectedMessageCount(0);
+        getMockEndpoint("mock:local").expectedMessageCount(0);
         getMockEndpoint("mock:seda").expectedMessageCount(0);
         // we fail all redeliveries so after that we send to mock:exhausted
         getMockEndpoint("mock:exhausted").expectedMessageCount(1);
@@ -58,16 +59,36 @@ public class RouteScopedOnExceptionWithI
         assertMockEndpointsSatisfied();
     }
 
+    public void testErrorHandler() throws Exception {
+        RouteDefinition route = context.getRouteDefinitions().get(0);
+        route.adviceWith(context, new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                interceptSendToEndpoint("seda:*")
+                    .skipSendToOriginalEndpoint()
+                    .throwException(new FileNotFoundException("Forced"));
+            }
+        });
+
+        getMockEndpoint("mock:local").expectedMessageCount(1);
+        getMockEndpoint("mock:seda").expectedMessageCount(0);
+        getMockEndpoint("mock:exhausted").expectedMessageCount(0);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                errorHandler(deadLetterChannel("mock:global")
-                    .maximumRedeliveries(2)
-                    .redeliveryDelay(5000));
 
                 from("direct:start")
+                    .errorHandler(deadLetterChannel("mock:local")
+                        .maximumRedeliveries(2)
+                        .redeliveryDelay(0))
                     // no redelivery delay for faster unit tests
                     .onException(ConnectException.class).maximumRedeliveries(5).redeliveryDelay(0)
                         .logRetryAttempted(true).retryAttemptedLogLevel(LoggingLevel.WARN)

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsHavingParameterTest.java (from r1078258, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsHavingParameterTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsHavingParameterTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java&r1=1078258&r2=1078291&rev=1078291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsHavingParameterTest.java Sat Mar  5 14:16:03 2011
@@ -23,32 +23,34 @@ import org.apache.camel.builder.RouteBui
 /**
  * @version 
  */
-public class AdviceWithMockEndpointsTest extends ContextTestSupport {
+public class AdviceWithMockEndpointsHavingParameterTest extends ContextTestSupport {
 
     public void testNoAdvised() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Bye World");
 
         template.sendBody("direct:start", "Hello World");
 
         assertMockEndpointsSatisfied();
     }
 
-    // START SNIPPET: e1
     public void testAdvisedMockEndpoints() throws Exception {
         // advice the first route using the inlined AdviceWith route builder
         // which has extended capabilities than the regular route builder
         context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
             @Override
             public void configure() throws Exception {
-                // mock all endpoints
+                // mock all endpoints (will mock in all routes)
                 mockEndpoints();
             }
         });
 
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:foo").expectedBodiesReceived("Bye World");
+
         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");
+        getMockEndpoint("mock:log:start").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:seda:foo").expectedBodiesReceived("Hello World");
 
         template.sendBody("direct:start", "Hello World");
 
@@ -56,61 +58,34 @@ public class AdviceWithMockEndpointsTest
 
         // 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("seda:foo"));
+        assertNotNull(context.hasEndpoint("log:foo?showHeaders=false"));
+        assertNotNull(context.hasEndpoint("log:start?showAll=true"));
         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"));
-    }
-    // END SNIPPET: e1
-
-    // START SNIPPET: e2
-    public void testAdvisedMockEndpointsWithPattern() throws Exception {
-        // advice the first route using the inlined AdviceWith route builder
-        // which has extended capabilities than the regular route builder
-        context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                // mock only log endpoints
-                mockEndpoints("log*");
-            }
-        });
-
-        // now we can refer to log:foo as a mock and set our expectations
-        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"));
-        // only the log:foo endpoint was mocked
+        assertNotNull(context.hasEndpoint("mock:seda:foo"));
+        assertNotNull(context.hasEndpoint("mock:log:start"));
         assertNotNull(context.hasEndpoint("mock:log:foo"));
-        assertNull(context.hasEndpoint("mock:direct:start"));
-        assertNull(context.hasEndpoint("mock:direct:foo"));
     }
-    // END SNIPPET: e2
 
-
-    // START SNIPPET: route
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("direct:foo").to("log:foo").to("mock:result");
-
-                from("direct:foo").transform(constant("Bye World"));
+                from("direct:start")
+                    .to("seda:foo")
+                    .to("log:start?showAll=true")
+                    .to("mock:result");
+
+                from("seda:foo?size=20")
+                    .transform(constant("Bye World"))
+                    .log("We transformed ${body}")
+                    .to("log:foo?showHeaders=false")
+                    .to("mock:foo");
             }
         };
     }
-    // END SNIPPET: route
+
 }

Copied: camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java (from r1078258, camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java?p2=camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java&p1=camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java&r1=1078258&r2=1078291&rev=1078291&view=diff
==============================================================================
--- camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java (original)
+++ camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java Sat Mar  5 14:16:03 2011
@@ -16,44 +16,43 @@
  */
 package org.apache.camel.test.patterns;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
 /**
  * @version 
  */
-// START SNIPPET: e1
-public class IsMockEndpointsJUnit4Test extends CamelTestSupport {
+public class IsMockEndpointsFileTest extends CamelTestSupport {
+
+    @Override
+    public void setUp() throws Exception {
+        deleteDirectory("target/input");
+        deleteDirectory("target/messages");
+        super.setUp();
+    }
 
     @Override
     public String isMockEndpoints() {
         // override this method and return the pattern for which endpoints to mock.
-        // use * to indicate all
-        return "*";
+        return "file:target*";
     }
 
     @Test
-    public void testMockAllEndpoints() throws Exception {
+    public void testMockFileEndpoints() throws Exception {
         // notice we have automatic mocked all endpoints and the name of the endpoints is "mock:uri"
-        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");
+        MockEndpoint camel = getMockEndpoint("mock:file:target/messages/camel");
+        camel.expectedMessageCount(1);
 
-        template.sendBody("direct:start", "Hello World");
+        MockEndpoint other = getMockEndpoint("mock:file:target/messages/others");
+        other.expectedMessageCount(1);
 
-        assertMockEndpointsSatisfied();
+        template.sendBodyAndHeader("file:target/input", "Hello Camel", Exchange.FILE_NAME, "camel.txt");
+        template.sendBodyAndHeader("file:target/input", "Hello World", Exchange.FILE_NAME, "world.txt");
 
-        // 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"));
+        assertMockEndpointsSatisfied();
     }
 
     @Override
@@ -61,11 +60,11 @@ public class IsMockEndpointsJUnit4Test e
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("direct:foo").to("log:foo").to("mock:result");
-
-                from("direct:foo").transform(constant("Bye World"));
+                from("file:target/input")
+                    .choice()
+                        .when(body(String.class).contains("Camel")).to("file:target/messages/camel")
+                        .otherwise().to("file:target/messages/others");
             }
         };
     }
 }
-// END SNIPPET: e1