Hi Claus

I've successfully tested the fix against 2.19.4-SNAPSHOT. Thanks for the fix.


Just for clarification. I have to implement the isUseAdviceWith() and return 
true only if I use adviceWith within my test methods. Thus Camel Test prevents 
starting the context in the test initialization phase. If I use adviceWith in 
doPostSetup() I don't have to return true in isUseAdviceWith() and let the 
context start by Camel and not by my test method.


Thanks

Oli

________________________________
Von: Claus Ibsen <[email protected]>
Gesendet: Samstag, 28. Oktober 2017 11:09:19
An: [email protected]
Betreff: Re: Sprint Unit test fails when OnCompletion configured

Hi

Yeah I have reproduced the issue and logged a ticket
https://issues.apache.org/jira/browse/CAMEL-11962

On Fri, Oct 27, 2017 at 9:13 PM, Oliver Wulff <[email protected]> wrote:
> I've added the following snippet to my test class but still face the same 
> issue
>
>     @Override
>     public boolean isUseAdviceWith() {
>         return true;
>     }
>
>
> BTW, I extend the class org.apache.camel.test.spring.CamelSpringTestSupport.
>
>
> I've found the documentation in the last section here:
>
> http://camel.apache.org/advicewith.html
>
>
> The mentioned example is slightly different because the Java DSL is used and 
> not Spring DSL so the starting of the route is controlled by 
> CamelSpringTestSupport after the advice with.
>
>
> Any ideas?
>
>
> ________________________________
> Von: Claus Ibsen <[email protected]>
> Gesendet: Freitag, 27. Oktober 2017 17:36:50
> An: [email protected]
> Betreff: Re: Sprint Unit test fails when OnCompletion configured
>
> Make sure to configure your unit test that you are using advice with
>
> There is a alert box about this in the docs
>
> On Fri, Oct 27, 2017 at 5:31 PM, Oliver Wulff <[email protected]> wrote:
>> It's failing with the same error in version 2.18.5, 2.19.3 and 2.20.0 as 
>> well.
>>
>> ________________________________
>> Von: Oliver Wulff
>> Gesendet: Freitag, 27. Oktober 2017 17:27:06
>> An: [email protected]
>> Betreff: AW: Sprint Unit test fails when OnCompletion configured
>>
>>
>> Sorry for missing this important information. It's 2.17.6
>>
>> ________________________________
>> Von: Claus Ibsen <[email protected]>
>> Gesendet: Freitag, 27. Oktober 2017 16:51:27
>> An: [email protected]
>> Betreff: Re: Sprint Unit test fails when OnCompletion configured
>>
>> What version of CAmel do you use
>>
>> On Fri, Oct 27, 2017 at 4:12 PM, Oliver Wulff <[email protected]> wrote:
>>> Hi all
>>>
>>>
>>> I've got a very simple route which reads from a file, does some processing 
>>> and then sends it by mail. I've also created a unit test based on 
>>> CamelSpringTestSupport where I mock the smtp endpoint and update the 
>>> consuming endpoint:
>>>
>>>
>>>          @Override
>>>          protected void doPostSetup() throws Exception {
>>>
>>>
>>>                context.getRouteDefinition(ROUTE_ID).adviceWith(context, new 
>>> AdviceWithRouteBuilder() {
>>>                     @Override
>>>                     public void configure() throws Exception {
>>>                         replaceFromWith("direct:teststart");
>>>                         weaveAddFirst().convertBodyTo(String.class);
>>>                         weaveAddLast().log(LoggingLevel.DEBUG, "End: 
>>> ${body}");
>>>
>>>                     }
>>>                 });
>>>
>>>
>>>     @Override
>>>     public String isMockEndpointsAndSkip() {
>>>         return "smtp*";
>>>     }
>>>
>>>
>>>
>>> This is the route:
>>>
>>>
>>>         <onCompletion>
>>>             <to uri="jms:topic:MON?disableReplyTo=true" />
>>>         </onCompletion>
>>>
>>>         <route id="email-deliver">
>>>             <from uri="file://{{src.folder}}?include=.*.xml" />
>>>             <unmarshal>
>>>                 <jaxb contextPath="com.example.email.jaxb"/>
>>>             </unmarshal>
>>>             <process ref="dummy" />
>>>             <to uri="smtp://{{smtp.hostname}}?contentType=text/html" />
>>>         </route>
>>>
>>>
>>>
>>> When I run the maven project without <onCompletion> it works but if I 
>>> activate <onCompletion> it fails with the following error:
>>>
>>>
>>>
>>> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.577 sec 
>>> <<< FAILURE! - in com.example.email.CamelRouteTest
>>> testSendingMail(com.example.email.CamelRouteTest)  Time elapsed: 4.514 sec  
>>> <<< ERROR!
>>> java.lang.IllegalArgumentException: There are no outputs which matches: * 
>>> in the route: Route(email-deliver)[[From[direct:teststart]] -> 
>>> [onCompletion[[To[jms:topic:MON?disableReplyTo=true]]], 
>>> Unmarshal[org.apache.camel.model.dataformat.JaxbDataFormat@7ea08277], 
>>> process[ref:dummy], To[smtp://{{smtp.hostname}}?contentType=text/html]]]
>>>         at 
>>> org.apache.camel.builder.AdviceWithTasks$3.task(AdviceWithTasks.java:305)
>>>         at 
>>> org.apache.camel.model.RouteDefinition.adviceWith(RouteDefinition.java:281)
>>>         at 
>>> com.example.email.CamelRouteTest.doPostSetup(CamelRouteTest.java:37)
>>>
>>>
>>> Results :
>>>
>>> Tests in error:
>>>   CamelRouteTest>CamelTestSupport.setUp:240->doPostSetup:37 ยป 
>>> IllegalArgument Th...
>>>
>>> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
>>>
>>>
>>>
>>> I've searched in the internet for this error "There are no outputs which 
>>> matches: *" but haven't found anything which explains why I've discovered 
>>> this behaviour.
>>>
>>>
>>> What do I have to change to fix the unit test.
>>>
>>>
>>> Thanks for your feedback
>>>
>>> Oli
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to