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