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.MuleTestUtils;
20 import org.mule.tck.junit4.AbstractMuleContextTestCase;
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 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 FilterListMessageSplitterRouterTestCase extends AbstractMuleContextTestCase
36 {
37 public FilterListMessageSplitterRouterTestCase()
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 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
50 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
51 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
52 Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
53 Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
54 Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
55
56 ListMessageSplitter router = createObject(ListMessageSplitter.class);
57 router.setFilter(new PayloadTypeFilter(List.class));
58 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
59 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
60 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
61
62 List<Object> payload = new ArrayList<Object>();
63 payload.add(new Apple());
64 payload.add(new Apple());
65 payload.add(new Orange());
66 payload.add(new String());
67 MuleMessage message = new DefaultMuleMessage(payload, muleContext);
68
69 assertTrue(router.isMatch(message));
70 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
71 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
72 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
73 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
74 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
75 mockendpoint1.verify();
76 mockendpoint2.verify();
77 mockendpoint3.verify();
78
79 endpoint1 = getTestOutboundEndpoint("Test1endpoint",
80 "test://endpointUri.1?exchangePattern=request-response", null,
81 new PayloadTypeFilter(Apple.class), null);
82 endpoint2 = getTestOutboundEndpoint("Test2Endpoint",
83 "test://endpointUri.2?exchangePattern=request-response", null,
84 new PayloadTypeFilter(Orange.class), null);
85 endpoint3 = getTestOutboundEndpoint("Test3Endpoint",
86 "test://endpointUri.3?exchangePattern=request-response");
87 mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
88 mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
89 mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
90 router = createObject(ListMessageSplitter.class);
91 router.setFilter(new PayloadTypeFilter(List.class));
92 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
93 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
94 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
95
96 message = new DefaultMuleMessage(payload, muleContext);
97
98 MuleEvent event = new OutboundRoutingTestEvent(message, null, muleContext);
99
100 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
101 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
102 mockendpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
103 mockendpoint3.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
104 MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
105 assertNotNull(result);
106 MuleMessage resultMessage = result.getMessage();
107 assertNotNull(resultMessage);
108 assertTrue(resultMessage.getPayload() instanceof List);
109 assertEquals(((List<?>) resultMessage.getPayload()).size(), 4);
110 mockendpoint1.verify();
111 mockendpoint2.verify();
112 mockendpoint3.verify();
113 }
114 }