Author: davsclaus
Date: Tue Apr 21 09:09:35 2009
New Revision: 767079

URL: http://svn.apache.org/viewvc?rev=767079&view=rev
Log:
Unit test for helping with internal API rework for better redelivery with timer.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java
   (contents, props changed)
      - copied, changed from r767070, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayNotBlockingTest.java
Removed:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayNotBlockingTest.java

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java
 (from r767070, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayNotBlockingTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayNotBlockingTest.java&r1=767070&r2=767079&rev=767079&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayNotBlockingTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java
 Tue Apr 21 09:09:35 2009
@@ -16,32 +16,56 @@
  */
 package org.apache.camel.processor;
 
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Processor;
 import org.apache.camel.Exchange;
-import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 
 /**
- * Unit test to verify that using DLC with redelivery and delays that we are 
not blocking
- * the caller thread, for instance if we have delays in miniutes.
+ * Unit test to verify that using DLC with redelivery and delays with blocking 
threads.
+ * As threads comes cheap these days in the modern JVM its no biggie. And for 
transactions
+ * you should use the same thread anyway.
  *
  * @version $Revision$
  */
-public class DeadLetterChannelRedeliverWithDelayNotBlockingTest extends 
ContextTestSupport {
+public class DeadLetterChannelRedeliverWithDelayBlockingTest extends 
ContextTestSupport {
 
     private static int counter;
 
     public void testRedeliverWithDelay() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        // TODO: when we get the internal API reworked we should be able to 
receive in this order
-        // mock.expectedBodiesReceived("Message 2", "Message 1");
 
-        mock.expectedBodiesReceived("Message 1", "Message 2");
+        // we expect message 2 to arrive before 1 as message 1 is in trouble
+        // and must be redelivered 2 times before succeed
+        mock.expectedBodiesReceived("Message 2", "Message 1");
         mock.expectedHeaderReceived("foo", "bar");
+        // the first is not redelivered
+        mock.message(0).header(Exchange.REDELIVERED).isNull();
+        // but the 2nd is
+        mock.message(1).header(Exchange.REDELIVERED).isEqualTo(true);
+
+        // use executors to simulate two different clients sending
+        // a request to Camel
+        Callable task1 = Executors.callable(new Runnable() {
+            public void run() {
+                template.sendBody("direct:start", "Message 1");
+            }
+        });
+
+        Callable task2 = Executors.callable(new Runnable() {
+            public void run() {
+                template.sendBody("direct:start", "Message 2");
+            }
+        });
 
-        template.sendBody("seda:start", "Message 1");
-        template.sendBody("seda:start", "Message 2");
+        Executors.newCachedThreadPool().submit(task1);
+        // give task 1 a head start, even though it comes last
+        Thread.sleep(100);
+        Executors.newCachedThreadPool().submit(task2);
 
         assertMockEndpointsSatisfied();
     }
@@ -53,7 +77,7 @@
             public void configure() throws Exception {
                 
errorHandler(deadLetterChannel("mock:dead").delay(1000).maximumRedeliveries(3).logStackTrace(false));
 
-                from("seda:start")
+                from("direct:start")
                         .process(new Processor() {
                             public void process(Exchange exchange) throws 
Exception {
                                 String body = 
exchange.getIn().getBody(String.class);

Propchange: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliverWithDelayBlockingTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to