This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-2.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.x by this push: new 651449e Added unit test example based on user forum issue with Multicast EIP change due to CAMEL-9444 and CAMEL-9573 651449e is described below commit 651449ece8271da32b5cbe9736da0615fbc5b20d Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Feb 5 09:03:04 2019 +0100 Added unit test example based on user forum issue with Multicast EIP change due to CAMEL-9444 and CAMEL-9573 --- ...OriginalMessageBodyAndEnrichedHeadersTest.java} | 65 ++++---- ...UnitOfWorkOnExceptionHandledFalseIssueTest.java | 166 ++++++++++++++++++++- 2 files changed, 199 insertions(+), 32 deletions(-) diff --git a/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersTest.java similarity index 51% copy from camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java copy to camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersTest.java index e9446c7..9430e89 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersTest.java @@ -20,44 +20,59 @@ import org.apache.camel.ContextTestSupport; import org.apache.camel.builder.RouteBuilder; import org.junit.Test; -public class MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest extends ContextTestSupport { +public class MulticastMixOriginalMessageBodyAndEnrichedHeadersTest extends ContextTestSupport { - @Test - public void testMulticast() throws Exception { - getMockEndpoint("mock:a").expectedMessageCount(1); - getMockEndpoint("mock:b").expectedMessageCount(1); - getMockEndpoint("mock:result").expectedMessageCount(0); - - try { - template.sendBody("direct:start", "Hello World"); - fail("Should throw exception"); - } catch (Exception e) { - IllegalArgumentException cause = assertIsInstanceOf(IllegalArgumentException.class, e.getCause().getCause()); - assertEquals("Forced", cause.getMessage()); - } - - assertMockEndpointsSatisfied(); + @Override + public boolean isUseRouteBuilder() { + return false; } - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { + @Test + public void testMulticastMixOriginalAndHeaders() throws Exception { + context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { + context.setAllowUseOriginalMessage(true); + onException(Exception.class) - .handled(false) - .to("mock:a"); + .handled(true) + // we want to preserve the real original message body and then include other headers that have been + // set later during routing + .transform(simple("${exchangeProperty[CamelParentUnitOfWork].getOriginalInMessage().getBody()}")) + .to("mock:b"); from("direct:start") + .setBody(constant("Changed body")) + .setHeader("foo", constant("bar")) .multicast().shareUnitOfWork().stopOnException() + .to("direct:a") .to("direct:b") - .end() - .to("mock:result"); + .end(); + + from("direct:a") + .to("mock:a"); from("direct:b") - .to("mock:b") + .to("mock:c") .throwException(new IllegalArgumentException("Forced")); } - }; + }); + context.start(); + + getMockEndpoint("mock:a").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:a").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:b").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedBodiesReceived("Hello World"); + getMockEndpoint("mock:b").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedMessageCount(1); + getMockEndpoint("mock:c").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedBodiesReceived("Changed body"); + getMockEndpoint("mock:result").expectedMessageCount(0); + + template.sendBody("direct:start", "Hello World"); + + assertMockEndpointsSatisfied(); } + } diff --git a/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java index e9446c7..6b7f92c 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest.java @@ -22,10 +22,44 @@ import org.junit.Test; public class MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest extends ContextTestSupport { + @Override + public boolean isUseRouteBuilder() { + return false; + } + @Test - public void testMulticast() throws Exception { + public void testMulticastLocal() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .setHeader("foo", constant("bar")) + .multicast().shareUnitOfWork().stopOnException() + .to("direct:a") + .to("direct:b") + .end() + .to("mock:result"); + + from("direct:a") + .to("mock:a"); + + from("direct:b") + .onException(Exception.class) + .handled(false) + .to("mock:b") + .end() + .to("mock:c") + .throwException(new IllegalArgumentException("Forced")); + } + }); + context.start(); + getMockEndpoint("mock:a").expectedMessageCount(1); + getMockEndpoint("mock:a").expectedHeaderReceived("foo", "bar"); getMockEndpoint("mock:b").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedMessageCount(1); + getMockEndpoint("mock:c").expectedHeaderReceived("foo", "bar"); getMockEndpoint("mock:result").expectedMessageCount(0); try { @@ -39,25 +73,143 @@ public class MulticastShareUnitOfWorkOnExceptionHandledFalseIssueTest extends Co assertMockEndpointsSatisfied(); } - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { + @Test + public void testMulticastGlobal() throws Exception { + context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { onException(Exception.class) .handled(false) - .to("mock:a"); + .to("mock:b"); from("direct:start") + .setHeader("foo", constant("bar")) .multicast().shareUnitOfWork().stopOnException() + .to("direct:a") .to("direct:b") .end() .to("mock:result"); + from("direct:a") + .to("mock:a"); + from("direct:b") - .to("mock:b") + .to("mock:c") .throwException(new IllegalArgumentException("Forced")); } - }; + }); + context.start(); + + getMockEndpoint("mock:a").expectedMessageCount(1); + getMockEndpoint("mock:a").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:b").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedMessageCount(1); + getMockEndpoint("mock:c").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:result").expectedMessageCount(0); + + try { + template.sendBody("direct:start", "Hello World"); + fail("Should throw exception"); + } catch (Exception e) { + IllegalArgumentException cause = assertIsInstanceOf(IllegalArgumentException.class, e.getCause().getCause()); + assertEquals("Forced", cause.getMessage()); + } + + assertMockEndpointsSatisfied(); } + + @Test + public void testMulticastLocalNoStop() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .setHeader("foo", constant("bar")) + .multicast().shareUnitOfWork() + .to("direct:a") + .to("direct:b") + .end() + .to("mock:result"); + + from("direct:a") + .to("mock:a"); + + from("direct:b") + .onException(Exception.class) + .handled(false) + .to("mock:b") + .end() + .to("mock:c") + .throwException(new IllegalArgumentException("Forced")); + } + }); + context.start(); + + getMockEndpoint("mock:a").expectedMessageCount(1); + getMockEndpoint("mock:a").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:b").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedMessageCount(1); + getMockEndpoint("mock:c").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:result").expectedMessageCount(0); + + try { + template.sendBody("direct:start", "Hello World"); + fail("Should throw exception"); + } catch (Exception e) { + IllegalArgumentException cause = assertIsInstanceOf(IllegalArgumentException.class, e.getCause()); + assertEquals("Forced", cause.getMessage()); + } + + assertMockEndpointsSatisfied(); + } + + @Test + public void testMulticastGlobalNoStop() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + onException(Exception.class) + .handled(false) + .to("mock:b"); + + from("direct:start") + .setHeader("foo", constant("bar")) + .multicast().shareUnitOfWork() + .to("direct:a") + .to("direct:b") + .end() + .to("mock:result"); + + from("direct:a") + .to("mock:a"); + + from("direct:b") + .to("mock:c") + .throwException(new IllegalArgumentException("Forced")); + } + }); + context.start(); + + getMockEndpoint("mock:a").expectedMessageCount(1); + getMockEndpoint("mock:a").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:b").expectedMessageCount(1); + getMockEndpoint("mock:b").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:c").expectedMessageCount(1); + getMockEndpoint("mock:c").expectedHeaderReceived("foo", "bar"); + getMockEndpoint("mock:result").expectedMessageCount(0); + + try { + template.sendBody("direct:start", "Hello World"); + fail("Should throw exception"); + } catch (Exception e) { + IllegalArgumentException cause = assertIsInstanceOf(IllegalArgumentException.class, e.getCause()); + assertEquals("Forced", cause.getMessage()); + } + + assertMockEndpointsSatisfied(); + } + + }