2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
20 package org.onap.so.sdncsimulator.controller;
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertFalse;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
26 import static org.onap.so.sdncsimulator.controller.TestUtils.getInvalidRequestInput;
27 import static org.onap.so.sdncsimulator.controller.TestUtils.getRequestInput;
28 import static org.onap.so.sdncsimulator.controller.TestUtils.getServiceRequestWithRequestActionDeleteServiceInput;
29 import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestInput;
30 import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestWithRequestActionDeleteVnfInput;
31 import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestWithSvcActionActivateInput;
32 import java.util.Optional;
33 import org.junit.After;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.onap.sdnc.northbound.client.model.GenericResourceApiInstanceReference;
37 import org.onap.sdnc.northbound.client.model.GenericResourceApiLastRpcActionEnumeration;
38 import org.onap.sdnc.northbound.client.model.GenericResourceApiOperStatusData;
39 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfsVnf;
40 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicemodelinfrastructureService;
41 import org.onap.so.sdncsimulator.models.InputRequest;
42 import org.onap.so.sdncsimulator.models.Output;
43 import org.onap.so.sdncsimulator.models.OutputRequest;
44 import org.onap.so.sdncsimulator.providers.ServiceOperationsCacheServiceProvider;
45 import org.onap.so.sdncsimulator.utils.Constants;
46 import org.onap.so.simulator.model.UserCredentials;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.boot.test.context.SpringBootTest;
49 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
50 import org.springframework.boot.test.web.client.TestRestTemplate;
51 import org.springframework.boot.web.server.LocalServerPort;
52 import org.springframework.context.annotation.Configuration;
53 import org.springframework.http.HttpEntity;
54 import org.springframework.http.HttpHeaders;
55 import org.springframework.http.HttpMethod;
56 import org.springframework.http.HttpStatus;
57 import org.springframework.http.ResponseEntity;
58 import org.springframework.test.context.ActiveProfiles;
59 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
62 * @author Waqas Ikram (waqas.ikram@est.tech)
65 @RunWith(SpringJUnit4ClassRunner.class)
66 @ActiveProfiles("test")
67 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
69 public class OperationsControllerTest {
71 private static final String SVC_REQUEST_ID = "04fc9f50-87b8-430d-a232-ef24bd6c4150";
73 private static final String VNF_SVC_REQUEST_ID = "8fd2622b-01fc-424d-bfc8-f48bcd64e546";
75 private static final String SERVICE_INSTANCE_ID = "ccece8fe-13da-456a-baf6-41b3a4a2bc2b";
77 private static final String SERVICE_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:service-topology-operation/";
79 private static final String VNF_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:vnf-topology-operation/";
81 private static final String VNF_INSTANCE_ID = "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701";
87 private TestRestTemplate restTemplate;
90 private ServiceOperationsCacheServiceProvider cacheServiceProvider;
93 private UserCredentials userCredentials;
97 public void test_postServiceOperationInformation_successfullyAddedToCache() throws Exception {
99 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
100 final ResponseEntity<OutputRequest> responseEntity =
101 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
103 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
104 assertTrue(responseEntity.hasBody());
106 final OutputRequest actualOutputRequest = responseEntity.getBody();
107 assertNotNull(actualOutputRequest);
109 final Output actualObject = actualOutputRequest.getOutput();
111 assertNotNull(actualObject);
112 assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
113 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
114 assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
115 assertNotNull(actualObject.getServiceResponseInformation());
117 final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
118 assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
119 assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
120 final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
121 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
122 assertTrue(optional.isPresent());
124 final GenericResourceApiServicemodelinfrastructureService service = optional.get();
125 assertNotNull(service.getServiceInstanceId());
126 assertEquals(SERVICE_INSTANCE_ID, service.getServiceInstanceId());
127 assertNotNull(service.getServiceData());
128 assertNotNull(service.getServiceStatus());
133 public void test_postServiceOperationInformation_NullInputRequest_badRequest() throws Exception {
135 final HttpEntity<?> httpEntity = new HttpEntity<>(new InputRequest<>(), getHttpHeaders());
136 final ResponseEntity<OutputRequest> responseEntity =
137 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
139 assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
143 public void test_postServiceOperationInformation_NullServiceInstanceId_badRequest() throws Exception {
145 final HttpEntity<?> httpEntity = new HttpEntity<>(getInvalidRequestInput(), getHttpHeaders());
146 final ResponseEntity<OutputRequest> responseEntity =
147 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
149 assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
150 assertTrue(responseEntity.hasBody());
152 final OutputRequest actualOutputRequest = responseEntity.getBody();
153 assertNotNull(actualOutputRequest);
155 final Output actualObject = actualOutputRequest.getOutput();
156 assertNotNull(actualObject);
157 assertEquals(HttpStatus.BAD_REQUEST.toString(), actualObject.getResponseCode());
158 assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
159 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
164 public void test_postVnfOperationInformation_successfullyAddToExistingServiceInCache() throws Exception {
165 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
166 final ResponseEntity<OutputRequest> responseEntity =
167 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
169 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
171 final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
172 final ResponseEntity<OutputRequest> responseVnfEntity =
173 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
174 assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
175 assertTrue(responseVnfEntity.hasBody());
177 final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
178 assertNotNull(actualOutputRequest);
179 assertNotNull(actualOutputRequest.getOutput());
181 final Output actualObject = actualOutputRequest.getOutput();
183 assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
184 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
185 assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
186 assertNotNull(actualObject.getServiceResponseInformation());
188 final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
189 assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
190 assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
191 final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
192 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
193 assertTrue(optional.isPresent());
195 final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
196 assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
198 final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
199 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
200 assertTrue(serviceOptional.isPresent());
202 final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
203 assertNotNull(service.getServiceInstanceId());
204 assertNotNull(service.getServiceData().getVnfs().getVnf());
205 assertNotNull(service.getServiceData());
206 assertNotNull(service.getServiceData().getVnfs());
207 assertNotNull(service.getServiceData().getVnfs().getVnf());
208 assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
209 final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
210 assertNotNull(vnf.getVnfId());
211 assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
212 assertNotNull(vnf.getVnfData());
216 public void test_postSameVnfOperationInformationTwice_ShouldReturnbadRequest() throws Exception {
218 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
219 final ResponseEntity<OutputRequest> responseEntity =
220 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
222 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
224 final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
225 final ResponseEntity<OutputRequest> responseVnfEntity =
226 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
227 assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
228 assertTrue(responseVnfEntity.hasBody());
230 final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
231 assertNotNull(actualOutputRequest);
232 assertNotNull(actualOutputRequest.getOutput());
234 final ResponseEntity<OutputRequest> badResponse =
235 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
237 final OutputRequest badOutputRequest = badResponse.getBody();
238 assertNotNull(badOutputRequest);
240 final Output actualObject = badOutputRequest.getOutput();
241 assertNotNull(actualObject);
242 assertEquals(HttpStatus.BAD_REQUEST.toString(), actualObject.getResponseCode());
243 assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
244 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
249 public void test_postVnfOperationInformationWithSvcActionChanged_successfullyAddToExistingServiceInCache()
251 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
252 final ResponseEntity<OutputRequest> responseEntity =
253 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
255 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
257 final HttpEntity<?> httpVnfWithSvcActionAssignEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
258 final ResponseEntity<OutputRequest> response = restTemplate.exchange(getVnfUrl(), HttpMethod.POST,
259 httpVnfWithSvcActionAssignEntity, OutputRequest.class);
260 assertEquals(HttpStatus.OK, response.getStatusCode());
261 assertTrue(response.hasBody());
263 final HttpEntity<?> httpVnfEntity =
264 new HttpEntity<>(getVnfRequestWithSvcActionActivateInput(), getHttpHeaders());
265 final ResponseEntity<OutputRequest> responseVnfEntity =
266 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
267 assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
268 assertTrue(responseVnfEntity.hasBody());
270 final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
271 assertNotNull(actualOutputRequest);
272 assertNotNull(actualOutputRequest.getOutput());
274 final Output actualObject = actualOutputRequest.getOutput();
276 assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
277 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
278 assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
279 assertNotNull(actualObject.getServiceResponseInformation());
281 final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
282 assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
283 assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
284 final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
285 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
286 assertTrue(optional.isPresent());
288 final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
289 assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
291 final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
292 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
293 assertTrue(serviceOptional.isPresent());
295 final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
296 assertNotNull(service.getServiceInstanceId());
297 assertNotNull(service.getServiceData().getVnfs().getVnf());
298 assertNotNull(service.getServiceData());
299 assertNotNull(service.getServiceData().getVnfs());
300 assertNotNull(service.getServiceData().getVnfs().getVnf());
301 assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
302 final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
303 assertNotNull(vnf.getVnfId());
304 assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
305 assertNotNull(vnf.getVnfData());
306 final GenericResourceApiOperStatusData vnfLevelOperStatus = vnf.getVnfData().getVnfLevelOperStatus();
307 assertNotNull(vnfLevelOperStatus);
308 assertEquals(GenericResourceApiLastRpcActionEnumeration.ACTIVATE, vnfLevelOperStatus.getLastRpcAction());
313 public void test_postVnfOperationInformation_successfullyRemoveVnfFromExistingServiceInCache() throws Exception {
314 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
315 final ResponseEntity<OutputRequest> responseEntity =
316 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
318 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
320 final HttpEntity<?> httpAddVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
321 final ResponseEntity<OutputRequest> responseAddVnfEntity =
322 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpAddVnfEntity, OutputRequest.class);
323 assertEquals(HttpStatus.OK, responseAddVnfEntity.getStatusCode());
325 Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
326 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
327 assertTrue(serviceOptional.isPresent());
329 GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
330 assertNotNull(service.getServiceInstanceId());
331 assertNotNull(service.getServiceData().getVnfs().getVnf());
332 assertNotNull(service.getServiceData());
333 assertNotNull(service.getServiceData().getVnfs());
334 assertNotNull(service.getServiceData().getVnfs().getVnf());
335 assertFalse(service.getServiceData().getVnfs().getVnf().isEmpty());
337 final HttpEntity<?> httpRemoveVnfEntity =
338 new HttpEntity<>(getVnfRequestWithRequestActionDeleteVnfInput(), getHttpHeaders());
339 final ResponseEntity<OutputRequest> responseRemoveVnfEntity =
340 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpRemoveVnfEntity, OutputRequest.class);
341 assertEquals(HttpStatus.OK, responseRemoveVnfEntity.getStatusCode());
343 final OutputRequest actualOutputRequest = responseRemoveVnfEntity.getBody();
344 assertNotNull(actualOutputRequest);
345 assertNotNull(actualOutputRequest.getOutput());
347 final Output actualObject = actualOutputRequest.getOutput();
349 assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
350 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
351 assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
354 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
355 assertTrue(serviceOptional.isPresent());
357 service = serviceOptional.get();
358 assertNotNull(service.getServiceInstanceId());
359 assertNotNull(service.getServiceData().getVnfs().getVnf());
360 assertNotNull(service.getServiceData());
361 assertNotNull(service.getServiceData().getVnfs());
362 assertNotNull(service.getServiceData().getVnfs().getVnf());
363 assertTrue(service.getServiceData().getVnfs().getVnf().isEmpty());
369 public void test_postServiceOperationInformation_withActionDeleteServiceInstance_successfullyRemoveServiceFromExistingServiceInCache()
371 final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
372 final ResponseEntity<OutputRequest> responseEntity =
373 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
375 assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
376 Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
377 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
378 assertTrue(serviceOptional.isPresent());
380 final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
381 assertNotNull(service.getServiceInstanceId());
383 final HttpEntity<?> httpRemoveServiceEntity =
384 new HttpEntity<>(getServiceRequestWithRequestActionDeleteServiceInput(), getHttpHeaders());
385 final ResponseEntity<OutputRequest> responseRemoveServiceEntity =
386 restTemplate.exchange(getUrl(), HttpMethod.POST, httpRemoveServiceEntity, OutputRequest.class);
387 assertEquals(HttpStatus.OK, responseRemoveServiceEntity.getStatusCode());
389 final OutputRequest actualOutputRequest = responseRemoveServiceEntity.getBody();
390 assertNotNull(actualOutputRequest);
391 assertNotNull(actualOutputRequest.getOutput());
393 final Output actualObject = actualOutputRequest.getOutput();
395 assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
396 assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
397 assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
400 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
401 assertFalse(serviceOptional.isPresent());
405 private HttpHeaders getHttpHeaders() {
406 return TestUtils.getHttpHeaders(userCredentials.getUsers().iterator().next().getUsername());
409 private String getUrl() {
410 return "http://localhost:" + port + Constants.OPERATIONS_URL + SERVICE_TOPOLOGY_OPERATION_URL;
413 private String getVnfUrl() {
414 return "http://localhost:" + port + Constants.OPERATIONS_URL + VNF_TOPOLOGY_OPERATION_URL;
418 public void after() {
419 cacheServiceProvider.clearAll();