1
2
3
4
5
6
7
8
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 }