View Javadoc

1   /*
2    * $Id: ListMessageSplitterTestCase.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.service.Service;
20  import org.mule.routing.filters.PayloadTypeFilter;
21  import org.mule.tck.MuleTestUtils;
22  import org.mule.tck.junit4.AbstractMuleContextTestCase;
23  import org.mule.tck.testmodels.fruit.Apple;
24  import org.mule.tck.testmodels.fruit.Orange;
25  
26  import com.mockobjects.dynamic.Mock;
27  
28  import java.util.ArrayList;
29  import java.util.List;
30  
31  import org.junit.Test;
32  
33  import static org.junit.Assert.assertEquals;
34  import static org.junit.Assert.assertNotNull;
35  import static org.junit.Assert.assertTrue;
36  
37  public class ListMessageSplitterTestCase extends AbstractMuleContextTestCase
38  {
39      public ListMessageSplitterTestCase()
40      {
41          setStartContext(true);
42      }
43  
44      @Test
45      public void testCorrelationGroupSizePropertySet() throws Exception
46      {
47          Service testService = getTestService("test", Apple.class);
48          MuleSession session = getTestSession(testService, muleContext);
49  
50          OutboundEndpoint endpoint = getTestOutboundEndpoint("Test1Endpoint", 
51              "test://endpoint?exchangePattern=request-response");
52          ListMessageSplitter router = new ListMessageSplitter();
53          router.setFilter(null);
54          router.addRoute(endpoint);
55          router.setMuleContext(muleContext);
56  
57          List<String> payload = new ArrayList<String>();
58          payload.add("one");
59          payload.add("two");
60          payload.add("three");
61          payload.add("four");
62  
63          MuleMessage message = new DefaultMuleMessage(payload, muleContext);
64  
65          MuleEvent result = router.route(new OutboundRoutingTestEvent(message, session, muleContext));
66          assertNotNull(result);
67          MuleMessage resultMessage = result.getMessage();
68          assertNotNull(resultMessage);
69          assertTrue(resultMessage instanceof MuleMessageCollection);
70          assertEquals("There should be 4 results for 4 split messages.", 4, ((MuleMessageCollection) resultMessage).size());
71      }
72  
73      @Test
74      public void testMessageSplitterRouter() throws Exception
75      {
76          Mock session = MuleTestUtils.getMockSession();
77          session.matchAndReturn("getFlowConstruct", getTestService());
78          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
79  
80          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
81          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
82          OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
83          Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
84          Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
85          Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
86  
87          OutboundEndpoint endpoint4 = getTestOutboundEndpoint("Test4endpoint", 
88              "test://endpointUri.4?exchangePattern=request-response", null, 
89              new PayloadTypeFilter(Apple.class), null);
90          OutboundEndpoint endpoint5 = getTestOutboundEndpoint("Test5Endpoint", 
91              "test://endpointUri.5?exchangePattern=request-response", null, 
92              new PayloadTypeFilter(Orange.class), null);
93          OutboundEndpoint endpoint6 = getTestOutboundEndpoint("Test6Endpoint", 
94              "test://endpointUri.6?exchangePattern=request-response");
95          Mock mockendpoint4 = RouterTestUtils.getMockEndpoint(endpoint4);
96          Mock mockendpoint5 = RouterTestUtils.getMockEndpoint(endpoint5);
97          Mock mockendpoint6 = RouterTestUtils.getMockEndpoint(endpoint6);
98  
99          ListMessageSplitter asyncSplitter = new ListMessageSplitter();
100         asyncSplitter.setMuleContext(muleContext);
101         asyncSplitter.setDisableRoundRobin(true);
102         asyncSplitter.setFilter(new PayloadTypeFilter(List.class));
103         asyncSplitter.addRoute((OutboundEndpoint) mockendpoint1.proxy());
104         asyncSplitter.addRoute((OutboundEndpoint) mockendpoint2.proxy());
105         asyncSplitter.addRoute((OutboundEndpoint) mockendpoint3.proxy());
106 
107         ListMessageSplitter syncSplitter = new ListMessageSplitter();
108         syncSplitter.setMuleContext(muleContext);
109         syncSplitter.setDisableRoundRobin(true);
110         syncSplitter.setFilter(new PayloadTypeFilter(List.class));
111         syncSplitter.addRoute((OutboundEndpoint) mockendpoint4.proxy());
112         syncSplitter.addRoute((OutboundEndpoint) mockendpoint5.proxy());
113         syncSplitter.addRoute((OutboundEndpoint) mockendpoint6.proxy());
114         List<Object> payload = new ArrayList<Object>();
115         payload.add(new Apple());
116         payload.add(new Apple());
117         payload.add(new Orange());
118         payload.add("");
119         MuleMessage message = new DefaultMuleMessage(payload, muleContext);
120 
121         assertTrue(asyncSplitter.isMatch(message));
122         mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
123         mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
124         mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
125         mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
126         asyncSplitter.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
127         session.verify();
128 
129         message = new DefaultMuleMessage(payload, muleContext);
130         MuleEvent event = new OutboundRoutingTestEvent(message, null, muleContext);
131 
132         mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
133         mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
134         mockendpoint5.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
135         mockendpoint6.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
136         MuleEvent result = syncSplitter.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
137         assertNotNull(result);
138         MuleMessage resultMessage = result.getMessage();
139         assertNotNull(resultMessage);
140         assertTrue(resultMessage instanceof MuleMessageCollection);
141         assertEquals(4, ((MuleMessageCollection) resultMessage).size());
142         session.verify();
143     }
144 }