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