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.AbstractMuleTestCase;
21 import org.mule.tck.MuleTestUtils;
22
23 import com.mockobjects.dynamic.Mock;
24
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.StringTokenizer;
28
29 public class MessageSplitterRouterTestCase extends AbstractMuleTestCase
30 {
31 public MessageSplitterRouterTestCase()
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
43 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Endpoint", "test://endpointUri.1");
44 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Endpoint", "test://endpointUri.2");
45 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Endpoint", "test://endpointUri.3");
46 Mock mockendpoint1 = RouterTestUtils.getMockEndpoint(endpoint1);
47 Mock mockendpoint2 = RouterTestUtils.getMockEndpoint(endpoint2);
48 Mock mockendpoint3 = RouterTestUtils.getMockEndpoint(endpoint3);
49
50
51 OutboundEndpoint endpoint4 = getTestOutboundEndpoint("Test4Endpoint",
52 "test://endpointUri.4?exchangePattern=request-response");
53 OutboundEndpoint endpoint5 = getTestOutboundEndpoint("Test5Endpoint",
54 "test://endpointUri.5?exchangePattern=request-response");
55 OutboundEndpoint endpoint6 = getTestOutboundEndpoint("Test6Endpoint",
56 "test://endpointUri.6?exchangePattern=request-response");
57 Mock mockendpoint4 = RouterTestUtils.getMockEndpoint(endpoint4);
58 Mock mockendpoint5 = RouterTestUtils.getMockEndpoint(endpoint5);
59 Mock mockendpoint6 = RouterTestUtils.getMockEndpoint(endpoint6);
60
61
62
63 AbstractMessageSplitter router = new AbstractMessageSplitter()
64 {
65 @Override
66 protected SplitMessage getMessageParts(MuleMessage message, List<MessageProcessor> endpoints)
67 {
68 int i = 0;
69 SplitMessage splitMessage = new SplitMessage();
70 for (StringTokenizer tokenizer = new StringTokenizer(message.getPayload().toString(), ","); tokenizer.hasMoreTokens(); i++)
71 {
72 String s = tokenizer.nextToken();
73 splitMessage.addPart(s, (OutboundEndpoint) endpoints.get(i));
74 }
75 return splitMessage;
76 }
77 };
78
79 router.setMuleContext(muleContext);
80
81 List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
82 endpoints.add((OutboundEndpoint) mockendpoint1.proxy());
83 endpoints.add((OutboundEndpoint) mockendpoint2.proxy());
84 endpoints.add((OutboundEndpoint) mockendpoint3.proxy());
85 router.setRoutes(endpoints);
86
87 MuleMessage message = new DefaultMuleMessage("test,mule,message", muleContext);
88
89 assertTrue(router.isMatch(message));
90 mockendpoint1.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
91 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
92 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
93 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
94 mockendpoint1.verify();
95 mockendpoint2.verify();
96 mockendpoint3.verify();
97
98 endpoints = new ArrayList<MessageProcessor>();
99 endpoints.add((OutboundEndpoint) mockendpoint4.proxy());
100 endpoints.add((OutboundEndpoint) mockendpoint5.proxy());
101 endpoints.add((OutboundEndpoint) mockendpoint6.proxy());
102 router.getRoutes().clear();
103 router.setRoutes(endpoints);
104
105 message = new DefaultMuleMessage("test,mule,message", muleContext);
106 MuleEvent event = new OutboundRoutingTestEvent(message, null);
107
108 mockendpoint4.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
109 mockendpoint5.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
110 mockendpoint6.expectAndReturn("process", RouterTestUtils.getArgListCheckerMuleEvent(), event);
111 MuleEvent result = router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
112 assertNotNull(result);
113 MuleMessage resultMessage = result.getMessage();
114 assertNotNull(resultMessage);
115 assertTrue(resultMessage instanceof MuleMessageCollection);
116 assertEquals(3, ((MuleMessageCollection) resultMessage).size());
117 mockendpoint4.verify();
118 mockendpoint5.verify();
119 mockendpoint6.verify();
120 }
121 }