2  * ============LICENSE_START=======================================================
 
   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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  20 package org.openecomp.mso.adapters.sdnc.sdncrest;
 
  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;
 
  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;
 
  37 import static org.junit.Assert.assertNull;
 
  38 import static org.junit.Assert.assertTrue;
 
  39 import static org.junit.Assert.assertEquals;
 
  44  * JSON object mapping tests.
 
  46 public class ObjectMappingTest {
 
  47         private static final String EOL = "\n";
 
  49         private final String SDNC_SERVICE_REQUEST =
 
  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 +
 
  57                 "  \"serviceInformation\": {" + EOL +
 
  58                 "    \"serviceType\": \"vHNFaaS\"," + EOL +
 
  59                 "    \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
 
  60                 "    \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
 
  61                 "    \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
 
  63                 "  \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
 
  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 +
 
  73         private final String SDNC_SERVICE_RESPONSE =
 
  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))" +
 
  84         private final String SDNC_SERVICE_ERROR =
 
  86                 "  \"SDNCServiceError\": {" + EOL +
 
  87                 "    \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
 
  88                 "    \"responseCode\": \"500\"," + EOL +
 
  89                 "((RESPONSE-MESSAGE))" +
 
  90                 "    \"ackFinalIndicator\": \"Y\"" + EOL +
 
  94         private final String SDNC_EVENT =
 
  96                 "  \"SDNCEvent\": {" + EOL +
 
  97                 "    \"eventType\": \"ACTIVATION\"," + EOL +
 
  98                 "    \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
 
  99                 "    \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
 
 104         private final String PARAMS =
 
 105                 "{\"entry\":[{\"key\":\"P1\",\"value\":\"V1\"},{\"key\":\"P2\",\"value\":\"V2\"},{\"key\":\"P3\",\"value\":\"V3\"}]}";
 
 108         public final void jsonToSDNCServiceRequest() throws Exception {
 
 110                 ObjectMapper mapper = new ObjectMapper();
 
 111                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 112                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 114                 String json = SDNC_SERVICE_REQUEST;
 
 115                 json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
 
 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>"));
 
 135         public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
 
 137                 ObjectMapper mapper = new ObjectMapper();
 
 138                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 139                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 141                 // bpTimeout is optional.
 
 142                 String json = SDNC_SERVICE_REQUEST;
 
 143                 json = json.replace("((BP-TIMEOUT))", "");
 
 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>"));
 
 163         public final void jsonFromSDNCServiceRequest() throws Exception {
 
 165                 ObjectMapper mapper = new ObjectMapper();
 
 166                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 167                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 180                 // Convert generated json string to another object.
 
 181                 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
 
 183                 // Compare the first object to the second object.
 
 184                 assertTrue(serializedEquals(object1, object2));
 
 188         public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
 
 190                 ObjectMapper mapper = new ObjectMapper();
 
 191                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 192                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 205                 // Convert generated json string to another object.
 
 206                 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
 
 208                 // Compare the first object to the second object.
 
 209                 assertTrue(serializedEquals(object1, object2));
 
 213         public final void jsonToSDNCServiceResponse() throws Exception {
 
 215                 ObjectMapper mapper = new ObjectMapper();
 
 216                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 217                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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"));
 
 234         public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
 
 236                 ObjectMapper mapper = new ObjectMapper();
 
 237                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 238                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 240                 // responseMessage is optional.
 
 241                 String json = SDNC_SERVICE_RESPONSE;
 
 242                 json = json.replace("((RESPONSE-MESSAGE))", "");
 
 243                 json = json.replace("((RESPONSE-PARAMS))", "");
 
 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());
 
 254         public final void jsonFromSDNCServiceResponse() throws Exception {
 
 256                 ObjectMapper mapper = new ObjectMapper();
 
 257                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 258                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 272                 // Convert generated json string to another object.
 
 273                 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
 
 275                 // Compare the first object to the second object.
 
 276                 assertTrue(serializedEquals(object1, object2));
 
 280         public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
 
 282                 ObjectMapper mapper = new ObjectMapper();
 
 283                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 284                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 298                 // Convert generated json string to another object.
 
 299                 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
 
 301                 // Compare the first object to the second object.
 
 302                 assertTrue(serializedEquals(object1, object2));
 
 306         public final void jsonToSDNCServiceError() throws Exception {
 
 308                 ObjectMapper mapper = new ObjectMapper();
 
 309                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 310                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 312                 String json = SDNC_SERVICE_ERROR;
 
 313                 json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
 
 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());
 
 323         public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
 
 325                 ObjectMapper mapper = new ObjectMapper();
 
 326                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 327                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 329                 // responseMessage is optional.
 
 330                 String json = SDNC_SERVICE_ERROR;
 
 331                 json = json.replace("((RESPONSE-MESSAGE))", "");
 
 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());
 
 341         public final void jsonFromSDNCServiceError() throws Exception {
 
 343                 ObjectMapper mapper = new ObjectMapper();
 
 344                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 345                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 358                 // Convert generated json string to another object.
 
 359                 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
 
 361                 // Compare the first object to the second object.
 
 362                 assertTrue(serializedEquals(object1, object2));
 
 366         public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
 
 368                 ObjectMapper mapper = new ObjectMapper();
 
 369                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 370                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 383                 // Convert generated json string to another object.
 
 384                 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
 
 386                 // Compare the first object to the second object.
 
 387                 assertTrue(serializedEquals(object1, object2));
 
 391         public final void jsonToSDNCEvent() throws Exception {
 
 393                 ObjectMapper mapper = new ObjectMapper();
 
 394                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 395                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 397                 String json = SDNC_EVENT;
 
 398                 json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + "    \"params\": " + PARAMS + EOL);
 
 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"));
 
 410         public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
 
 412                 ObjectMapper mapper = new ObjectMapper();
 
 413                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 414                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 416                 // params are optional.
 
 417                 String json = SDNC_EVENT;
 
 418                 json = json.replace("((EVENT-PARAMS))", "");
 
 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());
 
 428         public final void jsonFromSDNCEvent() throws Exception {
 
 430                 ObjectMapper mapper = new ObjectMapper();
 
 431                 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
 
 432                 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
 
 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);
 
 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\":{"));
 
 445                 // Convert generated json string to another object.
 
 446                 SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
 
 448                 // Compare the first object to the second object.
 
 449                 assertTrue(serializedEquals(object1, object2));
 
 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.
 
 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();
 
 464                 ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
 
 465                 ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
 
 466                 objectStream2.writeObject(object2);
 
 467                 objectStream2.close();
 
 469                 return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
 
 472         private void logTest() {
 
 473                 StackTraceElement[] st = Thread.currentThread().getStackTrace();
 
 474                 String method = st[2].getMethodName();
 
 475                 System.out.println("RUNNING TEST: " + method);