[SO] SO changes to support Delete AS
[so.git] / bpmn / so-bpmn-tasks / src / test / java / org / onap / so / bpmn / infrastructure / adapter / cnfm / tasks / CnfmHttpServiceProviderImplTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2023 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.cnfm.tasks;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.when;
28 import java.net.URI;
29 import java.util.Optional;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.mockito.Mock;
34 import org.mockito.Mockito;
35 import org.mockito.junit.MockitoJUnitRunner;
36 import org.onap.so.cnfm.lcm.model.AsInstance;
37 import org.onap.so.cnfm.lcm.model.AsLcmOpOcc;
38 import org.onap.so.cnfm.lcm.model.CreateAsRequest;
39 import org.onap.so.cnfm.lcm.model.InstantiateAsRequest;
40 import org.onap.so.cnfm.lcm.model.TerminateAsRequest;
41 import org.onap.so.rest.service.HttpRestServiceProvider;
42 import org.onap.so.rest.service.HttpRestServiceProviderImpl;
43 import org.springframework.http.HttpHeaders;
44 import org.springframework.http.HttpStatus;
45 import org.springframework.http.ResponseEntity;
46
47 /**
48  * @author Raviteja Karumuri (raviteja.karumuri@est.tech)
49  */
50 @RunWith(MockitoJUnitRunner.class)
51 public class CnfmHttpServiceProviderImplTest {
52
53     @Mock
54     private CnfmUrlProvider cnfmUrlProvider;
55     @Mock
56     private HttpRestServiceProviderImpl httpRestServiceProvider;
57     @Mock
58     private ResponseEntity<AsInstance> responseEntity;
59     @Mock
60     private ResponseEntity<Void> responseEntityVoid;
61
62     private ResponseEntity<AsLcmOpOcc> responseEntityAsLCM;
63     private final String createURL = "http://so-cnfm-lcm.onap:9888/so/so-cnfm/v1/api/aslcm/v1/as_instances";
64     private final String instantiateURL = "http://so-cnfm-lcm.onap:9888/so/so-cnfm/v1/api/aslcm/v1/as_instances"
65             + getAsInstance().getAsInstanceid() + "/instantiate";
66     private CnfmHttpServiceProviderImpl cnfmHttpServiceProviderImpl;
67     private final URI uri = URI.create("sample");
68     private final CreateAsRequest createAsRequest = new CreateAsRequest();
69     private final InstantiateAsRequest instantiateAsRequest = new InstantiateAsRequest();
70     private final TerminateAsRequest terminateAsRequest = new TerminateAsRequest();
71
72     @Before
73     public void setup() {
74         cnfmHttpServiceProviderImpl = new CnfmHttpServiceProviderImpl(cnfmUrlProvider, httpRestServiceProvider);
75         when(httpRestServiceProvider.postHttpRequest(Mockito.any(), Mockito.anyString(), eq(AsInstance.class)))
76                 .thenReturn(responseEntity);
77     }
78
79     @Test
80     public void invokeCreateAsRequest_withStatuscode_Success_hasBody() {
81
82         when(cnfmUrlProvider.getCreateAsRequestUrl()).thenReturn(createURL);
83         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
84         when(responseEntity.getBody()).thenReturn(getAsInstance());
85         when(responseEntity.hasBody()).thenReturn(true);
86         final Optional<AsInstance> returnedContent = cnfmHttpServiceProviderImpl.invokeCreateAsRequest(createAsRequest);
87         assertEquals(returnedContent.orElseThrow().getAsInstanceid(), getAsInstance().getAsInstanceid());
88     }
89
90     @Test
91     public void invokeCreateAsRequest_withStatuscodeSuccess_hasNoBody() {
92
93         when(cnfmUrlProvider.getCreateAsRequestUrl()).thenReturn(createURL);
94         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
95         final Optional<AsInstance> returnedContent = cnfmHttpServiceProviderImpl.invokeCreateAsRequest(createAsRequest);
96         assertFalse(returnedContent.isPresent());
97     }
98
99
100     @Test
101     public void invokeCreateAsRequest_withStatuscode_Success_hasBody_emptyInstanceID() {
102
103         AsInstance emptyInstanceID = getAsInstance();
104         emptyInstanceID.setAsInstanceid(null);
105         when(cnfmUrlProvider.getCreateAsRequestUrl()).thenReturn(createURL);
106         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
107         when(responseEntity.getBody()).thenReturn(emptyInstanceID);
108         when(responseEntity.hasBody()).thenReturn(true);
109         final Optional<AsInstance> returnedContent = cnfmHttpServiceProviderImpl.invokeCreateAsRequest(createAsRequest);
110         assertFalse(returnedContent.isPresent());
111     }
112
113     @Test
114     public void invokeCreateAsRequest_withStatuscode_NotSuccess_hasBody_emptyInstanceID() {
115
116         AsInstance emptyInstanceID = getAsInstance();
117         emptyInstanceID.setAsInstanceid(null);
118         when(cnfmUrlProvider.getCreateAsRequestUrl()).thenReturn(createURL);
119         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST);
120         final Optional<AsInstance> returnedContent = cnfmHttpServiceProviderImpl.invokeCreateAsRequest(createAsRequest);
121         assertFalse(returnedContent.isPresent());
122     }
123
124
125     @Test
126     public void invokeInstantiateAsRequest_withStatuscode_Success() {
127
128         final String asinstanceId = getAsInstance().getAsInstanceid();
129         when(cnfmUrlProvider.getInstantiateAsRequestUrl(asinstanceId)).thenReturn(instantiateURL);
130         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
131         when(responseEntity.getHeaders()).thenReturn(getHttpHeaders());
132         final Optional<URI> returnedContent =
133                 cnfmHttpServiceProviderImpl.invokeInstantiateAsRequest(instantiateAsRequest, asinstanceId);
134         assertEquals(uri.toString(), returnedContent.orElseThrow().toString());
135     }
136
137     @Test
138     public void invokeInstantiateAsRequest_withStatuscode_Success_NoStatusURI() {
139
140         final String asinstanceId = getAsInstance().getAsInstanceid();
141         final HttpHeaders httpHeaders = getHttpHeaders();
142         httpHeaders.setLocation(null);
143         when(cnfmUrlProvider.getInstantiateAsRequestUrl(asinstanceId)).thenReturn(instantiateURL);
144         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
145         when(responseEntity.getHeaders()).thenReturn(httpHeaders);
146         final Optional<URI> returnedContent =
147                 cnfmHttpServiceProviderImpl.invokeInstantiateAsRequest(instantiateAsRequest, asinstanceId);
148         assertFalse(returnedContent.isPresent());
149     }
150
151     @Test
152     public void invokeInstantiateAsRequest_withStatuscode_NotSuccess_NoStatusURI() {
153
154         final String asinstanceId = getAsInstance().getAsInstanceid();
155         when(cnfmUrlProvider.getInstantiateAsRequestUrl(asinstanceId)).thenReturn(instantiateURL);
156         when(responseEntity.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST);
157         final Optional<URI> returnedContent =
158                 cnfmHttpServiceProviderImpl.invokeInstantiateAsRequest(instantiateAsRequest, asinstanceId);
159         assertFalse(returnedContent.isPresent());
160     }
161
162     @Test
163     public void test_getOperationJobStatus_statuscode_Accepted() {
164
165         responseEntityAsLCM = getResponseEntityAsLCM(HttpStatus.ACCEPTED);
166         when(httpRestServiceProvider.getHttpResponse(Mockito.anyString(), eq(AsLcmOpOcc.class)))
167                 .thenReturn(responseEntityAsLCM);
168         final Optional<AsLcmOpOcc> returnedContent = cnfmHttpServiceProviderImpl.getOperationJobStatus("sample URL");
169         assertEquals(returnedContent.orElseThrow().getAsInstanceId(), getAsLcmOpOcc().getAsInstanceId());
170     }
171
172     @Test
173     public void test_getOperationJobStatus_statuscode_NotFound() {
174
175         responseEntityAsLCM = getResponseEntityAsLCM(HttpStatus.NOT_FOUND);
176         when(httpRestServiceProvider.getHttpResponse(Mockito.anyString(), eq(AsLcmOpOcc.class)))
177                 .thenReturn(responseEntityAsLCM);
178         final Optional<AsLcmOpOcc> returnedContent = cnfmHttpServiceProviderImpl.getOperationJobStatus("sample URL");
179         assertFalse(returnedContent.isPresent());
180     }
181
182     @Test
183     public void invokeDeleteAsRequest_withStatuscode_Success() {
184
185         when(cnfmUrlProvider.getDeleteAsRequestUrl(Mockito.anyString())).thenReturn("deleteURL");
186         when(httpRestServiceProvider.deleteHttpRequest(Mockito.anyString(), eq(Void.class)))
187                 .thenReturn(responseEntityVoid);
188         when(responseEntityVoid.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
189         final Optional<Boolean> returnedContent = cnfmHttpServiceProviderImpl.invokeDeleteAsRequest("2345");
190         assertTrue(returnedContent.orElseThrow());
191     }
192
193     @Test
194     public void invokeDeleteAsRequest_withStatuscode_BadRequest() {
195
196         when(cnfmUrlProvider.getDeleteAsRequestUrl(Mockito.anyString())).thenReturn("deleteURL");
197         when(httpRestServiceProvider.deleteHttpRequest(Mockito.anyString(), eq(Void.class)))
198                 .thenReturn(responseEntityVoid);
199         when(responseEntityVoid.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST);
200         final Optional<Boolean> returnedContent = cnfmHttpServiceProviderImpl.invokeDeleteAsRequest("2345");
201         assertTrue(returnedContent.isEmpty());
202     }
203
204     @Test
205     public void invokeTerminateAsRequest_withStatuscode_Success() {
206
207         when(cnfmUrlProvider.getTerminateAsRequestUrl(Mockito.anyString())).thenReturn("terminateURL");
208         when(httpRestServiceProvider.postHttpRequest(Mockito.any(TerminateAsRequest.class), Mockito.anyString(),
209                 eq(Void.class))).thenReturn(responseEntityVoid);
210         when(responseEntityVoid.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
211         when(responseEntityVoid.getHeaders()).thenReturn(getHttpHeaders());
212         final Optional<URI> returnedContent =
213                 cnfmHttpServiceProviderImpl.invokeTerminateAsRequest("12356", terminateAsRequest);
214         assertTrue(returnedContent.isPresent());
215         assertEquals(uri.getPath(), returnedContent.orElseThrow().getPath());
216     }
217
218     @Test
219     public void invokeTerminateAsRequest_withStatuscode_Success_NullStatusURI() {
220
221         final HttpHeaders httpHeaders = getHttpHeaders();
222         httpHeaders.setLocation(null);
223         when(cnfmUrlProvider.getTerminateAsRequestUrl(Mockito.anyString())).thenReturn("terminateURL");
224         when(httpRestServiceProvider.postHttpRequest(Mockito.any(TerminateAsRequest.class), Mockito.anyString(),
225                 eq(Void.class))).thenReturn(responseEntityVoid);
226         when(responseEntityVoid.getStatusCode()).thenReturn(HttpStatus.ACCEPTED);
227         when(responseEntityVoid.getHeaders()).thenReturn(httpHeaders);
228         final Optional<URI> returnedContent =
229                 cnfmHttpServiceProviderImpl.invokeTerminateAsRequest("12356", terminateAsRequest);
230         assertTrue(returnedContent.isEmpty());
231     }
232
233     @Test
234     public void invokeTerminateAsRequest_withStatuscode_BadRequest() {
235
236         when(cnfmUrlProvider.getTerminateAsRequestUrl(Mockito.anyString())).thenReturn("terminateURL");
237         when(httpRestServiceProvider.postHttpRequest(Mockito.any(TerminateAsRequest.class), Mockito.anyString(),
238                 eq(Void.class))).thenReturn(responseEntityVoid);
239         when(responseEntityVoid.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST);
240         // when(responseEntityVoid.getHeaders()).thenReturn(getHttpHeaders());
241         final Optional<URI> returnedContent =
242                 cnfmHttpServiceProviderImpl.invokeTerminateAsRequest("12356", terminateAsRequest);
243         assertTrue(returnedContent.isEmpty());
244     }
245
246     private AsInstance getAsInstance() {
247         AsInstance asInstance = new AsInstance();
248         asInstance.setAsInstanceid("12345");
249         return asInstance;
250     }
251
252     private HttpHeaders getHttpHeaders() {
253         HttpHeaders httpHeaders = new HttpHeaders();
254         httpHeaders.setLocation(uri);
255         return httpHeaders;
256     }
257
258     private ResponseEntity<AsLcmOpOcc> getResponseEntityAsLCM(HttpStatus httpStatus) {
259         ResponseEntity<AsLcmOpOcc> asLcmOpOccResponseEntity =
260                 new ResponseEntity<AsLcmOpOcc>(getAsLcmOpOcc(), httpStatus);
261         return asLcmOpOccResponseEntity;
262     }
263
264     private AsLcmOpOcc getAsLcmOpOcc() {
265         AsLcmOpOcc asLcmOpOcc = new AsLcmOpOcc();
266         asLcmOpOcc.setAsInstanceId("12345");
267         return asLcmOpOcc;
268     }
269 }