1
2
3
4
5
6
7 package org.mule.test.construct;
8
9 import static org.junit.Assert.assertEquals;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNotSame;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15
16 import org.mule.DefaultMuleMessage;
17 import org.mule.api.MuleEvent;
18 import org.mule.api.MuleMessage;
19 import org.mule.api.MuleMessageCollection;
20 import org.mule.api.config.ThreadingProfile;
21 import org.mule.api.endpoint.InboundEndpoint;
22 import org.mule.api.transport.PropertyScope;
23 import org.mule.construct.SimpleFlowConstruct;
24 import org.mule.endpoint.DefaultInboundEndpoint;
25 import org.mule.source.StartableCompositeMessageSource;
26 import org.mule.tck.junit4.FunctionalTestCase;
27 import org.mule.tck.testmodels.fruit.Apple;
28 import org.mule.tck.testmodels.fruit.Banana;
29 import org.mule.tck.testmodels.fruit.Fruit;
30 import org.mule.tck.testmodels.fruit.FruitBowl;
31 import org.mule.tck.testmodels.fruit.Orange;
32
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36
37 import org.junit.Test;
38
39 public class FlowConfigurationFunctionalTestCase extends FunctionalTestCase
40 {
41
42 public FlowConfigurationFunctionalTestCase()
43 {
44 setDisposeContextPerClass(true);
45 }
46
47 @Override
48 protected String getConfigResources()
49 {
50 return "org/mule/test/construct/flow.xml";
51 }
52
53 @Test
54 public void testFlow() throws Exception
55 {
56 final SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow");
57 assertEquals(DefaultInboundEndpoint.class, flow.getMessageSource().getClass());
58 assertEquals("vm://in", ((InboundEndpoint) flow.getMessageSource()).getEndpointURI()
59 .getUri()
60 .toString());
61 assertEquals(5, flow.getMessageProcessors().size());
62 assertNotNull(flow.getExceptionListener());
63
64 assertEquals("012xyzabc3",
65 muleContext.getClient()
66 .send("vm://in", new DefaultMuleMessage("0", muleContext))
67 .getPayloadAsString());
68
69 }
70
71 @Test
72 public void testFlowCompositeSource() throws Exception
73 {
74 final SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow2");
75 assertEquals(StartableCompositeMessageSource.class, flow.getMessageSource().getClass());
76 assertEquals(2, flow.getMessageProcessors().size());
77
78 assertEquals("01xyz",
79 muleContext.getClient()
80 .send("vm://in2", new DefaultMuleMessage("0", muleContext))
81 .getPayloadAsString());
82 assertEquals("01xyz",
83 muleContext.getClient()
84 .send("vm://in3", new DefaultMuleMessage("0", muleContext))
85 .getPayloadAsString());
86
87 }
88
89 @Test
90 public void testInOutFlow() throws Exception
91 {
92 muleContext.getClient().send("vm://inout-in", new DefaultMuleMessage("0", muleContext));
93 assertEquals("0", muleContext.getClient()
94 .request("vm://inout-out", RECEIVE_TIMEOUT)
95 .getPayloadAsString());
96 }
97
98 @Test
99 public void testInOutAppendFlow() throws Exception
100 {
101 muleContext.getClient().send("vm://inout-append-in", new DefaultMuleMessage("0", muleContext));
102 assertEquals("0inout", muleContext.getClient()
103 .request("vm://inout-append-out", RECEIVE_TIMEOUT)
104 .getPayloadAsString());
105 }
106
107 @Test
108 public void testSplitAggregateFlow() throws Exception
109 {
110 final Apple apple = new Apple();
111 final Banana banana = new Banana();
112 final Orange orange = new Orange();
113 final FruitBowl fruitBowl = new FruitBowl(apple, banana);
114 fruitBowl.addFruit(orange);
115
116 muleContext.getClient().send("vm://split-aggregate-in",
117 new DefaultMuleMessage(fruitBowl, muleContext));
118
119 final MuleMessage result = muleContext.getClient().request("vm://split-aggregate-out",
120 RECEIVE_TIMEOUT);
121
122 assertNotNull(result);
123 assertTrue(result instanceof MuleMessageCollection);
124 final MuleMessageCollection coll = (MuleMessageCollection) result;
125 assertEquals(3, coll.size());
126 final List<?> results = (List<?>) coll.getPayload();
127
128 assertTrue(apple.isBitten());
129 assertTrue(banana.isBitten());
130 assertTrue(orange.isBitten());
131
132 assertTrue(results.contains(apple));
133 assertTrue(results.contains(banana));
134 assertTrue(results.contains(orange));
135 }
136
137 @Test
138 public void testSplitAggregateListFlow() throws Exception
139 {
140 final Apple apple = new Apple();
141 final Banana banana = new Banana();
142 final Orange orange = new Orange();
143 final FruitBowl fruitBowl = new FruitBowl(apple, banana);
144 fruitBowl.addFruit(orange);
145
146 muleContext.getClient().send("vm://split-aggregate-list-in",
147 new DefaultMuleMessage(fruitBowl.getFruit(), muleContext));
148
149 final MuleMessage result = muleContext.getClient().request("vm://split-aggregate-list-out",
150 RECEIVE_TIMEOUT);
151
152 assertNotNull(result);
153 assertTrue(result instanceof MuleMessageCollection);
154 final MuleMessageCollection coll = (MuleMessageCollection) result;
155 assertEquals(3, coll.size());
156 final List<?> results = (List<?>) coll.getPayload();
157
158 assertTrue(apple.isBitten());
159 assertTrue(banana.isBitten());
160 assertTrue(orange.isBitten());
161
162 assertTrue(results.contains(apple));
163 assertTrue(results.contains(banana));
164 assertTrue(results.contains(orange));
165 }
166
167 @Test
168 public void testSplitAggregateListFlowSingleItem() throws Exception
169 {
170 final Apple apple = new Apple();
171 final FruitBowl fruitBowl = new FruitBowl();
172 fruitBowl.addFruit(apple);
173
174 muleContext.getClient().send("vm://split-aggregate-singleton-list-in",
175 new DefaultMuleMessage(fruitBowl.getFruit(), muleContext));
176
177 final MuleMessage result = muleContext.getClient().request("vm://split-aggregate-singleton-list-out",
178 RECEIVE_TIMEOUT);
179
180 assertNotNull(result);
181 assertTrue(result instanceof MuleMessageCollection);
182 final MuleMessageCollection coll = (MuleMessageCollection) result;
183 assertEquals(1, coll.size());
184 final List<?> results = (List<?>) coll.getPayload();
185
186 assertTrue(apple.isBitten());
187
188 assertTrue(results.contains(apple));
189 }
190
191 @Test
192 public void testSplitAggregateResponseListFlow() throws Exception
193 {
194 final Apple apple = new Apple();
195 final Banana banana = new Banana();
196 final Orange orange = new Orange();
197 final FruitBowl fruitBowl = new FruitBowl(apple, banana);
198 fruitBowl.addFruit(orange);
199
200 final MuleMessage result = muleContext.getClient().send("vm://split-aggregate-response-list-in",
201 new DefaultMuleMessage(fruitBowl.getFruit(), muleContext));
202
203 assertNotNull(result);
204 assertTrue(result instanceof MuleMessageCollection);
205 final MuleMessageCollection coll = (MuleMessageCollection) result;
206 assertEquals(3, coll.size());
207 final List<?> results = (List<?>) coll.getPayload();
208 assertEquals(3, results.size());
209
210 assertTrue(apple.isBitten());
211 assertTrue(banana.isBitten());
212 assertTrue(orange.isBitten());
213
214 assertTrue(results.contains(apple));
215 assertTrue(results.contains(banana));
216 assertTrue(results.contains(orange));
217 }
218
219 @Test
220 public void testSplitAggregateResponseListFlowSingleItem() throws Exception
221 {
222 final Apple apple = new Apple();
223 final FruitBowl fruitBowl = new FruitBowl();
224 fruitBowl.addFruit(apple);
225
226 final MuleMessage result = muleContext.getClient().send("vm://split-aggregate-response-singleton-list-in",
227 new DefaultMuleMessage(fruitBowl.getFruit(), muleContext));
228
229 assertNotNull(result);
230 assertTrue(result instanceof MuleMessageCollection);
231 final MuleMessageCollection coll = (MuleMessageCollection) result;
232 assertEquals(1, coll.size());
233 final List<?> results = (List<?>) coll.getPayload();
234 assertEquals(1, results.size());
235
236 assertTrue(apple.isBitten());
237 assertTrue(results.contains(apple));
238 }
239
240 @Test
241 public void testSplitAggregateMapFlow() throws Exception
242 {
243 Map map = new HashMap<String, Fruit>();
244 final Apple apple = new Apple();
245 final Banana banana = new Banana();
246 final Orange orange = new Orange();
247 map.put("apple", apple);
248 map.put("banana", banana);
249 map.put("orange", orange);
250
251 MuleEvent result = ((SimpleFlowConstruct) muleContext.getRegistry().lookupFlowConstruct("split-map")).process(getTestEvent(map));
252
253 assertNotNull(result);
254 assertTrue(result.getMessage() instanceof MuleMessageCollection);
255
256 final MuleMessageCollection coll = (MuleMessageCollection) result.getMessage();
257 assertEquals(3, coll.size());
258 final MuleMessage[] results = coll.getMessagesAsArray();
259
260 assertTrue(apple.isBitten());
261 assertTrue(banana.isBitten());
262 assertTrue(orange.isBitten());
263
264 assertNotNull(results[0].getProperty("key", PropertyScope.INVOCATION));
265 assertNotNull(results[1].getProperty("key", PropertyScope.INVOCATION));
266 assertNotNull(results[2].getProperty("key", PropertyScope.INVOCATION));
267 }
268
269 @Test
270 public void testSplitFilterAggregateFlow() throws Exception
271 {
272 final Apple apple = new Apple();
273 final Banana banana = new Banana();
274 final Orange orange = new Orange();
275 final FruitBowl fruitBowl = new FruitBowl(apple, banana);
276 fruitBowl.addFruit(orange);
277
278 muleContext.getClient().send("vm://split-filter-aggregate-in",
279 new DefaultMuleMessage(fruitBowl, muleContext));
280
281 final MuleMessage result = muleContext.getClient().request("vm://split-filter-aggregate-out",
282 RECEIVE_TIMEOUT);
283
284 assertNotNull(result);
285 assertTrue(result instanceof MuleMessageCollection);
286 final MuleMessageCollection coll = (MuleMessageCollection) result;
287 assertEquals(1, coll.size());
288 final List<?> results = (List<?>) coll.getPayload();
289
290 assertTrue(results.contains(apple));
291 assertFalse(results.contains(banana));
292 assertFalse(results.contains(orange));
293 }
294
295 @Test
296 public void testMessageChunkSplitAggregateFlow() throws Exception
297 {
298 String payload = "";
299 for (int i = 0; i < 100; i++)
300 {
301 payload += TEST_MESSAGE;
302 }
303
304 muleContext.getClient().send("vm://message-chunk-split-aggregate-in",
305 new DefaultMuleMessage(payload, muleContext));
306
307 final MuleMessage result = muleContext.getClient().request("vm://message-chunk-split-aggregate-out",
308 RECEIVE_TIMEOUT);
309
310 assertNotNull(result);
311 assertNotSame(payload, result.getPayload());
312 assertEquals(payload, result.getPayloadAsString());
313 }
314
315 @Test
316 public void testComponentsFlow() throws Exception
317 {
318 final MuleMessage result = muleContext.getClient().send("vm://components",
319 new DefaultMuleMessage(TEST_MESSAGE, muleContext));
320
321 assertNotNull(result);
322 assertNotSame(TEST_MESSAGE + "test", result.getPayload());
323 }
324
325 @Test
326 public void testWireTapFlow() throws Exception
327 {
328 muleContext.getClient().send("vm://wiretap-in", new DefaultMuleMessage(TEST_MESSAGE, muleContext));
329
330 final MuleMessage result = muleContext.getClient().request("vm://wiretap-out", RECEIVE_TIMEOUT);
331 final MuleMessage tapResult = muleContext.getClient().request("vm://wiretap-tap", RECEIVE_TIMEOUT);
332
333 assertNotNull(result);
334 assertNotNull(tapResult);
335 assertNotSame(result, tapResult);
336 assertEquals(TEST_MESSAGE + "inout", result.getPayloadAsString());
337 assertEquals(TEST_MESSAGE + "intap", tapResult.getPayloadAsString());
338 }
339
340 @Test
341 public void testResponseElement() throws Exception
342 {
343 final MuleMessage result = muleContext.getClient().send("vm://response",
344 new DefaultMuleMessage("", muleContext));
345
346 assertNotNull(result);
347 assertEquals("abcdefghi", result.getPayloadAsString());
348 }
349
350 @Test
351 public void testAsyncOneWayEndpoint() throws Exception
352 {
353 muleContext.getClient().send("vm://async-oneway-in", new DefaultMuleMessage("0", muleContext));
354 final MuleMessage result = muleContext.getClient().request("vm://async-oneway-out", RECEIVE_TIMEOUT);
355 final MuleMessage asyncResult = muleContext.getClient().request("vm://async-async-oneway-out",
356 RECEIVE_TIMEOUT);
357
358 assertNotNull(result);
359 assertNotNull(asyncResult);
360 assertEquals("0ac", result.getPayloadAsString());
361 assertEquals("0ab", asyncResult.getPayloadAsString());
362 }
363
364 @Test
365 public void testAsyncRequestResponseEndpoint() throws Exception
366 {
367 muleContext.getClient().send("vm://async-requestresponse-in",
368 new DefaultMuleMessage("0", muleContext));
369 final MuleMessage result = muleContext.getClient().request("vm://async-requestresponse-out",
370 RECEIVE_TIMEOUT);
371 final MuleMessage asyncResult = muleContext.getClient().request(
372 "vm://async-async-requestresponse-out", RECEIVE_TIMEOUT);
373
374 assertNotNull(result);
375 assertNotNull(asyncResult);
376 assertEquals("0ac", result.getPayloadAsString());
377 assertEquals("0ab", asyncResult.getPayloadAsString());
378 }
379
380 @Test
381 public void testAsyncTransactionalEndpoint() throws Exception
382 {
383 MuleMessage response = muleContext.getClient().send("vm://async-tx-in",
384 new DefaultMuleMessage("0", muleContext));
385 assertNotNull(response);
386 assertNotNull(response.getExceptionPayload());
387
388 final MuleMessage result = muleContext.getClient().request("vm://async-requestresponse-out",
389 RECEIVE_TIMEOUT);
390 final MuleMessage asyncResult = muleContext.getClient().request("vm://async-async-oneway-out",
391 RECEIVE_TIMEOUT);
392
393 assertNull(result);
394 assertNull(asyncResult);
395 }
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413 @Test
414 public void testMulticaster() throws Exception
415 {
416 muleContext.getClient()
417 .send("vm://multicaster-in", new DefaultMuleMessage(TEST_MESSAGE, muleContext));
418
419 final MuleMessage result1 = muleContext.getClient().request("vm://multicaster-out1", RECEIVE_TIMEOUT);
420 final MuleMessage result2 = muleContext.getClient().request("vm://multicaster-out2", RECEIVE_TIMEOUT);
421 final MuleMessage result3 = muleContext.getClient().request("vm://multicaster-out3", RECEIVE_TIMEOUT);
422
423 assertNotNull(result1);
424 assertNotNull(result2);
425 assertNotNull(result3);
426 assertNotSame(result1, result2);
427 assertNotSame(result1, result3);
428 assertNotSame(result2, result3);
429
430 assertEquals(TEST_MESSAGE, result1.getPayload());
431 assertEquals(TEST_MESSAGE, result1.getPayload());
432 assertEquals(TEST_MESSAGE, result1.getPayload());
433
434 }
435
436 @Test
437 public void testRecipientList() throws Exception
438 {
439 muleContext.getClient().send("vm://recipient-list-in",
440 new DefaultMuleMessage(TEST_MESSAGE, muleContext));
441
442 final MuleMessage result1 = muleContext.getClient().request("vm://recipient-list-out1",
443 RECEIVE_TIMEOUT);
444 final MuleMessage result2 = muleContext.getClient().request("vm://recipient-list-out2",
445 RECEIVE_TIMEOUT);
446 final MuleMessage result3 = muleContext.getClient().request("vm://recipient-list-out3",
447 RECEIVE_TIMEOUT);
448
449 assertNotNull(result1);
450 assertNotNull(result2);
451 assertNotNull(result3);
452 assertNotSame(result1, result2);
453 assertNotSame(result1, result3);
454 assertNotSame(result2, result3);
455
456 assertEquals(TEST_MESSAGE, result1.getPayload());
457 assertEquals(TEST_MESSAGE, result2.getPayload());
458 assertEquals(TEST_MESSAGE, result3.getPayload());
459
460 }
461
462 @Test
463 public void testChoiceWithoutOutboundEndpoints() throws Exception
464 {
465 assertEquals("foo Hello foo",
466 muleContext.getClient()
467 .send("vm://choice2-in", new DefaultMuleMessage("foo", muleContext))
468 .getPayloadAsString());
469 assertEquals("bar Hello bar",
470 muleContext.getClient()
471 .send("vm://choice2-in", new DefaultMuleMessage("bar", muleContext))
472 .getPayloadAsString());
473 assertEquals("egh Hello ?",
474 muleContext.getClient()
475 .send("vm://choice2-in", new DefaultMuleMessage("egh", muleContext))
476 .getPayloadAsString());
477 }
478
479 @Test
480 public void testFlowRef() throws Exception
481 {
482 assertEquals("012xyzabc312xyzabc3",
483 muleContext.getClient()
484 .send("vm://flow-ref-in", new DefaultMuleMessage("0", muleContext))
485 .getPayloadAsString());
486 }
487
488 @Test
489 public void testInvoke() throws Exception
490 {
491 assertEquals("0recieved",
492 muleContext.getClient()
493 .send("vm://invoke-in", new DefaultMuleMessage("0", muleContext))
494 .getPayloadAsString());
495 }
496
497 @Test
498 public void testInvoke2() throws Exception
499 {
500 MuleMessage message = new DefaultMuleMessage("0", muleContext);
501 message.setOutboundProperty("one", "header1val");
502 assertEquals("header1valrecieved", muleContext.getClient()
503 .send("vm://invoke2-in", message)
504 .getPayloadAsString());
505 }
506
507 @Test
508 public void testInvoke3() throws Exception
509 {
510
511 muleContext.getClient().send("vm://invoke3-in", new DefaultMuleMessage("0", muleContext));
512 }
513
514 @Test
515 public void testInvoke4() throws Exception
516 {
517
518 muleContext.getClient().send("vm://invoke4-in", new DefaultMuleMessage("0", muleContext));
519 }
520
521 @Test
522 public void testEnrichWithAttributes() throws Exception
523 {
524 MuleMessage message = new DefaultMuleMessage("0", muleContext);
525 assertEquals(
526 "0Hello",
527 muleContext.getClient()
528 .send("vm://enrich-in", message)
529 .getProperty("helloHeader", PropertyScope.INBOUND));
530 }
531
532 @Test
533 public void testEnrichWithElements() throws Exception
534 {
535 MuleMessage message = new DefaultMuleMessage("0", muleContext);
536 MuleMessage result = muleContext.getClient().send("vm://enrich2-in", message);
537
538 assertEquals("0Hello", result.getProperty("helloHeader", PropertyScope.INBOUND));
539 assertEquals("0Hello", result.getProperty("helloHeader2", PropertyScope.INBOUND));
540 }
541
542 @Test
543 public void testEnrichUsingComponent() throws Exception
544 {
545
546 MuleMessage message = new DefaultMuleMessage("0", muleContext);
547 MuleMessage result = muleContext.getClient().send("vm://enrichcomponent-in", message);
548
549 assertEquals("0", result.getProperty("echoHeader", PropertyScope.INBOUND));
550 }
551
552 @Test
553 public void testEnrichUsingComponent2() throws Exception
554 {
555
556 MuleMessage message = new DefaultMuleMessage("0", muleContext);
557 MuleMessage result = muleContext.getClient().send("vm://enrichcomponent2-in", message);
558
559 assertEquals("0", result.getProperty("echoHeader", PropertyScope.INBOUND));
560 }
561
562 @Test
563 public void testLoggerMessage() throws Exception
564 {
565 MuleMessage message = new DefaultMuleMessage("0", muleContext);
566 muleContext.getClient().send("vm://loggermessage-in", message);
567 }
568
569 @Test
570 public void testLoggerHeader() throws Exception
571 {
572 MuleMessage message = new DefaultMuleMessage("0", muleContext);
573 message.setOutboundProperty("toLog", "valueToLog");
574 muleContext.getClient().send("vm://loggerheader-in", message);
575 }
576
577 static class Pojo
578 {
579
580 public void method()
581 {
582
583 }
584
585 public void method(Object arg1, Object arg2)
586 {
587
588 }
589 }
590
591 @Test
592 public void testFlowThreadingProfile() throws Exception
593 {
594 SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow-threading-profile");
595 assertTrue(flow.getThreadingProfile().isDoThreading());
596 assertEquals(2, flow.getThreadingProfile().getMaxThreadsActive());
597 assertEquals(1, flow.getThreadingProfile().getMaxThreadsIdle());
598 assertEquals(ThreadingProfile.WHEN_EXHAUSTED_RUN, flow.getThreadingProfile().getPoolExhaustedAction());
599 }
600
601 @Test
602 public void testCustomMessageRouter() throws Exception
603 {
604 MuleMessage message = new DefaultMuleMessage("", muleContext);
605 MuleMessage result = muleContext.getClient().send("vm://customRouter-in", message);
606 assertEquals("abc", result.getPayloadAsString());
607 }
608
609 @Test
610 public void testPoll() throws Exception
611 {
612 MuleMessage message = muleContext.getClient().request("vm://poll-out", RECEIVE_TIMEOUT);
613 assertNotNull(message);
614 assertEquals(" Hello fooout", message.getPayloadAsString());
615 }
616
617 @Test
618 public void testPollFlowRef() throws Exception
619 {
620 MuleMessage message = muleContext.getClient().request("vm://poll2-out", RECEIVE_TIMEOUT);
621 assertNotNull(message);
622 assertEquals("pollappendout", message.getPayloadAsString());
623 }
624
625 }