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);