View Javadoc

1   /*
2    * $Id: MessageSplitterRouterTestCase.java 22377 2011-07-11 12:41:42Z dirk.olmes $
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.MuleTestUtils;
21  import org.mule.tck.junit4.AbstractMuleContextTestCase;
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  import org.junit.Test;
30  
31  import static org.junit.Assert.assertEquals;
32  import static org.junit.Assert.assertNotNull;
33  import static org.junit.Assert.assertTrue;
34  
35  public class MessageSplitterRouterTestCase extends AbstractMuleContextTestCase
36  {
37      public MessageSplitterRouterTestCase()
38      {
39          setStartContext(true);
40      }
41  
42      @Test
43      public void testMessageSplitterRouter() throws Exception
44      {
45          Mock session = MuleTestUtils.getMockSession();
46          session.matchAndReturn("getFlowConstruct", getTestService());
47          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
48  
49          //Async targets
50          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Endpoint", "test://endpointUri.1");
51          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2");
52          OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
53          Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
54          Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
55          Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
56  
57          //Sync targets  org.python.core.__builtin__
58          OutboundEndpoint endpoint4 = getTestOutboundEndpoint("Test4Endpoint", 
59              "test://endpointUri.4?exchangePattern=request-response");
60          OutboundEndpoint endpoint5 = getTestOutboundEndpoint("Test5Endpoint", 
61              "test://endpointUri.5?exchangePattern=request-response");
62          OutboundEndpoint endpoint6 = getTestOutboundEndpoint("Test6Endpoint", 
63              "test://endpointUri.6?exchangePattern=request-response");
64          Mock mockendpoint4 = RouterTestUtils.getMockEndpoint(endpoint4);
65          Mock mockendpoint5 = RouterTestUtils.getMockEndpoint(endpoint5);
66          Mock mockendpoint6 = RouterTestUtils.getMockEndpoint(endpoint6);
67  
68  
69          // Dummy message splitter
70          AbstractMessageSplitter router = new AbstractMessageSplitter()
71          {
72              @Override
73              protected SplitMessage getMessageParts(MuleMessage message, List<MessageProcessor> endpoints)
74              {
75                  int i = 0;
76                  SplitMessage splitMessage = new SplitMessage();
77                  for (StringTokenizer tokenizer = new StringTokenizer(message.getPayload().toString(), ","); tokenizer.hasMoreTokens(); i++)
78                  {
79                      String s = tokenizer.nextToken();
80                      splitMessage.addPart(s, (OutboundEndpoint) endpoints.get(i));
81                  }
82                  return splitMessage;
83              }
84          };
85  
86          router.setMuleContext(muleContext);
87  
88          List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
89          endpoints.add((OutboundEndpoint) mockendpoint1.proxy());
90          endpoints.add((OutboundEndpoint) mockendpoint2.proxy());
91          endpoints.add((OutboundEndpoint) mockendpoint3.proxy());
92          router.setRoutes(endpoints);
93  
94          MuleMessage message = new DefaultMuleMessage("test,mule,message", muleContext);
95  
96          assertTrue(router.isMatch(message));
97          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
98          mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
99          mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
100         router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
101         mockendpoint1.verify();
102         mockendpoint2.verify();
103         mockendpoint3.verify();
104 
105         endpoints = new ArrayList<MessageProcessor>();
106         endpoints.add((OutboundEndpoint) mockendpoint4.proxy());
107         endpoints.add((OutboundEndpoint) mockendpoint5.proxy());
108         endpoints.add((OutboundEndpoint) mockendpoint6.proxy());
109         router.getRoutes().clear();
110         router.setRoutes(endpoints);
111 
112         message = new DefaultMuleMessage("test,mule,message", muleContext);
113         MuleEvent event = new OutboundRoutingTestEvent(message, null, muleContext);
114 
115         mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
116         mockendpoint5.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
117         mockendpoint6.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
118         MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
119         assertNotNull(result);
120         MuleMessage resultMessage = result.getMessage();
121         assertNotNull(resultMessage);
122         assertTrue(resultMessage instanceof MuleMessageCollection);
123         assertEquals(3, ((MuleMessageCollection) resultMessage).size());
124         mockendpoint4.verify();
125         mockendpoint5.verify();
126         mockendpoint6.verify();
127     }
128 }