/*-
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.openecomp.mso.adapters.sdnc.sdncrest;
import org.openecomp.mso.adapters.sdncrest.SDNCEvent;
import org.openecomp.mso.adapters.sdncrest.SDNCServiceError;
import org.openecomp.mso.adapters.sdncrest.SDNCServiceRequest;
import org.openecomp.mso.adapters.sdncrest.SDNCServiceResponse;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
/**
* JSON object mapping tests.
*/
public class ObjectMappingTest {
private static final String EOL = "\n";
private final String SDNC_SERVICE_REQUEST =
"{" + EOL +
" \"SDNCServiceRequest\": {" + EOL +
" \"requestInformation\": {" + EOL +
" \"requestId\": \"413658f4-7f42-482e-b834-23a5c15657da\"," + EOL +
" \"source\": \"CCD\"," + EOL +
" \"notificationUrl\": \"https://ccd-host:8080/notifications\"" + EOL +
" }," + EOL +
" \"serviceInformation\": {" + EOL +
" \"serviceType\": \"vHNFaaS\"," + EOL +
" \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
" \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
" \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
" }," + EOL +
" \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
"((BP-TIMEOUT))" +
" \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
" \"sdncService\": \"vhnf\"," + EOL +
" \"sdncOperation\": \"service-topology-cust-assign-operation\"," + EOL +
" \"sdncServiceDataType\": \"XML\"," + EOL +
" \"sdncServiceData\": \"c26dfed652164d60a17461734422b085HOSTNAME\"" + EOL +
" }" + EOL +
"}" + EOL;
private final String SDNC_SERVICE_RESPONSE =
"{" + EOL +
" \"SDNCServiceResponse\": {" + EOL +
" \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
" \"responseCode\": \"200\"," + EOL +
"((RESPONSE-MESSAGE))" +
" \"ackFinalIndicator\": \"Y\"" + EOL +
"((RESPONSE-PARAMS))" +
" }" + EOL +
"}" + EOL;
private final String SDNC_SERVICE_ERROR =
"{" + EOL +
" \"SDNCServiceError\": {" + EOL +
" \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
" \"responseCode\": \"500\"," + EOL +
"((RESPONSE-MESSAGE))" +
" \"ackFinalIndicator\": \"Y\"" + EOL +
" }" + EOL +
"}" + EOL;
private final String SDNC_EVENT =
"{" + EOL +
" \"SDNCEvent\": {" + EOL +
" \"eventType\": \"ACTIVATION\"," + EOL +
" \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
" \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
"((EVENT-PARAMS))" +
" }" + EOL +
"}" + EOL;
private final String PARAMS =
"{\"entry\":[{\"key\":\"P1\",\"value\":\"V1\"},{\"key\":\"P2\",\"value\":\"V2\"},{\"key\":\"P3\",\"value\":\"V3\"}]}";
@Test
public final void jsonToSDNCServiceRequest() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
String json = SDNC_SERVICE_REQUEST;
json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
assertEquals("CCD", object.getRequestInformation().getSource());
assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
assertEquals("PT5M", object.getBPTimeout());
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("vhnf", object.getSDNCService());
assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
assertEquals("XML", object.getSDNCServiceDataType());
assertTrue(object.getSDNCServiceData().startsWith(""));
}
@Test
public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// bpTimeout is optional.
String json = SDNC_SERVICE_REQUEST;
json = json.replace("((BP-TIMEOUT))", "");
SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
assertEquals("CCD", object.getRequestInformation().getSource());
assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
assertNull(object.getBPTimeout());
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("vhnf", object.getSDNCService());
assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
assertEquals("XML", object.getSDNCServiceDataType());
assertTrue(object.getSDNCServiceData().startsWith(""));
}
@Test
public final void jsonFromSDNCServiceRequest() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_REQUEST;
json1 = json1.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
// Convert generated json string to another object.
SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_REQUEST;
json1 = json1.replace("((BP-TIMEOUT))", "");
SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
// Convert generated json string to another object.
SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonToSDNCServiceResponse() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
String json = SDNC_SERVICE_RESPONSE;
json = json.replace("((RESPONSE-MESSAGE))", " \"responseMessage\": \"" + "OK" + "\"," + EOL);
json = json.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("200", object.getResponseCode());
assertEquals("OK", object.getResponseMessage());
assertEquals("Y", object.getAckFinalIndicator());
assertEquals("V1", object.getParams().get("P1"));
assertEquals("V2", object.getParams().get("P2"));
assertEquals("V3", object.getParams().get("P3"));
}
@Test
public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// responseMessage is optional.
String json = SDNC_SERVICE_RESPONSE;
json = json.replace("((RESPONSE-MESSAGE))", "");
json = json.replace("((RESPONSE-PARAMS))", "");
SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("200", object.getResponseCode());
assertNull(object.getResponseMessage());
assertEquals("Y", object.getAckFinalIndicator());
assertNull(object.getParams());
}
@Test
public final void jsonFromSDNCServiceResponse() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_RESPONSE;
json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
json1 = json1.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
// Convert generated json string to another object.
SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_RESPONSE;
json1 = json1.replace("((RESPONSE-MESSAGE))", "");
json1 = json1.replace("((RESPONSE-PARAMS))", "");
SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
// Convert generated json string to another object.
SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonToSDNCServiceError() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
String json = SDNC_SERVICE_ERROR;
json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("500", object.getResponseCode());
assertEquals("SOMETHING BAD", object.getResponseMessage());
assertEquals("Y", object.getAckFinalIndicator());
}
@Test
public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// responseMessage is optional.
String json = SDNC_SERVICE_ERROR;
json = json.replace("((RESPONSE-MESSAGE))", "");
SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
assertEquals("500", object.getResponseCode());
assertNull(object.getResponseMessage());
assertEquals("Y", object.getAckFinalIndicator());
}
@Test
public final void jsonFromSDNCServiceError() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_ERROR;
json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
// Convert generated json string to another object.
SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_SERVICE_ERROR;
json1 = json1.replace("((RESPONSE-MESSAGE))", "");
SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
// Convert generated json string to another object.
SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
@Test
public final void jsonToSDNCEvent() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
String json = SDNC_EVENT;
json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
assertEquals("ACTIVATION", object.getEventType());
assertEquals("HOST-NAME", object.getEventCorrelatorType());
assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
assertEquals("V1", object.getParams().get("P1"));
assertEquals("V2", object.getParams().get("P2"));
assertEquals("V3", object.getParams().get("P3"));
}
@Test
public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// params are optional.
String json = SDNC_EVENT;
json = json.replace("((EVENT-PARAMS))", "");
SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
assertEquals("ACTIVATION", object.getEventType());
assertEquals("HOST-NAME", object.getEventCorrelatorType());
assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
assertNull(object.getParams());
}
@Test
public final void jsonFromSDNCEvent() throws Exception {
logTest();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
// Convert source json string to object.
String json1 = SDNC_EVENT;
json1 = json1.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
SDNCEvent object1 = mapper.readValue(json1, SDNCEvent.class);
// Convert resulting object back to json.
String json2 = object1.toJson();
System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
+ ":" + System.lineSeparator() + json2);
assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCEvent\":{"));
// Convert generated json string to another object.
SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
// Compare the first object to the second object.
assertTrue(serializedEquals(object1, object2));
}
/**
* Tests equality of two objects by comparing their serialized form.
* WARNING: this works pretty well as long as the objects don't contain
* collections like maps and sets that are semantically equal, but have
* different internal ordering of elements.
*/
private boolean serializedEquals(Serializable object1, Serializable object2) throws IOException {
ByteArrayOutputStream byteStream1 = new ByteArrayOutputStream();
ObjectOutputStream objectStream1 = new ObjectOutputStream(byteStream1);
objectStream1.writeObject(object1);
objectStream1.close();
ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
objectStream2.writeObject(object2);
objectStream2.close();
return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
}
private void logTest() {
StackTraceElement[] st = Thread.currentThread().getStackTrace();
String method = st[2].getMethodName();
System.out.println("RUNNING TEST: " + method);
}
}