camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Howe <tomh...@artcore.com>
Subject Re: Problems testing Camel with Spring config
Date Mon, 28 Mar 2011 16:49:39 GMT
I seem to have got it working by changing activemq to a DirectComponent for
the test..  is this considered good practice?


  <!-- the Camel route is defined in another XML file -->
    <import resource="CamelRoutes.xml"/>

    <bean id="activemq"
class="org.apache.camel.component.direct.DirectComponent" />

    <!-- bean which enables mocking all endpoints -->
    <bean id="mockAllEndpoints"
class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>







On Mon, Mar 28, 2011 at 5:32 PM, Tom Howe <tomhowe@artcore.com> wrote:

> Also - if I change the test xml to
>
>         <route>
>             <from uri="direct:start"/>
>             <to uri="activemq:blah"/>
>         </route>
>
> and the test to :
>
>   public void testAdvisedMockEndpoints() throws Exception {
>         getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello
> World");
>         template.sendBody("direct:start", "Hello World");
>         assertMockEndpointsSatisfied();
>  }
>
> the test hangs.. - and never completes.
>
>
>
>
> On Mon, Mar 28, 2011 at 5:29 PM, Tom Howe <tomhowe@artcore.com> wrote:
>
>> ok, I have copied the test from
>>
>>
>> https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.java
>>
>> and got that working by changing from SpringTestSupport to
>> CamelSpringTestSupport.
>>
>> Then I tried to reduce it down to my example and found that when I remove
>> the route that consumes from direct:foo, the test fails with:
>>
>> org.apache.camel.CamelExchangeException: No consumers available on
>> endpoint: Endpoint[direct://foo]. Exchange[Message: Hello World]
>>
>> Why is this? Do you have to have a consumer for every endpoint you wish to
>> mock?
>>
>>
>>
>>
>>
>>
>> On Mon, Mar 28, 2011 at 5:08 PM, Claus Ibsen <claus.ibsen@gmail.com>wrote:
>>
>>> Use
>>>          template.sendBody("direct:start", "blah");
>>>
>>> Instead of
>>> >         template.sendBody("mock:direct:start", "blah");
>>>
>>>
>>> And mind that the test your picked is using the new auto mock feature
>>> (mock existing endpoints) from Camel 2.7
>>> http://camel.apache.org/mock.html
>>>
>>>
>>>
>>>
>>> On Mon, Mar 28, 2011 at 5:50 PM, Tom Howe <tomhowe@artcore.com> wrote:
>>> > The spring-testing.html doesnt mention CamelSpringTestSupport. Im not
>>> sure
>>> > where to look in camel test suite.
>>> >
>>> > I tried this..
>>> >
>>> > public class SimpleRouteTest extends CamelSpringTestSupport {
>>> >
>>> >     @Override
>>> >     protected AbstractXmlApplicationContext createApplicationContext()
>>> {
>>> >         return new
>>> ClassPathXmlApplicationContext("/CamelRoutesSimple.xml");
>>> >     }
>>> >
>>> >     public String isMockEndpoints() {
>>> >         return "*";
>>> >     }
>>> >
>>> >     @Test
>>> >     public void testSendMessage() throws Exception {
>>> >         getMockEndpoint("mock:direct:end").expectedMessageCount(1);
>>> >         template.sendBody("mock:direct:start", "blah");
>>> >         assertMockEndpointsSatisfied();
>>> >     }
>>> > }
>>> >
>>> > It doesnt work though...
>>> >
>>> > From the log it looks like my route is started but then a fresh camel
>>> > context without route is started for the tests.
>>> >
>>> > 2011-03-28 16:46:22,976 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext  - Apache Camel 2.7.0
>>> > (CamelContext: camel-1) is starting
>>> > 2011-03-28 16:46:22,976 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext  - JMX enabled. Using
>>> > ManagedManagementStrategy.
>>> > 2011-03-28 16:46:23,533 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext  - Route: route1 started and
>>> > consuming from: Endpoint[direct://start]
>>> > 2011-03-28 16:46:23,538 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext  - Total 1 routes, of which
>>> 1 is
>>> > started.
>>> > 2011-03-28 16:46:23,539 [main] INFO
>>> > org.apache.camel.spring.SpringCamelContext  - Apache Camel 2.7.0
>>> > (CamelContext: camel-1) started in 0.562 seconds
>>> > 2011-03-28 16:46:23,542 [main] INFO  agentsmith.routes.SimpleRouteTest
>>> -
>>> >
>>> ********************************************************************************
>>> > 2011-03-28 16:46:23,543 [main] INFO  agentsmith.routes.SimpleRouteTest
>>> -
>>> > Testing: testSendMessage(agentsmith.routes.SimpleRouteTest)
>>> > 2011-03-28 16:46:23,543 [main] INFO  agentsmith.routes.SimpleRouteTest
>>> -
>>> >
>>> ********************************************************************************
>>> > 2011-03-28 16:46:23,547 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy  - Adviced
>>> > endpoint [direct://start] with mock endpoint [mock:direct:start]
>>> > 2011-03-28 16:46:23,557 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy  - Adviced
>>> > endpoint [direct://end] with mock endpoint [mock:direct:end]
>>> > 2011-03-28 16:46:23,558 [main] INFO
>>> > org.apache.camel.impl.InterceptSendToMockEndpointStrategy  - Adviced
>>> > endpoint [spring-event://default] with mock endpoint
>>> > [mock:spring-event:default]
>>> > 2011-03-28 16:46:23,577 [main] INFO
>>> > org.apache.camel.component.mock.MockEndpoint  - Asserting:
>>> > Endpoint[mock://spring-event:default] is satisfied
>>> > 2011-03-28 16:46:23,577 [main] INFO
>>> > org.apache.camel.component.mock.MockEndpoint  - Asserting:
>>> > Endpoint[mock://direct:end] is satisfied
>>> >
>>> > java.lang.AssertionError: mock://direct:end Received message count.
>>> > Expected: <1> but was: <0>
>>> >     at
>>> >
>>> org.apache.camel.component.mock.MockEndpoint.fail(MockEndpoint.java:1086)
>>> > ....
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > On Mon, Mar 28, 2011 at 4:37 PM, Claus Ibsen <claus.ibsen@gmail.com>
>>> wrote:
>>> >>
>>> >> On Mon, Mar 28, 2011 at 5:34 PM, Tom Howe <tomhowe@artcore.com>
>>> wrote:
>>> >> > I've read the testing page but it doesnt give any good eaxmple
of
>>> using
>>> >> > spring xml routes
>>> >> >
>>> >>
>>> >> There is more here
>>> >> http://camel.apache.org/spring-testing.html
>>> >>
>>> >>
>>> >> > Can you point me to an example of CamelSpringTestSupport ? I cant
>>> see
>>> >> > any
>>> >> > docs on it's usage?
>>> >> >
>>> >>
>>> >> Just try to extend this class and it forces you to implement a method
>>> >> where you load the Spring XML file.
>>> >> There are many examples in the source code, eg in camel-spring module.
>>> >> https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/
>>> >>
>>> >>
>>> >> Btw the Camel in Action book chapter 6 covers all about testing.
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> > Thanks, Tom
>>> >> >
>>> >> > On Mon, Mar 28, 2011 at 4:27 PM, Claus Ibsen <claus.ibsen@gmail.com
>>> >
>>> >> > wrote:
>>> >> >
>>> >> >> Hi
>>> >> >>
>>> >> >> Check out this page
>>> >> >> http://camel.apache.org/testing
>>> >> >>
>>> >> >> You can then use any IoC means to inject the mocks, such as
>>> >> >> @EndpointInjected or any of the Spring or the new @Resource
from
>>> JDK6
>>> >> >> etc.
>>> >> >>
>>> >> >> Also you can extend CamelSpringTestSupport which allows you
to load
>>> a
>>> >> >> Spring XML file.
>>> >> >> Thats often what we do to test Camel as CamelXXTestSupport
is easy
>>> to
>>> >> >> get mocks, producer template and whatnot without having to
IoC
>>> them.
>>> >> >>
>>> >> >>
>>> >> >> On Mon, Mar 28, 2011 at 5:11 PM, Tom Howe <tomhowe@artcore.com>
>>> wrote:
>>> >> >> > I have a routes defined in CamelRoutes.xml and I would
like to
>>> test
>>> >> >> > them
>>> >> >> by
>>> >> >> > using the wrapping technique described at the bottom of
>>> >> >> > http://camel.apache.org/mock.html.
>>> >> >> >
>>> >> >> > My CamelRoutes.xml
>>> >> >> >     <route autoStartup="true"  xmlns="
>>> >> >> http://camel.apache.org/schema/spring
>>> >> >> > ">
>>> >> >> >            <from uri="direct:start"/>
>>> >> >> >            <to uri="direct:end"/>
>>> >> >> >        </route>
>>> >> >> >
>>> >> >> > So I created CamelRoutesTest.xml containing:
>>> >> >> >
>>> >> >> >    <import resource="CamelRoutes.xml"/>
>>> >> >> >    <bean id="mockAllEndpoints"
>>> >> >> >
>>> class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"/>
>>> >> >> >
>>> >> >> > but I am not sure how to create a test that both loads
the spring
>>> xml
>>> >> >> > AND
>>> >> >> > provides access to the mock endpoints.
>>> >> >> >
>>> >> >> > If I use..
>>> >> >> >
>>> >> >> > @ContextConfiguration( locations=("/CamelRoutesTest"))
>>> >> >> > public class CamelTest extends AbstractJUnit38SpringContextTests
>>> >> >> >
>>> >> >> > }
>>> >> >> >
>>> >> >> > then I have no idea how to *get* the mock endpoints
>>> >> >> >
>>> >> >> > If I use..
>>> >> >> >
>>> >> >> > public class CamelTest extends CamelTestSupport
>>> >> >> >
>>> >> >> > }
>>> >> >> >
>>> >> >> > then I dont know how to load my camel context..
>>> >> >> >
>>> >> >> >
>>> >> >> > I can't seem to find an example test on the website that
uses
>>> >> >> > CamelTestSupport AND loads routes from spring xml.
>>> >> >> >
>>> >> >> > thanks, Tom
>>> >> >> >
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> --
>>> >> >> Claus Ibsen
>>> >> >> -----------------
>>> >> >> FuseSource
>>> >> >> Email: cibsen@fusesource.com
>>> >> >> Web: http://fusesource.com
>>> >> >> Twitter: davsclaus
>>> >> >> Blog: http://davsclaus.blogspot.com/
>>> >> >> Author of Camel in Action: http://www.manning.com/ibsen/
>>> >> >>
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Claus Ibsen
>>> >> -----------------
>>> >> FuseSource
>>> >> Email: cibsen@fusesource.com
>>> >> Web: http://fusesource.com
>>> >> Twitter: davsclaus
>>> >> Blog: http://davsclaus.blogspot.com/
>>> >> Author of Camel in Action: http://www.manning.com/ibsen/
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> FuseSource
>>> Email: cibsen@fusesource.com
>>> Web: http://fusesource.com
>>> Twitter: davsclaus
>>> Blog: http://davsclaus.blogspot.com/
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>>
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message