You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Claus Ibsen <ci...@silverbullet.dk> on 2008/10/01 08:00:17 UTC

RE: issue routing Exchange to custom method in Processor

Hi Mick

Using 1.4 you should also remove the assertion:
            Assert.fail("Should have thrown a RuntimeCamelException");


However on 1.5 (if / when you upgrade):
- you need the try .. catch (and the assertion)


Med venlig hilsen
 
Claus Ibsen
......................................
Silverbullet
Skovsgårdsvænget 21
8362 Hørning
Tlf. +45 2962 7576
Web: www.silverbullet.dk

-----Original Message-----
From: Mick Knutson [mailto:mknutson@baselogic.com] 
Sent: 30. september 2008 21:40
To: camel-user@activemq.apache.org
Subject: Re: issue routing Exchange to custom method in Processor

I tried this new method as your instructions first with 1.4


*New Method:*

    *protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:start")

.errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(1))
                        .process(new Processor() {
                            public void process(Exchange exchange) throws
Exception {
                                String body =
exchange.getIn().getBody(String.class);
                                if ("Boom".equals(body)) {
                                    throw new
IllegalArgumentException("Forced exception by unit test");
                                }
                                exchange.getIn().setBody("Bye World");
                            }
                        })
                        .to("mock:result");
            }
        };
    }

    @Test(groups = {"functional"})
    public void testError() throws Exception {

        camelContext.addRoutes(createRouteBuilder());

        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        MockEndpoint error = getMockEndpoint("mock:error");
        MockEndpoint result = getMockEndpoint("mock:result");
        error.expectedMessageCount(1);
        result.expectedMessageCount(0);

        //try {
            producerTemplate.sendBody("direct:start", "Boom");

            Assert.fail("Should have thrown a RuntimeCamelException");
        //} catch (RuntimeCamelException e) {
            //assertIsInstanceOf(IllegalArgumentException.class,
e.getCause());
        //}

        MockEndpoint.assertIsSatisfied(error, result);
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
        log.info("----------------------------------------------------");
    }

*



*My TestNG results:*

  *      <test name="MockTest">
      <class name="com.servepath.changerequest.ChangeRequestTest">
        <test-method status="FAIL" signature="testError()" name="testError"
duration-ms="375" started-at="2008-09-30T12:38:09Z"
finished-at="2008-09-30T12:38:09Z">
          <exception class="java.lang.AssertionError">
            <message>
              <![CDATA[Should have thrown a RuntimeCamelException]]>
            </message>
            <full-stacktrace>
              <![CDATA[java.lang.AssertionError: Should have thrown a
RuntimeCamelException
    at org.testng.Assert.fail(Assert.java:84)
    at
com.servepath.changerequest.ChangeRequestTest.testError(ChangeRequestTest.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
    at
org.testng.internal.MethodHelper$1.runTestMethod(MethodHelper.java:698)
    at
org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:140)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at
org.testng.internal.MethodHelper.invokeHookable(MethodHelper.java:706)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:468)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:617)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:885)
    at
org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
    at org.testng.TestRunner.runWorkers(TestRunner.java:712)
    at org.testng.TestRunner.privateRun(TestRunner.java:582)
    at org.testng.TestRunner.run(TestRunner.java:477)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:324)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
    at org.testng.SuiteRunner.run(SuiteRunner.java:198)
    at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:788)
    at org.testng.TestNG.run(TestNG.java:708)
    at
org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74)
    at
org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92)
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
    at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
]]>
            </full-stacktrace>
          </exception>
        </test-method>
*


*Console Output:*

