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