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.transformers.AbstractTransformer;
20 import org.mule.umo.UMOMessage;
21 import org.mule.umo.UMOSession;
22 import org.mule.umo.endpoint.UMOEndpoint;
23 import org.mule.umo.transformer.TransformerException;
24
25 import com.mockobjects.dynamic.C;
26 import com.mockobjects.dynamic.Mock;
27
28 import java.util.ArrayList;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Map;
32
33
34
35
36
37
38 public class FilteringOutboundRouterTestCase extends AbstractMuleTestCase
39 {
40 public void testFilteringOutboundRouter() throws Exception
41 {
42 Mock session = MuleTestUtils.getMockSession();
43 OutboundRouterCollection messageRouter = new OutboundRouterCollection();
44 messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
45
46 UMOEndpoint endpoint1 = getTestEndpoint("Test1Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
47 assertNotNull(endpoint1);
48
49 FilteringOutboundRouter router = new FilteringOutboundRouter();
50 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
51 router.setFilter(filter);
52 List endpoints = new ArrayList();
53 endpoints.add(endpoint1);
54 router.setEndpoints(endpoints);
55
56 assertFalse(router.isUseTemplates());
57 assertEquals(filter, router.getFilter());
58
59 UMOMessage message = new MuleMessage("test event");
60
61 assertTrue(router.isMatch(message));
62
63 session.expect("dispatchEvent", C.eq(message, endpoint1));
64 router.route(message, (UMOSession)session.proxy(), false);
65 session.verify();
66
67 message = new MuleMessage("test event");
68
69 session.expectAndReturn("sendEvent", C.eq(message, endpoint1), message);
70 UMOMessage result = router.route(message, (UMOSession)session.proxy(), true);
71 assertNotNull(result);
72 assertEquals(message, result);
73 session.verify();
74
75 message = new MuleMessage(new Exception("test event"));
76
77 assertTrue(!router.isMatch(message));
78
79 router.setTransformer(new AbstractTransformer()
80 {
81 public Object doTransform(Object src, String encoding) throws TransformerException
82 {
83 return ((Exception)src).getMessage();
84 }
85 });
86
87 assertTrue(router.isMatch(message));
88 }
89
90 public void testFilteringOutboundRouterWithTemplates() throws Exception
91 {
92 OutboundRouterCollection messageRouter = new OutboundRouterCollection();
93 messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
94
95 UMOEndpoint endpoint1 = getTestEndpoint("Test1Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
96 assertNotNull(endpoint1);
97 endpoint1.setEndpointURI(new MuleEndpointURI("test://foo?[barValue]"));
98
99 FilteringOutboundRouter router = new FilteringOutboundRouter();
100 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
101 router.setFilter(filter);
102 List endpoints = new ArrayList();
103 endpoints.add(endpoint1);
104 router.setEndpoints(endpoints);
105
106 assertTrue(router.isUseTemplates());
107 assertEquals(filter, router.getFilter());
108
109 Map m = new HashMap();
110 m.put("barValue", "bar");
111 UMOMessage message = new MuleMessage("test event", m);
112
113 assertTrue(router.isMatch(message));
114 UMOEndpoint ep = router.getEndpoint(0, message);
115 assertEquals("test://foo?bar", ep.getEndpointURI().toString());
116 }
117 }