Problem resolved using context.stopRoute("direct-idempotent"); .... context.startRoute("direct-idempotent");
I suspect that how the thread is paused/resume when using startCamel() & stopCamelContext() is different from using stop/start route On Fri, May 27, 2016 at 12:25 PM, Charles Moulliard <ch0...@gmail.com> wrote: > Hi, > > I'm facing a strange issue that I don't understand. I can execute this > unit test case when I start the Test within IntelliJ but it will fail with > mvn clean test -Dtest= CamelIdempotentTest > > As you can see, I use the parent method stopCamelContext() and > startCamelContext() to stop and start the CamelContext. The test fails at > the end as the direct consumer is not available when called by the > producerTemplate > > Is there a workaround ? > > org.apache.camel.component.direct.DirectConsumerNotAvailableException: No > consumers available on endpoint: Endpoint[direct://data-insert]. > Exchange[Message: 333,18-05-2016,Claus,Ibsen,incident camel-333,this is a > report incident for camel-333,cib...@gmail.com,+111 10 20 300] > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:47) > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) > at > org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68) > at > org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:375) > at > org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:343) > at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:233) > at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:343) > at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:201) > at > org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:128) > > Code > > public class CamelIdempotentTest extends CamelSpringTestSupport { > > @EndpointInject(uri="direct:data-insert") > ProducerTemplate template; > > @EndpointInject(uri="mock:result") > MockEndpoint mockResult; > > @Test > public void testStopStartCamelRoute() throws Exception { > mockResult.expectedMessageCount(1); > > template.requestBodyAndHeader("111,22-04-2016,Claus,Ibsen,incident > camel-111,this is a report incident for camel-111,cib...@gmail.com,+111 > 10 20 300","CamelRecord",1); > stopCamelContext(); > > Connection conn = null; > try { > Class.forName("org.h2.Driver"); > conn = > DriverManager.getConnection("jdbc:h2:mem:idempotentReport"); > Statement stmt = conn.createStatement(); > ResultSet rs = stmt.executeQuery("select * from > CAMEL_MESSAGEPROCESSED"); > while (rs.next()) { > Assert.assertEquals("1",rs.getString("messageId")); > > Assert.assertEquals("DirectConsumer",rs.getString("processorName")); > } > } catch(Exception e) { > System.out.print("Something happened"); > } finally { > conn.close(); > } > > try { > template.start(); > > template.requestBodyAndHeader("111,22-04-2016,Claus,Ibsen,incident > camel-111,this is a report incident for camel-111,cib...@gmail.com,+111 > 10 20 300","CamelRecord",1); > > } catch(CamelExecutionException e) { > System.out.println("&&&&& The consumer endpoint is not started > so we can't use it"); > } > > startCamelContext(); > context().getRoute("direct-idempotent").getConsumer().start(); > template.requestBodyAndHeader("333,18-05-2016,Claus,Ibsen,incident > camel-333,this is a report incident for camel-333,cib...@gmail.com,+111 > 10 20 300","CamelRecord",1); > > mockResult.assertIsSatisfied(); > } > > Regards, > > -- > Charles Moulliard > Apache Committer & PMC / Architect @RedHat > Twitter : @cmoulliard | Blog : http://cmoulliard.github.io > > -- Charles Moulliard Apache Committer & PMC / Architect @RedHat Twitter : @cmoulliard | Blog : http://cmoulliard.github.io