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;
43 * JSON object mapping tests.
45 public class ObjectMappingTest {
46 private static final String EOL = "\n";
48 private final String SDNC_SERVICE_REQUEST =
50 " \"SDNCServiceRequest\": {" + EOL +
51 " \"requestInformation\": {" + EOL +
52 " \"requestId\": \"413658f4-7f42-482e-b834-23a5c15657da\"," + EOL +
53 " \"source\": \"CCD\"," + EOL +
54 " \"notificationUrl\": \"https://ccd-host:8080/notifications\"" + EOL +
56 " \"serviceInformation\": {" + EOL +
57 " \"serviceType\": \"vHNFaaS\"," + EOL +
58 " \"serviceInstanceId\": \"74e65b2b637441bca078e63e44bb511b\"," + EOL +
59 " \"subscriberName\": \"IST_SG_0902_3003\"," + EOL +
60 " \"subscriberGlobalId\": \"IST15_0902_3003\"" + EOL +
62 " \"bpNotificationUrl\": \"http://localhost:8080/mso/SDNCAdapterCallbackService\"," + EOL +
64 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
65 " \"sdncService\": \"vhnf\"," + EOL +
66 " \"sdncOperation\": \"service-topology-cust-assign-operation\"," + EOL +
67 " \"sdncServiceDataType\": \"XML\"," + EOL +
68 " \"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 +
72 private final String SDNC_SERVICE_RESPONSE =
74 " \"SDNCServiceResponse\": {" + EOL +
75 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
76 " \"responseCode\": \"200\"," + EOL +
77 "((RESPONSE-MESSAGE))" +
78 " \"ackFinalIndicator\": \"Y\"" + EOL +
79 "((RESPONSE-PARAMS))" +
83 private final String SDNC_SERVICE_ERROR =
85 " \"SDNCServiceError\": {" + EOL +
86 " \"sdncRequestId\": \"413658f4-7f42-482e-b834-23a5c15657da-1474471336781\"," + EOL +
87 " \"responseCode\": \"500\"," + EOL +
88 "((RESPONSE-MESSAGE))" +
89 " \"ackFinalIndicator\": \"Y\"" + EOL +
93 private final String SDNC_EVENT =
95 " \"SDNCEvent\": {" + EOL +
96 " \"eventType\": \"ACTIVATION\"," + EOL +
97 " \"eventCorrelatorType\": \"HOST-NAME\"," + EOL +
98 " \"eventCorrelator\": \"USOSTCDALTX0101UJZZ31\"" + EOL +
103 private final String PARAMS =
104 "{\"entry\":[{\"key\":\"P1\",\"value\":\"V1\"},{\"key\":\"P2\",\"value\":\"V2\"},{\"key\":\"P3\",\"value\":\"V3\"}]}";
107 public final void jsonToSDNCServiceRequest() throws Exception {
109 ObjectMapper mapper = new ObjectMapper();
110 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
111 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
113 String json = SDNC_SERVICE_REQUEST;
114 json = json.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
116 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
117 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
118 assertEquals("CCD", object.getRequestInformation().getSource());
119 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
120 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
121 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
122 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
123 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
124 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
125 assertEquals("PT5M", object.getBPTimeout());
126 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
127 assertEquals("vhnf", object.getSDNCService());
128 assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
129 assertEquals("XML", object.getSDNCServiceDataType());
130 assertTrue(object.getSDNCServiceData().startsWith("<vhnf-cust-stage-information>"));
134 public final void jsonToSDNCServiceRequestWithoutOptionalFields() throws Exception {
136 ObjectMapper mapper = new ObjectMapper();
137 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
138 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
140 // bpTimeout is optional.
141 String json = SDNC_SERVICE_REQUEST;
142 json = json.replace("((BP-TIMEOUT))", "");
144 SDNCServiceRequest object = mapper.readValue(json, SDNCServiceRequest.class);
145 assertEquals("413658f4-7f42-482e-b834-23a5c15657da", object.getRequestInformation().getRequestId());
146 assertEquals("CCD", object.getRequestInformation().getSource());
147 assertEquals("https://ccd-host:8080/notifications", object.getRequestInformation().getNotificationUrl());
148 assertEquals("vHNFaaS", object.getServiceInformation().getServiceType());
149 assertEquals("74e65b2b637441bca078e63e44bb511b", object.getServiceInformation().getServiceInstanceId());
150 assertEquals("IST_SG_0902_3003", object.getServiceInformation().getSubscriberName());
151 assertEquals("IST15_0902_3003", object.getServiceInformation().getSubscriberGlobalId());
152 assertEquals("http://localhost:8080/mso/SDNCAdapterCallbackService", object.getBPNotificationUrl());
153 assertNull(object.getBPTimeout());
154 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
155 assertEquals("vhnf", object.getSDNCService());
156 assertEquals("service-topology-cust-assign-operation", object.getSDNCOperation());
157 assertEquals("XML", object.getSDNCServiceDataType());
158 assertTrue(object.getSDNCServiceData().startsWith("<vhnf-cust-stage-information>"));
162 public final void jsonFromSDNCServiceRequest() throws Exception {
164 ObjectMapper mapper = new ObjectMapper();
165 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
166 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
168 // Convert source json string to object.
169 String json1 = SDNC_SERVICE_REQUEST;
170 json1 = json1.replace("((BP-TIMEOUT))", "\"bpTimeout\": \"" + "PT5M" + "\"," + EOL);
171 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
173 // Convert resulting object back to json.
174 String json2 = object1.toJson();
175 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
176 + ":" + System.lineSeparator() + json2);
177 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceRequest\":{"));
179 // Convert generated json string to another object.
180 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
182 // Compare the first object to the second object.
183 assertTrue(serializedEquals(object1, object2));
187 public final void jsonFromSDNCServiceRequestWithoutOptionalFields() throws Exception {
189 ObjectMapper mapper = new ObjectMapper();
190 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
191 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
193 // Convert source json string to object.
194 String json1 = SDNC_SERVICE_REQUEST;
195 json1 = json1.replace("((BP-TIMEOUT))", "");
196 SDNCServiceRequest object1 = mapper.readValue(json1, SDNCServiceRequest.class);
198 // Convert resulting object back to json.
199 String json2 = object1.toJson();
200 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
201 + ":" + System.lineSeparator() + json2);
202 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceRequest\":{"));
204 // Convert generated json string to another object.
205 SDNCServiceRequest object2 = mapper.readValue(json2, SDNCServiceRequest.class);
207 // Compare the first object to the second object.
208 assertTrue(serializedEquals(object1, object2));
212 public final void jsonToSDNCServiceResponse() throws Exception {
214 ObjectMapper mapper = new ObjectMapper();
215 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
216 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
218 String json = SDNC_SERVICE_RESPONSE;
219 json = json.replace("((RESPONSE-MESSAGE))", " \"responseMessage\": \"" + "OK" + "\"," + EOL);
220 json = json.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
222 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
223 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
224 assertEquals("200", object.getResponseCode());
225 assertEquals("OK", object.getResponseMessage());
226 assertEquals("Y", object.getAckFinalIndicator());
227 assertEquals("V1", object.getParams().get("P1"));
228 assertEquals("V2", object.getParams().get("P2"));
229 assertEquals("V3", object.getParams().get("P3"));
233 public final void jsonToSDNCServiceResponseWithoutOptionalFields() throws Exception {
235 ObjectMapper mapper = new ObjectMapper();
236 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
237 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
239 // responseMessage is optional.
240 String json = SDNC_SERVICE_RESPONSE;
241 json = json.replace("((RESPONSE-MESSAGE))", "");
242 json = json.replace("((RESPONSE-PARAMS))", "");
244 SDNCServiceResponse object = mapper.readValue(json, SDNCServiceResponse.class);
245 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
246 assertEquals("200", object.getResponseCode());
247 assertNull(object.getResponseMessage());
248 assertEquals("Y", object.getAckFinalIndicator());
249 assertNull(object.getParams());
253 public final void jsonFromSDNCServiceResponse() throws Exception {
255 ObjectMapper mapper = new ObjectMapper();
256 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
257 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
259 // Convert source json string to object.
260 String json1 = SDNC_SERVICE_RESPONSE;
261 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
262 json1 = json1.replace(EOL + "((RESPONSE-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
263 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
265 // Convert resulting object back to json.
266 String json2 = object1.toJson();
267 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
268 + ":" + System.lineSeparator() + json2);
269 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceResponse\":{"));
271 // Convert generated json string to another object.
272 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
274 // Compare the first object to the second object.
275 assertTrue(serializedEquals(object1, object2));
279 public final void jsonFromSDNCServiceResponseWithoutOptionalFields() throws Exception {
281 ObjectMapper mapper = new ObjectMapper();
282 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
283 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
285 // Convert source json string to object.
286 String json1 = SDNC_SERVICE_RESPONSE;
287 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
288 json1 = json1.replace("((RESPONSE-PARAMS))", "");
289 SDNCServiceResponse object1 = mapper.readValue(json1, SDNCServiceResponse.class);
291 // Convert resulting object back to json.
292 String json2 = object1.toJson();
293 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
294 + ":" + System.lineSeparator() + json2);
295 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceResponse\":{"));
297 // Convert generated json string to another object.
298 SDNCServiceResponse object2 = mapper.readValue(json2, SDNCServiceResponse.class);
300 // Compare the first object to the second object.
301 assertTrue(serializedEquals(object1, object2));
305 public final void jsonToSDNCServiceError() throws Exception {
307 ObjectMapper mapper = new ObjectMapper();
308 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
309 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
311 String json = SDNC_SERVICE_ERROR;
312 json = json.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "SOMETHING BAD" + "\"," + EOL);
314 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
315 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
316 assertEquals("500", object.getResponseCode());
317 assertEquals("SOMETHING BAD", object.getResponseMessage());
318 assertEquals("Y", object.getAckFinalIndicator());
322 public final void jsonToSDNCServiceErrorWithoutOptionalFields() throws Exception {
324 ObjectMapper mapper = new ObjectMapper();
325 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
326 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
328 // responseMessage is optional.
329 String json = SDNC_SERVICE_ERROR;
330 json = json.replace("((RESPONSE-MESSAGE))", "");
332 SDNCServiceError object = mapper.readValue(json, SDNCServiceError.class);
333 assertEquals("413658f4-7f42-482e-b834-23a5c15657da-1474471336781", object.getSDNCRequestId());
334 assertEquals("500", object.getResponseCode());
335 assertNull(object.getResponseMessage());
336 assertEquals("Y", object.getAckFinalIndicator());
340 public final void jsonFromSDNCServiceError() throws Exception {
342 ObjectMapper mapper = new ObjectMapper();
343 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
344 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
346 // Convert source json string to object.
347 String json1 = SDNC_SERVICE_ERROR;
348 json1 = json1.replace("((RESPONSE-MESSAGE))", "\"responseMessage\": \"" + "OK" + "\"," + EOL);
349 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
351 // Convert resulting object back to json.
352 String json2 = object1.toJson();
353 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
354 + ":" + System.lineSeparator() + json2);
355 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceError\":{"));
357 // Convert generated json string to another object.
358 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
360 // Compare the first object to the second object.
361 assertTrue(serializedEquals(object1, object2));
365 public final void jsonFromSDNCServiceErrorWithoutOptionalFields() throws Exception {
367 ObjectMapper mapper = new ObjectMapper();
368 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
369 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
371 // Convert source json string to object.
372 String json1 = SDNC_SERVICE_ERROR;
373 json1 = json1.replace("((RESPONSE-MESSAGE))", "");
374 SDNCServiceError object1 = mapper.readValue(json1, SDNCServiceError.class);
376 // Convert resulting object back to json.
377 String json2 = object1.toJson();
378 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
379 + ":" + System.lineSeparator() + json2);
380 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCServiceError\":{"));
382 // Convert generated json string to another object.
383 SDNCServiceError object2 = mapper.readValue(json2, SDNCServiceError.class);
385 // Compare the first object to the second object.
386 assertTrue(serializedEquals(object1, object2));
390 public final void jsonToSDNCEvent() throws Exception {
392 ObjectMapper mapper = new ObjectMapper();
393 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
394 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
396 String json = SDNC_EVENT;
397 json = json.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
399 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
400 assertEquals("ACTIVATION", object.getEventType());
401 assertEquals("HOST-NAME", object.getEventCorrelatorType());
402 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
403 assertEquals("V1", object.getParams().get("P1"));
404 assertEquals("V2", object.getParams().get("P2"));
405 assertEquals("V3", object.getParams().get("P3"));
409 public final void jsonToSDNCEventWithoutOptionalFields() throws Exception {
411 ObjectMapper mapper = new ObjectMapper();
412 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
413 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
415 // params are optional.
416 String json = SDNC_EVENT;
417 json = json.replace("((EVENT-PARAMS))", "");
419 SDNCEvent object = mapper.readValue(json, SDNCEvent.class);
420 assertEquals("ACTIVATION", object.getEventType());
421 assertEquals("HOST-NAME", object.getEventCorrelatorType());
422 assertEquals("USOSTCDALTX0101UJZZ31", object.getEventCorrelator());
423 assertNull(object.getParams());
427 public final void jsonFromSDNCEvent() throws Exception {
429 ObjectMapper mapper = new ObjectMapper();
430 mapper.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
431 mapper.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
433 // Convert source json string to object.
434 String json1 = SDNC_EVENT;
435 json1 = json1.replace(EOL + "((EVENT-PARAMS))", "," + EOL + " \"params\": " + PARAMS + EOL);
436 SDNCEvent object1 = mapper.readValue(json1, SDNCEvent.class);
438 // Convert resulting object back to json.
439 String json2 = object1.toJson();
440 System.out.println("Generated JSON for " + object1.getClass().getSimpleName()
441 + ":" + System.lineSeparator() + json2);
442 assertTrue(json2.replaceAll("\\s+", "").startsWith("{\"SDNCEvent\":{"));
444 // Convert generated json string to another object.
445 SDNCEvent object2 = mapper.readValue(json2, SDNCEvent.class);
447 // Compare the first object to the second object.
448 assertTrue(serializedEquals(object1, object2));
452 * Tests equality of two objects by comparing their serialized form.
453 * WARNING: this works pretty well as long as the objects don't contain
454 * collections like maps and sets that are semantically equal, but have
455 * different internal ordering of elements.
457 private boolean serializedEquals(Serializable object1, Serializable object2) throws IOException {
458 ByteArrayOutputStream byteStream1 = new ByteArrayOutputStream();
459 ObjectOutputStream objectStream1 = new ObjectOutputStream(byteStream1);
460 objectStream1.writeObject(object1);
461 objectStream1.close();
463 ByteArrayOutputStream byteStream2 = new ByteArrayOutputStream();
464 ObjectOutputStream objectStream2 = new ObjectOutputStream(byteStream2);
465 objectStream2.writeObject(object2);
466 objectStream2.close();
468 return Arrays.equals(byteStream1.toByteArray(), byteStream2.toByteArray());
471 private void logTest() {
472 StackTraceElement[] st = Thread.currentThread().getStackTrace();
473 String method = st[2].getMethodName();
474 System.out.println("RUNNING TEST: " + method);