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