1
2
3
4
5
6
7
8
9
10
11 package org.mule;
12
13 import org.mule.api.MuleEvent;
14 import org.mule.api.endpoint.EndpointBuilder;
15 import org.mule.api.endpoint.ImmutableEndpoint;
16 import org.mule.api.routing.filter.Filter;
17 import org.mule.api.security.Credentials;
18 import org.mule.api.service.Service;
19 import org.mule.api.transformer.Transformer;
20 import org.mule.api.transformer.TransformerException;
21 import org.mule.endpoint.EndpointURIEndpointBuilder;
22 import org.mule.routing.MessageFilter;
23 import org.mule.routing.filters.PayloadTypeFilter;
24 import org.mule.tck.AbstractMuleTestCase;
25 import org.mule.transformer.AbstractTransformer;
26 import org.mule.transformer.simple.ByteArrayToObject;
27 import org.mule.transformer.simple.SerializableToByteArray;
28
29 import java.io.Serializable;
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.List;
33
34
35 public class MuleEventTestCase extends AbstractMuleTestCase
36 {
37
38
39
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 public void testNoPasswordNoNullPointerException() throws Exception
164 {
165
166
167
168 ImmutableEndpoint endpoint = getTestOutboundEndpoint("AuthTest", "test://john.doe@xyz.fr");
169 MuleEvent event = getTestEvent(new Object(), endpoint);
170 Credentials credentials = event.getCredentials();
171 assertNull("Credentials must not be created for endpoints without a password.", credentials);
172 }
173
174 public void testEventSerialization() throws Exception
175 {
176 Transformer trans1 = new TestEventTransformer();
177 trans1.setName("OptimusPrime");
178
179 Transformer trans2 = new TestEventTransformer();
180 trans2.setName("Bumblebee");
181
182 List<Transformer> transformers = new ArrayList<Transformer>();
183 transformers.add(trans1);
184 transformers.add(trans2);
185
186 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", null, transformers,
187 new PayloadTypeFilter(Object.class), null);
188
189 MuleEvent event = RequestContext.setEvent(getTestEvent("payload", endpoint));
190 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
191 assertNotNull(serialized);
192 ByteArrayToObject trans = new ByteArrayToObject();
193 trans.setMuleContext(muleContext);
194 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
195
196
197 assertNotNull(deserialized);
198 assertNotNull(deserialized.getMuleContext());
199
200
201 assertNotNull(deserialized.getSession());
202 assertEquals(event.getSession().getId(), deserialized.getSession().getId());
203
204
205 assertNotNull(deserialized.getSession().getFlowConstruct());
206 assertEquals(event.getSession().getFlowConstruct(), deserialized.getSession().getFlowConstruct());
207 assertSame(event.getSession().getFlowConstruct(), deserialized.getSession().getFlowConstruct());
208
209
210 assertNotNull(deserialized.getEndpoint());
211 assertEquals(endpoint, deserialized.getEndpoint());
212
213 List deserializedTransformers = deserialized.getEndpoint().getTransformers();
214 assertEquals(2, deserializedTransformers.size());
215 assertEquals(trans1.getName(), ((Transformer) deserializedTransformers.get(0)).getName());
216 assertEquals(trans2.getName(), ((Transformer) deserializedTransformers.get(1)).getName());
217 assertEquals(PayloadTypeFilter.class, deserialized.getEndpoint().getFilter().getClass());
218 }
219
220 public void testEventSerializationRestart() throws Exception
221 {
222
223 MuleEvent event = createEventToSerialize();
224 muleContext.start();
225 List transformers = event.getEndpoint().getTransformers();
226 ImmutableEndpoint endpoint = event.getEndpoint();
227
228
229 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
230 assertNotNull(serialized);
231
232
233 muleContext.dispose();
234 muleContext = createMuleContext();
235 muleContext.start();
236 ByteArrayToObject trans = new ByteArrayToObject();
237 trans.setMuleContext(muleContext);
238
239
240 createAndRegisterTransformersEndpointBuilderService();
241
242
243 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
244
245
246 assertNotNull(deserialized);
247 assertNotNull(deserialized.getMuleContext());
248
249
250 assertNotNull(deserialized.getSession());
251 assertEquals(event.getSession().getId(), deserialized.getSession().getId());
252
253
254
255 assertNotNull(deserialized.getSession().getFlowConstruct());
256
257 Service service = (Service) event.getSession().getFlowConstruct();
258 Service deserializedService = (Service) deserialized.getSession().getFlowConstruct();
259
260
261
262 assertEquals(service.getName(), deserializedService.getName());
263 assertEquals(service.getInitialState(), deserializedService.getInitialState());
264 assertEquals(service.getExceptionListener().getClass(), deserializedService.getExceptionListener().getClass());
265 assertEquals(service.getComponent().getClass(), deserializedService.getComponent().getClass());
266
267
268
269 assertNotNull(deserialized.getEndpoint());
270
271
272
273 assertEquals(endpoint.getEncoding(), deserialized.getEndpoint().getEncoding());
274 assertEquals(endpoint.getEndpointBuilderName(), deserialized.getEndpoint().getEndpointBuilderName());
275 assertEquals(endpoint.getEndpointURI(), deserialized.getEndpoint().getEndpointURI());
276 assertEquals(endpoint.getProtocol(), deserialized.getEndpoint().getProtocol());
277 assertEquals(endpoint.getResponseTimeout(), deserialized.getEndpoint().getResponseTimeout());
278 assertEquals(endpoint.getConnector().getClass(), deserialized.getEndpoint().getConnector().getClass());
279
280 List deserializedTransformers = deserialized.getEndpoint().getTransformers();
281 assertEquals(2, deserializedTransformers.size());
282 assertEquals(((Transformer) transformers.get(0)).getName(),
283 ((Transformer) deserializedTransformers.get(0)).getName());
284 assertEquals(((Transformer) transformers.get(1)).getName(),
285 ((Transformer) deserializedTransformers.get(1)).getName());
286 assertEquals(PayloadTypeFilter.class, deserialized.getEndpoint().getFilter().getClass());
287 }
288
289 public void testMuleCredentialsSerialization() throws Exception
290 {
291 String username = "mule";
292 String password = "rulez";
293 String url = "test://" + username + ":" + password + "@localhost";
294 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", url);
295 ByteArrayToObject trans = new ByteArrayToObject();
296 trans.setMuleContext(muleContext);
297
298 MuleEvent event = RequestContext.setEvent(getTestEvent("payload", endpoint));
299 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event);
300 assertNotNull(serialized);
301
302 MuleEvent deserialized = (MuleEvent) trans.transform(serialized);
303 assertNotNull(deserialized);
304
305 Credentials credentials = deserialized.getCredentials();
306 assertNotNull(credentials);
307 assertEquals(username, credentials.getUsername());
308 assertTrue(Arrays.equals(password.toCharArray(), credentials.getPassword()));
309 }
310
311 private MuleEvent createEventToSerialize() throws Exception
312 {
313 createAndRegisterTransformersEndpointBuilderService();
314 ImmutableEndpoint endpoint = muleContext.getRegistry().lookupEndpointFactory().getInboundEndpoint(
315 muleContext.getRegistry().lookupEndpointBuilder("epBuilderTest"));
316 Service service = muleContext.getRegistry().lookupService("appleService");
317 return RequestContext.setEvent(getTestEvent("payload", service, endpoint));
318 }
319
320 private void createAndRegisterTransformersEndpointBuilderService() throws Exception
321 {
322 Transformer trans1 = new TestEventTransformer();
323 trans1.setName("OptimusPrime");
324 muleContext.getRegistry().registerTransformer(trans1);
325
326 Transformer trans2 = new TestEventTransformer();
327 trans2.setName("Bumblebee");
328 muleContext.getRegistry().registerTransformer(trans2);
329
330 List<Transformer> transformers = new ArrayList<Transformer>();
331 transformers.add(trans1);
332 transformers.add(trans2);
333
334 Filter filter = new PayloadTypeFilter(Object.class);
335 EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder("test://serializationTest",
336 muleContext);
337 endpointBuilder.setTransformers(transformers);
338 endpointBuilder.setName("epBuilderTest");
339 endpointBuilder.addMessageProcessor(new MessageFilter(filter));
340 muleContext.getRegistry().registerEndpointBuilder("epBuilderTest", endpointBuilder);
341
342 getTestService();
343 }
344
345 private static class TestEventTransformer extends AbstractTransformer
346 {
347 public Object doTransform(Object src, String encoding) throws TransformerException
348 {
349 return "Transformed Test Data";
350 }
351 }
352
353 }