Polished test to not output stacktrace during testing.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cba6e2e8 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cba6e2e8 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cba6e2e8 Branch: refs/heads/master Commit: cba6e2e8f053caeb7c9d3d0b156348e7359ade18 Parents: ca92f73 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Jul 28 11:34:54 2014 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jul 28 11:34:54 2014 +0200 ---------------------------------------------------------------------- .../mock/MockEndpointTimeClauseTest.java | 36 +++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/cba6e2e8/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTimeClauseTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTimeClauseTest.java b/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTimeClauseTest.java index 706fa7e..edbcfc2 100644 --- a/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTimeClauseTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTimeClauseTest.java @@ -17,11 +17,15 @@ package org.apache.camel.component.mock; import java.util.Date; -import java.util.concurrent.Executor; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; +import org.apache.camel.Service; +import org.apache.camel.StatefulService; import org.apache.camel.builder.RouteBuilder; /** @@ -71,7 +75,7 @@ public class MockEndpointTimeClauseTest extends ContextTestSupport { template.sendBody("direct:a", "A"); - Executor executor = Executors.newSingleThreadExecutor(); + ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { public void run() { try { @@ -79,7 +83,9 @@ public class MockEndpointTimeClauseTest extends ContextTestSupport { } catch (Exception e) { // ignore } - template.sendBody("direct:a", "B"); + if (isStarted(template)) { + template.sendBody("direct:a", "B"); + } } }); @@ -89,6 +95,8 @@ public class MockEndpointTimeClauseTest extends ContextTestSupport { } catch (AssertionError e) { assertEquals("mock://result Received message count. Expected: <1> but was: <2>", e.getMessage()); } + + executor.shutdownNow(); } public void testNoAssertPeriodSecondMessageArrives() throws Exception { @@ -97,22 +105,33 @@ public class MockEndpointTimeClauseTest extends ContextTestSupport { template.sendBody("direct:a", "A"); + final CountDownLatch latch = new CountDownLatch(1); + // this executor was bound to send a 2nd message - Executor executor = Executors.newSingleThreadExecutor(); + ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { public void run() { try { Thread.sleep(2000); + + if (isStarted(template)) { + template.sendBody("direct:a", "B"); + } } catch (Exception e) { // ignore + } finally { + latch.countDown(); } - template.sendBody("direct:a", "B"); } }); // but the assertion would be complete before hand and thus // the assertion was valid at the time given assertMockEndpointsSatisfied(); + + assertTrue(latch.await(10, TimeUnit.SECONDS)); + + executor.shutdownNow(); } public void testArrivesBeforeNext() throws Exception { @@ -203,4 +222,11 @@ public class MockEndpointTimeClauseTest extends ContextTestSupport { }; } + private boolean isStarted(Service service) { + if (service instanceof StatefulService) { + return ((StatefulService) service).isStarted(); + } + return true; + } + }