View Javadoc

1   /*
2    * $Id: FilterListMessageSplitterRouterTestCase.java 22377 2011-07-11 12:41:42Z dirk.olmes $
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.MuleTestUtils;
20  import org.mule.tck.junit4.AbstractMuleContextTestCase;
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  import org.junit.Test;
30  
31  import static org.junit.Assert.assertEquals;
32  import static org.junit.Assert.assertNotNull;
33  import static org.junit.Assert.assertTrue;
34  
35  public class FilterListMessageSplitterRouterTestCase extends AbstractMuleContextTestCase
36  {
37      public FilterListMessageSplitterRouterTestCase()
38      {
39          setStartContext(true);        
40      }
41  
42      @Test
43      public void testMessageSplitterRouter() throws Exception
44      {
45          Mock session = MuleTestUtils.getMockSession();
46          session.matchAndReturn("getFlowConstruct", getTestService());
47          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
48          
49          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1endpoint", "test://endpointUri.1", null, new PayloadTypeFilter(Apple.class), null);
50          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2", null, new PayloadTypeFilter(Orange.class), null);
51          OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
52          Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
53          Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
54          Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
55  
56          ListMessageSplitter router = createObject(ListMessageSplitter.class);
57          router.setFilter(new PayloadTypeFilter(List.class));
58          router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
59          router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
60          router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
61  
62          List<Object> payload = new ArrayList<Object>();
63          payload.add(new Apple());
64          payload.add(new Apple());
65          payload.add(new Orange());
66          payload.add(new String());
67          MuleMessage message = new DefaultMuleMessage(payload, muleContext);
68  
69          assertTrue(router.isMatch(message));
70          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
71          mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
72          mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
73          mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
74          router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
75          mockendpoint1.verify();
76          mockendpoint2.verify();
77          mockendpoint3.verify();
78  
79          endpoint1 = getTestOutboundEndpoint("Test1endpoint", 
80              "test://endpointUri.1?exchangePattern=request-response", null, 
81              new PayloadTypeFilter(Apple.class), null);
82          endpoint2 = getTestOutboundEndpoint("Test2Endpoint", 
83              "test://endpointUri.2?exchangePattern=request-response", null, 
84              new PayloadTypeFilter(Orange.class), null);
85          endpoint3 = getTestOutboundEndpoint("Test3Endpoint", 
86              "test://endpointUri.3?exchangePattern=request-response");
87          mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
88          mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
89          mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
90          router = createObject(ListMessageSplitter.class);
91          router.setFilter(new PayloadTypeFilter(List.class));
92          router.addRoute((OutboundEndpoint) mockendpoint1.proxy());
93          router.addRoute((OutboundEndpoint) mockendpoint2.proxy());
94          router.addRoute((OutboundEndpoint) mockendpoint3.proxy());
95  
96          message = new DefaultMuleMessage(payload, muleContext);
97  
98          MuleEvent event = new OutboundRoutingTestEvent(message, null, muleContext);
99  
100         mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
101         mockendpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
102         mockendpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
103         mockendpoint3.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
104         MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy(), muleContext));
105         assertNotNull(result);
106         MuleMessage resultMessage = result.getMessage();
107         assertNotNull(resultMessage);
108         assertTrue(resultMessage.getPayload() instanceof List);
109         assertEquals(((List<?>) resultMessage.getPayload()).size(), 4);
110         mockendpoint1.verify();
111         mockendpoint2.verify();
112         mockendpoint3.verify();
113     }
114 }