1
2
3
4
5
6
7
8
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 }