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.MuleMessage;
15 import org.mule.api.MuleSession;
16 import org.mule.api.endpoint.OutboundEndpoint;
17 import org.mule.tck.AbstractMuleTestCase;
18 import org.mule.tck.MuleTestUtils;
19 import org.mule.util.StringUtils;
20
21 import com.mockobjects.dynamic.C;
22 import com.mockobjects.dynamic.Mock;
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.List;
27
28 public class MessageSplitterRouterTestCase extends AbstractMuleTestCase
29 {
30
31 public void testMessageSplitterRouter() throws Exception
32 {
33 Mock session = MuleTestUtils.getMockSession();
34 session.matchAndReturn("getService", getTestService());
35
36 OutboundEndpoint endpoint1 = getTestOutboundEndpoint("Test1Provider", "test://endpointUri.1");
37 OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Provider", "test://endpointUri.2");
38 OutboundEndpoint endpoint3 = getTestOutboundEndpoint("Test3Provider", "test://endpointUri.3");
39
40
41 AbstractMessageSplitter router = new AbstractMessageSplitter()
42 {
43 private List parts;
44
45 protected void initialise(MuleMessage message)
46 {
47 multimatch = false;
48 parts = Arrays.asList(StringUtils.splitAndTrim(message.getPayload().toString(), ","));
49 }
50
51 protected MuleMessage getMessagePart(MuleMessage message, OutboundEndpoint endpoint)
52 {
53 if (endpoint.getEndpointURI().getAddress().equals("endpointUri.1"))
54 {
55 return new DefaultMuleMessage(parts.get(0));
56 }
57 else if (endpoint.getEndpointURI().getAddress().equals("endpointUri.2"))
58 {
59 return new DefaultMuleMessage(parts.get(1));
60 }
61 else if (endpoint.getEndpointURI().getAddress().equals("endpointUri.3"))
62 {
63 return new DefaultMuleMessage(parts.get(2));
64 }
65 else
66 {
67 return null;
68 }
69 }
70
71 protected void cleanup()
72 {
73 parts = null;
74 }
75 };
76
77 List endpoints = new ArrayList();
78 endpoints.add(endpoint1);
79 endpoints.add(endpoint2);
80 endpoints.add(endpoint3);
81 router.setEndpoints(endpoints);
82
83 MuleMessage message = new DefaultMuleMessage("test,mule,message");
84
85 assertTrue(router.isMatch(message));
86 session.expect("dispatchEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint1)));
87 session.expect("dispatchEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint2)));
88 session.expect("dispatchEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint3)));
89 router.route(message, (MuleSession)session.proxy(), false);
90 session.verify();
91
92 message = new DefaultMuleMessage("test,mule,message");
93
94 session.expectAndReturn("sendEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint1)), message);
95 session.expectAndReturn("sendEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint2)), message);
96 session.expectAndReturn("sendEvent", C.args(C.isA(MuleMessage.class), C.eq(endpoint3)), message);
97 MuleMessage result = router.route(message, (MuleSession)session.proxy(), true);
98 assertNotNull(result);
99 assertEquals(message, result);
100 session.verify();
101 }
102 }