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=========================================================
21 package org.onap.so.adapters.sdnc.sdncrest;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNull;
25 import static org.junit.Assert.assertTrue;
27 import java.io.ByteArrayOutputStream;
28 import java.io.IOException;
29 import java.io.ObjectOutputStream;
30 import java.io.Serializable;
31 import java.util.Arrays;
33 import org.junit.Test;
34 import org.onap.so.adapters.sdncrest.SDNCEvent;
35 import org.onap.so.adapters.sdncrest.SDNCServiceError;
36 import org.onap.so.adapters.sdncrest.SDNCServiceRequest;
37 import org.onap.so.adapters.sdncrest.SDNCServiceResponse;
39 import com.fasterxml.jackson.databind.DeserializationFeature;
40 import com.fasterxml.jackson.databind.ObjectMapper;
41 import com.fasterxml.jackson.databind.SerializationFeature;
46 * JSON object mapping tests.
48 public class ObjectMappingTest {
49 private static final String EOL = "\n";
51 private final String SDNC_SERVICE_REQUEST =
53 " \"SDNCServiceRequest\": {" + EOL +
54 " \"requestInformation\": {" + EOL +
55 " \"requestId\": \"413658f4-7f42-482e-b834-23a5c15657da\"," + EOL +
56 " \"source\": \"CCD\"," + EOL +
57 " \"notificationUrl\": \"https://ccd-host:8080/notifications\"" + EOL +
59 " \"serviceInformation\": {" + EOL +
60 " \"serviceType\": \"vHNFaaS\"," + EOL +
61 " \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
62 " \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
63 " \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
65 " \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
67 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
68 " \"sdncService\": \"vhnf\"," + EOL +
69 " \"sdncOperation\": \"service-topology-cust-assign-operation\"," + EOL +
70 " \"sdncServiceDataType\": \"XML\"," + EOL +
71 " \"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 +
75 private final String SDNC_SERVICE_RESPONSE =
77 " \"SDNCServiceResponse\": {" + EOL +
78 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
79 " \"responseCode\": \"200\"," + EOL +
80 "((RESPONSE-MESSAGE))" +
81 " \"ackFinalIndicator\": \"Y\"" + EOL +
82 "((RESPONSE-PARAMS))" +
86 private final String SDNC_SERVICE_ERROR =
88 " \"SDNCServiceError\": {" + EOL +
89 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
90 " \"responseCode\": \"500\"," + EOL +
91 "((RESPONSE-MESSAGE))" +
92 " \"ackFinalIndicator\": \"Y\"" + EOL +
96 private final String SDNC_EVENT =
98 " \"SDNCEvent\": {" + EOL +
99 " \"eventType\": \"ACTIVATION\"," + EOL +
100 " \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
101 " \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
106 private final String PARAMS =
107 "{\"P1\":\"V1\",\"P2\":\"V2\",\"P3\":\"V3\"}";
110 public final void jsonToSDNCServiceRequest() throws Exception {
112 ObjectMapper mapper = new ObjectMapper();
113 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
114 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
116 String json = SDNC_SERVICE_REQUEST;
117 json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
119 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
120 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
121 assertEquals("CCD", object.getRequestInformation().getSource());
122 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
123 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
124 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
125 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
126 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
127 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
128 assertEquals("PT5M", object.getBPTimeout());
129 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
130 assertEquals("vhnf", object.getSdncService());
131 assertEquals("service-topology-cust-assign-operation", object.getSdncOperation());
132 assertEquals("XML", object.getSdncServiceDataType());
133 assertTrue(object.getSdncServiceData().startsWith("<vhnf-cust-stage-information>"));
137 public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
139 ObjectMapper mapper = new ObjectMapper();
140 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
141 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
143 // bpTimeout is optional.
144 String json = SDNC_SERVICE_REQUEST;
145 json = json.replace("((BP-TIMEOUT))", "");
147 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
148 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
149 assertEquals("CCD", object.getRequestInformation().getSource());
150 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
151 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
152 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
153 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
154 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
155 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
156 assertNull(object.getBPTimeout());
157 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
158 assertEquals("vhnf", object.getSdncService());
159 assertEquals("service-topology-cust-assign-operation", object.getSdncOperation());
160 assertEquals("XML", object.getSdncServiceDataType());
161 assertTrue(object.getSdncServiceData().startsWith("<vhnf-cust-stage-information>"));
165 public final void jsonFromSDNCServiceRequest() throws Exception {
167 ObjectMapper mapper = new ObjectMapper();
168 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
169 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
171 // Convert source json string to object.
172 String json1 = SDNC_SERVICE_REQUEST;
173 json1 = json1.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
174 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
176 // Convert resulting object back to json.
177 String json2 = object1.toJson();
178 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
179 + ":" + System.lineSeparator() + json2);
180 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
182 // Convert generated json string to another object.
183 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
185 // Compare the first object to the second object.
186 assertTrue(serializedEquals(object1, object2));
190 public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
192 ObjectMapper mapper = new ObjectMapper();
193 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
194 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
196 // Convert source json string to object.
197 String json1 = SDNC_SERVICE_REQUEST;
198 json1 = json1.replace("((BP-TIMEOUT))", "");
199 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
201 // Convert resulting object back to json.
202 String json2 = object1.toJson();
203 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
204 + ":" + System.lineSeparator() + json2);
205 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceRequest\":{"));
207 // Convert generated json string to another object.
208 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
210 // Compare the first object to the second object.
211 assertTrue(serializedEquals(object1, object2));
215 public final void jsonToSDNCServiceResponse() throws Exception {
217 ObjectMapper mapper = new ObjectMapper();
218 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
219 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
221 String json = SDNC_SERVICE_RESPONSE;
222 json = json.replace("((RESPONSE-MESSAGE))", " \"responseMessage\": \"" + "OK" + "\"," + EOL);
223 json = json.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
225 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
226 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
227 assertEquals("200", object.getResponseCode());
228 assertEquals("OK", object.getResponseMessage());
229 assertEquals("Y", object.getAckFinalIndicator());
230 assertEquals("V1", object.getParams().get("P1"));
231 assertEquals("V2", object.getParams().get("P2"));
232 assertEquals("V3", object.getParams().get("P3"));
236 public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
238 ObjectMapper mapper = new ObjectMapper();
239 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
240 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
242 // responseMessage is optional.
243 String json = SDNC_SERVICE_RESPONSE;
244 json = json.replace("((RESPONSE-MESSAGE))", "");
245 json = json.replace("((RESPONSE-PARAMS))", "");
247 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
248 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
249 assertEquals("200", object.getResponseCode());
250 assertNull(object.getResponseMessage());
251 assertEquals("Y", object.getAckFinalIndicator());
252 assertNull(object.getParams());
256 public final void jsonFromSDNCServiceResponse() throws Exception {
258 ObjectMapper mapper = new ObjectMapper();
259 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
260 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
262 // Convert source json string to object.
263 String json1 = SDNC_SERVICE_RESPONSE;
264 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
265 json1 = json1.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
266 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
268 // Convert resulting object back to json.
269 String json2 = object1.toJson();
270 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
271 + ":" + System.lineSeparator() + json2);
272 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
274 // Convert generated json string to another object.
275 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
277 // Compare the first object to the second object.
278 assertTrue(serializedEquals(object1, object2));
282 public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
284 ObjectMapper mapper = new ObjectMapper();
285 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
286 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
288 // Convert source json string to object.
289 String json1 = SDNC_SERVICE_RESPONSE;
290 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
291 json1 = json1.replace("((RESPONSE-PARAMS))", "");
292 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
294 // Convert resulting object back to json.
295 String json2 = object1.toJson();
296 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
297 + ":" + System.lineSeparator() + json2);
298 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceResponse\":{"));
300 // Convert generated json string to another object.
301 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
303 // Compare the first object to the second object.
304 assertTrue(serializedEquals(object1, object2));
308 public final void jsonToSDNCServiceError() throws Exception {
310 ObjectMapper mapper = new ObjectMapper();
311 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
312 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
314 String json = SDNC_SERVICE_ERROR;
315 json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
317 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
318 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
319 assertEquals("500", object.getResponseCode());
320 assertEquals("SOMETHING BAD", object.getResponseMessage());
321 assertEquals("Y", object.getAckFinalIndicator());
325 public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
327 ObjectMapper mapper = new ObjectMapper();
328 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
329 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
331 // responseMessage is optional.
332 String json = SDNC_SERVICE_ERROR;
333 json = json.replace("((RESPONSE-MESSAGE))", "");
335 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
336 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSdncRequestId());
337 assertEquals("500", object.getResponseCode());
338 assertNull(object.getResponseMessage());
339 assertEquals("Y", object.getAckFinalIndicator());
343 public final void jsonFromSDNCServiceError() throws Exception {
345 ObjectMapper mapper = new ObjectMapper();
346 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
347 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
349 // Convert source json string to object.
350 String json1 = SDNC_SERVICE_ERROR;
351 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
352 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
354 // Convert resulting object back to json.
355 String json2 = object1.toJson();
356 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
357 + ":" + System.lineSeparator() + json2);
358 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
360 // Convert generated json string to another object.
361 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
363 // Compare the first object to the second object.
364 assertTrue(serializedEquals(object1, object2));
368 public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
370 ObjectMapper mapper = new ObjectMapper();
371 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
372 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
374 // Convert source json string to object.
375 String json1 = SDNC_SERVICE_ERROR;
376 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
377 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
379 // Convert resulting object back to json.
380 String json2 = object1.toJson();
381 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
382 + ":" + System.lineSeparator() + json2);
383 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCServiceError\":{"));
385 // Convert generated json string to another object.
386 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
388 // Compare the first object to the second object.
389 assertTrue(serializedEquals(object1, object2));
393 public final void jsonToSDNCEvent() throws Exception {
395 ObjectMapper mapper = new ObjectMapper();
396 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
397 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
399 String json = SDNC_EVENT;
400 json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
402 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
403 assertEquals("ACTIVATION", object.getEventType());
404 assertEquals("HOST-NAME", object.getEventCorrelatorType());
405 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
406 assertEquals("V1", object.getParams().get("P1"));
407 assertEquals("V2", object.getParams().get("P2"));
408 assertEquals("V3", object.getParams().get("P3"));
412 public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
414 ObjectMapper mapper = new ObjectMapper();
415 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
416 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
418 // params are optional.
419 String json = SDNC_EVENT;
420 json = json.replace("((EVENT-PARAMS))", "");
422 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
423 assertEquals("ACTIVATION", object.getEventType());
424 assertEquals("HOST-NAME", object.getEventCorrelatorType());
425 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
426 assertNull(object.getParams());
430 public final void jsonFromSDNCEvent() throws Exception {
432 ObjectMapper mapper = new ObjectMapper();
433 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
434 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
436 // Convert source json string to object.
437 String json1 = SDNC_EVENT;
438 json1 = json1.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
439 SDNCEvent object1 = mapper.readValue(json1, SDNCEvent.class);
441 // Convert resulting object back to json.
442 String json2 = object1.toJson();
443 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
444 + ":" + System.lineSeparator() + json2);
445 assertTrue(json2.replaceAll("\\s+","").startsWith("{\"SDNCEvent\":{"));
447 // Convert generated json string to another object.
448 SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
450 // Compare the first object to the second object.
451 assertTrue(serializedEquals(object1, object2));
455 * Tests equality of two objects by comparing their serialized form.
456 * WARNING: this works pretty well as long as the objects don't contain
457 * collections like maps and sets that are semantically equal, but have
458 * different internal ordering of elements.
460 private boolean serializedEquals(Serializable object1, Serializable object2) throws IOException {
461 ByteArrayOutputStream byteStream1 = new ByteArrayOutputStream();
462 ObjectOutputStream objectStream1 = new ObjectOutputStream(byteStream1);
463 objectStream1.writeObject(object1);
464 objectStream1.close();
466 ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
467 ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
468 objectStream2.writeObject(object2);
469 objectStream2.close();
471 return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
474 private void logTest() {
475 StackTraceElement[] st = Thread.currentThread().getStackTrace();
476 String method = st[2].getMethodName();
477 System.out.println("RUNNING TEST: " + method);