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 2009/06/12 11:00:33 UTC

svn commit: r784038 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/management/ camel-core/src/main/java/org/apache/camel/model/ camel-core/src/test/java/org/apache/camel/processor/ camel-core/src/test/java/org/apache/camel/processor/inter...

Author: davsclaus
Date: Fri Jun 12 09:00:33 2009
New Revision: 784038

URL: http://svn.apache.org/viewvc?rev=784038&view=rev
Log:
CAMEL-1697: Added more unit tests regarding using .end(). Simplyfied using .end() with doTry as we just need 1 end to end the block.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWithEndTest.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithEndTest.java   (with props)
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java
      - copied, changed from r783688, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java
      - copied, changed from r783977, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml
      - copied, changed from r783977, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationLifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryProcessorTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromWhenWithChoiceTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationLifecycleStrategy.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationLifecycleStrategy.java Fri Jun 12 09:00:33 2009
@@ -272,6 +272,10 @@
 
                 return wrapper;
             }
+
+            public String toString() {
+                return "Instrument";
+            }
         });
 
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java Fri Jun 12 09:00:33 2009
@@ -33,8 +33,6 @@
 import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.CollectionStringBuffer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 
 /**
  * Represents an XML <choice/> element
@@ -44,8 +42,7 @@
 @XmlRootElement(name = "choice")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> {
-    private static final transient Log LOG = LogFactory.getLog(ChoiceDefinition.class);
-    
+
     @XmlElementRef
     private List<WhenDefinition> whenClauses = new ArrayList<WhenDefinition>();
     @XmlElement(required = false)
@@ -74,8 +71,6 @@
         Processor otherwiseProcessor = null;
         if (otherwise != null) {
             otherwiseProcessor = otherwise.createProcessor(routeContext);
-        } else {
-            LOG.warn("No otherwise clause was specified for this choice block: " + this + ", any unmatched exchanges will be dropped.");
         }
         return new ChoiceProcessor(filters, otherwiseProcessor);
     }
@@ -157,4 +152,5 @@
     public void setOtherwise(OtherwiseDefinition otherwise) {
         this.otherwise = otherwise;
     }
+
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java Fri Jun 12 09:00:33 2009
@@ -714,9 +714,16 @@
      */
     @SuppressWarnings("unchecked")
     public ProcessorDefinition<? extends ProcessorDefinition> end() {
+        // when using doTry .. doCatch .. doFinally we should always
+        // end the try definition to avoid having to use 2 x end() in the route
+        // this is counter intuitive for end users
+        if (this instanceof TryDefinition) {
+            popBlock();
+        }
+
         if (blocks.isEmpty()) {
             if (parent == null) {
-                throw new IllegalArgumentException("Root node with no active block");
+                return this; 
             }
             return parent;
         }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java Fri Jun 12 09:00:33 2009
@@ -102,6 +102,19 @@
     }
 
     /**
+     * The finally block for a given handle
+     *
+     * @return  the try builder
+     */
+    public TryDefinition doFinally() {
+        popBlock();
+        FinallyDefinition answer = new FinallyDefinition();
+        addOutput(answer);
+        pushBlock(answer);
+        return this;
+    }
+
+    /**
      * Sets an additional predicate that should be true before the onCatch is triggered.
      * <p/>
      * To be used for fine grained controlling whether a thrown exception should be intercepted
@@ -186,25 +199,6 @@
         return handled(toPredicate(handled));
     }
 
-    /**
-     * The finally block for a given handle
-     *
-     * @return  the try builder
-     */
-    public TryDefinition doFinally() {
-        popBlock();
-        FinallyDefinition answer = new FinallyDefinition();
-        addOutput(answer);
-        pushBlock(answer);
-        return this;
-    }
-
-    @Override
-    public ProcessorDefinition<? extends ProcessorDefinition> end() {
-        popBlock();
-        return super.end();
-    }
-
     // Properties
     // -------------------------------------------------------------------------
 

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWithEndTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWithEndTest.java?rev=784038&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWithEndTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ChoiceWithEndTest.java Fri Jun 12 09:00:33 2009
@@ -0,0 +1,126 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import java.util.List;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Navigate;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class ChoiceWithEndTest extends ContextTestSupport {
+
+    public void testRouteIsCorrectAtRuntime() throws Exception {
+        // use navigate to find that the end works as expected
+        Navigate<Processor> nav = context.getRoutes().get(0).navigate();
+        List<Processor> node = nav.next();
+        node = ((Navigate) node.get(0)).next();
+
+        // there should be 4 outputs as the end in the otherwise should
+        // ensure that the transform and last send is not within the choice
+        assertEquals(4, node.size());
+        // the navigate API is a bit simple at this time of writing so it does take a little
+        // bit of ugly code to find the correct processor in the runtime route
+        assertIsInstanceOf(SendProcessor.class, unwrapChannel(node.get(0)).getNextProcessor());
+        assertIsInstanceOf(ChoiceProcessor.class, unwrapChannel(node.get(1)).getNextProcessor());
+        assertIsInstanceOf(TransformProcessor.class, unwrapChannel(node.get(2)).getNextProcessor());
+        assertIsInstanceOf(SendProcessor.class, unwrapChannel(node.get(3)).getNextProcessor());
+    }
+
+    public void testChoiceHello() throws Exception {
+        getMockEndpoint("mock:start").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:echo").expectedBodiesReceived("echo Hello World");
+        getMockEndpoint("mock:last").expectedBodiesReceived("last echo Hello World");
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testChoiceBye() throws Exception {
+        getMockEndpoint("mock:start").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:bye").expectedBodiesReceived("We do not care");
+        getMockEndpoint("mock:last").expectedBodiesReceived("last We do not care");
+
+        template.sendBody("direct:start", "Bye World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testChoiceOther() throws Exception {
+        getMockEndpoint("mock:start").expectedBodiesReceived("Camel");
+        getMockEndpoint("mock:other").expectedBodiesReceived("other Camel");
+        getMockEndpoint("mock:last").expectedBodiesReceived("last other Camel");
+
+        template.sendBody("direct:start", "Camel");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                MyChoiceBean bean = new MyChoiceBean();
+
+                from("direct:start")
+                    .to("mock:start")
+                    .choice()
+                        .when(body().contains("Hello"))
+                            .bean(bean, "echo").to("mock:echo")
+                        .when(body().contains("Bye"))
+                            // must use another route as the Java DSL
+                            // will lose its scope so you cannot call otherwise later
+                            .to("direct:bye").to("mock:bye")
+                        .otherwise()
+                            .bean(bean, "other").to("mock:other")
+                        .end()
+                    .transform(body().prepend("last "))
+                    .to("mock:last");
+
+                from("direct:bye")
+                    .doTry()
+                        .bean(bean, "bye").to("mock:bye")
+                    .doCatch(Exception.class)
+                        .setBody(constant("We do not care"))
+                    .end();
+            }
+        };
+    }
+
+    public class MyChoiceBean {
+
+        public String echo(String s) {
+            return "echo " + s;
+        }
+
+        public String bye(String s) throws Exception {
+            throw new IllegalArgumentException("Damn does not work");
+        }
+
+        public String other(String s) {
+            return "other " + s;
+        }
+    }
+
+}
+

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

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

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java Fri Jun 12 09:00:33 2009
@@ -64,16 +64,15 @@
                 from("direct:split")
                     .split(body(List.class), new MyAggregationStrategy())
                         .filter(goodWord)
