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.ImmutableEndpoint;
17 import org.mule.api.routing.RoutingException;
18 import org.mule.tck.AbstractMuleTestCase;
19 import org.mule.tck.MuleTestUtils;
20
21 import com.mockobjects.dynamic.C;
22 import com.mockobjects.dynamic.Mock;
23
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 public class EndpointSelectorTestCase extends AbstractMuleTestCase
30 {
31 Mock session;
32 ImmutableEndpoint dest1;
33 ImmutableEndpoint dest2;
34 ImmutableEndpoint dest3;
35 EndpointSelector router;
36
37 protected void doSetUp() throws Exception
38 {
39 super.doSetUp();
40 session = MuleTestUtils.getMockSession();
41 session.matchAndReturn("getService", getTestService());
42 dest1 = getTestOutboundEndpoint("dest1");
43 dest2 = getTestOutboundEndpoint("dest2");
44 dest3 = getTestOutboundEndpoint("dest3");
45
46 List endpoints = new ArrayList();
47 endpoints.add(dest1);
48 endpoints.add(dest2);
49 endpoints.add(dest3);
50
51 router = new EndpointSelector();
52 router.setEndpoints(endpoints);
53 router.setMuleContext(muleContext);
54 }
55
56 public void testSelectEndpointDefaultProperty() throws Exception
57 {
58 Map props = new HashMap();
59 props.put("apple", "red");
60 props.put(EndpointSelector.DEFAULT_SELECTOR_EXPRESSION, "dest3");
61 props.put("banana", "yellow");
62 MuleMessage message = new DefaultMuleMessage("test event", props);
63
64 assertTrue(router.isMatch(message));
65 session.expect("dispatchEvent", C.eq(message, dest3));
66 router.route(message, (MuleSession) session.proxy(), false);
67 session.verify();
68 }
69
70 public void testSelectEndpointCustomProperty() throws Exception
71 {
72
73
74 router.setExpression("wayOut");
75 router.setEvaluator("header");
76
77 Map props = new HashMap();
78 props.put("apple", "red");
79 props.put("wayOut", "dest2");
80 props.put("banana", "yellow");
81 MuleMessage message = new DefaultMuleMessage("test event", props);
82
83 assertTrue(router.isMatch(message));
84 session.expect("dispatchEvent", C.eq(message, dest2));
85 router.route(message, (MuleSession) session.proxy(), false);
86 session.verify();
87 }
88
89 public void testSelectEndpointNoMatch() throws Exception
90 {
91 Map props = new HashMap();
92 props.put(EndpointSelector.DEFAULT_SELECTOR_EXPRESSION, "dest5");
93
94 try
95 {
96
97
98 MuleMessage message = new DefaultMuleMessage("test event", props);
99 router.route(message, (MuleSession) session.proxy(), false);
100 fail("Router should have thrown an exception if endpoint was not found.");
101 }
102 catch (Exception e)
103 {
104
105 }
106 }
107
108 public void testSelectEndpointNoPropertySet() throws Exception
109 {
110 MuleMessage message = new DefaultMuleMessage("test event");
111
112 try
113 {
114 router.route(message, (MuleSession) session.proxy(), false);
115 fail("Router should have thrown an exception if no selector property was set on the message.");
116 }
117 catch (RoutingException e)
118 {
119
120 }
121 }
122 }