3c17a376dcb594b6f84e48ab75f8eb19c954e235
[integration/csit.git] /
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.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;
60
61 /**
62  * @author Waqas Ikram (waqas.ikram@est.tech)
63  *
64  */
65 @RunWith(SpringJUnit4ClassRunner.class)
66 @ActiveProfiles("test")
67 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
68 @Configuration
69 public class OperationsControllerTest {
70
71     private static final String SVC_REQUEST_ID = "04fc9f50-87b8-430d-a232-ef24bd6c4150";
72
73     private static final String VNF_SVC_REQUEST_ID = "8fd2622b-01fc-424d-bfc8-f48bcd64e546";
74
75     private static final String SERVICE_INSTANCE_ID = "ccece8fe-13da-456a-baf6-41b3a4a2bc2b";
76
77     private static final String SERVICE_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:service-topology-operation/";
78
79     private static final String VNF_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:vnf-topology-operation/";
80
81     private static final String VNF_INSTANCE_ID = "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701";
82
83     @LocalServerPort
84     private int port;
85
86     @Autowired
87     private TestRestTemplate restTemplate;
88
89     @Autowired
90     private ServiceOperationsCacheServiceProvider cacheServiceProvider;
91
92     @Autowired
93     private UserCredentials userCredentials;
94
95
96     @Test
97     public void test_postServiceOperationInformation_successfullyAddedToCache() throws Exception {
98
99         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
100         final ResponseEntity<OutputRequest> responseEntity =
101                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
102
103         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
104         assertTrue(responseEntity.hasBody());
105
106         final OutputRequest actualOutputRequest = responseEntity.getBody();
107         assertNotNull(actualOutputRequest);
108
109         final Output actualObject = actualOutputRequest.getOutput();
110
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());
116
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());
123
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());
129
130     }
131
132     @Test
133     public void test_postServiceOperationInformation_NullInputRequest_badRequest() throws Exception {
134
135         final HttpEntity<?> httpEntity = new HttpEntity<>(new InputRequest<>(), getHttpHeaders());
136         final ResponseEntity<OutputRequest> responseEntity =
137                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
138
139         assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
140     }
141
142     @Test
143     public void test_postServiceOperationInformation_NullServiceInstanceId_badRequest() throws Exception {
144
145         final HttpEntity<?> httpEntity = new HttpEntity<>(getInvalidRequestInput(), getHttpHeaders());
146         final ResponseEntity<OutputRequest> responseEntity =
147                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
148
149         assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
150         assertTrue(responseEntity.hasBody());
151
152         final OutputRequest actualOutputRequest = responseEntity.getBody();
153         assertNotNull(actualOutputRequest);
154
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());
160
161     }
162
163     @Test
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);
168
169         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
170
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());
176
177         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
178         assertNotNull(actualOutputRequest);
179         assertNotNull(actualOutputRequest.getOutput());
180
181         final Output actualObject = actualOutputRequest.getOutput();
182
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());
187
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());
194
195         final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
196         assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
197
198         final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
199                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
200         assertTrue(serviceOptional.isPresent());
201
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());
213     }
214
215     @Test
216     public void test_postSameVnfOperationInformationTwice_ShouldReturnbadRequest() throws Exception {
217
218         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
219         final ResponseEntity<OutputRequest> responseEntity =
220                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
221
222         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
223
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());
229
230         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
231         assertNotNull(actualOutputRequest);
232         assertNotNull(actualOutputRequest.getOutput());
233
234         final ResponseEntity<OutputRequest> badResponse =
235                 restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
236
237         final OutputRequest badOutputRequest = badResponse.getBody();
238         assertNotNull(badOutputRequest);
239
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());
245
246     }
247
248     @Test
249     public void test_postVnfOperationInformationWithSvcActionChanged_successfullyAddToExistingServiceInCache()
250             throws Exception {
251         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
252         final ResponseEntity<OutputRequest> responseEntity =
253                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
254
255         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
256
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());
262
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());
269
270         final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
271         assertNotNull(actualOutputRequest);
272         assertNotNull(actualOutputRequest.getOutput());
273
274         final Output actualObject = actualOutputRequest.getOutput();
275
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());
280
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());
287
288         final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
289         assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
290
291         final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
292                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
293         assertTrue(serviceOptional.isPresent());
294
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());
309
310     }
311
312     @Test
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);
317
318         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
319
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());
324
325         Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
326                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
327         assertTrue(serviceOptional.isPresent());
328
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());
336
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());
342
343         final OutputRequest actualOutputRequest = responseRemoveVnfEntity.getBody();
344         assertNotNull(actualOutputRequest);
345         assertNotNull(actualOutputRequest.getOutput());
346
347         final Output actualObject = actualOutputRequest.getOutput();
348
349         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
350         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
351         assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
352
353         serviceOptional =
354                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
355         assertTrue(serviceOptional.isPresent());
356
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());
364
365
366     }
367
368     @Test
369     public void test_postServiceOperationInformation_withActionDeleteServiceInstance_successfullyRemoveServiceFromExistingServiceInCache()
370             throws Exception {
371         final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
372         final ResponseEntity<OutputRequest> responseEntity =
373                 restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
374
375         assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
376         Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
377                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
378         assertTrue(serviceOptional.isPresent());
379
380         final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
381         assertNotNull(service.getServiceInstanceId());
382
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());
388
389         final OutputRequest actualOutputRequest = responseRemoveServiceEntity.getBody();
390         assertNotNull(actualOutputRequest);
391         assertNotNull(actualOutputRequest.getOutput());
392
393         final Output actualObject = actualOutputRequest.getOutput();
394
395         assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
396         assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
397         assertEquals(SVC_REQUEST_ID, actualObject.getSvcRequestId());
398
399         serviceOptional =
400                 cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
401         assertFalse(serviceOptional.isPresent());
402
403     }
404
405     private HttpHeaders getHttpHeaders() {
406         return TestUtils.getHttpHeaders(userCredentials.getUsers().iterator().next().getUsername());
407     }
408
409     private String getUrl() {
410         return "http://localhost:" + port + Constants.OPERATIONS_URL + SERVICE_TOPOLOGY_OPERATION_URL;
411     }
412
413     private String getVnfUrl() {
414         return "http://localhost:" + port + Constants.OPERATIONS_URL + VNF_TOPOLOGY_OPERATION_URL;
415     }
416
417     @After
418     public void after() {
419         cacheServiceProvider.clearAll();
420     }
421
422 }