1
2
3
4
5
6
7 package org.mule.mule.model;
8
9 import org.mule.RequestContext;
10 import org.mule.api.MuleException;
11 import org.mule.api.config.MuleProperties;
12 import org.mule.api.model.EntryPointResolverSet;
13 import org.mule.model.resolvers.ArrayEntryPointResolver;
14 import org.mule.model.resolvers.EntryPointNotFoundException;
15 import org.mule.model.resolvers.LegacyEntryPointResolverSet;
16 import org.mule.tck.junit4.AbstractMuleContextTestCase;
17 import org.mule.tck.testmodels.fruit.Apple;
18 import org.mule.tck.testmodels.fruit.Banana;
19 import org.mule.tck.testmodels.fruit.Fruit;
20 import org.mule.tck.testmodels.fruit.FruitBowl;
21 import org.mule.tck.testmodels.fruit.FruitCleaner;
22 import org.mule.tck.testmodels.fruit.FruitLover;
23 import org.mule.tck.testmodels.fruit.Kiwi;
24 import org.mule.tck.testmodels.fruit.Orange;
25 import org.mule.tck.testmodels.fruit.WaterMelon;
26
27 import java.util.Arrays;
28
29 import org.junit.Test;
30
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertTrue;
33 import static org.junit.Assert.fail;
34
35 public class LegacyEntryPointResolverTestCase extends AbstractMuleContextTestCase
36 {
37
38
39 private static final String METHOD_PROPERTY_NAME = MuleProperties.MULE_METHOD_PROPERTY;
40
41
42 private static final String INVALID_METHOD_NAME = "nosuchmethod";
43
44 @Test
45 public void testExplicitMethodMatch() throws Exception
46 {
47 try
48 {
49 LegacyEntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
50 resolver.invoke(new WaterMelon(), getTestEventContext("blah"));
51 }
52 catch (MuleException e)
53 {
54 fail("Test should have passed: " + e);
55 }
56 }
57
58 @Test
59 public void testExplicitMethodMatchComplexObject() throws Exception
60 {
61 try
62 {
63 LegacyEntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
64 resolver.invoke(new FruitBowl(), getTestEventContext(new FruitLover("Mmmm")));
65 }
66 catch (MuleException e)
67 {
68 fail("Test should have passed: " + e);
69 }
70 }
71
72 @Test
73 public void testExplicitMethodMatchSetArrayFail() throws Exception
74 {
75 try
76 {
77 LegacyEntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
78 resolver.invoke(new FruitBowl(), getTestEventContext(new Fruit[]{new Apple(), new Orange()}));
79 fail("Test should have failed because the arguments were not wrapped properly: ");
80 }
81 catch (MuleException e)
82 {
83
84 }
85 }
86
87 @Test
88 public void testExplicitMethodMatchSetArrayPass() throws Exception
89 {
90 try
91 {
92 LegacyEntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
93 resolver.invoke(new FruitBowl(), getTestEventContext(new Object[]{new Fruit[]{new Apple(), new Orange()}}));
94 }
95 catch (MuleException e)
96 {
97 fail("Test should have passed: " + e);
98 }
99 }
100
101
102
103 @Test
104 public void testExplicitMethodMatchSetArrayPassUsingExplicitResolver() throws Exception
105 {
106 try
107 {
108 LegacyEntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
109 resolver.addEntryPointResolver(new ArrayEntryPointResolver());
110 resolver.invoke(new FruitBowl(), getTestEventContext(new Fruit[]{new Apple(), new Orange()}));
111 }
112 catch (MuleException e)
113 {
114 fail("Test should have passed: " + e);
115 }
116 }
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162 @Test
163 public void testFailEntryPointMultiplePayloadMatches() throws Exception
164 {
165 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
166
167 try
168 {
169 RequestContext.setEvent(getTestEvent("Hello"));
170 resolverSet.invoke(new MultiplePayloadsTestObject(), RequestContext.getEventContext());
171 fail("Should have failed to find entrypoint.");
172 }
173 catch (EntryPointNotFoundException itex)
174 {
175
176 }
177 }
178
179
180
181
182
183
184 @Test
185 public void testMethodOverrideDoesNotFallback() throws Exception
186 {
187 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
188 RequestContext.setEvent(getTestEvent(new FruitLover("Yummy!")));
189
190
191 final String methodName = "nosuchmethod";
192 final String propertyName = MuleProperties.MULE_METHOD_PROPERTY;
193 RequestContext.getEventContext().getMessage().setOutboundProperty(propertyName, methodName);
194
195 resolverSet.invoke(new FruitBowl(), RequestContext.getEventContext());
196
197 }
198
199
200
201
202
203
204 @Test
205 public void testMethodOverrideIgnoredWithCallable() throws Exception
206 {
207 EntryPointResolverSet resolver = new LegacyEntryPointResolverSet();
208
209 RequestContext.setEvent(getTestEvent(new FruitLover("Yummy!")));
210
211
212 RequestContext.getEventContext().getMessage().setOutboundProperty(METHOD_PROPERTY_NAME,
213 INVALID_METHOD_NAME);
214
215 Apple apple = new Apple();
216 apple.setAppleCleaner(new FruitCleaner()
217 {
218 public void wash(Fruit fruit)
219 {
220
221 }
222
223 public void polish(Fruit fruit)
224 {
225
226 }
227 });
228 resolver.invoke(apple, RequestContext.getEventContext());
229 }
230
231
232
233
234
235
236 @Test
237 public void testMethodOverrideIgnoredWithEventContext() throws Exception
238 {
239 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
240
241 RequestContext.setEvent(getTestEvent(new FruitLover("Yummy!")));
242
243
244 final String methodName = "nosuchmethod";
245 final String propertyName = MuleProperties.MULE_METHOD_PROPERTY;
246 RequestContext.getEventContext().getMessage().setOutboundProperty(propertyName, methodName);
247
248 try
249 {
250 resolverSet.invoke(new Kiwi(), RequestContext.getEventContext());
251 fail("no such method on service");
252 }
253 catch (EntryPointNotFoundException e)
254 {
255
256 }
257 }
258
259
260
261 @Test
262 public void testArrayArgumentResolution() throws Exception
263 {
264 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
265
266 Object payload = new Object[]{new Fruit[]{new Apple(), new Banana()}};
267 RequestContext.setEvent(getTestEvent(payload));
268
269 FruitBowl bowl = new FruitBowl();
270 assertFalse(bowl.hasApple());
271 assertFalse(bowl.hasBanana());
272
273 resolverSet.invoke(bowl, RequestContext.getEventContext());
274
275 assertTrue(bowl.hasApple());
276 assertTrue(bowl.hasBanana());
277 }
278
279
280 @Test
281 public void testListArgumentResolution() throws Exception
282 {
283 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
284 Object payload = Arrays.asList(new Fruit[]{new Apple(), new Banana()});
285 RequestContext.setEvent(getTestEvent(payload));
286
287 FruitBowl bowl = new FruitBowl();
288 assertFalse(bowl.hasApple());
289 assertFalse(bowl.hasBanana());
290
291 resolverSet.invoke(bowl, RequestContext.getEventContext());
292
293 assertTrue(bowl.hasApple());
294 assertTrue(bowl.hasBanana());
295 }
296
297
298 @Test
299 public void testExplicitOverride() throws Exception
300 {
301 EntryPointResolverSet resolverSet = new LegacyEntryPointResolverSet();
302
303 Object payload = Arrays.asList(new Fruit[]{new Apple(), new Banana()});
304 RequestContext.setEvent(getTestEvent(payload));
305
306 final String methodName = "setFruit";
307 final String propertyName = MuleProperties.MULE_METHOD_PROPERTY;
308 RequestContext.getEventContext().getMessage().setOutboundProperty(propertyName, methodName);
309
310 FruitBowl bowl = new FruitBowl();
311 assertFalse(bowl.hasApple());
312 assertFalse(bowl.hasBanana());
313
314 resolverSet.invoke(bowl, RequestContext.getEventContext());
315
316 assertTrue(bowl.hasApple());
317 assertTrue(bowl.hasBanana());
318 }
319 }