CAMEL-9981: camel-test-spring may register listener twice.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0bad5b28 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0bad5b28 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0bad5b28 Branch: refs/heads/camel-2.17.x Commit: 0bad5b2855eaf514e7c42c65ba4979832e91dd59 Parents: 7a57b1d Author: Claus Ibsen <[email protected]> Authored: Mon May 23 08:53:28 2016 +0200 Committer: Claus Ibsen <[email protected]> Committed: Mon May 23 08:53:28 2016 +0200 ---------------------------------------------------------------------- .../CamelSpringBootJUnit4ClassRunner.java | 37 +++++++++----------- .../spring/CamelSpringJUnit4ClassRunner.java | 35 +++++++++--------- 2 files changed, 33 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/0bad5b28/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java index 0820d56..4dda8fc 100644 --- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java +++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java @@ -19,7 +19,6 @@ package org.apache.camel.test.spring; import java.util.List; import org.junit.runners.model.InitializationError; -import org.springframework.core.OrderComparator; import org.springframework.test.context.TestContextManager; import org.springframework.test.context.TestExecutionListener; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -59,30 +58,28 @@ public class CamelSpringBootJUnit4ClassRunner extends SpringJUnit4ClassRunner { // turn off auto starting spring as we need to do this later System.setProperty("skipStartingCamelContext", "true"); - // inject Camel first, and then disable jmx and add the stop-watch - // (ensure to get the current list as we need to re-order that list so Camel comes first) - List<TestExecutionListener> list = getTestExecutionListeners(); - addIfMissingType(list, new CamelSpringTestContextLoaderTestExecutionListener()); - addIfMissingType(list, new DisableJmxTestExecutionListener()); - addIfMissingType(list, new CamelSpringBootExecutionListener()); - addIfMissingType(list, new StopWatchTestExecutionListener()); - OrderComparator.sort(list); - registerTestExecutionListeners(list); + // is Camel already registered + if (!alreadyRegistered()) { + // inject Camel first, and then disable jmx and add the stop-watch + List<TestExecutionListener> list = getTestExecutionListeners(); + list.add(0, new CamelSpringTestContextLoaderTestExecutionListener()); + list.add(1, new DisableJmxTestExecutionListener()); + list.add(2, new CamelSpringBootExecutionListener()); + list.add(3, new StopWatchTestExecutionListener()); + } } - private void addIfMissingType(List<TestExecutionListener> list, TestExecutionListener listener) { - String type = listener.getClass().getName(); - boolean found = false; - for (TestExecutionListener current : list) { - if (type.equals(current.getClass().getName())) { - found = true; - break; + private boolean alreadyRegistered() { + List<TestExecutionListener> list = getTestExecutionListeners(); + if (list != null) { + for (TestExecutionListener listener : list) { + if (listener instanceof CamelSpringTestContextLoaderTestExecutionListener) { + return true; + } } } - if (!found) { - list.add(listener); - } + return false; } } http://git-wip-us.apache.org/repos/asf/camel/blob/0bad5b28/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java index 25bc36b..0619a7d 100644 --- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java +++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java @@ -19,7 +19,6 @@ package org.apache.camel.test.spring; import java.util.List; import org.junit.runners.model.InitializationError; -import org.springframework.core.OrderComparator; import org.springframework.test.context.TestContextManager; import org.springframework.test.context.TestExecutionListener; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -56,29 +55,27 @@ public class CamelSpringJUnit4ClassRunner extends SpringJUnit4ClassRunner { public CamelTestContextManager(Class<?> testClass) { super(testClass); - // inject Camel first, and then disable jmx and add the stop-watch - // (ensure to get the current list as we need to re-order that list so Camel comes first) - List<TestExecutionListener> list = getTestExecutionListeners(); - addIfMissingType(list, new CamelSpringTestContextLoaderTestExecutionListener()); - addIfMissingType(list, new DisableJmxTestExecutionListener()); - addIfMissingType(list, new StopWatchTestExecutionListener()); - OrderComparator.sort(list); - registerTestExecutionListeners(list); + // is Camel already registered + if (!alreadyRegistered()) { + // inject Camel first, and then disable jmx and add the stop-watch + List<TestExecutionListener> list = getTestExecutionListeners(); + list.add(0, new CamelSpringTestContextLoaderTestExecutionListener()); + list.add(1, new DisableJmxTestExecutionListener()); + list.add(2, new StopWatchTestExecutionListener()); + } } - private void addIfMissingType(List<TestExecutionListener> list, TestExecutionListener listener) { - String type = listener.getClass().getName(); - boolean found = false; - for (TestExecutionListener current : list) { - if (type.equals(current.getClass().getName())) { - found = true; - break; + private boolean alreadyRegistered() { + List<TestExecutionListener> list = getTestExecutionListeners(); + if (list != null) { + for (TestExecutionListener listener : list) { + if (listener instanceof CamelSpringTestContextLoaderTestExecutionListener) { + return true; + } } } - if (!found) { - list.add(listener); - } + return false; } }
