You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/02/11 13:32:32 UTC
svn commit: r1069776 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/component/mock/
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/util/
components/camel-hawtdb/src/test/java/org/apache/camel/com...
Author: davsclaus
Date: Fri Feb 11 12:32:31 2011
New Revision: 1069776
URL: http://svn.apache.org/viewvc?rev=1069776&view=rev
Log:
CAMEL-3657: Fixed subtle test. Using volatile in mock endpoint for state, to ensure visibilty of state changes between threads.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/PredicateAssertHelper.java
camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverDeadLetterChannelFailedTest.java
camel/trunk/components/camel-hawtdb/src/test/resources/log4j.properties
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=1069776&r1=1069775&r2=1069776&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 Feb 11 12:32:31 2011
@@ -73,28 +73,30 @@ import org.slf4j.LoggerFactory;
*/
public class MockEndpoint extends DefaultEndpoint implements BrowsableEndpoint {
private static final transient Logger LOG = LoggerFactory.getLogger(MockEndpoint.class);
- private int expectedCount;
- private int counter;
- private Processor defaultProcessor;
- private Map<Integer, Processor> processors;
- private List<Exchange> receivedExchanges;
- private List<Throwable> failures;
- private List<Runnable> tests;
- private CountDownLatch latch;
- private long sleepForEmptyTest;
- private long resultWaitTime;
- private long resultMinimumWaitTime;
- private long assertPeriod;
- private int expectedMinimumCount;
- private List<Object> expectedBodyValues;
- private List<Object> actualBodyValues;
- private String headerName;
- private Object headerValue;
- private Object actualHeader;
- private String propertyName;
- private Object propertyValue;
- private Object actualProperty;
- private Processor reporter;
+ // must be volatile so changes is visible between the thread which performs the assertions
+ // and the threads which process the exchanges when routing messages in Camel
+ private volatile int expectedCount;
+ private volatile int counter;
+ private volatile Processor defaultProcessor;
+ private volatile Map<Integer, Processor> processors;
+ private volatile List<Exchange> receivedExchanges;
+ private volatile List<Throwable> failures;
+ private volatile List<Runnable> tests;
+ private volatile CountDownLatch latch;
+ private volatile long sleepForEmptyTest;
+ private volatile long resultWaitTime;
+ private volatile long resultMinimumWaitTime;
+ private volatile long assertPeriod;
+ private volatile int expectedMinimumCount;
+ private volatile List<Object> expectedBodyValues;
+ private volatile List<Object> actualBodyValues;
+ private volatile String headerName;
+ private volatile Object headerValue;
+ private volatile Object actualHeader;
+ private volatile String propertyName;
+ private volatile Object propertyValue;
+ private volatile Object actualProperty;
+ private volatile Processor reporter;
public MockEndpoint(String endpointUri, Component component) {
super(endpointUri, component);
@@ -1004,10 +1006,15 @@ public class MockEndpoint extends Defaul
}
}
- ++counter;
+ // let counter be 0 index-based in the logs
if (LOG.isDebugEnabled()) {
- LOG.debug(getEndpointUri() + " >>>> " + counter + " : " + exchange + " with body: " + actualBody);
+ String msg = getEndpointUri() + " >>>> " + counter + " : " + exchange + " with body: " + actualBody;
+ if (exchange.getIn().hasHeaders()) {
+ msg += " and headers:" + exchange.getIn().getHeaders();
+ }
+ LOG.debug(msg);
}
+ ++counter;
// record timestamp when exchange was received
exchange.setProperty(Exchange.RECEIVED_TIMESTAMP, new Date());
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=1069776&r1=1069775&r2=1069776&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java Fri Feb 11 12:32:31 2011
@@ -62,7 +62,11 @@ public class DefaultMessage extends Mess
}
public Object getHeader(String name) {
- return getHeaders().get(name);
+ if (hasHeaders()) {
+ return getHeaders().get(name);
+ } else {
+ return null;
+ }
}
public Object getHeader(String name, Object defaultValue) {
@@ -151,15 +155,6 @@ public class DefaultMessage extends Mess
return matches;
}
- private boolean isExcludePatternMatch(String key, String... excludePatterns) {
- for (String pattern : excludePatterns) {
- if (EndpointHelper.matchPattern(key, pattern)) {
- return true;
- }
- }
- return false;
- }
-
public Map<String, Object> getHeaders() {
if (headers == null) {
headers = createHeaders();
@@ -287,4 +282,14 @@ public class DefaultMessage extends Mess
public String createExchangeId() {
return null;
}
+
+ private static boolean isExcludePatternMatch(String key, String... excludePatterns) {
+ for (String pattern : excludePatterns) {
+ if (EndpointHelper.matchPattern(key, pattern)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/PredicateAssertHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/PredicateAssertHelper.java?rev=1069776&r1=1069775&r2=1069776&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/PredicateAssertHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/PredicateAssertHelper.java Fri Feb 11 12:32:31 2011
@@ -32,6 +32,9 @@ public final class PredicateAssertHelper
}
public static void assertMatches(Predicate predicate, String text, Exchange exchange) {
+ ObjectHelper.notNull(predicate, "predicate");
+ ObjectHelper.notNull(exchange, "exchange");
+
if (predicate instanceof BinaryPredicate) {
// special for binary evaluable as we can get more detailed information
BinaryPredicate eval = (BinaryPredicate) predicate;
Modified: camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverDeadLetterChannelFailedTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverDeadLetterChannelFailedTest.java?rev=1069776&r1=1069775&r2=1069776&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverDeadLetterChannelFailedTest.java (original)
+++ camel/trunk/components/camel-hawtdb/src/test/java/org/apache/camel/component/hawtdb/HawtDBAggregateRecoverDeadLetterChannelFailedTest.java Fri Feb 11 12:32:31 2011
@@ -51,6 +51,11 @@ public class HawtDBAggregateRecoverDeadL
getMockEndpoint("mock:aggregated").expectedMessageCount(3);
// it should keep sending to DLC if it failed, so test for min 2 attempts
getMockEndpoint("mock:dead").expectedMinimumMessageCount(2);
+ // all the details should be the same about redelivered and redelivered 2 times
+ getMockEndpoint("mock:dead").message(0).header(Exchange.REDELIVERED).isEqualTo(Boolean.TRUE);
+ getMockEndpoint("mock:dead").message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(2);
+ getMockEndpoint("mock:dead").message(1).header(Exchange.REDELIVERY_COUNTER).isEqualTo(2);
+ getMockEndpoint("mock:dead").message(1).header(Exchange.REDELIVERED).isEqualTo(Boolean.TRUE);
template.sendBodyAndHeader("direct:start", "A", "id", 123);
template.sendBodyAndHeader("direct:start", "B", "id", 123);
Modified: camel/trunk/components/camel-hawtdb/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-hawtdb/src/test/resources/log4j.properties?rev=1069776&r1=1069775&r2=1069776&view=diff
==============================================================================
--- camel/trunk/components/camel-hawtdb/src/test/resources/log4j.properties (original)
+++ camel/trunk/components/camel-hawtdb/src/test/resources/log4j.properties Fri Feb 11 12:32:31 2011
@@ -23,6 +23,7 @@ log4j.rootLogger=INFO, file
# uncomment the following to enable camel debugging
#log4j.logger.org.apache.camel=DEBUG
#log4j.logger.org.apache.camel.component.hawtdb=DEBUG
+#log4j.logger.org.apache.camel.component.mock=DEBUG
#log4j.logger.org.apache.camel.component.hawtdb.HawtDBFile=TRACE
# CONSOLE appender not used by default