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