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.assertSame;
13 import static org.junit.Assert.assertTrue;
14
15 import org.mule.DefaultMessageCollection;
16 import org.mule.DefaultMuleEvent;
17 import org.mule.DefaultMuleMessage;
18 import org.mule.api.MuleContext;
19 import org.mule.api.MuleEvent;
20 import org.mule.api.MuleMessage;
21 import org.mule.api.MuleMessageCollection;
22 import org.mule.api.MuleSession;
23 import org.mule.api.endpoint.InboundEndpoint;
24 import org.mule.api.routing.RouterResultsHandler;
25 import org.mule.tck.junit4.AbstractMuleTestCase;
26
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.List;
30
31 import org.junit.Test;
32 import org.mockito.Mockito;
33
34 public class DefaultRouterResultsHandlerTestCase extends AbstractMuleTestCase
35 {
36
37 protected RouterResultsHandler resultsHandler = new DefaultRouterResultsHandler();
38 protected MuleContext muleContext = Mockito.mock(MuleContext.class);
39 protected MuleSession session = Mockito.mock(MuleSession.class);
40 protected InboundEndpoint endpoint = Mockito.mock(InboundEndpoint.class);
41
42 @Test
43 public void aggregateNoEvent()
44 {
45 MuleEvent result = resultsHandler.aggregateResults(Collections.<MuleEvent> singletonList(null),
46 Mockito.mock(MuleEvent.class), Mockito.mock(MuleContext.class));
47 assertNull(result);
48 }
49
50 @Test
51 public void aggregateSingleEvent()
52 {
53 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
54 message1.setInvocationProperty("key1", "value1");
55 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
56
57 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
58 message2.setInvocationProperty("key2", "value2");
59 MuleEvent event2 = new DefaultMuleEvent(message2, endpoint, session);
60
61 MuleEvent result = resultsHandler.aggregateResults(Collections.<MuleEvent> singletonList(event2),
62 event1, Mockito.mock(MuleContext.class));
63 assertSame(event2, result);
64
65
66
67 assertNull(result.getMessage().getInvocationProperty("key1"));
68 assertEquals("value2", result.getMessage().getInvocationProperty("key2"));
69 }
70
71 @Test
72 public void aggregateMultipleEvents() throws Exception
73 {
74 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
75 message1.setInvocationProperty("key1", "value1");
76 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
77 message2.setInvocationProperty("key2", "value2");
78 MuleMessage message3 = new DefaultMuleMessage("test event C", muleContext);
79 message3.setInvocationProperty("key3", "value3");
80 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
81 MuleEvent event2 = new DefaultMuleEvent(message2, endpoint, session);
82 MuleEvent event3 = new DefaultMuleEvent(message3, endpoint, session);
83 List<MuleEvent> events = new ArrayList<MuleEvent>();
84 events.add(event2);
85 events.add(event3);
86
87 MuleEvent result = resultsHandler.aggregateResults(events, event1, Mockito.mock(MuleContext.class));
88 assertNotNull(result);
89 assertEquals(DefaultMessageCollection.class, result.getMessage().getClass());
90 assertEquals(2, ((MuleMessageCollection) result.getMessage()).size());
91 assertTrue(result.getMessage().getPayload() instanceof List<?>);
92 assertEquals(message2, ((MuleMessageCollection) result.getMessage()).getMessage(0));
93 assertEquals(message3, ((MuleMessageCollection) result.getMessage()).getMessage(1));
94
95
96
97 assertEquals("value1", result.getMessage().getInvocationProperty("key1"));
98 assertNull(result.getMessage().getInvocationProperty("key2"));
99 assertNull(result.getMessage().getInvocationProperty("key3"));
100 }
101
102 @Test
103 public void aggregateMultipleEventsAllButOneNull()
104 {
105 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
106 message1.setInvocationProperty("key", "value");
107 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
108 message2.setInvocationProperty("key2", "value2");
109 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
110 MuleEvent event2 = new DefaultMuleEvent(message2, endpoint, session);
111 List<MuleEvent> events = new ArrayList<MuleEvent>();
112 events.add(null);
113 events.add(event2);
114
115 MuleEvent result = resultsHandler.aggregateResults(events, event1, Mockito.mock(MuleContext.class));
116 assertSame(event2, result);
117
118
119
120 assertNull(result.getMessage().getInvocationProperty("key1"));
121 assertEquals("value2", result.getMessage().getInvocationProperty("key2"));
122 }
123
124 @Test
125 public void aggregateSingleMuleMessageCollection()
126 {
127 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
128 message1.setInvocationProperty("key1", "value1");
129 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
130
131 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
132 MuleMessage message3 = new DefaultMuleMessage("test event C", muleContext);
133
134 MuleMessageCollection messageCollection = new DefaultMessageCollection(
135 Mockito.mock(MuleContext.class));
136 messageCollection.setInvocationProperty("key2", "value2");
137 messageCollection.addMessage(message2);
138 messageCollection.addMessage(message3);
139 MuleEvent event2 = new DefaultMuleEvent(messageCollection, endpoint, session);
140
141 MuleEvent result = resultsHandler.aggregateResults(Collections.<MuleEvent> singletonList(event2),
142 event1, Mockito.mock(MuleContext.class));
143 assertSame(event2, result);
144
145
146
147 assertNull(result.getMessage().getInvocationProperty("key1"));
148 assertEquals("value2", result.getMessage().getInvocationProperty("key2"));
149 }
150
151 @Test
152 public void aggregateMultipleMuleMessageCollections()
153 {
154 MuleMessage message1 = new DefaultMuleMessage("test event A", muleContext);
155 message1.setInvocationProperty("key1", "value1");
156 MuleEvent event1 = new DefaultMuleEvent(message1, endpoint, session);
157
158 MuleMessage message2 = new DefaultMuleMessage("test event B", muleContext);
159 MuleMessage message3 = new DefaultMuleMessage("test event C", muleContext);
160 MuleMessage message4 = new DefaultMuleMessage("test event D", muleContext);
161 MuleMessage message5 = new DefaultMuleMessage("test event E", muleContext);
162
163 MuleMessageCollection messageCollection = new DefaultMessageCollection(
164 Mockito.mock(MuleContext.class));
165 messageCollection.setInvocationProperty("key2", "value2");
166 messageCollection.addMessage(message2);
167 messageCollection.addMessage(message3);
168 MuleEvent event2 = new DefaultMuleEvent(messageCollection, endpoint, session);
169
170 MuleMessageCollection messageCollection2 = new DefaultMessageCollection(
171 Mockito.mock(MuleContext.class));
172 messageCollection.setInvocationProperty("key3", "value3");
173 messageCollection.addMessage(message4);
174 messageCollection.addMessage(message5);
175 MuleEvent event3 = new DefaultMuleEvent(messageCollection2, endpoint, session);
176
177 List<MuleEvent> events = new ArrayList<MuleEvent>();
178 events.add(event2);
179 events.add(event3);
180
181 MuleEvent result = resultsHandler.aggregateResults(events, event1, Mockito.mock(MuleContext.class));
182 assertNotNull(result);
183 assertEquals(DefaultMessageCollection.class, result.getMessage().getClass());
184 assertEquals(2, ((MuleMessageCollection) result.getMessage()).size());
185 assertTrue(result.getMessage().getPayload() instanceof List<?>);
186 assertEquals(messageCollection, ((MuleMessageCollection) result.getMessage()).getMessage(0));
187 assertEquals(messageCollection2, ((MuleMessageCollection) result.getMessage()).getMessage(1));
188
189
190
191 assertEquals("value1", result.getMessage().getInvocationProperty("key1"));
192 assertNull(result.getMessage().getInvocationProperty("key2"));
193 assertNull(result.getMessage().getInvocationProperty("key3"));
194 }
195
196 }