22c82bf75c8d5719d71ae286d8ffab1953c6ad65
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.apihandlerinfra;
22
23 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
24 import static org.hamcrest.CoreMatchers.containsString;
25 import static org.hamcrest.CoreMatchers.equalTo;
26 import static org.hamcrest.CoreMatchers.is;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertThat;
29 import static org.junit.Assert.assertTrue;
30 import static org.junit.Assert.assertFalse;
31 import static org.mockito.Mockito.doReturn;
32 import javax.ws.rs.core.Response;
33 import org.apache.commons.lang.StringUtils;
34 import org.junit.Before;
35 import org.junit.Rule;
36 import org.junit.Test;
37 import org.junit.rules.ExpectedException;
38 import org.junit.runner.RunWith;
39 import org.mockito.InjectMocks;
40 import org.mockito.Mock;
41 import org.mockito.junit.MockitoJUnitRunner;
42 import org.onap.so.apihandler.common.ResponseBuilder;
43 import org.onap.so.apihandlerinfra.exceptions.ApiException;
44 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
45 import org.onap.so.constants.OrchestrationRequestFormat;
46 import org.onap.so.constants.Status;
47 import org.onap.so.db.request.beans.InfraActiveRequests;
48 import org.onap.so.db.request.client.RequestsDbClient;
49 import org.onap.so.serviceinstancebeans.InstanceReferences;
50 import org.onap.so.serviceinstancebeans.Request;
51 import org.onap.so.serviceinstancebeans.RequestStatus;
52
53 @RunWith(MockitoJUnitRunner.class)
54 public class OrchestrationRequestsUnitTest {
55     @Mock
56     private RequestsDbClient requestDbClient;
57     @Mock
58     private MsoRequest msoRequest;
59     @Mock
60     private ResponseBuilder builder;
61     @Mock
62     private Response response;
63     @Mock
64     private CamundaRequestHandler camundaRequestHandler;
65     @Rule
66     public ExpectedException thrown = ExpectedException.none();
67     @InjectMocks
68     private OrchestrationRequests orchestrationRequests;
69
70     private static final String REQUEST_ID = "7cb9aa56-dd31-41e5-828e-d93027d4ebba";
71     private static final String SERVICE_INSTANCE_ID = "7cb9aa56-dd31-41e5-828e-d93027d4ebbb";
72     private static final String ORIGINAL_REQUEST_ID = "8f2d38a6-7c20-465a-bd7e-075645f1394b";
73     private static final String SERVICE = "service";
74     private static final String EXT_SYSTEM_ERROR_SOURCE = "external system error source";
75     private static final String FLOW_STATUS = "FlowStatus";
76     private static final String RETRY_STATUS_MESSAGE = "RetryStatusMessage";
77     private static final String ROLLBACK_STATUS_MESSAGE = "RollbackStatusMessage";
78     private static final String TASK_INFORMATION = " TASK INFORMATION: Last task executed: Call SDNC";
79     private InfraActiveRequests iar;
80     boolean includeCloudRequest = false;
81     private static final String ROLLBACK_EXT_SYSTEM_ERROR_SOURCE = "SDNC";
82
83
84     @Before
85     public void setup() {
86         iar = new InfraActiveRequests();
87         iar.setRequestScope(SERVICE);
88         iar.setRequestId(REQUEST_ID);
89         iar.setServiceInstanceId(SERVICE_INSTANCE_ID);
90         iar.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
91         iar.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
92         iar.setFlowStatus(FLOW_STATUS);
93         iar.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
94         iar.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
95     }
96
97     @Test
98     public void mapInfraActiveRequestToRequestWithOriginalRequestIdTest() throws ApiException {
99         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
100         InstanceReferences instanceReferences = new InstanceReferences();
101         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
102         RequestStatus requestStatus = new RequestStatus();
103         requestStatus.setRequestState(iar.getRequestStatus());
104         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
105                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
106
107         Request expected = new Request();
108         expected.setRequestId(REQUEST_ID);
109         expected.setOriginalRequestId(ORIGINAL_REQUEST_ID);
110         expected.setInstanceReferences(instanceReferences);
111         expected.setRequestStatus(requestStatus);
112         expected.setRequestScope(SERVICE);
113
114         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
115
116         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
117                 OrchestrationRequestFormat.DETAIL.toString());
118         assertThat(result, sameBeanAs(expected));
119     }
120
121     @Test
122     public void mapInfraActiveRequestToRequestOriginalRequestIdNullTest() throws ApiException {
123         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
124         InstanceReferences instanceReferences = new InstanceReferences();
125         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
126         RequestStatus requestStatus = new RequestStatus();
127         requestStatus.setRequestState(iar.getRequestStatus());
128         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
129                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
130         Request expected = new Request();
131         expected.setRequestId(REQUEST_ID);
132         expected.setInstanceReferences(instanceReferences);
133         expected.setRequestStatus(requestStatus);
134         expected.setRequestScope(SERVICE);
135
136         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
137                 OrchestrationRequestFormat.DETAIL.toString());
138         assertThat(result, sameBeanAs(expected));
139     }
140
141     @Test
142     public void mapRequestStatusAndExtSysErrSrcToRequestFalseTest() throws ApiException {
143         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
144         InstanceReferences instanceReferences = new InstanceReferences();
145         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
146         RequestStatus requestStatus = new RequestStatus();
147         requestStatus.setRequestState(iar.getRequestStatus());
148         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
149                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
150
151         Request expected = new Request();
152         expected.setRequestId(REQUEST_ID);
153         expected.setInstanceReferences(instanceReferences);
154         expected.setRequestStatus(requestStatus);
155         expected.setRequestScope(SERVICE);
156
157         includeCloudRequest = false;
158
159         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
160                 OrchestrationRequestFormat.DETAIL.toString());
161         assertThat(actual, sameBeanAs(expected));
162     }
163
164     @Test
165     public void mapRequestStatusAndExtSysErrSrcToRequestStatusDetailTest() throws ApiException {
166         doReturn(null).when(camundaRequestHandler).getTaskName(REQUEST_ID);
167         InstanceReferences instanceReferences = new InstanceReferences();
168         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
169         RequestStatus requestStatus = new RequestStatus();
170         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
171         requestStatus.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
172         requestStatus.setRequestState(iar.getRequestStatus());
173         requestStatus.setFlowStatus(FLOW_STATUS);
174         requestStatus.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
175         requestStatus.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
176
177         Request expected = new Request();
178         expected.setRequestId(REQUEST_ID);
179         expected.setInstanceReferences(instanceReferences);
180         expected.setRequestStatus(requestStatus);
181         expected.setRequestScope(SERVICE);
182
183         includeCloudRequest = false;
184
185         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
186                 OrchestrationRequestFormat.STATUSDETAIL.toString());
187         assertThat(actual, sameBeanAs(expected));
188     }
189
190     @Test
191     public void mapRequestStatusNoTaskInfoTest() throws ApiException {
192         InstanceReferences instanceReferences = new InstanceReferences();
193         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
194         RequestStatus requestStatus = new RequestStatus();
195         requestStatus.setRequestState(iar.getRequestStatus());
196         requestStatus.setStatusMessage(
197                 "FLOW STATUS: FlowStatus RETRY STATUS: RetryStatusMessage ROLLBACK STATUS: RollbackStatusMessage");
198
199         Request expected = new Request();
200         expected.setRequestId(REQUEST_ID);
201         expected.setInstanceReferences(instanceReferences);
202         expected.setRequestStatus(requestStatus);
203         expected.setRequestScope(SERVICE);
204
205         includeCloudRequest = false;
206
207         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
208                 OrchestrationRequestFormat.SIMPLENOTASKINFO.toString());
209         assertThat(expected, sameBeanAs(actual));
210     }
211
212     @Test
213     public void mapRequestStatusNullFormatTest() throws ApiException {
214         doReturn("TaskName").when(camundaRequestHandler).getTaskName(REQUEST_ID);
215         InstanceReferences instanceReferences = new InstanceReferences();
216         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
217         RequestStatus requestStatus = new RequestStatus();
218         requestStatus.setRequestState(iar.getRequestStatus());
219         requestStatus.setStatusMessage(
220                 "FLOW STATUS: FlowStatus TASK INFORMATION: TaskName RETRY STATUS: RetryStatusMessage ROLLBACK STATUS: RollbackStatusMessage");
221
222         Request expected = new Request();
223         expected.setRequestId(REQUEST_ID);
224         expected.setInstanceReferences(instanceReferences);
225         expected.setRequestStatus(requestStatus);
226         expected.setRequestScope(SERVICE);
227
228         includeCloudRequest = false;
229
230         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, null);
231         assertThat(expected, sameBeanAs(actual));
232     }
233
234     @Test
235     public void mapRequestStatusAndExtSysErrSrcToRequestDetailTest() throws ApiException {
236         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
237         InstanceReferences instanceReferences = new InstanceReferences();
238         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
239         RequestStatus requestStatus = new RequestStatus();
240         requestStatus.setRequestState(iar.getRequestStatus());
241         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
242                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
243
244         Request expected = new Request();
245         expected.setRequestId(REQUEST_ID);
246         expected.setInstanceReferences(instanceReferences);
247         expected.setRequestStatus(requestStatus);
248         expected.setRequestScope(SERVICE);
249
250         includeCloudRequest = false;
251
252         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
253                 OrchestrationRequestFormat.DETAIL.toString());
254
255         assertThat(actual, sameBeanAs(expected));
256     }
257
258     @Test
259     public void mapRequestStatusAndExtSysErrSrcToRequestNoFlowStatusTest() throws ApiException {
260         InstanceReferences instanceReferences = new InstanceReferences();
261         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
262         RequestStatus requestStatus = new RequestStatus();
263         requestStatus.setRequestState(iar.getRequestStatus());
264         requestStatus.setStatusMessage(
265                 String.format("RETRY STATUS: %s ROLLBACK STATUS: %s", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
266
267         Request expected = new Request();
268         expected.setRequestId(REQUEST_ID);
269         expected.setInstanceReferences(instanceReferences);
270         expected.setRequestStatus(requestStatus);
271         expected.setRequestScope(SERVICE);
272
273         includeCloudRequest = false;
274         iar.setFlowStatus(null);
275
276         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
277                 OrchestrationRequestFormat.DETAIL.toString());
278
279         assertThat(actual, sameBeanAs(expected));
280     }
281
282     @Test
283     public void mapRequestStatusAndExtSysErrSrcToRequestErrorMessageTest() throws ApiException {
284         InstanceReferences instanceReferences = new InstanceReferences();
285         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
286         iar.setExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
287         iar.setFlowStatus(null);
288         iar.setStatusMessage("Error retrieving cloud region from AAI");
289
290         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
291                 OrchestrationRequestFormat.DETAIL.toString());
292
293         assertTrue(actual.getRequestStatus().getStatusMessage()
294                 .contains("Error Source: " + ROLLBACK_EXT_SYSTEM_ERROR_SOURCE));
295     }
296
297     @Test
298     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulCompletionTest() throws ApiException {
299         InstanceReferences instanceReferences = new InstanceReferences();
300         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
301         RequestStatus requestStatus = new RequestStatus();
302         requestStatus.setRequestState(iar.getRequestStatus());
303         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
304                 "Successfully completed all Building Blocks", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
305
306         Request expected = new Request();
307         expected.setRequestId(REQUEST_ID);
308         expected.setInstanceReferences(instanceReferences);
309         expected.setRequestStatus(requestStatus);
310         expected.setRequestScope(SERVICE);
311
312         includeCloudRequest = false;
313         iar.setFlowStatus("Successfully completed all Building Blocks");
314
315         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
316                 OrchestrationRequestFormat.DETAIL.toString());
317
318         assertThat(actual, sameBeanAs(expected));
319     }
320
321     @Test
322     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulRollbackTest() throws ApiException {
323         InstanceReferences instanceReferences = new InstanceReferences();
324         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
325         RequestStatus requestStatus = new RequestStatus();
326         requestStatus.setRequestState(iar.getRequestStatus());
327         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
328                 "All Rollback flows have completed successfully", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
329
330         Request expected = new Request();
331         expected.setRequestId(REQUEST_ID);
332         expected.setInstanceReferences(instanceReferences);
333         expected.setRequestStatus(requestStatus);
334         expected.setRequestScope(SERVICE);
335
336         includeCloudRequest = false;
337         iar.setFlowStatus("All Rollback flows have completed successfully");
338
339         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
340                 OrchestrationRequestFormat.DETAIL.toString());
341
342         assertThat(actual, sameBeanAs(expected));
343     }
344
345     @Test
346     public void requestStatusExtSystemErrorSourceTest() {
347         RequestStatus requestStatus = new RequestStatus();
348         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
349         assertThat(requestStatus.getExtSystemErrorSource(), is(equalTo(EXT_SYSTEM_ERROR_SOURCE)));
350     }
351
352     @Test
353     public void mapRequestStatusToRequestForFormatDetailTest() throws ApiException {
354         iar.setRequestStatus(Status.ABORTED.toString());
355         String result =
356                 orchestrationRequests.mapRequestStatusToRequest(iar, OrchestrationRequestFormat.DETAIL.toString());
357
358         assertEquals(Status.ABORTED.toString(), result);
359     }
360
361     @Test
362     public void mapRequestStatusToRequestForFormatStatusDetailTest() throws ApiException {
363         iar.setRequestStatus(Status.ABORTED.toString());
364         String result = orchestrationRequests.mapRequestStatusToRequest(iar, "statusDetail");
365
366         assertEquals(Status.ABORTED.toString(), result);
367     }
368
369
370     @Test
371     public void mapRequestStatusToRequestForFormatEmptyStringTest() throws ApiException {
372         iar.setRequestStatus(Status.ABORTED.toString());
373         String result = orchestrationRequests.mapRequestStatusToRequest(iar, StringUtils.EMPTY);
374
375         assertEquals(Status.FAILED.toString(), result);
376     }
377
378     @Test
379     public void infraActiveRequestNullValidationExceptionTest() throws ApiException {
380         iar.setRequestId(REQUEST_ID);
381         thrown.expect(ValidateException.class);
382         thrown.expectMessage(containsString("Null response from RequestDB when searching by RequestId " + REQUEST_ID));
383         orchestrationRequests.infraActiveRequestLookup(iar.getRequestId());
384     }
385
386     @Test
387     public void isRequestProcessingDataRequiredTest() {
388         boolean required = orchestrationRequests.isRequestProcessingDataRequired("simpleNoTaskInfo");
389         assertFalse(required);
390     }
391
392 }