39090158b3742583889c9d2d4bb07c3590dea222
[so.git] / adapters / mso-sdnc-adapter / src / test / java / org / openecomp / mso / adapters / sdnc / sdncrest / ObjectMappingTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * OPENECOMP - MSO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.openecomp.mso.adapters.sdnc.sdncrest;
21
22 import org.openecomp.mso.adapters.sdncrest.SDNCEvent;
23 import org.openecomp.mso.adapters.sdncrest.SDNCServiceError;
24 import org.openecomp.mso.adapters.sdncrest.SDNCServiceRequest;
25 import org.openecomp.mso.adapters.sdncrest.SDNCServiceResponse;
26 import org.codehaus.jackson.map.DeserializationConfig;
27 import org.codehaus.jackson.map.ObjectMapper;
28 import org.codehaus.jackson.map.SerializationConfig;
29 import org.junit.Test;
30
31 import java.io.ByteArrayOutputStream;
32 import java.io.IOException;
33 import java.io.ObjectOutputStream;
34 import java.io.Serializable;
35 import java.util.Arrays;
36
37 import static org.junit.Assert.assertNull;
38 import static org.junit.Assert.assertTrue;
39 import static org.junit.Assert.assertEquals;
40
41
42
43 /**
44  * JSON object mapping tests.
45  */
46 public class ObjectMappingTest {
47         private static final String EOL = "\n";
48
49         private final String SDNC_SERVICE_REQUEST =
50                 "{" + EOL +
51                 "  \"SDNCServiceRequest\": {" + EOL +
52                 "    \"requestInformation\": {" + EOL +
53                 "      \"requestId\": \"413658f4-7f42-482e-b834-23a5c15657da\"," + EOL +
54                 "      \"source\": \"CCD\"," + EOL +
55                 "      \"notificationUrl\": \"https://ccd-host:8080/notifications\"" + EOL +
56                 "  }," + EOL +
57                 "  \"serviceInformation\": {" + EOL +
58                 "    \"serviceType\": \"vHNFaaS\"," + EOL +
59                 "    \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
60                 "    \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
61                 "    \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
62                 "  }," + EOL +
63                 "  \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
64                 "((BP-TIMEOUT))" +
65                 "  \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
66                 "  \"sdncService\": \"vhnf\"," + EOL +
67                 "  \"sdncOperation\": \"service-topology-cust-assign-operation\"," + EOL +
68                 "  \"sdncServiceDataType\": \"XML\"," + EOL +
69                 "  \"sdncServiceData\": \"<vhnf-cust-stage-information><dhv-service-instance-id>c26dfed652164d60a17461734422b085</dhv-service-instance-id><hnportal-primary-vnf-host-name>HOSTNAME</hnportal-primary-vnf-host-name></vhnf-cust-stage-information>\"" + EOL +
70                 "  }" + EOL +
71                 "}" + EOL;
72
73         private final String SDNC_SERVICE_RESPONSE =
74                 "{" + EOL +
75                 "  \"SDNCServiceResponse\": {" + EOL +
76                 "    \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
77                 "    \"responseCode\": \"200\"," + EOL +
78                 "((RESPONSE-MESSAGE))" +
79                 "    \"ackFinalIndicator\": \"Y\"" + EOL +
80                 "((RESPONSE-PARAMS))" +
81                 "  }" + EOL +
82                 "}" + EOL;
83
84         private final String SDNC_SERVICE_ERROR =
85                 "{" + EOL +
86                 "  \"SDNCServiceError\": {" + EOL +
87                 "    \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
88                 "    \"responseCode\": \"500\"," + EOL +
89                 "((RESPONSE-MESSAGE))" +
90                 "    \"ackFinalIndicator\": \"Y\"" + EOL +
91                 "  }" + EOL +
92                 "}" + EOL;
93
94         private final String SDNC_EVENT =
95                 "{" + EOL +
96                 "  \"SDNCEvent\": {" + EOL +
97                 "    \"eventType\": \"ACTIVATION\"," + EOL +
98                 "    \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
99                 "    \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
100                 "((EVENT-PARAMS))" +
101                 "  }" + EOL +
102                 "}" + EOL;
103
104         private final String PARAMS =
105                 "{\"entry\":[{\"key\":\"P1\",\"value\":\"V1\"},{\"key\":\"P2\",\"value\":\"V2\"},{\"key\":\"P3\",\"value\":\"V3\"}]}";
106
107         @Test
108         public final void jsonToSDNCServiceRequest() throws Exception {
109                 logTest();
110                 ObjectMapper mapper = new ObjectMapper();
111                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
112                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
113
114                 String json = SDNC_SERVICE_REQUEST;
115                 json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
116
117                 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
118                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
119                 assertEquals("CCD", object.getRequestInformation().getSource());
120                 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
121                 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
122                 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
123                 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
124                 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
125                 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
126                 assertEquals("PT5M", object.getBPTimeout());
127                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
128                 assertEquals("vhnf", object.getSDNCService());
129                 assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
130                 assertEquals("XML", object.getSDNCServiceDataType());
131                 assertTrue(object.getSDNCServiceData().startsWith("<vhnf-cust-stage-information>"));
132         }
133
134         @Test
135         public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
136                 logTest();
137                 ObjectMapper mapper = new ObjectMapper();
138                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
139                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
140
141                 // bpTimeout is optional.
142                 String json = SDNC_SERVICE_REQUEST;
143                 json = json.replace("((BP-TIMEOUT))", "");
144
145                 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
146                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
147                 assertEquals("CCD", object.getRequestInformation().getSource());
148                 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
149                 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
150                 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
151                 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
152                 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
153                 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
154                 assertNull(object.getBPTimeout());
155                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
156                 assertEquals("vhnf", object.getSDNCService());
157                 assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
158                 assertEquals("XML", object.getSDNCServiceDataType());
159                 assertTrue(object.getSDNCServiceData().startsWith("<vhnf-cust-stage-information>"));
160         }
161
162         @Test
163         public final void jsonFromSDNCServiceRequest() throws Exception {
164                 logTest();
165                 ObjectMapper mapper = new ObjectMapper();
166                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
167                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
168
169                 // Convert source json string to object.
170                 String json1 = SDNC_SERVICE_REQUEST;
171                 json1 = json1.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
172                 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
173
174                 // Convert resulting object back to json.
175                 String json2 = object1.toJson();
176                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
177                         + ":" + System.lineSeparator() + json2);
178                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
179
180                 // Convert generated json string to another object.
181                 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
182
183                 // Compare the first object to the second object.
184                 assertTrue(serializedEquals(object1, object2));
185         }
186
187         @Test
188         public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
189                 logTest();
190                 ObjectMapper mapper = new ObjectMapper();
191                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
192                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
193
194                 // Convert source json string to object.
195                 String json1 = SDNC_SERVICE_REQUEST;
196                 json1 = json1.replace("((BP-TIMEOUT))", "");
197                 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
198
199                 // Convert resulting object back to json.
200                 String json2 = object1.toJson();
201                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
202                         + ":" + System.lineSeparator() + json2);
203                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
204
205                 // Convert generated json string to another object.
206                 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
207
208                 // Compare the first object to the second object.
209                 assertTrue(serializedEquals(object1, object2));
210         }
211
212         @Test
213         public final void jsonToSDNCServiceResponse() throws Exception {
214                 logTest();
215                 ObjectMapper mapper = new ObjectMapper();
216                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
217                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
218
219                 String json = SDNC_SERVICE_RESPONSE;
220                 json = json.replace("((RESPONSE-MESSAGE))", "    \"responseMessage\": \"" + "OK" + "\"," + EOL);
221                 json = json.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + "    \"params\": " + PARAMS + EOL);
222
223                 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
224                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
225                 assertEquals("200", object.getResponseCode());
226                 assertEquals("OK", object.getResponseMessage());
227                 assertEquals("Y", object.getAckFinalIndicator());
228                 assertEquals("V1", object.getParams().get("P1"));
229                 assertEquals("V2", object.getParams().get("P2"));
230                 assertEquals("V3", object.getParams().get("P3"));
231         }
232
233         @Test
234         public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
235                 logTest();
236                 ObjectMapper mapper = new ObjectMapper();
237                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
238                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
239
240                 // responseMessage is optional.
241                 String json = SDNC_SERVICE_RESPONSE;
242                 json = json.replace("((RESPONSE-MESSAGE))", "");
243                 json = json.replace("((RESPONSE-PARAMS))", "");
244
245                 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
246                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
247                 assertEquals("200", object.getResponseCode());
248                 assertNull(object.getResponseMessage());
249                 assertEquals("Y", object.getAckFinalIndicator());
250                 assertNull(object.getParams());
251         }
252
253         @Test
254         public final void jsonFromSDNCServiceResponse() throws Exception {
255                 logTest();
256                 ObjectMapper mapper = new ObjectMapper();
257                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
258                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
259
260                 // Convert source json string to object.
261                 String json1 = SDNC_SERVICE_RESPONSE;
262                 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
263                 json1 = json1.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + "    \"params\": " + PARAMS + EOL);
264                 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
265
266                 // Convert resulting object back to json.
267                 String json2 = object1.toJson();
268                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
269                         + ":" + System.lineSeparator() + json2);
270                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
271
272                 // Convert generated json string to another object.
273                 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
274
275                 // Compare the first object to the second object.
276                 assertTrue(serializedEquals(object1, object2));
277         }
278
279         @Test
280         public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
281                 logTest();
282                 ObjectMapper mapper = new ObjectMapper();
283                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
284                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
285
286                 // Convert source json string to object.
287                 String json1 = SDNC_SERVICE_RESPONSE;
288                 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
289                 json1 = json1.replace("((RESPONSE-PARAMS))", "");
290                 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
291
292                 // Convert resulting object back to json.
293                 String json2 = object1.toJson();
294                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
295                         + ":" + System.lineSeparator() + json2);
296                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
297
298                 // Convert generated json string to another object.
299                 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
300
301                 // Compare the first object to the second object.
302                 assertTrue(serializedEquals(object1, object2));
303         }
304
305         @Test
306         public final void jsonToSDNCServiceError() throws Exception {
307                 logTest();
308                 ObjectMapper mapper = new ObjectMapper();
309                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
310                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
311
312                 String json = SDNC_SERVICE_ERROR;
313                 json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
314
315                 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
316                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
317                 assertEquals("500", object.getResponseCode());
318                 assertEquals("SOMETHING BAD", object.getResponseMessage());
319                 assertEquals("Y", object.getAckFinalIndicator());
320         }
321
322         @Test
323         public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
324                 logTest();
325                 ObjectMapper mapper = new ObjectMapper();
326                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
327                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
328
329                 // responseMessage is optional.
330                 String json = SDNC_SERVICE_ERROR;
331                 json = json.replace("((RESPONSE-MESSAGE))", "");
332
333                 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
334                 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
335                 assertEquals("500", object.getResponseCode());
336                 assertNull(object.getResponseMessage());
337                 assertEquals("Y", object.getAckFinalIndicator());
338         }
339
340         @Test
341         public final void jsonFromSDNCServiceError() throws Exception {
342                 logTest();
343                 ObjectMapper mapper = new ObjectMapper();
344                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
345                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
346
347                 // Convert source json string to object.
348                 String json1 = SDNC_SERVICE_ERROR;
349                 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
350                 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
351
352                 // Convert resulting object back to json.
353                 String json2 = object1.toJson();
354                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
355                         + ":" + System.lineSeparator() + json2);
356                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
357
358                 // Convert generated json string to another object.
359                 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
360
361                 // Compare the first object to the second object.
362                 assertTrue(serializedEquals(object1, object2));
363         }
364
365         @Test
366         public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
367                 logTest();
368                 ObjectMapper mapper = new ObjectMapper();
369                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
370                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
371
372                 // Convert source json string to object.
373                 String json1 = SDNC_SERVICE_ERROR;
374                 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
375                 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
376
377                 // Convert resulting object back to json.
378                 String json2 = object1.toJson();
379                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
380                         + ":" + System.lineSeparator() + json2);
381                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
382
383                 // Convert generated json string to another object.
384                 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
385
386                 // Compare the first object to the second object.
387                 assertTrue(serializedEquals(object1, object2));
388         }
389
390         @Test
391         public final void jsonToSDNCEvent() throws Exception {
392                 logTest();
393                 ObjectMapper mapper = new ObjectMapper();
394                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
395                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
396
397                 String json = SDNC_EVENT;
398                 json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + "    \"params\": " + PARAMS + EOL);
399
400                 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
401                 assertEquals("ACTIVATION", object.getEventType());
402                 assertEquals("HOST-NAME", object.getEventCorrelatorType());
403                 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
404                 assertEquals("V1", object.getParams().get("P1"));
405                 assertEquals("V2", object.getParams().get("P2"));
406                 assertEquals("V3", object.getParams().get("P3"));
407         }
408
409         @Test
410         public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
411                 logTest();
412                 ObjectMapper mapper = new ObjectMapper();
413                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
414                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
415
416                 // params are optional.
417                 String json = SDNC_EVENT;
418                 json = json.replace("((EVENT-PARAMS))", "");
419
420                 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
421                 assertEquals("ACTIVATION", object.getEventType());
422                 assertEquals("HOST-NAME", object.getEventCorrelatorType());
423                 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
424                 assertNull(object.getParams());
425         }
426
427         @Test
428         public final void jsonFromSDNCEvent() throws Exception {
429                 logTest();
430                 ObjectMapper mapper = new ObjectMapper();
431                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
432                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
433
434                 // Convert source json string to object.
435                 String json1 = SDNC_EVENT;
436                 json1 = json1.replace(EOL + "((EVENT-PARAMS))", "," + EOL + "    \"params\": " + PARAMS + EOL);
437                 SDNCEvent object1 = mapper.readValue(json1, SDNCEvent.class);
438
439                 // Convert resulting object back to json.
440                 String json2 = object1.toJson();
441                 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
442                         + ":" + System.lineSeparator() + json2);
443                 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCEvent\":{"));
444
445                 // Convert generated json string to another object.
446                 SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
447
448                 // Compare the first object to the second object.
449                 assertTrue(serializedEquals(object1, object2));
450         }
451
452         /**
453          * Tests equality of two objects by comparing their serialized form.
454          * WARNING: this works pretty well as long as the objects don't contain
455          * collections like maps and sets that are semantically equal, but have
456          * different internal ordering of elements.
457          */
458         private boolean serializedEquals(Serializable object1, Serializable object2) throws IOException {
459                 ByteArrayOutputStream byteStream1 = new ByteArrayOutputStream();
460                 ObjectOutputStream objectStream1 = new ObjectOutputStream(byteStream1);
461                 objectStream1.writeObject(object1);
462                 objectStream1.close();
463
464                 ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
465                 ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
466                 objectStream2.writeObject(object2);
467                 objectStream2.close();
468
469                 return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
470         }
471
472         private void logTest() {
473                 StackTraceElement[] st = Thread.currentThread().getStackTrace();
474                 String method = st[2].getMethodName();
475                 System.out.println("RUNNING TEST: " + method);
476         }
477 }