View Javadoc

1   /*
2    * $Id$
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.test.construct;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleException;
15  import org.mule.api.MuleMessage;
16  import org.mule.api.MuleMessageCollection;
17  import org.mule.api.config.ThreadingProfile;
18  import org.mule.api.endpoint.InboundEndpoint;
19  import org.mule.construct.SimpleFlowConstruct;
20  import org.mule.endpoint.DefaultInboundEndpoint;
21  import org.mule.source.StartableCompositeMessageSource;
22  import org.mule.tck.FunctionalTestCase;
23  import org.mule.tck.testmodels.fruit.Apple;
24  import org.mule.tck.testmodels.fruit.Banana;
25  import org.mule.tck.testmodels.fruit.FruitBowl;
26  import org.mule.tck.testmodels.fruit.Orange;
27  
28  import java.util.List;
29  
30  public class FlowConfigurationFunctionalTestCase extends FunctionalTestCase
31  {
32  
33      @Override
34      protected String getConfigResources()
35      {
36          return "org/mule/test/construct/flow.xml";
37      }
38  
39      @Override
40      protected void doSetUp() throws Exception
41      {
42          super.setDisposeManagerPerSuite(true);
43          super.doSetUp();
44      }
45  
46      public void testFlow() throws MuleException, Exception
47      {
48          final SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow");
49          assertEquals(DefaultInboundEndpoint.class, flow.getMessageSource().getClass());
50          assertEquals("vm://in", ((InboundEndpoint) flow.getMessageSource()).getEndpointURI()
51              .getUri()
52              .toString());
53          assertEquals(5, flow.getMessageProcessors().size());
54          assertNotNull(flow.getExceptionListener());
55  
56          assertEquals("012xyzabc3", muleContext.getClient().send("vm://in",
57              new DefaultMuleMessage("0", muleContext)).getPayloadAsString());
58  
59      }
60  
61      public void testFlowCompositeSource() throws MuleException, Exception
62      {
63          final SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow2");
64          assertEquals(StartableCompositeMessageSource.class, flow.getMessageSource().getClass());
65          assertEquals(2, flow.getMessageProcessors().size());
66  
67          assertEquals("01xyz", muleContext.getClient().send("vm://in2",
68              new DefaultMuleMessage("0", muleContext)).getPayloadAsString());
69          assertEquals("01xyz", muleContext.getClient().send("vm://in3",
70              new DefaultMuleMessage("0", muleContext)).getPayloadAsString());
71  
72      }
73  
74      public void testInOutFlow() throws MuleException, Exception
75      {
76          muleContext.getClient().send("vm://inout-in", new DefaultMuleMessage("0", muleContext));
77          assertEquals("0", muleContext.getClient()
78              .request("vm://inout-out", RECEIVE_TIMEOUT)
79              .getPayloadAsString());
80      }
81  
82      public void testInOutAppendFlow() throws MuleException, Exception
83      {
84          muleContext.getClient().send("vm://inout-append-in", new DefaultMuleMessage("0", muleContext));
85          assertEquals("0inout", muleContext.getClient()
86              .request("vm://inout-append-out", RECEIVE_TIMEOUT)
87              .getPayloadAsString());
88      }
89  
90      public void testSplitAggregateFlow() throws MuleException, Exception
91      {
92          final Apple apple = new Apple();
93          final Banana banana = new Banana();
94          final Orange orange = new Orange();
95          final FruitBowl fruitBowl = new FruitBowl(apple, banana);
96          fruitBowl.addFruit(orange);
97  
98          muleContext.getClient().send("vm://split-aggregate-in",
99              new DefaultMuleMessage(fruitBowl, muleContext));
100 
101         final MuleMessage result = muleContext.getClient().request("vm://split-aggregate-out",
102             RECEIVE_TIMEOUT);
103 
104         assertNotNull(result);
105         assertTrue(result instanceof MuleMessageCollection);
106         final MuleMessageCollection coll = (MuleMessageCollection) result;
107         assertEquals(3, coll.size());
108         final List<?> results = (List<?>) coll.getPayload();
109 
110         assertTrue(apple.isBitten());
111         assertTrue(banana.isBitten());
112         assertTrue(orange.isBitten());
113 
114         assertTrue(results.contains(apple));
115         assertTrue(results.contains(banana));
116         assertTrue(results.contains(orange));
117     }
118 
119     public void testSplitAggregateListFlow() throws MuleException, Exception
120     {
121         final Apple apple = new Apple();
122         final Banana banana = new Banana();
123         final Orange orange = new Orange();
124         final FruitBowl fruitBowl = new FruitBowl(apple, banana);
125         fruitBowl.addFruit(orange);
126 
127         muleContext.getClient().send("vm://split-aggregate-list-in",
128             new DefaultMuleMessage(fruitBowl.getFruit(), muleContext));
129 
130         final MuleMessage result = muleContext.getClient().request("vm://split-aggregate-list-out",
131             RECEIVE_TIMEOUT);
132 
133         assertNotNull(result);
134         assertTrue(result instanceof MuleMessageCollection);
135         final MuleMessageCollection coll = (MuleMessageCollection) result;
136         assertEquals(3, coll.size());
137         final List<?> results = (List<?>) coll.getPayload();
138 
139         assertTrue(apple.isBitten());
140         assertTrue(banana.isBitten());
141         assertTrue(orange.isBitten());
142 
143         assertTrue(results.contains(apple));
144         assertTrue(results.contains(banana));
145         assertTrue(results.contains(orange));
146     }
147 
148     public void testSplitFilterAggregateFlow() throws MuleException, Exception
149     {
150         final Apple apple = new Apple();
151         final Banana banana = new Banana();
152         final Orange orange = new Orange();
153         final FruitBowl fruitBowl = new FruitBowl(apple, banana);
154         fruitBowl.addFruit(orange);
155 
156         muleContext.getClient().send("vm://split-filter-aggregate-in",
157             new DefaultMuleMessage(fruitBowl, muleContext));
158 
159         final MuleMessage result = muleContext.getClient().request("vm://split-filter-aggregate-out",
160             RECEIVE_TIMEOUT);
161 
162         assertNotNull(result);
163         assertTrue(result instanceof MuleMessageCollection);
164         final MuleMessageCollection coll = (MuleMessageCollection) result;
165         assertEquals(1, coll.size());
166         final List<?> results = (List<?>) coll.getPayload();
167 
168         assertTrue(results.contains(apple));
169         assertFalse(results.contains(banana));
170         assertFalse(results.contains(orange));
171     }
172 
173     public void testMessageChunkSplitAggregateFlow() throws MuleException, Exception
174     {
175         String payload = "";
176         for (int i = 0; i < 100; i++)
177         {
178             payload += TEST_MESSAGE;
179         }
180 
181         muleContext.getClient().send("vm://message-chunk-split-aggregate-in",
182             new DefaultMuleMessage(payload, muleContext));
183 
184         final MuleMessage result = muleContext.getClient().request("vm://message-chunk-split-aggregate-out",
185             RECEIVE_TIMEOUT);
186 
187         assertNotNull(result);
188         assertNotSame(payload, result.getPayload());
189         assertEquals(payload, result.getPayloadAsString());
190     }
191 
192     public void testComponentsFlow() throws MuleException, Exception
193     {
194         final MuleMessage result = muleContext.getClient().send("vm://components",
195             new DefaultMuleMessage(TEST_MESSAGE, muleContext));
196 
197         assertNotNull(result);
198         assertNotSame(TEST_MESSAGE + "test", result.getPayload());
199     }
200 
201     public void testWireTapFlow() throws MuleException, Exception
202     {
203         muleContext.getClient().send("vm://wiretap-in", new DefaultMuleMessage(TEST_MESSAGE, muleContext));
204 
205         final MuleMessage result = muleContext.getClient().request("vm://wiretap-out", RECEIVE_TIMEOUT);
206         final MuleMessage tapResult = muleContext.getClient().request("vm://wiretap-tap", RECEIVE_TIMEOUT);
207 
208         assertNotNull(result);
209         assertNotNull(tapResult);
210         assertNotSame(result, tapResult);
211         assertEquals(TEST_MESSAGE + "inout", result.getPayloadAsString());
212         assertEquals(TEST_MESSAGE + "intap", tapResult.getPayloadAsString());
213     }
214 
215     public void testResponseElement() throws MuleException, Exception
216     {
217         final MuleMessage result = muleContext.getClient().send("vm://response",
218             new DefaultMuleMessage("", muleContext));
219 
220         assertNotNull(result);
221         assertEquals("abcdefghi", result.getPayloadAsString());
222     }
223 
224     public void testAsyncOneWayEndpoint() throws MuleException, Exception
225     {
226         muleContext.getClient().send("vm://async-oneway-in", new DefaultMuleMessage("0", muleContext));
227         final MuleMessage result = muleContext.getClient().request("vm://async-oneway-out", RECEIVE_TIMEOUT);
228         final MuleMessage asyncResult = muleContext.getClient().request("vm://async-async-oneway-out",
229             RECEIVE_TIMEOUT);
230 
231         assertNotNull(result);
232         assertNotNull(asyncResult);
233         assertEquals("0ac", result.getPayloadAsString());
234         assertEquals("0ab", asyncResult.getPayloadAsString());
235     }
236 
237     public void testAsyncRequestResponseEndpoint() throws MuleException, Exception
238     {
239         muleContext.getClient().send("vm://async-requestresponse-in", new DefaultMuleMessage("0", muleContext));
240         final MuleMessage result = muleContext.getClient().request("vm://async-requestresponse-out", RECEIVE_TIMEOUT);
241         final MuleMessage asyncResult = muleContext.getClient().request("vm://async-async-requestresponse-out",
242             RECEIVE_TIMEOUT);
243 
244         assertNotNull(result);
245         assertNotNull(asyncResult);
246         assertEquals("0ac", result.getPayloadAsString());
247         assertEquals("0ab", asyncResult.getPayloadAsString());
248     }
249 
250     public void testAsyncTransactionalEndpoint() throws MuleException, Exception
251     {
252             MuleMessage response = muleContext.getClient().send("vm://async-tx-in", new DefaultMuleMessage("0", muleContext));
253             assertNotNull(response);
254             assertNotNull(response.getExceptionPayload());
255 
256             final MuleMessage result = muleContext.getClient().request("vm://async-requestresponse-out", RECEIVE_TIMEOUT);
257             final MuleMessage asyncResult = muleContext.getClient().request("vm://async-async-oneway-out",
258                 RECEIVE_TIMEOUT);
259 
260             assertNull(result);
261             assertNull(asyncResult);
262     }
263 
264     
265 //    public void testTransactional() throws MuleException, Exception
266 //    {
267 //        muleContext.getClient().dispatch("vm://transactional-in", new DefaultMuleMessage("", muleContext));
268 //
269 //    }
270 //
271 //    public void testTransactionalRollback() throws MuleException, Exception
272 //    {
273 //        muleContext.getClient().dispatch("vm://transactional-rollback-in",
274 //            new DefaultMuleMessage("", muleContext));
275 //
276 //    }
277 
278     public void testMulticaster() throws MuleException, Exception
279     {
280         muleContext.getClient()
281             .send("vm://multicaster-in", new DefaultMuleMessage(TEST_MESSAGE, muleContext));
282 
283         final MuleMessage result1 = muleContext.getClient().request("vm://multicaster-out1", RECEIVE_TIMEOUT);
284         final MuleMessage result2 = muleContext.getClient().request("vm://multicaster-out2", RECEIVE_TIMEOUT);
285         final MuleMessage result3 = muleContext.getClient().request("vm://multicaster-out3", RECEIVE_TIMEOUT);
286 
287         assertNotNull(result1);
288         assertNotNull(result2);
289         assertNotNull(result3);
290         assertNotSame(result1, result2);
291         assertNotSame(result1, result3);
292         assertNotSame(result2, result3);
293 
294         assertEquals(TEST_MESSAGE, result1.getPayload());
295         assertEquals(TEST_MESSAGE, result1.getPayload());
296         assertEquals(TEST_MESSAGE, result1.getPayload());
297 
298     }
299 
300     public void testRecipientList() throws MuleException, Exception
301     {
302         muleContext.getClient().send("vm://recipient-list-in",
303             new DefaultMuleMessage(TEST_MESSAGE, muleContext));
304 
305         final MuleMessage result1 = muleContext.getClient().request("vm://recipient-list-out1",
306             RECEIVE_TIMEOUT);
307         final MuleMessage result2 = muleContext.getClient().request("vm://recipient-list-out2",
308             RECEIVE_TIMEOUT);
309         final MuleMessage result3 = muleContext.getClient().request("vm://recipient-list-out3",
310             RECEIVE_TIMEOUT);
311 
312         assertNotNull(result1);
313         assertNotNull(result2);
314         assertNotNull(result3);
315         assertNotSame(result1, result2);
316         assertNotSame(result1, result3);
317         assertNotSame(result2, result3);
318 
319         assertEquals(TEST_MESSAGE, result1.getPayload());
320         assertEquals(TEST_MESSAGE, result2.getPayload());
321         assertEquals(TEST_MESSAGE, result3.getPayload());
322 
323     }
324     
325     public void testChoiceWithoutOutboundEndpoints() throws MuleException, Exception
326     {
327         assertEquals("foo Hello foo",muleContext.getClient().send("vm://choice2-in",
328             new DefaultMuleMessage("foo", muleContext)).getPayloadAsString());
329         assertEquals("bar Hello bar",muleContext.getClient().send("vm://choice2-in",
330             new DefaultMuleMessage("bar", muleContext)).getPayloadAsString());
331         assertEquals("egh Hello ?",muleContext.getClient().send("vm://choice2-in",
332             new DefaultMuleMessage("egh", muleContext)).getPayloadAsString());
333     }
334 
335     public void testFlowRef() throws MuleException, Exception
336     {
337         assertEquals("012xyzabc3", muleContext.getClient().send("vm://flow-ref-in",
338             new DefaultMuleMessage("0", muleContext)).getPayloadAsString());
339 
340     }
341     
342     public void testFlowThreadingProfile() throws MuleException, Exception
343     {
344         SimpleFlowConstruct flow = muleContext.getRegistry().lookupObject("flow-threading-profile");
345         assertTrue(flow.getThreadingProfile().isDoThreading());
346         assertEquals(2, flow.getThreadingProfile().getMaxThreadsActive());
347         assertEquals(1, flow.getThreadingProfile().getMaxThreadsIdle());
348         assertEquals(ThreadingProfile.WHEN_EXHAUSTED_RUN, flow.getThreadingProfile().getPoolExhaustedAction());
349     }
350     
351 }