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