Fixing infinte loop of flow
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / adapter / vnfm / tasks / VnfmAdapterServiceProviderImplTest.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
21 package org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.ArgumentMatchers.anyString;
28 import static org.mockito.ArgumentMatchers.eq;
29 import static org.mockito.Mockito.when;
30 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_GENERIC_VND_ID;
31 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.DUMMY_JOB_ID;
32 import static org.onap.so.bpmn.infrastructure.adapter.vnfm.tasks.TestConstants.getVnfmBasicHttpConfigProvider;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.mockito.Mock;
36 import org.mockito.junit.MockitoJUnitRunner;
37 import org.onap.so.rest.exceptions.RestProcessingException;
38 import org.onap.so.rest.service.HttpRestServiceProvider;
39 import org.onap.vnfmadapter.v1.model.CreateVnfRequest;
40 import org.onap.vnfmadapter.v1.model.CreateVnfResponse;
41 import org.onap.vnfmadapter.v1.model.DeleteVnfResponse;
42 import org.onap.vnfmadapter.v1.model.OperationStateEnum;
43 import org.onap.vnfmadapter.v1.model.QueryJobResponse;
44 import org.springframework.http.HttpStatus;
45 import org.springframework.http.ResponseEntity;
46 import com.google.common.base.Optional;
47
48
49 /**
50  * @author waqas.ikram@est.tech
51  */
52 @RunWith(MockitoJUnitRunner.class)
53 public class VnfmAdapterServiceProviderImplTest {
54
55     private static final String EMPTY_JOB_ID = "";
56
57     private static final CreateVnfRequest CREATE_VNF_REQUEST = new CreateVnfRequest();
58
59     @Mock
60     private HttpRestServiceProvider mockedHttpServiceProvider;
61
62     @Mock
63     private ResponseEntity<CreateVnfResponse> mockedResponseEntity;
64
65     @Mock
66     private ResponseEntity<DeleteVnfResponse> deleteVnfResponse;
67     @Mock
68     private ResponseEntity<QueryJobResponse> mockedQueryJobResponseResponseEntity;
69
70     @Test
71     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBody_validResponse() {
72
73         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
74                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
75         when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
76         when(mockedResponseEntity.hasBody()).thenReturn(true);
77         final CreateVnfResponse response = getCreateVnfResponse(DUMMY_JOB_ID);
78         when(mockedResponseEntity.getBody()).thenReturn(response);
79         final VnfmAdapterServiceProvider objUnderTest =
80                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
81         final Optional<CreateVnfResponse> actual =
82                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
83         assertTrue(actual.isPresent());
84         assertEquals(actual.get(), response);
85     }
86
87     @Test
88     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithNoBody_noResponse() {
89         assertWithStatuCode(HttpStatus.ACCEPTED);
90     }
91
92     @Test
93     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusNotOkWithNoBody_noResponse() {
94         assertWithStatuCode(HttpStatus.UNAUTHORIZED);
95     }
96
97
98     @Test
99     public void testInvokeCreateInstantiationRequest_httpServiceProviderReturnsStatusAcceptedWithBodyWithInvalidJobId_noResponse() {
100         assertWithJobId(null);
101         assertWithJobId(EMPTY_JOB_ID);
102     }
103
104     @Test
105     public void testInvokeCreateInstantiationRequest_httpServiceProviderThrowException_httpRestServiceProviderNotNull() {
106
107         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
108                 eq(CreateVnfResponse.class))).thenThrow(RestProcessingException.class);
109
110
111         final VnfmAdapterServiceProvider objUnderTest =
112                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
113
114         final Optional<CreateVnfResponse> actual =
115                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
116         assertFalse(actual.isPresent());
117
118     }
119
120     @Test
121     public void testInvokeDeleteRequest() {
122         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
123                 .thenReturn(deleteVnfResponse);
124         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
125         when(deleteVnfResponse.hasBody()).thenReturn(true);
126         final DeleteVnfResponse response = getDeleteVnfResponse(DUMMY_JOB_ID);
127         when(deleteVnfResponse.getBody()).thenReturn(response);
128         final VnfmAdapterServiceProvider objUnderTest =
129                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
130         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
131         assertTrue(actual.isPresent());
132     }
133
134     @Test
135     public void testInvokeDeleteRequestNotAccepted() {
136         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
137                 .thenReturn(deleteVnfResponse);
138         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.BAD_GATEWAY);
139         final VnfmAdapterServiceProvider objUnderTest =
140                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
141         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
142         assertFalse(actual.isPresent());
143     }
144
145     @Test
146     public void testInvokeDeleteRequestNoBody() {
147         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
148                 .thenReturn(deleteVnfResponse);
149         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
150         when(deleteVnfResponse.hasBody()).thenReturn(false);
151         final VnfmAdapterServiceProvider objUnderTest =
152                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
153         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
154         assertFalse(actual.isPresent());
155     }
156
157     @Test
158     public void testInvokeDeleteRequestNoJobId() {
159         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
160                 .thenReturn(deleteVnfResponse);
161         when(deleteVnfResponse.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
162         when(deleteVnfResponse.hasBody()).thenReturn(true);
163         final DeleteVnfResponse response = getDeleteVnfResponse("");
164         when(deleteVnfResponse.getBody()).thenReturn(response);
165         final VnfmAdapterServiceProvider objUnderTest =
166                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
167         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
168         assertFalse(actual.isPresent());
169     }
170
171     @Test
172     public void testInvokeDeleteRequestException() {
173         when(mockedHttpServiceProvider.deleteHttpRequest(anyString(), eq(DeleteVnfResponse.class)))
174                 .thenThrow(RestProcessingException.class);
175         final VnfmAdapterServiceProvider objUnderTest =
176                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
177         final Optional<DeleteVnfResponse> actual = objUnderTest.invokeDeleteRequest(DUMMY_GENERIC_VND_ID);
178         assertFalse(actual.isPresent());
179     }
180
181     @Test
182     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithBody_validResponse() {
183
184         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
185         when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(true);
186         when(mockedQueryJobResponseResponseEntity.getBody()).thenReturn(getQueryJobResponse());
187
188         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
189                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
190
191         final VnfmAdapterServiceProvider objUnderTest =
192                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
193
194         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
195         assertTrue(actual.isPresent());
196         final QueryJobResponse actualQueryJobResponse = actual.get();
197         assertNotNull(actualQueryJobResponse);
198     }
199
200     @Test
201     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusOkWithOutBody_invalidResponse() {
202
203         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.OK);
204         when(mockedQueryJobResponseResponseEntity.hasBody()).thenReturn(false);
205
206         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
207                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
208
209         final VnfmAdapterServiceProvider objUnderTest =
210                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
211
212         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
213         assertFalse(actual.isPresent());
214     }
215
216     @Test
217     public void testGetInstantiateOperationJobStatus_httpServiceProviderReturnsStatusNotOkWithOutBody_invalidResponse() {
218
219         when(mockedQueryJobResponseResponseEntity.getStatusCode()).thenReturn(HttpStatus.INTERNAL_SERVER_ERROR);
220
221         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
222                 eq(QueryJobResponse.class))).thenReturn(mockedQueryJobResponseResponseEntity);
223
224         final VnfmAdapterServiceProvider objUnderTest =
225                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
226
227         final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
228         assertFalse(actual.isPresent());
229     }
230
231     @Test(expected = RestProcessingException.class)
232     public void testGetInstantiateOperationJobStatus_Exception() {
233
234         when(mockedHttpServiceProvider.getHttpResponse(eq(TestConstants.JOB_STATUS_EXPECTED_URL),
235                 eq(QueryJobResponse.class))).thenThrow(RestProcessingException.class);
236
237         final VnfmAdapterServiceProvider objUnderTest =
238                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
239
240         objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
241     }
242
243     private QueryJobResponse getQueryJobResponse() {
244         return new QueryJobResponse().id(DUMMY_JOB_ID).operationState(OperationStateEnum.COMPLETED);
245
246     }
247
248     private void assertWithJobId(final String jobId) {
249         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
250                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
251         when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
252         when(mockedResponseEntity.hasBody()).thenReturn(true);
253         final CreateVnfResponse response = getCreateVnfResponse(jobId);
254         when(mockedResponseEntity.getBody()).thenReturn(response);
255
256
257         final VnfmAdapterServiceProvider objUnderTest =
258                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
259
260         final Optional<CreateVnfResponse> actual =
261                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
262         assertFalse(actual.isPresent());
263     }
264
265     private void assertWithStatuCode(final HttpStatus status) {
266         when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(),
267                 eq(CreateVnfResponse.class))).thenReturn(mockedResponseEntity);
268         when(mockedResponseEntity.getStatusCode()).thenReturn(status);
269         when(mockedResponseEntity.hasBody()).thenReturn(false);
270
271         final VnfmAdapterServiceProvider objUnderTest =
272                 new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
273
274         final Optional<CreateVnfResponse> actual =
275                 objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
276         assertFalse(actual.isPresent());
277     }
278
279     private CreateVnfResponse getCreateVnfResponse(final String jobId) {
280         return new CreateVnfResponse().jobId(jobId);
281     }
282
283     private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
284         final DeleteVnfResponse response = new DeleteVnfResponse();
285         response.setJobId(jobId);
286         return response;
287     }
288
289     private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
290         return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
291     }
292 }