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