1   /*
2    * $Id: SelectiveConsumerTestCase.java 7963 2007-08-21 08:53:15Z dirk.olmes $
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.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 }