-                        .to("mock:filtered");
+                            .to("mock:filtered");
             }
         };
     }
 
-    private class MyAggregationStrategy implements AggregationStrategy {
+    protected class MyAggregationStrategy implements AggregationStrategy {
 
         public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
             String newBody = newExchange.getIn().getBody(String.class);
-            assertTrue("Should have been filtered: " + newBody, newBody.contains("World"));
 
             if (oldExchange == null) {
                 return newExchange;

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithEndTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithEndTest.java?rev=784038&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithEndTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithEndTest.java Fri Jun 12 09:00:33 2009
@@ -0,0 +1,97 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import java.util.List;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Navigate;
+import org.apache.camel.Processor;
+import org.apache.camel.Exchange;
+import org.apache.camel.processor.aggregate.AggregationStrategy;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class SplitWithEndTest extends ContextTestSupport {
+
+    public void testRouteIsCorrectAtRuntime() throws Exception {
+        // use navigate to find that the end works as expected
+        Navigate<Processor> nav = context.getRoutes().get(0).navigate();
+        List<Processor> node = nav.next();
+        node = ((Navigate) node.get(0)).next();
+
+        // there should be 4 outputs as the end in the otherwise should
+        // ensure that the transform and last send is not within the choice
+        assertEquals(4, node.size());
+        // the navigate API is a bit simple at this time of writing so it does take a little
+        // bit of ugly code to find the correct processor in the runtime route
+        assertIsInstanceOf(SendProcessor.class, unwrapChannel(node.get(0)).getNextProcessor());
+        assertIsInstanceOf(Splitter.class, unwrapChannel(node.get(1)).getNextProcessor());
+        assertIsInstanceOf(TransformProcessor.class, unwrapChannel(node.get(2)).getNextProcessor());
+        assertIsInstanceOf(SendProcessor.class, unwrapChannel(node.get(3)).getNextProcessor());
+    }
+
+    public void testSplit() throws Exception {
+        getMockEndpoint("mock:start").expectedBodiesReceived("Hello,World");
+        getMockEndpoint("mock:last").expectedBodiesReceived("last hi Hello@hi World");
+
+        template.sendBody("direct:start", "Hello,World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                MySplitBean bean = new MySplitBean();
+
+                from("direct:start")
+                    .to("mock:start")
+                    .split(body().tokenize(","),
+                            new AggregationStrategy() {
+                                public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
+                                    if (oldExchange == null) {
+                                        return newExchange;
+                                    }
+                                    String body = oldExchange.getIn().getBody(String.class);
+                                    String newBody = newExchange.getIn().getBody(String.class);
+                                    newExchange.getIn().setBody(body + "@" + newBody);
+                                    return newExchange;
+                                }
+                            })
+                        .bean(bean, "hi").to("mock:split")
+                    .end()
+                    .transform(body().prepend("last "))
+                    .to("mock:last");
+            }
+        };
+    }
+
+    public class MySplitBean {
+
+        public String hi(String s) {
+            return "hi " + s;
+        }
+
+    }
+
+}
\ No newline at end of file

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

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

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java (from r783688, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java&r1=783688&r2=784038&rev=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitShouldSkipFilteredExchanges.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitWithNestedFilterShouldSkipFilteredExchanges.java Fri Jun 12 09:00:33 2009
@@ -16,74 +16,35 @@
  */
 package org.apache.camel.processor;
 
-import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.processor.aggregate.AggregationStrategy;
 
 /**
  * Unit test to verify that Splitter aggregator does not included filtered exchanges.
  *
  * @version $Revision$
  */
-public class SplitShouldSkipFilteredExchanges extends ContextTestSupport {
-
-    public void testSplitWithFilter() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Hello World,Bye World");
-
-        MockEndpoint filtered = getMockEndpoint("mock:filtered");
-        filtered.expectedBodiesReceived("Hello World", "Bye World");
-
-        List<String> body = new ArrayList<String>();
-        body.add("Hello World");
-        body.add("Hi there");
-        body.add("Bye World");
-        body.add("How do you do?");
-
-        template.sendBody("direct:start", body);
-
-        assertMockEndpointsSatisfied();
-    }
+public class SplitWithNestedFilterShouldSkipFilteredExchanges extends SplitShouldSkipFilteredExchanges {
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start")
-                    .to("direct:split")
-                    .to("mock:result");
-
                 Predicate goodWord = body().contains("World");
-                from("direct:split")
+
+                from("direct:start")
                     .split(body(List.class), new MyAggregationStrategy())
+                        .to("mock:split")
                         .filter(goodWord)
-                        .to("mock:filtered");
+                            .to("mock:filtered")
+                        .end()
+                    .end()
+                .to("mock:result");
             }
         };
     }
 
