Is it possible to get NotifyBuilder to wait on message arrival at various out/edge jms endpoints within a test? Surely this is what you want to do most of the time?, ie check your end conditions.
In all the NotifyBuilder examples I've seen the notify conditions are either very general or on components that are at the start or mid route. In the test shown (at the end of this email) the properties {{url.radial-trades}} & {{url.dead-letter}} are expanded to vm/activemq queues. The NotifyBuilder's condition never fires and always times out. Now I can get this working by adding a very general condition and a sleep: NotifyBuilder notify = new NotifyBuilder(context).whenDone(5).create(); boolean matches = notify.create().matches(10, TimeUnit.SECONDS); Thread.sleep(1000); // Now assert on browsable queues But having that sleep makes the test nondeterministic in my opinion - what happens if a full GC during test makes it run slower etc. I really dont like the sleep! I've tried all of whenDone, whenReceived, whenComplete etc but condition never fires when expression is on an out endpoint url. As an aside I noticed that property expansion does not fail/exception with NotifyBuilder when it is given rubbish, eg: NotifyBuilder notify = new NotifyBuilder(context) .from("{{this-does-not-exist}}").whenDone(1).create(); Code of failing test due to timeout: ------------------------------------------ /** * Test for {@link RadialRouteBuilder} */ public class RadialRouteBuilderTestCase extends CamelTestSupport { private JndiRegistry registry; @Test public void testCompleteRoute() throws Exception { // Test has completed when all expected trades have hit external endpoints NotifyBuilder notify = new NotifyBuilder(context) .from("{{url.radial-trades}}").whenDone(4) .from("{{url.dead-letter}}").whenDone(1).create(); // Fail on timeout after 10 seconds boolean matches = notify.create().matches(10, TimeUnit.SECONDS); assertTrue("Expected four trade messages to be produced and one dead letter message", matches); // Never get here BrowsableEndpoint radialTradesEP = context.getEndpoint("{{url.radial-trades}}", BrowsableEndpoint.class); assertEquals("Radial Trade Messages", 4, radialTradesEP.getExchanges().size()); BrowsableEndpoint deadLetterEP = context.getEndpoint("{{url.dead-letter}}", BrowsableEndpoint.class); assertEquals("Dead Letter Messages", 1, deadLetterEP.getExchanges().size()); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RadialRouteBuilder() { @Override public void configure() { super.configure(); //Play trades into route's jms queues via an embedded jms broker from("file:src/test/data/radial-route-builder-test-case?noop=true&include=bond_msg.*") .to("{{url.tradebus-bond-trades}}"); from("file:src/test/data/radial-route-builder-test-case?noop=true&include=future_msg.*") .to("{{url.tradebus-future-trades}}"); } }; } @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); //Configure active mq to use embedded broker context.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false")); // Load test specific properties PropertiesComponent properties = context.getComponent("properties",PropertiesComponent.class); properties.setLocations(new String[]{ "file:config/config-dev.properties", "file:src/test/config/config-test.properties"}); // Setup spring beans RadialBondTradeEventProcessor bondTEP = new RadialBondTradeEventProcessor(); bondTEP.setTradeCache(new BasicTradeCache<BondTrade>()); registry.bind("bondTradeEventProcessor", bondTEP); RadialFutureTradeEventProcessor futureTEP = new RadialFutureTradeEventProcessor(); futureTEP.setTradeCache(new BasicTradeCache<FutureTrade>()); registry.bind("futureTradeEventProcessor", futureTEP); return context; } @Override protected JndiRegistry createRegistry() throws Exception { // Store registry so can register spring beans later registry = super.createRegistry(); return registry; //To change body of overridden methods use File | Settings | File Templates. } } -- View this message in context: http://camel.465427.n5.nabble.com/NotifyBuilder-condition-fails-to-match-on-an-out-activemq-endpoint-tp4689038p4689038.html Sent from the Camel - Users mailing list archive at Nabble.com.