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