1
2
3
4
5
6
7 package org.mule.routing.outbound;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleEvent;
11 import org.mule.api.MuleMessage;
12 import org.mule.api.MuleMessageCollection;
13 import org.mule.api.MuleSession;
14 import org.mule.api.endpoint.OutboundEndpoint;
15 import org.mule.api.processor.MessageProcessor;
16 import org.mule.tck.MuleTestUtils;
17 import org.mule.tck.junit4.AbstractMuleContextTestCase;
18
19 import com.mockobjects.dynamic.Mock;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.StringTokenizer;
24
25 import org.junit.Test;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30
31 public class MessageSplitterRouterTestCase extends AbstractMuleContextTestCase
32 {
33 public MessageSplitterRouterTestCase()
34 {
35 setStartContext(true);
36 }
37
38 @Test
39 public void testMessageSplitterRouter() throws Exception
40 {
41 Mock session = MuleTestUtils.getMockSession();
42 session.matchAndReturn("getFlowConstruct", getTestService());
43 session.matchAndReturn("setFlowConstruct", RouterTestUtils.getArgListCheckerFlowConstruct(), null);
44
45
46 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Endpoint", "test://endpointUri.1");
47 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2");
48 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
49 Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
50 Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
51 Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
52
53
54 OutboundEndpoint endpoint4 = getTestOutboundEndpoint("Test4Endpoint",
55 "test://endpointUri.4?exchangePattern=request-response");
56 OutboundEndpoint endpoint5 = getTestOutboundEndpoint("Test5Endpoint",
57 "test://endpointUri.5?exchangePattern=request-response");
58 OutboundEndpoint endpoint6 = getTestOutboundEndpoint("Test6Endpoint",
59 "test://endpointUri.6?exchangePattern=request-response");
60 Mock mockendpoint4 = RouterTestUtils.getMockEndpoint(endpoint4);
61 Mock mockendpoint5 = RouterTestUtils.getMockEndpoint(endpoint5);
62 Mock mockendpoint6 = RouterTestUtils.getMockEndpoint(endpoint6);
63
64
65
66 AbstractMessageSplitter router = new AbstractMessageSplitter()
67 {
68 @Override
69 protected SplitMessage getMessageParts(MuleMessage message, List<MessageProcessor> endpoints)
70 {
71 int i = 0;
72 SplitMessage splitMessage = new SplitMessage();
73 for (StringTokenizer tokenizer = new StringTokenizer(message.getPayload().toString(), ","); tokenizer.hasMoreTokens(); i++)
74 {
75 String s = tokenizer.nextToken();
76 splitMessage.addPart(s, (OutboundEndpoint) endpoints.get(i));
77 }
78 return splitMessage;
79 }
80 };
81
82 router.setMuleContext(muleContext);
83
84 List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
85 endpoints.add((OutboundEndpoint) mockendpoint1.proxy());
86 endpoints.add((OutboundEndpoint) mockendpoint2.proxy());
87 endpoints.add((OutboundEndpoint) mockendpoint3.proxy());
88 router.setRoutes(endpoints);
89
90 MuleMessage message = new DefaultMuleMessage("test,mule,message", muleContext);
91
92 assertTrue(router.isMatch(message));
93 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
94 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
95 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
96 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
97 mockendpoint1.verify();
98 mockendpoint2.verify();
99 mockendpoint3.verify();
100
101 endpoints = new ArrayList<MessageProcessor>();
102 endpoints.add((OutboundEndpoint) mockendpoint4.proxy());
103 endpoints.add((OutboundEndpoint) mockendpoint5.proxy());
104 endpoints.add((OutboundEndpoint) mockendpoint6.proxy());
105 router.getRoutes().clear();
106 router.setRoutes(endpoints);
107
108 message = new DefaultMuleMessage("test,mule,message", muleContext);
109 MuleEvent event = new OutboundRoutingTestEvent(message, null);
110
111 mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
112 mockendpoint5.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
113 mockendpoint6.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
114 MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
115 assertNotNull(result);
116 MuleMessage resultMessage = result.getMessage();
117 assertNotNull(resultMessage);
118 assertTrue(resultMessage instanceof MuleMessageCollection);
119 assertEquals(3, ((MuleMessageCollection) resultMessage).size());
120 mockendpoint4.verify();
121 mockendpoint5.verify();
122 mockendpoint6.verify();
123 }
124 }