*[myproject] DEBUG [main] DefaultComponent.createEndpoint(77) | Creating
endpoint uri=[direct:start], path=[start], parameters=[{}]
[myproject] DEBUG [main] DefaultCamelContext.getEndpoint(281) | direct:start
converted to endpoint: Endpoint[direct:start] by component: org.apache.ca
mel.component.direct.DirectComponent@b49b19
[myproject] DEBUG [main]
DefaultInstrumentationAgent.registerMBeanWithServer(247) | Registered MBean
with objectname: org.apache.camel:context=mickknu
tson/camel,type=endpoint,component=direct,name=start
[myproject] DEBUG [main]
DefaultInstrumentationAgent.registerMBeanWithServer(247) | Registered MBean
with objectname: org.apache.camel:context=mickknu
tson/camel,route=[direct]start,type=processor,nodeid=process4,name="process[com.servepath.changerequest.ChangeRequestTest$1$1@132be10
]"
[myproject] DEBUG [main]
DefaultInstrumentationAgent.registerMBeanWithServer(247) | Registered MBean
with objectname: org.apache.camel:context=mickknu
tson/camel,route=[direct]start,type=processor,nodeid=to5,name="To[mock:result]"
[myproject] DEBUG [main] DefaultComponent.createEndpoint(77) | Creating
endpoint uri=[mock:result], path=[result], parameters=[{}]
[myproject] DEBUG [main] DefaultCamelContext.getEndpoint(281) | mock:result
converted to endpoint: Endpoint[mock:result] by component: org.apache.came
l.component.mock.MockComponent@6691da
[myproject] DEBUG [main]
DefaultInstrumentationAgent.registerMBeanWithServer(247) | Registered MBean
with objectname: org.apache.camel:context=mickknu
tson/camel,type=endpoint,component=mock,name=result
[myproject] DEBUG [main]
DefaultInstrumentationAgent.registerMBeanWithServer(247) | Registered MBean
with objectname: org.apache.camel:context=mickknu
tson/camel,route=[direct]start,type=route,name=[direct]start
[myproject] DEBUG [main] DefaultCamelContext.addRoutes(354) | Adding routes
from: Routes: [Route[ [From[direct:start]] -> [Interceptor[Delegate(Pipeli
ne[DeadLetterChannel[Delegate(com.servepath.changerequest.ChangeRequestTest$1$1@132be10),
sendTo(Endpoint[mock:error]), RedeliveryPolicy[maximumRedeli
veries=1, initialRedeliveryDelay=1000, maximumRedeliveryDelay=60000,
useExponentialBackOff=false, backOffMultiplier=2.0,
useCollisionAvoidance=false,
collisionAvoidanceFactor=0.15]],
DeadLetterChannel[Delegate(sendTo(Endpoint[mock:result])),
sendTo(Endpoint[mock:error]), RedeliveryPolicy[maximumRede
liveries=1, initialRedeliveryDelay=1000, maximumRedeliveryDelay=60000,
useExponentialBackOff=false, backOffMultiplier=2.0,
useCollisionAvoidance=false
, collisionAvoidanceFactor=0.15]]])]]]] routes: []
[myproject] INFO [main] ChangeRequestTest.testError(60) |
----------------------------------------------------
[myproject] INFO [main] ChangeRequestTest.testError(61) |
----------------------------------------------------
[myproject] INFO [main] ChangeRequestTest.testError(62) |
----------------------------------------------------
[myproject] INFO [main] ChangeRequestTest.testError(63) |
----------------------------------------------------
[myproject] INFO [main] ChangeRequestTest.testError(64) |
----------------------------------------------------
[myproject] DEBUG [main] ProducerCache.sendExchange(149) | >>>>
Endpoint[direct:start] Exchange[Message: Boom]
[myproject] ERROR [main] DeadLetterChannel.log(188) | Failed delivery for
exchangeId: ID-mickknutson/1230-1222803205187/0-0. On delivery attempt: 0 ca
ught: java.lang.IllegalArgumentException: Forced exception by unit test
java.lang.IllegalArgumentException: Forced exception by unit test
        at
com.servepath.changerequest.ChangeRequestTest$1$1.process(ChangeRequestTest.java:45)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:174)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:96)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
        at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
        at
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:47)
        at
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:151)
        at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:88)
        at
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:85)
        at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:102)
        at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:108)
        at
com.servepath.changerequest.ChangeRequestTest.testError(ChangeRequestTest.java:71)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580)
        at
org.testng.internal.MethodHelper$1.runTestMethod(MethodHelper.java:698)
        at
org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:140)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.testng.internal.MethodHelper.invokeHookable(MethodHelper.java:706)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:468)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:617)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:885)
        at
org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
        at
org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110)
        at org.testng.TestRunner.runWorkers(TestRunner.java:712)
        at org.testng.TestRunner.privateRun(TestRunner.java:582)
        at org.testng.TestRunner.run(TestRunner.java:477)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:324)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292)
        at org.testng.SuiteRunner.run(SuiteRunner.java:198)
        at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:788)
        at org.testng.TestNG.run(TestNG.java:708)
        at
org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74)
        at
org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
        at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
[myproject] DEBUG [main]
DefaultExceptionPolicyStrategy.getExceptionPolicy(46) | Finding best suited
exception policy for thrown exception java.lang.I
llegalArgumentException
[myproject] DEBUG [main]
DefaultExceptionPolicyStrategy.getExceptionPolicy(87) | No candidate found
to be used as exception policy
[myproject] DEBUG [main] RedeliveryPolicy.sleep(104) | Sleeping for: 1000
millis until attempting redelivery*

