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