4631b53bc01aa367806639173bbbe7034c73f785
[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.assertFalse;
29 import static org.junit.Assert.assertThat;
30 import static org.junit.Assert.assertTrue;
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         iar.setResourceStatusMessage("The vf module already exist");
96     }
97
98     @Test
99     public void mapInfraActiveRequestToRequestWithOriginalRequestIdTest() throws ApiException {
100         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
101         InstanceReferences instanceReferences = new InstanceReferences();
102         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
103         RequestStatus requestStatus = new RequestStatus();
104         requestStatus.setRequestState(iar.getRequestStatus());
105         requestStatus.setStatusMessage(
106                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
107                         FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
108                         "The vf module already exist"));
109
110         Request expected = new Request();
111         expected.setRequestId(REQUEST_ID);
112         expected.setOriginalRequestId(ORIGINAL_REQUEST_ID);
113         expected.setInstanceReferences(instanceReferences);
114         expected.setRequestStatus(requestStatus);
115         expected.setRequestScope(SERVICE);
116
117         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
118
119         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
120                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
121         assertThat(result, sameBeanAs(expected));
122     }
123
124     @Test
125     public void mapInfraActiveRequestToRequestOriginalRequestIdNullTest() throws ApiException {
126         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
127         InstanceReferences instanceReferences = new InstanceReferences();
128         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
129         RequestStatus requestStatus = new RequestStatus();
130         requestStatus.setRequestState(iar.getRequestStatus());
131         requestStatus.setStatusMessage(
132                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
133                         FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
134                         "The vf module already exist"));
135
136         Request expected = new Request();
137         expected.setRequestId(REQUEST_ID);
138         expected.setInstanceReferences(instanceReferences);
139         expected.setRequestStatus(requestStatus);
140         expected.setRequestScope(SERVICE);
141
142         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
143                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
144         assertThat(result, sameBeanAs(expected));
145     }
146
147     @Test
148     public void mapRequestStatusAndExtSysErrSrcToRequestFalseTest() throws ApiException {
149         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
150         InstanceReferences instanceReferences = new InstanceReferences();
151         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
152         RequestStatus requestStatus = new RequestStatus();
153         requestStatus.setRequestState(iar.getRequestStatus());
154         requestStatus.setStatusMessage(
155                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
156                         FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
157                         "The vf module already exist"));
158
159         Request expected = new Request();
160         expected.setRequestId(REQUEST_ID);
161         expected.setInstanceReferences(instanceReferences);
162         expected.setRequestStatus(requestStatus);
163         expected.setRequestScope(SERVICE);
164
165         includeCloudRequest = false;
166
167         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
168                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
169         assertThat(actual, sameBeanAs(expected));
170     }
171
172     @Test
173     public void mapRequestStatusAndExtSysErrSrcToRequestStatusDetailTest() throws ApiException {
174         doReturn(null).when(camundaRequestHandler).getTaskName(REQUEST_ID);
175         InstanceReferences instanceReferences = new InstanceReferences();
176         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
177         RequestStatus requestStatus = new RequestStatus();
178         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
179         requestStatus.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
180         requestStatus.setRequestState(iar.getRequestStatus());
181         requestStatus.setFlowStatus(FLOW_STATUS);
182         requestStatus.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
183         requestStatus.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
184
185         Request expected = new Request();
186         expected.setRequestId(REQUEST_ID);
187         expected.setInstanceReferences(instanceReferences);
188         expected.setRequestStatus(requestStatus);
189         expected.setRequestScope(SERVICE);
190
191         includeCloudRequest = false;
192
193         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
194                 OrchestrationRequestFormat.STATUSDETAIL.toString(), "v7");
195         assertThat(actual, sameBeanAs(expected));
196     }
197
198     @Test
199     public void mapRequestStatusAndExtSysErrSrcToRequestStatusDetailV8Test() throws ApiException {
200         doReturn(null).when(camundaRequestHandler).getTaskName(REQUEST_ID);
201         InstanceReferences instanceReferences = new InstanceReferences();
202         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
203         RequestStatus requestStatus = new RequestStatus();
204         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
205         requestStatus.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
206         requestStatus.setRequestState(iar.getRequestStatus());
207         requestStatus.setFlowStatus(FLOW_STATUS);
208         requestStatus.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
209         requestStatus.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
210         requestStatus.setResourceStatusMessage("The vf module already exist");
211
212         Request expected = new Request();
213         expected.setRequestId(REQUEST_ID);
214         expected.setInstanceReferences(instanceReferences);
215         expected.setRequestStatus(requestStatus);
216         expected.setRequestScope(SERVICE);
217
218         includeCloudRequest = false;
219
220         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
221                 OrchestrationRequestFormat.STATUSDETAIL.toString(), "v8");
222         assertThat(actual, sameBeanAs(expected));
223     }
224
225     @Test
226     public void mapRequestStatusNoTaskInfoTest() throws ApiException {
227         InstanceReferences instanceReferences = new InstanceReferences();
228         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
229         RequestStatus requestStatus = new RequestStatus();
230         requestStatus.setRequestState(iar.getRequestStatus());
231         requestStatus.setStatusMessage(
232                 "FLOW STATUS: FlowStatus RETRY STATUS: RetryStatusMessage ROLLBACK STATUS: RollbackStatusMessage RESOURCE STATUS: The vf module already exist");
233
234         Request expected = new Request();
235         expected.setRequestId(REQUEST_ID);
236         expected.setInstanceReferences(instanceReferences);
237         expected.setRequestStatus(requestStatus);
238         expected.setRequestScope(SERVICE);
239
240         includeCloudRequest = false;
241
242         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
243                 OrchestrationRequestFormat.SIMPLENOTASKINFO.toString(), "v7");
244         assertThat(expected, sameBeanAs(actual));
245     }
246
247     @Test
248     public void mapRequestStatusNullFormatTest() throws ApiException {
249         doReturn("TaskName").when(camundaRequestHandler).getTaskName(REQUEST_ID);
250         InstanceReferences instanceReferences = new InstanceReferences();
251         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
252         RequestStatus requestStatus = new RequestStatus();
253         requestStatus.setRequestState(iar.getRequestStatus());
254         requestStatus.setStatusMessage(
255                 "FLOW STATUS: FlowStatus TASK INFORMATION: TaskName RETRY STATUS: RetryStatusMessage ROLLBACK STATUS: RollbackStatusMessage RESOURCE STATUS: The vf module already exist");
256
257         Request expected = new Request();
258         expected.setRequestId(REQUEST_ID);
259         expected.setInstanceReferences(instanceReferences);
260         expected.setRequestStatus(requestStatus);
261         expected.setRequestScope(SERVICE);
262
263         includeCloudRequest = false;
264
265         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, null, "v7");
266         assertThat(expected, sameBeanAs(actual));
267     }
268
269     @Test
270     public void mapRequestStatusAndExtSysErrSrcToRequestDetailTest() throws ApiException {
271         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
272         InstanceReferences instanceReferences = new InstanceReferences();
273         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
274         RequestStatus requestStatus = new RequestStatus();
275         requestStatus.setRequestState(iar.getRequestStatus());
276         requestStatus.setStatusMessage(
277                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
278                         FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
279                         "The vf module already exist"));
280
281         Request expected = new Request();
282         expected.setRequestId(REQUEST_ID);
283         expected.setInstanceReferences(instanceReferences);
284         expected.setRequestStatus(requestStatus);
285         expected.setRequestScope(SERVICE);
286
287         includeCloudRequest = false;
288
289         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
290                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
291
292         assertThat(actual, sameBeanAs(expected));
293     }
294
295     @Test
296     public void mapRequestStatusAndExtSysErrSrcToRequestNoFlowStatusTest() throws ApiException {
297         InstanceReferences instanceReferences = new InstanceReferences();
298         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
299         RequestStatus requestStatus = new RequestStatus();
300         requestStatus.setRequestState(iar.getRequestStatus());
301         requestStatus.setStatusMessage(
302                 String.format("RETRY STATUS: %s ROLLBACK STATUS: %s", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
303
304         Request expected = new Request();
305         expected.setRequestId(REQUEST_ID);
306         expected.setInstanceReferences(instanceReferences);
307         expected.setRequestStatus(requestStatus);
308         expected.setRequestScope(SERVICE);
309
310         includeCloudRequest = false;
311         iar.setFlowStatus(null);
312         iar.setResourceStatusMessage(null);
313
314         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
315                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
316
317         assertThat(actual, sameBeanAs(expected));
318     }
319
320     @Test
321     public void mapRequestStatusAndExtSysErrSrcToRequestErrorMessageTest() throws ApiException {
322         InstanceReferences instanceReferences = new InstanceReferences();
323         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
324         iar.setExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
325         iar.setFlowStatus(null);
326         iar.setStatusMessage("Error retrieving cloud region from AAI");
327
328         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
329                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
330
331         assertTrue(actual.getRequestStatus().getStatusMessage()
332                 .contains("Error Source: " + ROLLBACK_EXT_SYSTEM_ERROR_SOURCE));
333     }
334
335     @Test
336     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulCompletionTest() throws ApiException {
337         InstanceReferences instanceReferences = new InstanceReferences();
338         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
339         RequestStatus requestStatus = new RequestStatus();
340         requestStatus.setRequestState(iar.getRequestStatus());
341         requestStatus.setStatusMessage(
342                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
343                         "Successfully completed all Building Blocks", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
344                         "The vf module already exist"));
345
346         Request expected = new Request();
347         expected.setRequestId(REQUEST_ID);
348         expected.setInstanceReferences(instanceReferences);
349         expected.setRequestStatus(requestStatus);
350         expected.setRequestScope(SERVICE);
351
352         includeCloudRequest = false;
353         iar.setFlowStatus("Successfully completed all Building Blocks");
354
355         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
356                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
357
358         assertThat(actual, sameBeanAs(expected));
359     }
360
361     @Test
362     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulRollbackTest() throws ApiException {
363         InstanceReferences instanceReferences = new InstanceReferences();
364         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
365         RequestStatus requestStatus = new RequestStatus();
366         requestStatus.setRequestState(iar.getRequestStatus());
367         requestStatus.setStatusMessage(
368                 String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s RESOURCE STATUS: %s",
369                         "All Rollback flows have completed successfully", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE,
370                         "The vf module already exist"));
371
372         Request expected = new Request();
373         expected.setRequestId(REQUEST_ID);
374         expected.setInstanceReferences(instanceReferences);
375         expected.setRequestStatus(requestStatus);
376         expected.setRequestScope(SERVICE);
377
378         includeCloudRequest = false;
379         iar.setFlowStatus("All Rollback flows have completed successfully");
380
381         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
382                 OrchestrationRequestFormat.DETAIL.toString(), "v7");
383
384         assertThat(actual, sameBeanAs(expected));
385     }
386
387     @Test
388     public void requestStatusExtSystemErrorSourceTest() {
389         RequestStatus requestStatus = new RequestStatus();
390         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
391         assertThat(requestStatus.getExtSystemErrorSource(), is(equalTo(EXT_SYSTEM_ERROR_SOURCE)));
392     }
393
394     @Test
395     public void mapRequestStatusToRequestForFormatDetailTest() throws ApiException {
396         iar.setRequestStatus(Status.ABORTED.toString());
397         String result =
398                 orchestrationRequests.mapRequestStatusToRequest(iar, OrchestrationRequestFormat.DETAIL.toString());
399
400         assertEquals(Status.ABORTED.toString(), result);
401     }
402
403     @Test
404     public void mapRequestStatusToRequestForFormatStatusDetailTest() throws ApiException {
405         iar.setRequestStatus(Status.ABORTED.toString());
406         String result = orchestrationRequests.mapRequestStatusToRequest(iar, "statusDetail");
407
408         assertEquals(Status.ABORTED.toString(), result);
409     }
410
411
412     @Test
413     public void mapRequestStatusToRequestForFormatEmptyStringTest() throws ApiException {
414         iar.setRequestStatus(Status.ABORTED.toString());
415         String result = orchestrationRequests.mapRequestStatusToRequest(iar, StringUtils.EMPTY);
416
417         assertEquals(Status.FAILED.toString(), result);
418     }
419
420     @Test
421     public void infraActiveRequestNullValidationExceptionTest() throws ApiException {
422         iar.setRequestId(REQUEST_ID);
423         thrown.expect(ValidateException.class);
424         thrown.expectMessage(containsString("Null response from RequestDB when searching by RequestId " + REQUEST_ID));
425         orchestrationRequests.infraActiveRequestLookup(iar.getRequestId());
426     }
427
428     @Test
429     public void isRequestProcessingDataRequiredTest() {
430         boolean required = orchestrationRequests.isRequestProcessingDataRequired("simpleNoTaskInfo");
431         assertFalse(required);
432     }
433
434 }