1
2
3
4
5
6
7 package org.mule;
8
9 import org.mule.api.MuleEvent;
10 import org.mule.api.endpoint.EndpointBuilder;
11 import org.mule.api.endpoint.ImmutableEndpoint;
12 import org.mule.api.routing.filter.Filter;
13 import org.mule.api.security.Credentials;
14 import org.mule.api.service.Service;
15 import org.mule.api.transformer.Transformer;
16 import org.mule.api.transformer.TransformerException;
17 import org.mule.endpoint.EndpointURIEndpointBuilder;
18 import org.mule.routing.MessageFilter;
19 import org.mule.routing.filters.PayloadTypeFilter;
20 import org.mule.tck.junit4.AbstractMuleContextTestCase;
21 import org.mule.transformer.AbstractTransformer;
22 import org.mule.transformer.simple.ByteArrayToObject;
23 import org.mule.transformer.simple.SerializableToByteArray;
24
25 import java.io.Serializable;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.List;
29
30 import org.junit.Test;
31
32 import static org.junit.Assert.assertEquals;
33 import static org.junit.Assert.assertNotNull;
34 import static org.junit.Assert.assertNull;
35 import static org.junit.Assert.assertSame;
36 import static org.junit.Assert.assertTrue;
37
38
39 public class MuleEventTestCase extends AbstractMuleContextTestCase
40 {
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171 @Test
172 public void testNoPasswordNoNullPointerException() throws Exception
173 {
174
175
176
177 ImmutableEndpoint endpoint = getTestOutboundEndpoint("AuthTest", "test://john.doe@xyz.fr");
178 MuleEvent event = getTestEvent(new Object(), endpoint);
179 Credentials credentials = event.getCredentials();
180 assertNull("Credentials must not be created for endpoints without a password.", credentials);
181 }
182
183 @Test
184 public void testEventSerialization() throws Exception
185 {
186 Transformer trans1 = new TestEventTransformer();
187 trans1.setName("OptimusPrime");
188
189 Transformer trans2 = new TestEventTransformer();
190 trans2.setName("Bumblebee");
191
192 List<Transformer> transformers = new ArrayList<Transformer>();
193 transformers.add(trans1);
194 transformers.add(trans2);
195
196 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", null, transformers,
197 new PayloadTypeFilter(Object.class), null);
198
199 MuleEvent event = RequestContext.setEvent(getTestEvent("payload", endpoint));
200 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
201 assertNotNull(serialized);
202 ByteArrayToObject trans = new ByteArrayToObject();
203 trans.setMuleContext(muleContext);
204 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
205
206
207 assertNotNull(deserialized);
208 assertNotNull(deserialized.getMuleContext());
209
210
211 assertNotNull(deserialized.getSession());
212 assertEquals(event.getSession().getId(), deserialized.getSession().getId());
213
214
215 assertNotNull(deserialized.getSession().getFlowConstruct());
216 assertEquals(event.getSession().getFlowConstruct(), deserialized.getSession().getFlowConstruct());
217 assertSame(event.getSession().getFlowConstruct(), deserialized.getSession().getFlowConstruct());
218
219
220 assertNotNull(deserialized.getEndpoint());
221 assertEquals(endpoint, deserialized.getEndpoint());
222
223 List deserializedTransformers = deserialized.getEndpoint().getTransformers();
224 assertEquals(2, deserializedTransformers.size());
225 assertEquals(trans1.getName(), ((Transformer) deserializedTransformers.get(0)).getName());
226 assertEquals(trans2.getName(), ((Transformer) deserializedTransformers.get(1)).getName());
227 assertEquals(PayloadTypeFilter.class, deserialized.getEndpoint().getFilter().getClass());
228 }
229
230 @Test
231 public void testEventSerializationRestart() throws Exception
232 {
233
234 MuleEvent event = createEventToSerialize();
235 muleContext.start();
236 List transformers = event.getEndpoint().getTransformers();
237 ImmutableEndpoint endpoint = event.getEndpoint();
238
239
240 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
241 assertNotNull(serialized);
242
243
244 muleContext.dispose();
245 muleContext = createMuleContext();
246 muleContext.start();
247 ByteArrayToObject trans = new ByteArrayToObject();
248 trans.setMuleContext(muleContext);
249
250
251 createAndRegisterTransformersEndpointBuilderService();
252
253
254 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
255
256
257 assertNotNull(deserialized);
258 assertNotNull(deserialized.getMuleContext());
259
260
261 assertNotNull(deserialized.getSession());
262 assertEquals(event.getSession().getId(), deserialized.getSession().getId());
263
264
265
266 assertNotNull(deserialized.getSession().getFlowConstruct());
267
268 Service service = (Service) event.getSession().getFlowConstruct();
269 Service deserializedService = (Service) deserialized.getSession().getFlowConstruct();
270
271
272
273 assertEquals(service.getName(), deserializedService.getName());
274 assertEquals(service.getInitialState(), deserializedService.getInitialState());
275 assertEquals(service.getExceptionListener().getClass(), deserializedService.getExceptionListener().getClass());
276 assertEquals(service.getComponent().getClass(), deserializedService.getComponent().getClass());
277
278
279
280 assertNotNull(deserialized.getEndpoint());
281
282
283
284 assertEquals(endpoint.getEncoding(), deserialized.getEndpoint().getEncoding());
285 assertEquals(endpoint.getEndpointBuilderName(), deserialized.getEndpoint().getEndpointBuilderName());
286 assertEquals(endpoint.getEndpointURI(), deserialized.getEndpoint().getEndpointURI());
287 assertEquals(endpoint.getProtocol(), deserialized.getEndpoint().getProtocol());
288 assertEquals(endpoint.getResponseTimeout(), deserialized.getEndpoint().getResponseTimeout());
289 assertEquals(endpoint.getConnector().getClass(), deserialized.getEndpoint().getConnector().getClass());
290
291 List deserializedTransformers = deserialized.getEndpoint().getTransformers();
292 assertEquals(2, deserializedTransformers.size());
293 assertEquals(((Transformer) transformers.get(0)).getName(),
294 ((Transformer) deserializedTransformers.get(0)).getName());
295 assertEquals(((Transformer) transformers.get(1)).getName(),
296 ((Transformer) deserializedTransformers.get(1)).getName());
297 assertEquals(PayloadTypeFilter.class, deserialized.getEndpoint().getFilter().getClass());
298 }
299
300 @Test
301 public void testMuleCredentialsSerialization() throws Exception
302 {
303 String username = "mule";
304 String password = "rulez";
305 String url = "test://" + username + ":" + password + "@localhost";
306 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", url);
307 ByteArrayToObject trans = new ByteArrayToObject();
308 trans.setMuleContext(muleContext);
309
310 MuleEvent event = RequestContext.setEvent(getTestEvent("payload", endpoint));
311 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
312 assertNotNull(serialized);
313
314 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
315 assertNotNull(deserialized);
316
317 Credentials credentials = deserialized.getCredentials();
318 assertNotNull(credentials);
319 assertEquals(username, credentials.getUsername());
320 assertTrue(Arrays.equals(password.toCharArray(), credentials.getPassword()));
321 }
322
323 private MuleEvent createEventToSerialize() throws Exception
324 {
325 createAndRegisterTransformersEndpointBuilderService();
326 ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
327 muleContext.getRegistry().lookupEndpointBuilder("epBuilderTest"));
328 Service service = muleContext.getRegistry().lookupService("appleService");
329 return RequestContext.setEvent(getTestEvent("payload", service, endpoint));
330 }
331
332 private void createAndRegisterTransformersEndpointBuilderService() throws Exception
333 {
334 Transformer trans1 = new TestEventTransformer();
335 trans1.setName("OptimusPrime");
336 muleContext.getRegistry().registerTransformer(trans1);
337
338 Transformer trans2 = new TestEventTransformer();
339 trans2.setName("Bumblebee");
340 muleContext.getRegistry().registerTransformer(trans2);
341
342 List<Transformer> transformers = new ArrayList<Transformer>();
343 transformers.add(trans1);
344 transformers.add(trans2);
345
346 Filter filter = new PayloadTypeFilter(Object.class);
347 EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder("test://serializationTest",
348 muleContext);
349 endpointBuilder.setTransformers(transformers);
350 endpointBuilder.setName("epBuilderTest");
351 endpointBuilder.addMessageProcessor(new MessageFilter(filter));
352 muleContext.getRegistry().registerEndpointBuilder("epBuilderTest", endpointBuilder);
353
354 getTestService();
355 }
356
357 private static class TestEventTransformer extends AbstractTransformer
358 {
359 public Object doTransform(Object src, String encoding) throws TransformerException
360 {
361 return "Transformed Test Data";
362 }
363 }
364
365 }