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.LoggingCatchAllStrategy;
16 import org.mule.routing.filters.PayloadTypeFilter;
17 import org.mule.tck.AbstractMuleTestCase;
18 import org.mule.tck.MuleTestUtils;
19 import org.mule.umo.UMOMessage;
20 import org.mule.umo.UMOSession;
21 import org.mule.umo.endpoint.UMOEndpoint;
22
23 import com.mockobjects.dynamic.C;
24 import com.mockobjects.dynamic.Mock;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31
32
33
34
35
36
37 public class ChainingRouterTestCase extends AbstractMuleTestCase
38 {
39 private Mock session;
40 private ChainingRouter router;
41 private List endpoints;
42
43 protected void doSetUp() throws Exception
44 {
45 super.doSetUp();
46 session = MuleTestUtils.getMockSession();
47 router = new ChainingRouter();
48
49 OutboundRouterCollection messageRouter = new OutboundRouterCollection();
50 messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
51
52 UMOEndpoint endpoint1 = getTestEndpoint("Test1Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
53 assertNotNull(endpoint1);
54
55 UMOEndpoint endpoint2 = getTestEndpoint("Test2Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
56 assertNotNull(endpoint2);
57
58 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
59 router.setFilter(filter);
60 endpoints = new ArrayList();
61 endpoints.add(endpoint1);
62 endpoints.add(endpoint2);
63 router.setEndpoints(endpoints);
64
65 assertEquals(filter, router.getFilter());
66 }
67
68 public void testChainingOutboundRouterSynchronous() throws Exception
69 {
70 UMOMessage message = new MuleMessage("test event");
71 assertTrue(router.isMatch(message));
72
73 message = new MuleMessage("test event");
74
75 session.expectAndReturn("sendEvent", C.eq(message, endpoints.get(0)), message);
76 session.expectAndReturn("sendEvent", C.eq(message, endpoints.get(1)), message);
77 final UMOMessage result = router.route(message, (UMOSession)session.proxy(), true);
78 assertNotNull("This is a sync call, we need a result returned.", result);
79 assertEquals(message, result);
80 session.verify();
81 }
82
83 public void testChainingOutboundRouterSynchronousWithTemplate() throws Exception
84 {
85 UMOEndpoint endpoint3 = getTestEndpoint("Test3Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
86 assertNotNull(endpoint3);
87 endpoint3.setEndpointURI(new MuleEndpointURI("test://foo?[barValue]"));
88 router.addEndpoint(endpoint3);
89
90 Map m = new HashMap();
91 m.put("barValue", "bar");
92 UMOMessage message = new MuleMessage("test event", m);
93 assertTrue(router.isMatch(message));
94
95 UMOEndpoint ep = router.getEndpoint(2, message);
96 assertEquals("test://foo?bar", ep.getEndpointURI().toString());
97
98 session.expectAndReturn("sendEvent", C.eq(message, router.getEndpoints().get(0)), message);
99 session.expectAndReturn("sendEvent", C.eq(message, router.getEndpoints().get(1)), message);
100 session.expectAndReturn("sendEvent", C.eq(message, router.getEndpoints().get(2)), message);
101 final UMOMessage result = router.route(message, (UMOSession)session.proxy(), true);
102 assertNotNull("This is a sync call, we need a result returned.", result);
103 assertEquals(message, result);
104 session.verify();
105 }
106
107 public void testChainingOutboundRouterAsynchronous() throws Exception
108 {
109 UMOMessage message = new MuleMessage("test event");
110 assertTrue(router.isMatch(message));
111
112 message = new MuleMessage("test event");
113
114 session.expectAndReturn("sendEvent", C.eq(message, endpoints.get(0)), message);
115 session.expectAndReturn("dispatchEvent", C.eq(message, endpoints.get(1)), message);
116 final UMOMessage result = router.route(message, (UMOSession)session.proxy(), false);
117 assertNull("Async call shouldn't return any result.", result);
118 session.verify();
119 }
120
121
122
123
124 public void testBrokenChain() throws Exception
125 {
126 final UMOMessage message = new MuleMessage("test event");
127 final UMOEndpoint endpoint1 = (UMOEndpoint)endpoints.get(0);
128 session.expect("sendEvent", C.eq(message, endpoint1));
129 UMOMessage result = router.route(message, (UMOSession)session.proxy(), false);
130 session.verify();
131 assertNull(result);
132 }
133
134 }