-    private class MyAggregationStrategy implements AggregationStrategy {
-
-        public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-            String newBody = newExchange.getIn().getBody(String.class);
-            assertTrue("Should have been filtered: " + newBody, newBody.contains("World"));
-
-            if (oldExchange == null) {
-                return newExchange;
-            }
-
-            String body = oldExchange.getIn().getBody(String.class);
-            body = body + "," + newBody;
-            oldExchange.getIn().setBody(body);
-            return oldExchange;
-        }
-
-    }
-}
+}
\ No newline at end of file

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryProcessorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryProcessorTest.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryProcessorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryProcessorTest.java Fri Jun 12 09:00:33 2009
@@ -33,6 +33,7 @@
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(0);
 
+        getMockEndpoint("mock:last").expectedMessageCount(1);
         getMockEndpoint("mock:finally").expectedMessageCount(1);
 
         sendBody("direct:start", "<test>Hello World!</test>");
@@ -52,7 +53,8 @@
                         .process(new ProcessorHandle())
                     .doFinally()
                         .to("mock:finally")
-                    .end();
+                    .end()
+                    .to("mock:last");
             }
         };
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromWhenWithChoiceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromWhenWithChoiceTest.java?rev=784038&r1=784037&r2=784038&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromWhenWithChoiceTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromWhenWithChoiceTest.java Fri Jun 12 09:00:33 2009
@@ -68,7 +68,7 @@
                     .when(toPredicate(simple("${body} contains 'Goofy'")))
                         .choice()
                             .when(body().contains("Hello")).to("mock:hello")
