View Javadoc
1   /*
2   * $Id$
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.MuleMessageCollection;
17  import org.mule.api.MuleSession;
18  import org.mule.api.endpoint.OutboundEndpoint;
19  import org.mule.api.processor.MessageProcessor;
20  import org.mule.tck.MuleTestUtils;
21  import org.mule.tck.junit4.AbstractMuleContextTestCase;
22  
23  import com.mockobjects.dynamic.Mock;
24  
25  import java.util.ArrayList;
26  import java.util.List;
27  
28  import org.junit.Test;
29  
30  import static org.junit.Assert.assertEquals;
31  import static org.junit.Assert.assertNotNull;
32  import static org.junit.Assert.assertNull;
33  import static org.junit.Assert.assertTrue;
34  
35  public class SequenceRouterTestCase extends AbstractMuleContextTestCase
36  {
37  
38      private Mock session;
39      private SequenceRouter router;
40      private Mock mockEndpoint1;
41      private Mock mockEndpoint2;
42  
43      @Override
44      protected void doSetUp() throws Exception
45      {
46          session = MuleTestUtils.getMockSession();
47          session.matchAndReturn("getFlowConstruct", getTestService());
48          session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
49  
50          OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Provider",
51                                              "test://Test1Provider?exchangePattern=request-response");
52  
53          OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Provider",
54                                              "test://Test2Provider?exchangePattern=request-response");
55          mockEndpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
56          mockEndpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
57  
58          router = createObject(SequenceRouter.class);
59          List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
60          endpoints.add((OutboundEndpoint) mockEndpoint1.proxy());
61          endpoints.add((OutboundEndpoint) mockEndpoint2.proxy());
62          router.setRoutes(endpoints);
63      }
64  
65      @Test
66      public void testSyncEndpointsOk() throws Exception
67      {
68          MuleMessage message = new DefaultMuleMessage(TEST_MESSAGE, muleContext);
69          MuleEvent event = new OutboundRoutingTestEvent(message, null);
70  
71          mockEndpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
72          mockEndpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
73  
74          MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession)session.proxy()));
75  
76          assertNotNull(result);
77          MuleMessage resultMessage = result.getMessage();
78          assertNotNull(resultMessage);
79          assertTrue(resultMessage instanceof MuleMessageCollection);
80          assertEquals(2, ((MuleMessageCollection)resultMessage).size());
81          mockEndpoint1.verify();
82          mockEndpoint2.verify();
83      }
84  
85      @Test
86      public void testSyncEndpointsWithFirstOneFailing() throws Exception
87      {
88          MuleMessage message = new DefaultMuleMessage(TEST_MESSAGE, muleContext);
89          MuleEvent eventWithNullMessage = new OutboundRoutingTestEvent(null, null);
90  
91          mockEndpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), eventWithNullMessage);
92  
93          MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession)session.proxy()));
94  
95          assertNull(result);
96      }
97  
98      @Test
99      public void testSyncEndpointsWithLastOneFailing() throws Exception
100     {
101         MuleMessage message = new DefaultMuleMessage(TEST_MESSAGE, muleContext);
102 
103         MuleEvent event = new OutboundRoutingTestEvent(message, null);
104         MuleEvent eventWithNullMessage = new OutboundRoutingTestEvent(null, null);
105 
106         mockEndpoint1.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
107         mockEndpoint2.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), eventWithNullMessage);
108 
109         MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession)session.proxy()));
110 
111         assertNotNull(result);
112         assertTrue(result instanceof MuleEvent);
113     }
114 }