1   /*
2    * $Id: SelectiveConsumerTestCase.java 12111 2008-06-19 14:38:08Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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 }