Re: issue routing Exchange to custom method in Processor

Posted by Mick Knutson <mk...@baselogic.com>.
It almost appears that there might be some issue with mock endpoint
resetting?



On Wed, Oct 1, 2008 at 12:02 PM, Mick Knutson <mk...@baselogic.com>wrote:

> I am going crazy here (literally).
>
> This is all I know at this point.
>
> If I use this method exacly as I have it (endpoint names), then all my
> tests pass as expected. But if I change anything in the endpoint names, even
> to be mock:success, verse mock:success1 then several of my tests fail with
> messages not getting routed correctly:
>
>     *public void testCreateInvalidChangeRequest(String
> inputDestinationURI,
>                                                String messageInputBody,
>                                                String messageOutputBody
>     )
>             throws Exception {
>
>         MockEndpoint mockFailureEndpoint = getMockEndpoint("mock:failed1
> ");
>         MockEndpoint mockSuccessEndpoint = getMockEndpoint("mock:success1
> ");
>
>         mockFailureEndpoint.expectedBodiesReceived(messageInputBody);
>         mockFailureEndpoint.expectedMessageCount(1);
>         mockSuccessEndpoint.expectedMessageCount(0);
>
>         try {
>             camelContext.addRoutes(new RouteBuilder() {
>                 public void configure() throws Exception {
>                     from("direct:start1")
>                             .errorHandler(deadLetterChannel("mock:failed1
> "))
>                             .process(changeRequestProcessor)
>                             .to("mock:success1");
>                 }
>             });
>
>             producerTemplate.sendBody("direct:start1", messageInputBody);
>
>             Assert.fail("Should have thrown a RuntimeCamelException");
>         } catch (RuntimeCamelException e) {
>             //assertIsInstanceOf(e, IllegalArgumentException.class);
>             assertIsInstanceOf(e, RuntimeCamelException.class);
>         }
>
>         testMocksAreValid();
>
>         MockEndpoint.assertIsSatisfied(mockFailureEndpoint,
> mockSuccessEndpoint);
>
>     }
> *
>
> I have attached my basetest, and this test in question as well.
>



-- 
---
Thank You…

Mick Knutson
BASE Logic, inc.
(415) 354-4215

Website: http://baselogic.com
Blog: http://baselogic.com/blog
BLiNC Magazine: http://blincmagazine.com
Linked IN: http://linkedin.com/in/mickknutson
DJ Mick: http://djmick.com
MySpace: http://myspace.com/mickknutson
Vacation Rental: http://tahoe.baselogic.com

Re: issue routing Exchange to custom method in Processor

Posted by Mick Knutson <mk...@baselogic.com>.
I am going crazy here (literally).

This is all I know at this point.

If I use this method exacly as I have it (endpoint names), then all my tests
pass as expected. But if I change anything in the endpoint names, even to be
mock:success, verse mock:success1 then several of my tests fail with
messages not getting routed correctly:

    *public void testCreateInvalidChangeRequest(String inputDestinationURI,
                                               String messageInputBody,
                                               String messageOutputBody
    )
            throws Exception {

        MockEndpoint mockFailureEndpoint = getMockEndpoint("mock:failed1");
        MockEndpoint mockSuccessEndpoint = getMockEndpoint("mock:success1");

        mockFailureEndpoint.expectedBodiesReceived(messageInputBody);
        mockFailureEndpoint.expectedMessageCount(1);
        mockSuccessEndpoint.expectedMessageCount(0);

        try {
            camelContext.addRoutes(new RouteBuilder() {
                public void configure() throws Exception {
                    from("direct:start1")
                            .errorHandler(deadLetterChannel("mock:failed1"))
                            .process(changeRequestProcessor)
                            .to("mock:success1");
                }
            });

            producerTemplate.sendBody("direct:start1", messageInputBody);

            Assert.fail("Should have thrown a RuntimeCamelException");
        } catch (RuntimeCamelException e) {
            //assertIsInstanceOf(e, IllegalArgumentException.class);
            assertIsInstanceOf(e, RuntimeCamelException.class);
        }

        testMocksAreValid();

        MockEndpoint.assertIsSatisfied(mockFailureEndpoint,
mockSuccessEndpoint);

    }
*

I have attached my basetest, and this test in question as well.