View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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 }