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.MuleSession;
17 import org.mule.api.endpoint.OutboundEndpoint;
18 import org.mule.routing.filters.PayloadTypeFilter;
19 import org.mule.tck.AbstractMuleTestCase;
20 import org.mule.tck.MuleTestUtils;
21 import org.mule.tck.testmodels.fruit.Apple;
22 import org.mule.tck.testmodels.fruit.Orange;
23
24 import com.mockobjects.dynamic.Mock;
25
26 import java.util.ArrayList;
27 import java.util.List;
28
29 public class FilterListMessageSplitterRouterTestCase extends AbstractMuleTestCase
30 {
31 public FilterListMessageSplitterRouterTestCase()
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 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
43 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
44 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
45 Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
46 Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
47 Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
48
49 ListMessageSplitter router = createObject(ListMessageSplitter.class);
50 router.setFilter(new PayloadTypeFilter(List.class));
51 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
52 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
53 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
54
55 List<Object> payload = new ArrayList<Object>();
56 payload.add(new Apple());
57 payload.add(new Apple());
58 payload.add(new Orange());
59 payload.add(new String());
60 MuleMessage message = new DefaultMuleMessage(payload, muleContext);
61
62 assertTrue(router.isMatch(message));
63 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
64 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
65 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
66 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
67 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
68 mockendpoint1.verify();
69 mockendpoint2.verify();
70 mockendpoint3.verify();
71
72 endpoint1 = getTestOutboundEndpoint("Test1endpoint",
73 "test://endpointUri.1?exchangePattern=request-response", null,
74 new PayloadTypeFilter(Apple.class), null);
75 endpoint2 = getTestOutboundEndpoint("Test2Endpoint",
76 "test://endpointUri.2?exchangePattern=request-response", null,
77 new PayloadTypeFilter(Orange.class), null);
78 endpoint3 = getTestOutboundEndpoint("Test3Endpoint",
79 "test://endpointUri.3?exchangePattern=request-response");
80 mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
81 mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
82 mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
83 router = createObject(ListMessageSplitter.class);
84 router.setFilter(new PayloadTypeFilter(List.class));
85 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
86 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
87 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
88
89 message = new DefaultMuleMessage(payload, muleContext);
90
91 MuleEvent event = new OutboundRoutingTestEvent(message, null);
92
93 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
94 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
95 mockendpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
96 mockendpoint3.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
97 MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
98 assertNotNull(result);
99 MuleMessage resultMessage = result.getMessage();
100 assertNotNull(resultMessage);
101 assertTrue(resultMessage.getPayload() instanceof List);
102 assertEquals(((List<?>) resultMessage.getPayload()).size(), 4);
103 mockendpoint1.verify();
104 mockendpoint2.verify();
105 mockendpoint3.verify();
106 }
107 }