Author: davsclaus
Date: Fri Jul 6 11:46:05 2012
New Revision: 1358142
URL: http://svn.apache.org/viewvc?rev=1358142&view=rev
Log:
CAMEL-4919: Added expectedHeaderValuesReceivedInAnyOrder to mock endpoint to
make it easier to expect header values in random order.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=1358142&r1=1358141&r2=1358142&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
Fri Jul 6 11:46:05 2012
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -509,6 +510,46 @@ public class MockEndpoint extends Defaul
}
/**
+ * Adds an expectation that the given header values are received by this
+ * endpoint in any order
+ */
+ public void expectedHeaderValuesReceivedInAnyOrder(final String name,
final List<?> values) {
+ expectedMessageCount(values.size());
+
+ expects(new Runnable() {
+ public void run() {
+ // these are the expected values to find
+ final Set<Object> actualHeaderValues = new
CopyOnWriteArraySet<Object>(values);
+
+ for (int i = 0; i < getReceivedExchanges().size(); i++) {
+ Exchange exchange = getReceivedExchange(i);
+
+ Object actualValue = exchange.getIn().getHeader(name);
+ for (Object expectedValue : actualHeaderValues) {
+ actualValue = extractActualValue(exchange,
actualValue, expectedValue);
+ // remove any found values
+ actualHeaderValues.remove(actualValue);
+ }
+ }
+
+ // should be empty, as we should find all the values
+ assertTrue("Expected " + values.size() + " headers with key["
+ name + "], received " + (values.size() - actualHeaderValues.size())
+ + " headers. Expected header values: " +
actualHeaderValues, actualHeaderValues.isEmpty());
+ }
+ });
+ }
+
+ /**
+ * Adds an expectation that the given header values are received by this
+ * endpoint in any order
+ */
+ public void expectedHeaderValuesReceivedInAnyOrder(String name, Object...
values) {
+ List<Object> valueList = new ArrayList<Object>();
+ valueList.addAll(Arrays.asList(values));
+ expectedHeaderValuesReceivedInAnyOrder(name, valueList);
+ }
+
+ /**
* Sets an expectation that the given property name & value are received
by this endpoint
* <p/>
* You can set multiple expectations for different property names.
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java?rev=1358142&r1=1358141&r2=1358142&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
Fri Jul 6 11:46:05 2012
@@ -91,6 +91,29 @@ public class MockEndpointTest extends Co
resultEndpoint.assertIsSatisfied();
}
+ public void testExpectsHeadersInAnyOrder() throws Exception {
+ MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
+ resultEndpoint.expectedHeaderValuesReceivedInAnyOrder("counter", 11,
12, 13, 14, 15);
+
+ sendMessages(15, 12, 14, 13, 11);
+
+ resultEndpoint.assertIsSatisfied();
+ }
+
+ public void testExpectsHeadersInAnyOrderFail() throws Exception {
+ MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
+ resultEndpoint.expectedHeaderValuesReceivedInAnyOrder("counter", 11,
12, 7, 14, 15);
+
+ sendMessages(15, 12, 14, 13, 11);
+
+ try {
+ resultEndpoint.assertIsSatisfied();
+ fail("Should fail");
+ } catch (AssertionError e) {
+ assertEquals("mock://result Expected 5 headers with key[counter],
received 4 headers. Expected header values: [7]", e.getMessage());
+ }
+ }
+
public void testNoDuplicateMessagesPass() throws Exception {
MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
resultEndpoint.expectsNoDuplicates(header("counter"));