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