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.api.processor.MessageProcessor;
18 import org.mule.api.routing.RoutingException;
19 import org.mule.tck.AbstractMuleTestCase;
20 import org.mule.tck.MuleTestUtils;
21
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 public EndpointSelectorTestCase()
32 {
33 setStartContext(true);
34 }
35
36 Mock session;
37 OutboundEndpoint dest1;
38 OutboundEndpoint dest2;
39 OutboundEndpoint dest3;
40 EndpointSelector router;
41 Mock mockendpoint1;
42 Mock mockendpoint2;
43 Mock mockendpoint3;
44
45
46 @Override
47 protected void doSetUp() throws Exception
48 {
49 super.doSetUp();
50 session = MuleTestUtils.getMockSession();
51 session.matchAndReturn("getFlowConstruct", getTestService());
52 dest1 = getTestOutboundEndpoint("dest1");
53 dest2 = getTestOutboundEndpoint("dest2");
54 dest3 = getTestOutboundEndpoint("dest3");
55
56 mockendpoint1 = RouterTestUtils.getMockEndpoint(dest1);
57 mockendpoint2 = RouterTestUtils.getMockEndpoint(dest2);
58 mockendpoint3 = RouterTestUtils.getMockEndpoint(dest3);
59
60 List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
61 endpoints.add((OutboundEndpoint) mockendpoint1.proxy());
62 endpoints.add((OutboundEndpoint) mockendpoint2.proxy());
63 endpoints.add((OutboundEndpoint) mockendpoint3.proxy());
64
65 router = new EndpointSelector();
66 router.setRoutes(endpoints);
67 router.setMuleContext(muleContext);
68 router.initialise();
69 }
70
71 public void testSelectEndpointDefaultProperty() throws Exception
72 {
73 Map<String, Object> props = new HashMap<String, Object>();
74 props.put("apple", "red");
75 props.put(EndpointSelector.DEFAULT_SELECTOR_EXPRESSION, "dest3");
76 props.put("banana", "yellow");
77 MuleMessage message = new DefaultMuleMessage("test event", props, muleContext);
78
79 assertTrue(router.isMatch(message));
80 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
81 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
82 mockendpoint3.verify();
83 }
84
85 public void testSelectEndpointCustomProperty() throws Exception
86 {
87
88 router.setExpression("wayOut");
89 router.setEvaluator("header");
90
91 Map<String, Object> props = new HashMap<String, Object>();
92 props.put("apple", "red");
93 props.put("wayOut", "dest2");
94 props.put("banana", "yellow");
95 MuleMessage message = new DefaultMuleMessage("test event", props, muleContext);
96
97 assertTrue(router.isMatch(message));
98 mockendpoint2.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
99 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
100 mockendpoint2.verify();
101 }
102
103 public void testSelectEndpointNoMatch() throws Exception
104 {
105 Map<String, Object> props = new HashMap<String, Object>();
106 props.put(EndpointSelector.DEFAULT_SELECTOR_EXPRESSION, "dest5");
107
108 try
109 {
110
111
112 MuleMessage message = new DefaultMuleMessage("test event", props, muleContext);
113 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
114 fail("Router should have thrown an exception if endpoint was not found.");
115 }
116 catch (Exception e)
117 {
118
119 }
120 }
121
122 public void testSelectEndpointNoMatchUseDefault() throws Exception
123 {
124 MuleMessage message = new DefaultMuleMessage("test event", muleContext);
125 router.setDefaultEndpointName("dest3");
126
127 assertTrue(router.isMatch(message));
128 mockendpoint3.expect("process", RouterTestUtils.getArgListCheckerMuleEvent());
129 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
130 mockendpoint3.verify();
131 }
132
133 public void testSelectEndpointNoPropertySet() throws Exception
134 {
135 MuleMessage message = new DefaultMuleMessage("test event", muleContext);
136
137 try
138 {
139 router.route(new OutboundRoutingTestEvent(message, (MuleSession) session.proxy()));
140 fail("Router should have thrown an exception if no selector property was set on the message.");
141 }
142 catch (RoutingException e)
143 {
144
145 }
146 }
147 }