1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.inbound;
12
13 import org.mule.DefaultMuleEvent;
14 import org.mule.DefaultMuleMessage;
15 import org.mule.api.MuleEvent;
16 import org.mule.api.MuleMessage;
17 import org.mule.api.MuleSession;
18 import org.mule.api.endpoint.ImmutableEndpoint;
19 import org.mule.api.routing.InboundRouterCollection;
20 import org.mule.api.service.Service;
21 import org.mule.routing.LoggingCatchAllStrategy;
22 import org.mule.routing.filters.PayloadTypeFilter;
23 import org.mule.tck.AbstractMuleTestCase;
24 import org.mule.tck.MuleTestUtils;
25 import org.mule.tck.testmodels.fruit.Apple;
26 import org.mule.transformer.simple.ObjectToByteArray;
27 import org.mule.util.CollectionUtils;
28
29 import com.mockobjects.dynamic.C;
30 import com.mockobjects.dynamic.Mock;
31
32 public class SelectiveConsumerTestCase extends AbstractMuleTestCase
33 {
34
35 public void testSelectiveConsumer() throws Exception
36 {
37 Mock session = MuleTestUtils.getMockSession();
38 Service testService = getTestService("test", Apple.class);
39
40 InboundRouterCollection messageRouter = new DefaultInboundRouterCollection();
41 SelectiveConsumer router = new SelectiveConsumer();
42 messageRouter.addRouter(router);
43 messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
44
45 PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
46 router.setFilter(filter);
47
48 assertEquals(filter, router.getFilter());
49 MuleMessage message = new DefaultMuleMessage("test event");
50
51 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test1Provider");
52 MuleEvent event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), false);
53 assertTrue(router.isMatch(event));
54
55 session.expect("dispatchEvent", C.eq(event));
56 session.expectAndReturn("getService", testService);
57 messageRouter.route(event);
58 session.verify();
59
60 event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), true);
61
62 session.expectAndReturn("sendEvent", C.eq(event), message);
63 session.expectAndReturn("getService", testService);
64 MuleMessage result = messageRouter.route(event);
65 assertNotNull(result);
66 assertEquals(message, result);
67 session.verify();
68
69 session.expectAndReturn("getService", testService);
70 session.expectAndReturn("toString", "");
71 message = new DefaultMuleMessage(new Exception());
72
73 event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), false);
74 assertTrue(!router.isMatch(event));
75
76 messageRouter.route(event);
77 session.verify();
78 }
79
80 public void testSelectiveConsumerWithTransformer() throws Exception
81 {
82 Mock session = MuleTestUtils.getMockSession();
83 Service testService = getTestService("test", Apple.class);
84
85 InboundRouterCollection messageRouter = new DefaultInboundRouterCollection();
86 SelectiveConsumer router = new SelectiveConsumer();
87 messageRouter.addRouter(router);
88 messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
89
90 PayloadTypeFilter filter = new PayloadTypeFilter(byte[].class);
91 router.setFilter(filter);
92
93 assertEquals(filter, router.getFilter());
94 MuleMessage message = new DefaultMuleMessage("test event");
95
96 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test1Provider", CollectionUtils.singletonList(new ObjectToByteArray()));
97 MuleEvent event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), false);
98 assertTrue(router.isMatch(event));
99
100 session.expect("dispatchEvent", C.eq(event));
101 session.expectAndReturn("getService", testService);
102 messageRouter.route(event);
103 session.verify();
104
105 event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), true);
106
107 session.expectAndReturn("sendEvent", C.eq(event), message);
108 session.expectAndReturn("getService", testService);
109 MuleMessage result = messageRouter.route(event);
110 assertNotNull(result);
111 assertEquals(message, result);
112 session.verify();
113
114 session.expectAndReturn("getService", testService);
115 session.expectAndReturn("toString", "");
116 message = new DefaultMuleMessage("Hello String");
117
118 event = new DefaultMuleEvent(message, endpoint, (MuleSession) session.proxy(), false);
119 router.setTransformFirst(false);
120 assertTrue(!router.isMatch(event));
121
122 messageRouter.route(event);
123 session.verify();
124
125 }
126 }