1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.outbound;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.MuleSession;
16 import org.mule.api.endpoint.ImmutableEndpoint;
17 import org.mule.api.endpoint.OutboundEndpoint;
18 import org.mule.api.transformer.TransformerException;
19 import org.mule.routing.filters.PayloadTypeFilter;
20 import org.mule.tck.AbstractMuleTestCase;
21 import org.mule.tck.MuleTestUtils;
22 import org.mule.transformer.AbstractTransformer;
23 import org.mule.util.CollectionUtils;
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("getService", getTestService());
39
40 ImmutableEndpoint endpoint1 = getTestOutboundEndpoint("Test1Provider");
41 assertNotNull(endpoint1);
42
43 FilteringOutboundRouter router = new FilteringOutboundRouter();
44 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
45 router.setFilter(filter);
46 List endpoints = new ArrayList();
47 endpoints.add(endpoint1);
48 router.setEndpoints(endpoints);
49
50 assertFalse(router.isUseTemplates());
51 assertEquals(filter, router.getFilter());
52
53 MuleMessage message = new DefaultMuleMessage("test event");
54
55 assertTrue(router.isMatch(message));
56
57 session.expect("dispatchEvent", C.eq(message, endpoint1));
58 router.route(message, (MuleSession)session.proxy(), false);
59 session.verify();
60
61 message = new DefaultMuleMessage("test event");
62
63 session.expectAndReturn("sendEvent", C.eq(message, endpoint1), message);
64 MuleMessage result = router.route(message, (MuleSession)session.proxy(), true);
65 assertNotNull(result);
66 assertEquals(message, result);
67 session.verify();
68
69 message = new DefaultMuleMessage(new Exception("test event"));
70
71 assertTrue(!router.isMatch(message));
72
73 router.setTransformers(
74 CollectionUtils.singletonList(
75 new AbstractTransformer()
76 {
77 public Object doTransform(Object src, String encoding) throws TransformerException
78 {
79 return ((Exception)src).getMessage();
80 }
81 }
82 )
83 );
84
85 assertTrue(router.isMatch(message));
86 }
87
88 public void testFilteringOutboundRouterWithTemplates() throws Exception
89 {
90 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Provider", "test://foo?[barValue]");
91 assertNotNull(endpoint1);
92
93 FilteringOutboundRouter router = new FilteringOutboundRouter();
94 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
95 router.setFilter(filter);
96 List endpoints = new ArrayList();
97 endpoints.add(endpoint1);
98 router.setEndpoints(endpoints);
99
100 assertTrue(router.isUseTemplates());
101 assertEquals(filter, router.getFilter());
102
103 Map m = new HashMap();
104 m.put("barValue", "bar");
105 MuleMessage message = new DefaultMuleMessage("test event", m);
106
107 assertTrue(router.isMatch(message));
108 OutboundEndpoint ep = router.getEndpoint(0, message);
109
110 assertNotSame(endpoint1, ep);
111
112 assertEquals("test://foo?bar", ep.getEndpointURI().toString());
113 }
114 }