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 static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertNull;
24 import static org.junit.Assert.assertTrue;
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;
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;
38 import com.fasterxml.jackson.databind.DeserializationFeature;
39 import com.fasterxml.jackson.databind.ObjectMapper;
40 import com.fasterxml.jackson.databind.SerializationFeature;
45 * JSON object mapping tests.
47 public class ObjectMappingTest {
48 private static final String EOL = "\n";
50 private final String SDNC_SERVICE_REQUEST =
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 +
58 " \"serviceInformation\": {" + EOL +
59 " \"serviceType\": \"vHNFaaS\"," + EOL +
60 " \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
61 " \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
62 " \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
64 " \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
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 +
74 private final String SDNC_SERVICE_RESPONSE =
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))" +
85 private final String SDNC_SERVICE_ERROR =
87 " \"SDNCServiceError\": {" + EOL +
88 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
89 " \"responseCode\": \"500\"," + EOL +
90 "((RESPONSE-MESSAGE))" +
91 " \"ackFinalIndicator\": \"Y\"" + EOL +
95 private final String SDNC_EVENT =
97 " \"SDNCEvent\": {" + EOL +
98 " \"eventType\": \"ACTIVATION\"," + EOL +
99 " \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
100 " \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
105 private final String PARAMS =
106 "{\"P1\":\"V1\",\"P2\":\"V2\",\"P3\":\"V3\"}";
109 public final void jsonToSDNCServiceRequest() throws Exception {
111 ObjectMapper mapper = new ObjectMapper();
112 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
113 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
115 String json = SDNC_SERVICE_REQUEST;
116 json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
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>"));
136 public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
138 ObjectMapper mapper = new ObjectMapper();
139 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
140 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
142 // bpTimeout is optional.
143 String json = SDNC_SERVICE_REQUEST;
144 json = json.replace("((BP-TIMEOUT))", "");
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>"));
164 public final void jsonFromSDNCServiceRequest() throws Exception {
166 ObjectMapper mapper = new ObjectMapper();
167 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
168 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
181 // Convert generated json string to another object.
182 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
184 // Compare the first object to the second object.
185 assertTrue(serializedEquals(object1, object2));
189 public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
191 ObjectMapper mapper = new ObjectMapper();
192 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
193 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
206 // Convert generated json string to another object.
207 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
209 // Compare the first object to the second object.
210 assertTrue(serializedEquals(object1, object2));
214 public final void jsonToSDNCServiceResponse() throws Exception {
216 ObjectMapper mapper = new ObjectMapper();
217 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
218 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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"));
235 public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
237 ObjectMapper mapper = new ObjectMapper();
238 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
239 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
241 // responseMessage is optional.
242 String json = SDNC_SERVICE_RESPONSE;
243 json = json.replace("((RESPONSE-MESSAGE))", "");
244 json = json.replace("((RESPONSE-PARAMS))", "");
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());
255 public final void jsonFromSDNCServiceResponse() throws Exception {
257 ObjectMapper mapper = new ObjectMapper();
258 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
259 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
273 // Convert generated json string to another object.
274 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
276 // Compare the first object to the second object.
277 assertTrue(serializedEquals(object1, object2));
281 public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
283 ObjectMapper mapper = new ObjectMapper();
284 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
285 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
299 // Convert generated json string to another object.
300 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
302 // Compare the first object to the second object.
303 assertTrue(serializedEquals(object1, object2));
307 public final void jsonToSDNCServiceError() throws Exception {
309 ObjectMapper mapper = new ObjectMapper();
310 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
311 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
313 String json = SDNC_SERVICE_ERROR;
314 json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
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());
324 public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
326 ObjectMapper mapper = new ObjectMapper();
327 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
328 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
330 // responseMessage is optional.
331 String json = SDNC_SERVICE_ERROR;
332 json = json.replace("((RESPONSE-MESSAGE))", "");
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());
342 public final void jsonFromSDNCServiceError() throws Exception {
344 ObjectMapper mapper = new ObjectMapper();
345 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
346 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
359 // Convert generated json string to another object.
360 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
362 // Compare the first object to the second object.
363 assertTrue(serializedEquals(object1, object2));
367 public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
369 ObjectMapper mapper = new ObjectMapper();
370 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
371 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
384 // Convert generated json string to another object.
385 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
387 // Compare the first object to the second object.
388 assertTrue(serializedEquals(object1, object2));
392 public final void jsonToSDNCEvent() throws Exception {
394 ObjectMapper mapper = new ObjectMapper();
395 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
396 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
398 String json = SDNC_EVENT;
399 json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
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"));
411 public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
413 ObjectMapper mapper = new ObjectMapper();
414 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
415 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
417 // params are optional.
418 String json = SDNC_EVENT;
419 json = json.replace("((EVENT-PARAMS))", "");
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());
429 public final void jsonFromSDNCEvent() throws Exception {
431 ObjectMapper mapper = new ObjectMapper();
432 mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
433 mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
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);
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\":{"));
446 // Convert generated json string to another object.
447 SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
449 // Compare the first object to the second object.
450 assertTrue(serializedEquals(object1, object2));
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.
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();
465 ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
466 ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
467 objectStream2.writeObject(object2);
468 objectStream2.close();
470 return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
473 private void logTest() {
474 StackTraceElement[] st = Thread.currentThread().getStackTrace();
475 String method = st[2].getMethodName();
476 System.out.println("RUNNING TEST: " + method);