6f1b6f0bd200cd88979c59315135506de9d4e02f
[so.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
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(), eq(CreateVnfResponse.class)))
74         .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(), eq(CreateVnfResponse.class)))
108         .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
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     final Optional<QueryJobResponse> actual = objUnderTest.getInstantiateOperationJobStatus(DUMMY_JOB_ID);
241     assertFalse(actual.isPresent());
242   }
243
244   private QueryJobResponse getQueryJobResponse() {
245     return new QueryJobResponse().id(DUMMY_JOB_ID).operationState(OperationStateEnum.COMPLETED);
246
247   }
248
249   private void assertWithJobId(final String jobId) {
250     when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
251         .thenReturn(mockedResponseEntity);
252     when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
253     when(mockedResponseEntity.hasBody()).thenReturn(true);
254     final CreateVnfResponse response = getCreateVnfResponse(jobId);
255     when(mockedResponseEntity.getBody()).thenReturn(response);
256
257
258     final VnfmAdapterServiceProvider objUnderTest =
259         new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
260
261     final Optional<CreateVnfResponse> actual =
262         objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
263     assertFalse(actual.isPresent());
264   }
265
266   private void assertWithStatuCode(final HttpStatus status) {
267     when(mockedHttpServiceProvider.postHttpRequest(eq(CREATE_VNF_REQUEST), anyString(), eq(CreateVnfResponse.class)))
268         .thenReturn(mockedResponseEntity);
269     when(mockedResponseEntity.getStatusCode()).thenReturn(status);
270     when(mockedResponseEntity.hasBody()).thenReturn(false);
271
272     final VnfmAdapterServiceProvider objUnderTest =
273         new VnfmAdapterServiceProviderImpl(getVnfmAdapterUrlProvider(), mockedHttpServiceProvider);
274
275     final Optional<CreateVnfResponse> actual =
276         objUnderTest.invokeCreateInstantiationRequest(DUMMY_GENERIC_VND_ID, CREATE_VNF_REQUEST);
277     assertFalse(actual.isPresent());
278   }
279
280   private CreateVnfResponse getCreateVnfResponse(final String jobId) {
281     return new CreateVnfResponse().jobId(jobId);
282   }
283
284   private DeleteVnfResponse getDeleteVnfResponse(final String jobId) {
285     final DeleteVnfResponse response = new DeleteVnfResponse();
286     response.setJobId(jobId);
287     return response;
288   }
289
290   private VnfmAdapterUrlProvider getVnfmAdapterUrlProvider() {
291     return new VnfmAdapterUrlProvider(getVnfmBasicHttpConfigProvider());
292   }
293 }