1
2
3
4
5
6
7 package org.mule.routing.outbound;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleEvent;
11 import org.mule.api.MuleMessage;
12 import org.mule.api.MuleSession;
13 import org.mule.api.endpoint.OutboundEndpoint;
14 import org.mule.routing.filters.PayloadTypeFilter;
15 import org.mule.tck.MuleTestUtils;
16 import org.mule.tck.junit4.AbstractMuleContextTestCase;
17 import org.mule.tck.testmodels.fruit.Apple;
18 import org.mule.tck.testmodels.fruit.Orange;
19
20 import com.mockobjects.dynamic.Mock;
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.junit.Test;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30
31 public class FilterListMessageSplitterRouterTestCase extends AbstractMuleContextTestCase
32 {
33 public FilterListMessageSplitterRouterTestCase()
34 {
35 setStartContext(true);
36 }
37
38 @Test
39 public void testMessageSplitterRouter() throws Exception
40 {
41 Mock session = MuleTestUtils.getMockSession();
42 session.matchAndReturn("getFlowConstruct", getTestService());
43 session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
44
45 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
46 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
47 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
48 Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
49 Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
50 Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
51
52 ListMessageSplitter router = createObject(ListMessageSplitter.class);
53 router.setFilter(new PayloadTypeFilter(List.class));
54 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
55 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
56 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
57
58 List<Object> payload = new ArrayList<Object>();
59 payload.add(new Apple());
60 payload.add(new Apple());
61 payload.add(new Orange());
62 payload.add(new String());
63 MuleMessage message = new DefaultMuleMessage(payload, muleContext);
64
65 assertTrue(router.isMatch(message));
66 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
67 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
68 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
69 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
70 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
71 mockendpoint1.verify();
72 mockendpoint2.verify();
73 mockendpoint3.verify();
74
75 endpoint1 = getTestOutboundEndpoint("Test1endpoint",
76 "test://endpointUri.1?exchangePattern=request-response", null,
77 new PayloadTypeFilter(Apple.class), null);
78 endpoint2 = getTestOutboundEndpoint("Test2Endpoint",
79 "test://endpointUri.2?exchangePattern=request-response", null,
80 new PayloadTypeFilter(Orange.class), null);
81 endpoint3 = getTestOutboundEndpoint("Test3Endpoint",
82 "test://endpointUri.3?exchangePattern=request-response");
83 mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
84 mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
85 mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
86 router = createObject(ListMessageSplitter.class);
87 router.setFilter(new PayloadTypeFilter(List.class));
88 router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
89 router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
90 router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
91
92 message = new DefaultMuleMessage(payload, muleContext);
93
94 MuleEvent event = new OutboundRoutingTestEvent(message, null);
95
96 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
97 mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
98 mockendpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
99 mockendpoint3.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
100 MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
101 assertNotNull(result);
102 MuleMessage resultMessage = result.getMessage();
103 assertNotNull(resultMessage);
104 assertTrue(resultMessage.getPayload() instanceof List);
105 assertEquals(((List<?>) resultMessage.getPayload()).size(), 4);
106 mockendpoint1.verify();
107 mockendpoint2.verify();
108 mockendpoint3.verify();
109 }
110 }