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