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 public void testMessageSpltterRouter() throws Exception
34 {
35 Mock session = MuleTestUtils.getMockSession();
36
37 UMOEndpoint endpoint1 = getTestEndpoint("Test1endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
38 endpoint1.setEndpointURI(new MuleEndpointURI("test://endpointUri.1"));
39 endpoint1.setFilter(new PayloadTypeFilter(Apple.class));
40 UMOEndpoint endpoint2 = getTestEndpoint("Test2Endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
41 endpoint2.setEndpointURI(new MuleEndpointURI("test://endpointUri.2"));
42 endpoint2.setFilter(new PayloadTypeFilter(Orange.class));
43 UMOEndpoint endpoint3 = getTestEndpoint("Test3Endpoint", UMOEndpoint.ENDPOINT_TYPE_SENDER);
44 endpoint3.setEndpointURI(new MuleEndpointURI("test://endpointUri.3"));
45
46 FilteringListMessageSplitter router = new FilteringListMessageSplitter();
47 router.setFilter(new PayloadTypeFilter(List.class));
48 router.addEndpoint(endpoint1);
49 router.addEndpoint(endpoint2);
50 router.addEndpoint(endpoint3);
51
52 List payload = new ArrayList();
53 payload.add(new Apple());
54 payload.add(new Apple());
55 payload.add(new Orange());
56 payload.add(new String());
57 UMOMessage message = new MuleMessage(payload);
58
59 assertTrue(router.isMatch(message));
60 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
61 session.expect("dispatchEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)));
62 session.expect("dispatchEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)));
63 session.expect("dispatchEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)));
64 router.route(message, (UMOSession)session.proxy(), false);
65 session.verify();
66
67 message = new MuleMessage(payload);
68
69 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
70 message);
71 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Apple.class), C.eq(endpoint1)),
72 message);
73 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(Orange.class), C.eq(endpoint2)),
74 message);
75 session.expectAndReturn("sendEvent", C.args(new PayloadConstraint(String.class), C.eq(endpoint3)),
76 message);
77 UMOMessage result = router.route(message, (UMOSession)session.proxy(), true);
78 assertNotNull(result);
79 assertEquals(message, result);
80 session.verify();
81 }
82
83 private class PayloadConstraint implements Constraint
84 {
85 private Class type;
86
87 public PayloadConstraint(Class type)
88 {
89 this.type = type;
90 }
91
92 public boolean eval(Object o)
93 {
94 return ((UMOMessage)o).getPayload().getClass().equals(type);
95 }
96 }
97 }