-                            .otherwise().to("mock:goofy")
+                            .otherwise().to("log:foo").to("mock:goofy")
                         .end()
                     .stop();
 

Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java (from r783977, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java&r1=783977&r2=784038&rev=784038&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java (original)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.java Fri Jun 12 09:00:33 2009
@@ -18,30 +18,63 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.processor.AggregatorTest;
+import org.apache.camel.processor.aggregate.AggregationStrategy;
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
 /**
  * @version $Revision$
  */
-public class SpringAggregatorWithCustomStrategyTest extends ContextTestSupport {
+public class SpringComplexBlockWithEndTest extends ContextTestSupport {
 
-    public void testSendingMessagesWithCustomAggregator() throws Exception {
-        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+    public void testHello() throws Exception {
+        getMockEndpoint("mock:hello").expectedMessageCount(1);
+        getMockEndpoint("mock:bye").expectedMessageCount(0);
+        getMockEndpoint("mock:otherwise").expectedMessageCount(0);
+        getMockEndpoint("mock:result").expectedMessageCount(1);
 
-        resultEndpoint.expectedBodiesReceived("message:1 message:2 message:3");
+        template.sendBody("direct:start", "Hello World");
 
-        // lets send a large batch of messages
-        for (int i = 1; i <= 3; i++) {
-            String body = "message:" + i;
-            template.sendBodyAndHeader("direct:start", body, "cheese", 123);
-        }
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testBye() throws Exception {
+        getMockEndpoint("mock:hello").expectedMessageCount(0);
+        getMockEndpoint("mock:bye").expectedMessageCount(1);
+        getMockEndpoint("mock:otherwise").expectedMessageCount(0);
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Bye World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testOther() throws Exception {
+        getMockEndpoint("mock:hello").expectedMessageCount(0);
+        getMockEndpoint("mock:bye").expectedMessageCount(0);
+        getMockEndpoint("mock:otherwise").expectedMessageCount(1);
+        getMockEndpoint("mock:trapped").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedBodiesReceived("Cowboys");
+        getMockEndpoint("mock:split").expectedBodiesReceived("Hi The good", "Hi The ugly");
 
-        resultEndpoint.assertIsSatisfied();
+        template.sendBody("direct:start", "The good,The bad,The ugly");
+
+        assertMockEndpointsSatisfied();
     }
 
     protected CamelContext createCamelContext() throws Exception {
-        return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator-custom-strategy.xml");
+        return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml");
     }
+
+    public static class SplitAggregate implements AggregationStrategy {
+
+        public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
+            newExchange.getOut().setBody("Cowboys");
+            return newExchange;
+        }
+
+    }
+
 }
\ No newline at end of file

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml (from r783977, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml&r1=783977&r2=784038&rev=784038&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringComplexBlockWithEndTest.xml Fri Jun 12 09:00:33 2009
@@ -22,36 +22,47 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
+    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+        <route>
+            <from uri="direct:start"/>
+            <choice>
+                <when>
+                    <simple>${in.body} contains 'Hello'</simple>
+                    <pipeline>
+                        <to uri="log:hello"/>
+                        <to uri="mock:hello"/>
+                    </pipeline>
+                </when>
+                <when>
+                    <simple>${in.body} contains 'Bye'</simple>
+                    <multicast parallelProcessing="true">
+                        <to uri="log:bye"/>
+                        <to uri="mock:bye"/>
+                    </multicast>
+                </when>
+                <otherwise>
+                    <to uri="log:otherwise"/>
+                    <to uri="mock:otherwise"/>
+                    <multicast streaming="true">
+                        <wireTap uri="mock:trapped"/>
+                        <split strategyRef="splitAggregate">
+                            <tokenize token=","/>
+                            <filter>
+                                <simple>${in.body} not contains 'bad'</simple>
+                                <transform>
+                                    <simple>Hi ${in.body}</simple>
+                                </transform>
+                                <to uri="mock:split"/>
+                            </filter>
+                        </split>
+                    </multicast>
+                </otherwise>
+            </choice>
+            <to uri="log:result"/>
+            <to uri="mock:result"/>
+        </route>
+    </camelContext>
 
-  <!-- START SNIPPET: example -->
-
-  <bean id="attachStringProcessor" class="org.apache.camel.processor.AppendingProcessor"/>
-
-  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-    <route>
-      <from uri="direct:a"/>
-      <multicast>
-          <to uri="direct:x"/>
-          <to uri="direct:y"/>
-          <to uri="direct:z"/>
-      </multicast>
-    </route>
-    <route>
-      <from uri="direct:x"/>
-      <process ref="attachStringProcessor"/>
-      <to uri="mock:x"/>
-    </route>
-    <route>
-      <from uri="direct:y"/>
-      <process ref="attachStringProcessor"/>
-      <to uri="mock:y"/>
-    </route>
-    <route>
-      <from uri="direct:z"/>
-      <process ref="attachStringProcessor"/>
-      <to uri="mock:z"/>
-    </route>
-  </camelContext>
-  <!-- END SNIPPET: example -->
+    <bean id="splitAggregate" class="org.apache.camel.spring.processor.SpringComplexBlockWithEndTest$SplitAggregate"/>
 
 </beans>