1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.outbound;
12
13 import org.mule.impl.MuleMessage;
14 import org.mule.impl.endpoint.MuleEndpointURI;
15 import org.mule.routing.filters.PayloadTypeFilter;
16 import org.mule.tck.AbstractMuleTestCase;
17 import org.mule.tck.MuleTestUtils;
18 import org.mule.tck.testmodels.fruit.Apple;
19 import org.mule.tck.testmodels.fruit.Orange;
20 import org.mule.umo.UMOMessage;
21 import org.mule.umo.UMOSession;
22 import org.mule.umo.endpoint.UMOEndpoint;
23
24 import com.mockobjects.constraint.Constraint;
25 import com.mockobjects.dynamic.C;
26 import com.mockobjects.dynamic.Mock;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31 public class FilterListMessageSplitterRouterTestCase extends AbstractMuleTestCase
32 {
33
34 public void testMessageSplitterRouter() throws Exception
35 {
36 Mock session = MuleTestUtils.getMockSession();
37 session.matchAndReturn("getComponent", getTestComponent(getTestDescriptor("TEST", "java.lang.Object")));
38 UMOEndpoint endpoint1 = getTestEndpoint("Test1endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
39 endpoint1.setEndpointURI(new MuleEndpointURI("test://endpointUri.1"));
40 endpoint1.setFilter(new PayloadTypeFilter(Apple.class));
41 UMOEndpoint endpoint2 = getTestEndpoint("Test2Endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
42 endpoint2.setEndpointURI(new MuleEndpointURI("test://endpointUri.2"));
43 endpoint2.setFilter(new PayloadTypeFilter(Orange.class));
44 UMOEndpoint endpoint3 = getTestEndpoint("Test3Endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
45 endpoint3.setEndpointURI(new MuleEndpointURI("test://endpointUri.3"));
46
47 FilteringListMessageSplitter router = new FilteringListMessageSplitter();
48 router.setFilter(new PayloadTypeFilter(List.class));
49 router.addEndpoint(endpoint1);
50 router.addEndpoint(endpoint2);
51 router.addEndpoint(endpoint3);
52
53 List payload = new ArrayList();
54 payload.add(new Apple());
55 payload.add(new Apple());
56 payload.add(new Orange());
57 payload.add(new String());
58 UMOMessage message = new MuleMessage(payload);
59
60 assertTrue(router.isMatch(message));
61 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
62 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
63 session.expect("dispatchEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)));
64 session.expect("dispatchEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)));
65 router.route(message, (UMOSession) session.proxy(), false);
66 session.verify();
67
68 message = new MuleMessage(payload);
69
70 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
71 message);
72 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
73 message);
74 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)),
75 message);
76 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)),
77 message);
78 UMOMessage result = router.route(message, (UMOSession) session.proxy(), true);
79 assertNotNull(result);
80 assertEquals(message, result);
81 session.verify();
82 }
83
84 private class PayloadConstraint implements Constraint
85 {
86 private Class type;
87
88 public PayloadConstraint(Class type)
89 {
90 this.type = type;
91 }
92
93 public boolean eval(Object o)
94 {
95 return ((UMOMessage) o).getPayload().getClass().equals(type);
96 }
97 }
98
99 }