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