View Javadoc

1   /*
2    * $Id: FilterListMessageSplitterRouterTestCase.java 20321 2010-11-24 15:21:24Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.outbound;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleEvent;
15  import org.mule.api.MuleMessage;
16  import org.mule.api.MuleSession;
17  import org.mule.api.endpoint.OutboundEndpoint;
18  import org.mule.routing.filters.PayloadTypeFilter;
19  import org.mule.tck.AbstractMuleTestCase;
20  import org.mule.tck.MuleTestUtils;
21  import org.mule.tck.testmodels.fruit.Apple;
22  import org.mule.tck.testmodels.fruit.Orange;
23  
24  import com.mockobjects.dynamic.Mock;
25  
26  import java.util.ArrayList;
27  import java.util.List;
28  
29  public class FilterListMessageSplitterRouterTestCase extends AbstractMuleTestCase
30  {
31      public FilterListMessageSplitterRouterTestCase()
32      {
33          setStartContext(true);        
34      }
35  
36      public void testMessageSplitterRouter() throws Exception
37      {
38          Mock session = MuleTestUtils.getMockSession();
39          session.matchAndReturn("getFlowConstruct", getTestService());
40          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
41          
42          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
43          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
44          OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
45          Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
46          Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
47          Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
48  
49          ListMessageSplitter router = createObject(ListMessageSplitter.class);
50          router.setFilter(new PayloadTypeFilter(List.class));
51          router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
52          router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
53          router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
54  
55          List<Object> payload = new ArrayList<Object>();
56          payload.add(new Apple());
57          payload.add(new Apple());
58          payload.add(new Orange());
59          payload.add(new String());
60          MuleMessage message = new DefaultMuleMessage(payload, muleContext);
61  
62          assertTrue(router.isMatch(message));
63          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
64          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
65          mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
66          mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
67          router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
68          mockendpoint1.verify();
69          mockendpoint2.verify();
70          mockendpoint3.verify();
71  
72          endpoint1 = getTestOutboundEndpoint("Test1endpoint", 
73              "test://endpointUri.1?exchangePattern=request-response", null, 
74              new PayloadTypeFilter(Apple.class), null);
75          endpoint2 = getTestOutboundEndpoint("Test2Endpoint", 
76              "test://endpointUri.2?exchangePattern=request-response", null, 
77              new PayloadTypeFilter(Orange.class), null);
78          endpoint3 = getTestOutboundEndpoint("Test3Endpoint", 
79              "test://endpointUri.3?exchangePattern=request-response");
80          mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
81          mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
82          mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
83          router = createObject(ListMessageSplitter.class);
84          router.setFilter(new PayloadTypeFilter(List.class));
85          router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
86          router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
87          router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
88  
89          message = new DefaultMuleMessage(payload, muleContext);
90  
91          MuleEvent event = new OutboundRoutingTestEvent(message, null);
92  
93          mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
94          mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
95          mockendpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
96          mockendpoint3.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
97          MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
98          assertNotNull(result);
99          MuleMessage resultMessage = result.getMessage();
100         assertNotNull(resultMessage);
101         assertTrue(resultMessage.getPayload() instanceof List);
102         assertEquals(((List<?>) resultMessage.getPayload()).size(), 4);
103         mockendpoint1.verify();
104         mockendpoint2.verify();
105         mockendpoint3.verify();
106     }
107 }