Adding delete endpoint for vnf
[integration/csit.git] / plans / so / integration-etsi-testing / so-simulators / sdnc-simulator / src / test / java / org / onap / so / sdncsimulator / controller / OperationsControllerTest.java
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.so.sdncsimulator.controller;
21
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.getVnfRequestInput;
29 import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestWithRequestActionDeleteVnfInput;
30 import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestWithSvcActionActivateInput;
31 import java.util.Optional;
32 import org.junit.After;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.onap.sdnc.northbound.client.model.GenericResourceApiInstanceReference;
36 import org.onap.sdnc.northbound.client.model.GenericResourceApiLastRpcActionEnumeration;
37 import org.onap.sdnc.northbound.client.model.GenericResourceApiOperStatusData;
38 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfsVnf;
39 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicemodelinfrastructureService;
40 import org.onap.so.sdncsimulator.models.InputRequest;
41 import org.onap.so.sdncsimulator.models.Output;
42 import org.onap.so.sdncsimulator.models.OutputRequest;
43 import org.onap.so.sdncsimulator.providers.ServiceOperationsCacheServiceProvider;
44 import org.onap.so.sdncsimulator.utils.Constants;
45 import org.onap.so.simulator.model.UserCredentials;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.boot.test.context.SpringBootTest;
48 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
49 import org.springframework.boot.test.web.client.TestRestTemplate;
50 import org.springframework.boot.web.server.LocalServerPort;
51 import org.springframework.context.annotation.Configuration;
52 import org.springframework.http.HttpEntity;
53 import org.springframework.http.HttpHeaders;
54 import org.springframework.http.HttpMethod;
55 import org.springframework.http.HttpStatus;
56 import org.springframework.http.ResponseEntity;
57 import org.springframework.test.context.ActiveProfiles;
58 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
59
60 /**
61  * @author Waqas Ikram (waqas.ikram@est.tech)
62  *
63  */
64 @RunWith(SpringJUnit4ClassRunner.class)
65 @ActiveProfiles("test")
66 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
67 @Configuration
68 public class OperationsControllerTest {
69
70     private static final String SVC_REQUEST_ID = "04fc9f50-87b8-430d-a232-ef24bd6c4150";
71
72     private static final String VNF_SVC_REQUEST_ID = "8fd2622b-01fc-424d-bfc8-f48bcd64e546";
73
74     private static final String SERVICE_INSTANCE_ID = "ccece8fe-13da-456a-baf6-41b3a4a2bc2b";
75
76     private static final String SERVICE_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:service-topology-operation/";
77
78     private static final String VNF_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:vnf-topology-operation/";
79
80     private static final String VNF_INSTANCE_ID = "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701";
81
82     @LocalServerPort
83     private int port;
84
85     @Autowired
86     private TestRestTemplate restTemplate;
87
88     @Autowired
89     private ServiceOperationsCacheServiceProvider cacheServiceProvider;
90
91     @Autowired
92     private UserCredentials userCredentials;
93
94
95     @Test
96     public void test_postServiceOperationInformation_successfullyAddedToCache() throws Exception {
97
98         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
99         final ResponseEntity<OutputRequest> responseEntity =
100                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
101
102         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
103         assertTrue(responseEntity.hasBody());
104
105         final OutputRequest actualOutputRequest = responseEntity.getBody();
106         assertNotNull(actualOutputRequest);
107
108         final Output actualObject = actualOutputRequest.getOutput();
109
110         assertNotNull(actualObject);
111         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
112         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
113         assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
114         assertNotNull(actualObject.getServiceResponseInformation());
115
116         final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
117         assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
118         assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
119         final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
120                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
121         assertTrue(optional.isPresent());
122
123         final GenericResourceApiServicemodelinfrastructureService service = optional.get();
124         assertNotNull(service.getServiceInstanceId());
125         assertEquals(SERVICE_INSTANCE_ID, service.getServiceInstanceId());
126         assertNotNull(service.getServiceData());
127         assertNotNull(service.getServiceStatus());
128
129     }
130
131     @Test
132     public void test_postServiceOperationInformation_NullInputRequest_badRequest() throws Exception {
133
134         final HttpEntity<?> httpEntity = new HttpEntity<>(new InputRequest<>(), getHttpHeaders());
135         final ResponseEntity<OutputRequest> responseEntity =
136                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
137
138         assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
139     }
140
141     @Test
142     public void test_postServiceOperationInformation_NullServiceInstanceId_badRequest() throws Exception {
143
144         final HttpEntity<?> httpEntity = new HttpEntity<>(getInvalidRequestInput(), getHttpHeaders());
145         final ResponseEntity<OutputRequest> responseEntity =
146                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
147
148         assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
149         assertTrue(responseEntity.hasBody());
150
151         final OutputRequest actualOutputRequest = responseEntity.getBody();
152         assertNotNull(actualOutputRequest);
153
154         final Output actualObject = actualOutputRequest.getOutput();
155         assertNotNull(actualObject);
156         assertEquals(HttpStatus.BAD_REQUEST.toString(), actualObject.getResponseCode());
157         assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
158         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
159
160     }
161
162     @Test
163     public void test_postVnfOperationInformation_successfullyAddToExistingServiceInCache() throws Exception {
164         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
165         final ResponseEntity<OutputRequest> responseEntity =
166                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
167
168         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
169
170         final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
171         final ResponseEntity<OutputRequest> responseVnfEntity =
172                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
173         assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
174         assertTrue(responseVnfEntity.hasBody());
175
176         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
177         assertNotNull(actualOutputRequest);
178         assertNotNull(actualOutputRequest.getOutput());
179
180         final Output actualObject = actualOutputRequest.getOutput();
181
182         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
183         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
184         assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
185         assertNotNull(actualObject.getServiceResponseInformation());
186
187         final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
188         assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
189         assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
190         final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
191                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
192         assertTrue(optional.isPresent());
193
194         final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
195         assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
196
197         final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
198                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
199         assertTrue(serviceOptional.isPresent());
200
201         final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
202         assertNotNull(service.getServiceInstanceId());
203         assertNotNull(service.getServiceData().getVnfs().getVnf());
204         assertNotNull(service.getServiceData());
205         assertNotNull(service.getServiceData().getVnfs());
206         assertNotNull(service.getServiceData().getVnfs().getVnf());
207         assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
208         final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
209         assertNotNull(vnf.getVnfId());
210         assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
211         assertNotNull(vnf.getVnfData());
212     }
213
214     @Test
215     public void test_postSameVnfOperationInformationTwice_ShouldReturnbadRequest() throws Exception {
216
217         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
218         final ResponseEntity<OutputRequest> responseEntity =
219                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
220
221         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
222
223         final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
224         final ResponseEntity<OutputRequest> responseVnfEntity =
225                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
226         assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
227         assertTrue(responseVnfEntity.hasBody());
228
229         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
230         assertNotNull(actualOutputRequest);
231         assertNotNull(actualOutputRequest.getOutput());
232
233         final ResponseEntity<OutputRequest> badResponse =
234                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
235
236         final OutputRequest badOutputRequest = badResponse.getBody();
237         assertNotNull(badOutputRequest);
238
239         final Output actualObject = badOutputRequest.getOutput();
240         assertNotNull(actualObject);
241         assertEquals(HttpStatus.BAD_REQUEST.toString(), actualObject.getResponseCode());
242         assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
243         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
244
245     }
246
247     @Test
248     public void test_postVnfOperationInformationWithSvcActionChanged_successfullyAddToExistingServiceInCache()
249             throws Exception {
250         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
251         final ResponseEntity<OutputRequest> responseEntity =
252                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
253
254         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
255
256         final HttpEntity<?> httpVnfWithSvcActionAssignEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
257         final ResponseEntity<OutputRequest> response = restTemplate.exchange(getVnfUrl(), HttpMethod.POST,
258                 httpVnfWithSvcActionAssignEntity, OutputRequest.class);
259         assertEquals(HttpStatus.OK, response.getStatusCode());
260         assertTrue(response.hasBody());
261
262         final HttpEntity<?> httpVnfEntity =
263                 new HttpEntity<>(getVnfRequestWithSvcActionActivateInput(), getHttpHeaders());
264         final ResponseEntity<OutputRequest> responseVnfEntity =
265                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
266         assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
267         assertTrue(responseVnfEntity.hasBody());
268
269         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
270         assertNotNull(actualOutputRequest);
271         assertNotNull(actualOutputRequest.getOutput());
272
273         final Output actualObject = actualOutputRequest.getOutput();
274
275         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
276         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
277         assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
278         assertNotNull(actualObject.getServiceResponseInformation());
279
280         final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
281         assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
282         assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
283         final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
284                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
285         assertTrue(optional.isPresent());
286
287         final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
288         assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
289
290         final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
291                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
292         assertTrue(serviceOptional.isPresent());
293
294         final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
295         assertNotNull(service.getServiceInstanceId());
296         assertNotNull(service.getServiceData().getVnfs().getVnf());
297         assertNotNull(service.getServiceData());
298         assertNotNull(service.getServiceData().getVnfs());
299         assertNotNull(service.getServiceData().getVnfs().getVnf());
300         assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
301         final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
302         assertNotNull(vnf.getVnfId());
303         assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
304         assertNotNull(vnf.getVnfData());
305         GenericResourceApiOperStatusData vnfLevelOperStatus = vnf.getVnfData().getVnfLevelOperStatus();
306         assertNotNull(vnfLevelOperStatus);
307         assertEquals(GenericResourceApiLastRpcActionEnumeration.ACTIVATE, vnfLevelOperStatus.getLastRpcAction());
308
309     }
310
311     @Test
312     public void test_postVnfOperationInformation_successfullyRemoveVnfFromExistingServiceInCache() throws Exception {
313         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
314         final ResponseEntity<OutputRequest> responseEntity =
315                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
316
317         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
318
319         final HttpEntity<?> httpAddVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
320         final ResponseEntity<OutputRequest> responseAddVnfEntity =
321                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpAddVnfEntity, OutputRequest.class);
322         assertEquals(HttpStatus.OK, responseAddVnfEntity.getStatusCode());
323
324         Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
325                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
326         assertTrue(serviceOptional.isPresent());
327
328         GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
329         assertNotNull(service.getServiceInstanceId());
330         assertNotNull(service.getServiceData().getVnfs().getVnf());
331         assertNotNull(service.getServiceData());
332         assertNotNull(service.getServiceData().getVnfs());
333         assertNotNull(service.getServiceData().getVnfs().getVnf());
334         assertFalse(service.getServiceData().getVnfs().getVnf().isEmpty());
335
336         final HttpEntity<?> httpRemoveVnfEntity =
337                 new HttpEntity<>(getVnfRequestWithRequestActionDeleteVnfInput(), getHttpHeaders());
338         final ResponseEntity<OutputRequest> responseRemoveVnfEntity =
339                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpRemoveVnfEntity, OutputRequest.class);
340         assertEquals(HttpStatus.OK, responseRemoveVnfEntity.getStatusCode());
341
342         final OutputRequest actualOutputRequest = responseRemoveVnfEntity.getBody();
343         assertNotNull(actualOutputRequest);
344         assertNotNull(actualOutputRequest.getOutput());
345
346         final Output actualObject = actualOutputRequest.getOutput();
347
348         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
349         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
350         assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
351
352         serviceOptional =
353                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
354         assertTrue(serviceOptional.isPresent());
355
356         service = serviceOptional.get();
357         assertNotNull(service.getServiceInstanceId());
358         assertNotNull(service.getServiceData().getVnfs().getVnf());
359         assertNotNull(service.getServiceData());
360         assertNotNull(service.getServiceData().getVnfs());
361         assertNotNull(service.getServiceData().getVnfs().getVnf());
362         assertTrue(service.getServiceData().getVnfs().getVnf().isEmpty());
363
364
365     }
366
367     private HttpHeaders getHttpHeaders() {
368         return TestUtils.getHttpHeaders(userCredentials.getUsers().iterator().next().getUsername());
369     }
370
371     private String getUrl() {
372         return "http://localhost:" + port + Constants.OPERATIONS_URL + SERVICE_TOPOLOGY_OPERATION_URL;
373     }
374
375     private String getVnfUrl() {
376         return "http://localhost:" + port + Constants.OPERATIONS_URL + VNF_TOPOLOGY_OPERATION_URL;
377     }
378
379     @After
380     public void after() {
381         cacheServiceProvider.clearAll();
382     }
383
384 }