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.MuleMessage;
15 import org.mule.api.MuleSession;
16 import org.mule.api.endpoint.OutboundEndpoint;
17 import org.mule.routing.filters.PayloadTypeFilter;
18 import org.mule.tck.AbstractMuleTestCase;
19 import org.mule.tck.MuleTestUtils;
20 import org.mule.tck.testmodels.fruit.Apple;
21 import org.mule.tck.testmodels.fruit.Orange;
22
23 import com.mockobjects.constraint.Constraint;
24 import com.mockobjects.dynamic.C;
25 import com.mockobjects.dynamic.Mock;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 public class FilterListMessageSplitterRouterTestCase extends AbstractMuleTestCase
31 {
32
33 public void testMessageSplitterRouter() throws Exception
34 {
35 Mock session = MuleTestUtils.getMockSession();
36 session.matchAndReturn("getService", getTestService());
37
38 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
39 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
40 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
41
42 FilteringListMessageSplitter router = new FilteringListMessageSplitter();
43 router.setFilter(new PayloadTypeFilter(List.class));
44 router.addEndpoint(endpoint1);
45 router.addEndpoint(endpoint2);
46 router.addEndpoint(endpoint3);
47
48 List payload = new ArrayList();
49 payload.add(new Apple());
50 payload.add(new Apple());
51 payload.add(new Orange());
52 payload.add(new String());
53 MuleMessage message = new DefaultMuleMessage(payload);
54
55 assertTrue(router.isMatch(message));
56 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
57 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
58 session.expect("dispatchEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)));
59 session.expect("dispatchEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)));
60 router.route(message, (MuleSession) session.proxy(), false);
61 session.verify();
62
63 message = new DefaultMuleMessage(payload);
64
65 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
66 message);
67 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
68 message);
69 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)),
70 message);
71 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)),
72 message);
73 MuleMessage result = router.route(message, (MuleSession) session.proxy(), true);
74 assertNotNull(result);
75 assertEquals(message, result);
76 session.verify();
77 }
78
79 private class PayloadConstraint implements Constraint
80 {
81 private Class type;
82
83 public PayloadConstraint(Class type)
84 {
85 this.type = type;
86 }
87
88 public boolean eval(Object o)
89 {
90 return ((MuleMessage) o).getPayload().getClass().equals(type);
91 }
92 }
93
94 }