1
2
3
4
5
6
7 package org.mule.routing;
8
9 import static org.junit.Assert.assertEquals;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertNull;
12 import static org.junit.Assert.assertTrue;
13
14 import org.mule.DefaultMessageCollection;
15 import org.mule.DefaultMuleEvent;
16 import org.mule.DefaultMuleMessage;
17 import org.mule.MessageExchangePattern;
18 import org.mule.api.MuleEvent;
19 import org.mule.api.MuleMessage;
20 import org.mule.api.MuleMessageCollection;
21 import org.mule.api.MuleSession;
22 import org.mule.api.endpoint.ImmutableEndpoint;
23 import org.mule.api.service.Service;
24 import org.mule.tck.MuleTestUtils;
25 import org.mule.tck.SensingNullMessageProcessor;
26 import org.mule.tck.junit4.AbstractMuleContextTestCase;
27 import org.mule.tck.testmodels.fruit.Apple;
28
29 import java.util.List;
30
31 import org.junit.Test;
32
33 public class SimpleCollectionAggregatorTestCase extends AbstractMuleContextTestCase
34 {
35
36 public SimpleCollectionAggregatorTestCase()
37 {
38 setStartContext(true);
39 }
40
41 @Test
42 public void testAggregateMultipleEvents() throws Exception
43 {
44 MuleSession session = getTestSession(getTestService(), muleContext);
45 Service testService = getTestService("test", Apple.class);
46 assertNotNull(testService);
47
48 SimpleCollectionAggregator router = new SimpleCollectionAggregator();
49 SensingNullMessageProcessor sensingMessageProcessor = getSensingNullMessageProcessor();
50 router.setListener(sensingMessageProcessor);
51 router.setMuleContext(muleContext);
52 router.setFlowConstruct(testService);
53 router.initialise();
54
55 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
56 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
57 MuleMessage message3 = new DefaultMuleMessage("test event C", muleContext);
58 message1.setCorrelationId(message1.getUniqueId());
59 message2.setCorrelationId(message1.getUniqueId());
60 message3.setCorrelationId(message1.getUniqueId());
61 message1.setCorrelationGroupSize(3);
62
63 ImmutableEndpoint endpoint = MuleTestUtils.getTestOutboundEndpoint(MessageExchangePattern.ONE_WAY,
64 muleContext);
65 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
66 MuleEvent event2 = new DefaultMuleEvent(message2, endpoint, session);
67 MuleEvent event3 = new DefaultMuleEvent(message3, endpoint, session);
68
69 assertNull(router.process(event1));
70 assertNull(router.process(event2));
71 assertNull(router.process(event3));
72
73 assertNotNull(sensingMessageProcessor.event);
74 MuleMessage nextMessage = sensingMessageProcessor.event.getMessage();
75 assertNotNull(nextMessage);
76 assertTrue(nextMessage instanceof MuleMessageCollection);
77 assertTrue(nextMessage.getPayload() instanceof List<?>);
78 List<String> payload = (List<String>) nextMessage.getPayload();
79 assertEquals(3, payload.size());
80 assertEquals("test event A", payload.get(0));
81 assertEquals("test event B", payload.get(1));
82 assertEquals("test event C", payload.get(2));
83 }
84
85 @Test
86 public void testAggregateSingleEvent() throws Exception
87 {
88 MuleSession session = getTestSession(getTestService(), muleContext);
89 Service testService = getTestService("test", Apple.class);
90 assertNotNull(testService);
91
92 SimpleCollectionAggregator router = new SimpleCollectionAggregator();
93 SensingNullMessageProcessor sensingMessageProcessor = getSensingNullMessageProcessor();
94 router.setListener(sensingMessageProcessor);
95 router.setMuleContext(muleContext);
96 router.setFlowConstruct(testService);
97 router.initialise();
98
99 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
100 message1.setCorrelationId(message1.getUniqueId());
101 message1.setCorrelationGroupSize(1);
102
103 ImmutableEndpoint endpoint = MuleTestUtils.getTestOutboundEndpoint(MessageExchangePattern.ONE_WAY,
104 muleContext);
105 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
106
107 MuleEvent resultEvent = router.process(event1);
108 assertNull(resultEvent);
109
110 assertNotNull(sensingMessageProcessor.event);
111 MuleMessage nextMessage = sensingMessageProcessor.event.getMessage();
112 assertNotNull(nextMessage);
113 assertTrue(nextMessage instanceof MuleMessageCollection);
114 assertTrue(nextMessage.getPayload() instanceof List<?>);
115 List<String> payload = (List<String>) nextMessage.getPayload();
116 assertEquals(1, payload.size());
117 assertEquals("test event A", payload.get(0));
118 }
119
120 @Test
121 public void testAggregateMessageCollections() throws Exception
122 {
123 MuleSession session = getTestSession(getTestService(), muleContext);
124 Service testService = getTestService("test", Apple.class);
125 assertNotNull(testService);
126
127 SimpleCollectionAggregator router = new SimpleCollectionAggregator();
128 router.setMuleContext(muleContext);
129 router.setFlowConstruct(testService);
130 router.initialise();
131
132 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
133 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
134 MuleMessage message3 = new DefaultMuleMessage("test event C", muleContext);
135 MuleMessage message4 = new DefaultMuleMessage("test event D", muleContext);
136 MuleMessageCollection messageCollection1 = new DefaultMessageCollection(muleContext);
137 MuleMessageCollection messageCollection2 = new DefaultMessageCollection(muleContext);
138 messageCollection1.addMessage(message1);
139 messageCollection1.addMessage(message2);
140 messageCollection2.addMessage(message3);
141 messageCollection2.addMessage(message4);
142
143 messageCollection1.setCorrelationGroupSize(2);
144 messageCollection1.setCorrelationId(messageCollection1.getUniqueId());
145 messageCollection2.setCorrelationGroupSize(2);
146 messageCollection2.setCorrelationId(messageCollection1.getUniqueId());
147
148 ImmutableEndpoint endpoint = MuleTestUtils.getTestOutboundEndpoint(MessageExchangePattern.ONE_WAY,
149 muleContext);
150 MuleEvent event1 = new DefaultMuleEvent(messageCollection1, endpoint, session);
151 MuleEvent event2 = new DefaultMuleEvent(messageCollection2, endpoint, session);
152
153 assertNull(router.process(event1));
154 MuleEvent resultEvent = router.process(event2);
155 assertNotNull(resultEvent);
156 MuleMessage resultMessage = resultEvent.getMessage();
157 assertNotNull(resultMessage);
158 List<List<String>> payload = (List<List<String>>) resultMessage.getPayload();
159 assertEquals(2, payload.size());
160 assertEquals("test event A", ((List) payload.get(0)).get(0));
161 assertEquals("test event B", ((List) payload.get(0)).get(1));
162 assertEquals("test event C", ((List) payload.get(1)).get(0));
163 assertEquals("test event D", ((List) payload.get(1)).get(1));
164
165 }
166
167 }