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 2010/12/18 19:46:46 UTC

svn commit: r1050691 - /camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java

Author: davsclaus
Date: Sat Dec 18 18:46:46 2010
New Revision: 1050691

URL: http://svn.apache.org/viewvc?rev=1050691&view=rev
Log:
Added test based on user forum issue

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java
      - copied, changed from r1050690, camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java (from r1050690, camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java&r1=1050690&r2=1050691&rev=1050691&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest.java Sat Dec 18 18:46:46 2010
@@ -17,10 +17,14 @@
 package org.apache.camel.issues;
 
 import java.net.ConnectException;
+import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.Predicate;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.PredicateBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteDefinition;
 
@@ -29,33 +33,43 @@ import org.apache.camel.model.RouteDefin
  *
  * @version $Revision$
  */
-public class RouteScopedOnExceptionWithInterceptSendToEndpointIssueTest extends ContextTestSupport {
+public class RouteScopedOnExceptionWithInterceptSendToEndpointIssueWithPredicateTest extends ContextTestSupport {
+
+    private final AtomicInteger invoked = new AtomicInteger();
 
     public void testIssue() throws Exception {
+        final Predicate fail = PredicateBuilder.or(
+            header(Exchange.REDELIVERY_COUNTER).isNull(),
+            header(Exchange.REDELIVERY_COUNTER).isLessThan(5));
+
         RouteDefinition route = context.getRouteDefinitions().get(0);
         route.adviceWith(context, new RouteBuilder() {
             @Override
             public void configure() throws Exception {
                 interceptSendToEndpoint("seda:*")
                     .skipSendToOriginalEndpoint()
-                    .throwException(new ConnectException("Forced"));
+                    .process(new Processor() {
+                        public void process(Exchange exchange) throws Exception {
+                            invoked.incrementAndGet();
+
+                            if (fail.matches(exchange)) {
+                                throw new ConnectException("Forced");
+                            }
+                        }
+                    }).to("mock:ok");
             }
         });
 
         getMockEndpoint("mock:global").expectedMessageCount(0);
-        getMockEndpoint("mock:seda").expectedMessageCount(0);
-        // we fail all redeliveries so after that we send to mock:exhausted
-        getMockEndpoint("mock:exhausted").expectedMessageCount(1);
-
-        try {
-            template.sendBody("direct:start", "Hello World");
-            fail("Should thrown an exception");
-        } catch (CamelExecutionException e) {
-            ConnectException cause = assertIsInstanceOf(ConnectException.class, e.getCause());
-            assertEquals("Forced", cause.getMessage());
-        }
+        getMockEndpoint("mock:ok").expectedMessageCount(1);
+        getMockEndpoint("mock:exhausted").expectedMessageCount(0);
+
+        template.sendBody("direct:start", "Hello World");
 
         assertMockEndpointsSatisfied();
+
+        // 5 retry + 1 ok
+        assertEquals(6, invoked.get());
     }
 
     @Override
@@ -64,17 +78,17 @@ public class RouteScopedOnExceptionWithI
             @Override
             public void configure() throws Exception {
                 errorHandler(deadLetterChannel("mock:global")
-                    .maximumRedeliveries(2)
-                    .redeliveryDelay(5000));
+                        .maximumRedeliveries(2)
+                        .redeliveryDelay(5000));
 
                 from("direct:start")
-                    // no redelivery delay for faster unit tests
-                    .onException(ConnectException.class).maximumRedeliveries(5).redeliveryDelay(0)
-                        .logRetryAttempted(true).retryAttemptedLogLevel(LoggingLevel.WARN)
-                        // send to mock when we are exhausted
-                        .to("mock:exhausted")
-                    .end()
-                    .to("seda:foo");
+                        // no redelivery delay for faster unit tests
+                        .onException(ConnectException.class).maximumRedeliveries(5).redeliveryDelay(0)
+                            .logRetryAttempted(true).retryAttemptedLogLevel(LoggingLevel.WARN)
+                            // send to mock when we are exhausted
+                            .to("mock:exhausted")
+                        .end()
+                        .to("seda:foo");
             }
         };
     }