1
2
3
4
5
6
7
8
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
266
267
268
269
270
271
272
273
274
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 }