View Javadoc

1   /*
2    * $Id: MessageSplitterRouterTestCase.java 20321 2010-11-24 15:21:24Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.routing.outbound;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleEvent;
15  import org.mule.api.MuleMessage;
16  import org.mule.api.MuleMessageCollection;
17  import org.mule.api.MuleSession;
18  import org.mule.api.endpoint.OutboundEndpoint;
19  import org.mule.api.processor.MessageProcessor;
20  import org.mule.tck.AbstractMuleTestCase;
21  import org.mule.tck.MuleTestUtils;
22  
23  import com.mockobjects.dynamic.Mock;
24  
25  import java.util.ArrayList;
26  import java.util.List;
27  import java.util.StringTokenizer;
28  
29  public class MessageSplitterRouterTestCase extends AbstractMuleTestCase
30  {
31      public MessageSplitterRouterTestCase()
32      {
33          setStartContext(true);
34      }
35  
36      public void testMessageSplitterRouter() throws Exception
37      {
38          Mock session = MuleTestUtils.getMockSession();
39          session.matchAndReturn("getFlowConstruct", getTestService());
40          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
41  
42          //Async targets
43          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Endpoint", "test://endpointUri.1");
44          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2");
45          OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
46          Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
47          Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
48          Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
49  
50          //Sync targets  org.python.core.__builtin__
51          OutboundEndpoint endpoint4 = getTestOutboundEndpoint("Test4Endpoint", 
52              "test://endpointUri.4?exchangePattern=request-response");
53          OutboundEndpoint endpoint5 = getTestOutboundEndpoint("Test5Endpoint", 
54              "test://endpointUri.5?exchangePattern=request-response");
55          OutboundEndpoint endpoint6 = getTestOutboundEndpoint("Test6Endpoint", 
56              "test://endpointUri.6?exchangePattern=request-response");
57          Mock mockendpoint4 = RouterTestUtils.getMockEndpoint(endpoint4);
58          Mock mockendpoint5 = RouterTestUtils.getMockEndpoint(endpoint5);
59          Mock mockendpoint6 = RouterTestUtils.getMockEndpoint(endpoint6);
60  
61  
62          // Dummy message splitter
63          AbstractMessageSplitter router = new AbstractMessageSplitter()
64          {
65              @Override
66              protected SplitMessage getMessageParts(MuleMessage message, List<MessageProcessor> endpoints)
67              {
68                  int i = 0;
69                  SplitMessage splitMessage = new SplitMessage();
70                  for (StringTokenizer tokenizer = new StringTokenizer(message.getPayload().toString(), ","); tokenizer.hasMoreTokens(); i++)
71                  {
72                      String s = tokenizer.nextToken();
73                      splitMessage.addPart(s, (OutboundEndpoint) endpoints.get(i));
74                  }
75                  return splitMessage;
76              }
77          };
78  
79          router.setMuleContext(muleContext);
80  
81          List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
82          endpoints.add((OutboundEndpoint) mockendpoint1.proxy());
83          endpoints.add((OutboundEndpoint) mockendpoint2.proxy());
84          endpoints.add((OutboundEndpoint) mockendpoint3.proxy());
85          router.setRoutes(endpoints);
86  
87          MuleMessage message = new DefaultMuleMessage("test,mule,message", muleContext);
88  
89          assertTrue(router.isMatch(message));
90          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
91          mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
92          mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
93          router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
94          mockendpoint1.verify();
95          mockendpoint2.verify();
96          mockendpoint3.verify();
97  
98          endpoints = new ArrayList<MessageProcessor>();
99          endpoints.add((OutboundEndpoint) mockendpoint4.proxy());
100         endpoints.add((OutboundEndpoint) mockendpoint5.proxy());
101         endpoints.add((OutboundEndpoint) mockendpoint6.proxy());
102         router.getRoutes().clear();
103         router.setRoutes(endpoints);
104 
105         message = new DefaultMuleMessage("test,mule,message", muleContext);
106         MuleEvent event = new OutboundRoutingTestEvent(message, null);
107 
108         mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
109         mockendpoint5.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
110         mockendpoint6.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
111         MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
112         assertNotNull(result);
113         MuleMessage resultMessage = result.getMessage();
114         assertNotNull(resultMessage);
115         assertTrue(resultMessage instanceof MuleMessageCollection);
116         assertEquals(3, ((MuleMessageCollection) resultMessage).size());
117         mockendpoint4.verify();
118         mockendpoint5.verify();
119         mockendpoint6.verify();
120     }
121 }