47aa3cccb50ddd7a663a64cded1b7ebdad27181a
[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.mockito.Mockito.doReturn;
31 import javax.ws.rs.core.Response;
32 import org.apache.commons.lang.StringUtils;
33 import org.junit.Before;
34 import org.junit.Rule;
35 import org.junit.Test;
36 import org.junit.rules.ExpectedException;
37 import org.junit.runner.RunWith;
38 import org.mockito.InjectMocks;
39 import org.mockito.Mock;
40 import org.mockito.junit.MockitoJUnitRunner;
41 import org.onap.so.apihandler.common.ResponseBuilder;
42 import org.onap.so.apihandlerinfra.exceptions.ApiException;
43 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
44 import org.onap.so.constants.OrchestrationRequestFormat;
45 import org.onap.so.constants.Status;
46 import org.onap.so.db.request.beans.InfraActiveRequests;
47 import org.onap.so.db.request.client.RequestsDbClient;
48 import org.onap.so.serviceinstancebeans.InstanceReferences;
49 import org.onap.so.serviceinstancebeans.Request;
50 import org.onap.so.serviceinstancebeans.RequestStatus;
51
52 @RunWith(MockitoJUnitRunner.class)
53 public class OrchestrationRequestsUnitTest {
54     @Mock
55     private RequestsDbClient requestDbClient;
56     @Mock
57     private MsoRequest msoRequest;
58     @Mock
59     private ResponseBuilder builder;
60     @Mock
61     private Response response;
62     @Mock
63     private CamundaRequestHandler camundaRequestHandler;
64     @Rule
65     public ExpectedException thrown = ExpectedException.none();
66     @InjectMocks
67     private OrchestrationRequests orchestrationRequests;
68
69     private static final String REQUEST_ID = "7cb9aa56-dd31-41e5-828e-d93027d4ebba";
70     private static final String SERVICE_INSTANCE_ID = "7cb9aa56-dd31-41e5-828e-d93027d4ebbb";
71     private static final String ORIGINAL_REQUEST_ID = "8f2d38a6-7c20-465a-bd7e-075645f1394b";
72     private static final String SERVICE = "service";
73     private static final String EXT_SYSTEM_ERROR_SOURCE = "external system error source";
74     private static final String FLOW_STATUS = "FlowStatus";
75     private static final String RETRY_STATUS_MESSAGE = "RetryStatusMessage";
76     private static final String ROLLBACK_STATUS_MESSAGE = "RollbackStatusMessage";
77     private static final String TASK_INFORMATION = " TASK INFORMATION: Last task executed: Call SDNC";
78     private InfraActiveRequests iar;
79     boolean includeCloudRequest = false;
80     private static final String ROLLBACK_EXT_SYSTEM_ERROR_SOURCE = "SDNC";
81
82
83     @Before
84     public void setup() {
85         iar = new InfraActiveRequests();
86         iar.setRequestScope(SERVICE);
87         iar.setRequestId(REQUEST_ID);
88         iar.setServiceInstanceId(SERVICE_INSTANCE_ID);
89         iar.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
90         iar.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
91         iar.setFlowStatus(FLOW_STATUS);
92         iar.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
93         iar.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
94     }
95
96     @Test
97     public void mapInfraActiveRequestToRequestWithOriginalRequestIdTest() throws ApiException {
98         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
99         InstanceReferences instanceReferences = new InstanceReferences();
100         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
101         RequestStatus requestStatus = new RequestStatus();
102         requestStatus.setRequestState(iar.getRequestStatus());
103         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
104                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
105
106         Request expected = new Request();
107         expected.setRequestId(REQUEST_ID);
108         expected.setOriginalRequestId(ORIGINAL_REQUEST_ID);
109         expected.setInstanceReferences(instanceReferences);
110         expected.setRequestStatus(requestStatus);
111         expected.setRequestScope(SERVICE);
112
113         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
114
115         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
116                 OrchestrationRequestFormat.DETAIL.toString());
117         assertThat(result, sameBeanAs(expected));
118     }
119
120     @Test
121     public void mapInfraActiveRequestToRequestOriginalRequestIdNullTest() throws ApiException {
122         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
123         InstanceReferences instanceReferences = new InstanceReferences();
124         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
125         RequestStatus requestStatus = new RequestStatus();
126         requestStatus.setRequestState(iar.getRequestStatus());
127         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
128                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
129         Request expected = new Request();
130         expected.setRequestId(REQUEST_ID);
131         expected.setInstanceReferences(instanceReferences);
132         expected.setRequestStatus(requestStatus);
133         expected.setRequestScope(SERVICE);
134
135         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
136                 OrchestrationRequestFormat.DETAIL.toString());
137         assertThat(result, sameBeanAs(expected));
138     }
139
140     @Test
141     public void mapRequestStatusAndExtSysErrSrcToRequestFalseTest() throws ApiException {
142         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
143         InstanceReferences instanceReferences = new InstanceReferences();
144         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
145         RequestStatus requestStatus = new RequestStatus();
146         requestStatus.setRequestState(iar.getRequestStatus());
147         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
148                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
149
150         Request expected = new Request();
151         expected.setRequestId(REQUEST_ID);
152         expected.setInstanceReferences(instanceReferences);
153         expected.setRequestStatus(requestStatus);
154         expected.setRequestScope(SERVICE);
155
156         includeCloudRequest = false;
157
158         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
159                 OrchestrationRequestFormat.DETAIL.toString());
160         assertThat(actual, sameBeanAs(expected));
161     }
162
163     @Test
164     public void mapRequestStatusAndExtSysErrSrcToRequestStatusDetailTest() throws ApiException {
165         doReturn(null).when(camundaRequestHandler).getTaskName(REQUEST_ID);
166         InstanceReferences instanceReferences = new InstanceReferences();
167         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
168         RequestStatus requestStatus = new RequestStatus();
169         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
170         requestStatus.setRollbackExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
171         requestStatus.setRequestState(iar.getRequestStatus());
172         requestStatus.setFlowStatus(FLOW_STATUS);
173         requestStatus.setRollbackStatusMessage(ROLLBACK_STATUS_MESSAGE);
174         requestStatus.setRetryStatusMessage(RETRY_STATUS_MESSAGE);
175
176         Request expected = new Request();
177         expected.setRequestId(REQUEST_ID);
178         expected.setInstanceReferences(instanceReferences);
179         expected.setRequestStatus(requestStatus);
180         expected.setRequestScope(SERVICE);
181
182         includeCloudRequest = false;
183
184         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
185                 OrchestrationRequestFormat.STATUSDETAIL.toString());
186         assertThat(actual, sameBeanAs(expected));
187     }
188
189     @Test
190     public void mapRequestStatusAndExtSysErrSrcToRequestDetailTest() throws ApiException {
191         doReturn("Last task executed: Call SDNC").when(camundaRequestHandler).getTaskName(REQUEST_ID);
192         InstanceReferences instanceReferences = new InstanceReferences();
193         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
194         RequestStatus requestStatus = new RequestStatus();
195         requestStatus.setRequestState(iar.getRequestStatus());
196         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
197                 FLOW_STATUS + TASK_INFORMATION, RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
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.DETAIL.toString());
209
210         assertThat(actual, sameBeanAs(expected));
211     }
212
213     @Test
214     public void mapRequestStatusAndExtSysErrSrcToRequestNoFlowStatusTest() throws ApiException {
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                 String.format("RETRY STATUS: %s ROLLBACK STATUS: %s", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
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         iar.setFlowStatus(null);
230
231         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
232                 OrchestrationRequestFormat.DETAIL.toString());
233
234         assertThat(actual, sameBeanAs(expected));
235     }
236
237     @Test
238     public void mapRequestStatusAndExtSysErrSrcToRequestErrorMessageTest() throws ApiException {
239         InstanceReferences instanceReferences = new InstanceReferences();
240         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
241         iar.setExtSystemErrorSource(ROLLBACK_EXT_SYSTEM_ERROR_SOURCE);
242         iar.setFlowStatus(null);
243         iar.setStatusMessage("Error retrieving cloud region from AAI");
244
245         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
246                 OrchestrationRequestFormat.DETAIL.toString());
247
248         assertTrue(actual.getRequestStatus().getStatusMessage()
249                 .contains("Error Source: " + ROLLBACK_EXT_SYSTEM_ERROR_SOURCE));
250     }
251
252     @Test
253     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulCompletionTest() throws ApiException {
254         InstanceReferences instanceReferences = new InstanceReferences();
255         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
256         RequestStatus requestStatus = new RequestStatus();
257         requestStatus.setRequestState(iar.getRequestStatus());
258         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
259                 "Successfully completed all Building Blocks", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
260
261         Request expected = new Request();
262         expected.setRequestId(REQUEST_ID);
263         expected.setInstanceReferences(instanceReferences);
264         expected.setRequestStatus(requestStatus);
265         expected.setRequestScope(SERVICE);
266
267         includeCloudRequest = false;
268         iar.setFlowStatus("Successfully completed all Building Blocks");
269
270         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
271                 OrchestrationRequestFormat.DETAIL.toString());
272
273         assertThat(actual, sameBeanAs(expected));
274     }
275
276     @Test
277     public void mapRequestStatusAndExtSysErrSrcToRequestFlowStatusSuccessfulRollbackTest() throws ApiException {
278         InstanceReferences instanceReferences = new InstanceReferences();
279         instanceReferences.setServiceInstanceId(SERVICE_INSTANCE_ID);
280         RequestStatus requestStatus = new RequestStatus();
281         requestStatus.setRequestState(iar.getRequestStatus());
282         requestStatus.setStatusMessage(String.format("FLOW STATUS: %s RETRY STATUS: %s ROLLBACK STATUS: %s",
283                 "All Rollback flows have completed successfully", RETRY_STATUS_MESSAGE, ROLLBACK_STATUS_MESSAGE));
284
285         Request expected = new Request();
286         expected.setRequestId(REQUEST_ID);
287         expected.setInstanceReferences(instanceReferences);
288         expected.setRequestStatus(requestStatus);
289         expected.setRequestScope(SERVICE);
290
291         includeCloudRequest = false;
292         iar.setFlowStatus("All Rollback flows have completed successfully");
293
294         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
295                 OrchestrationRequestFormat.DETAIL.toString());
296
297         assertThat(actual, sameBeanAs(expected));
298     }
299
300     @Test
301     public void requestStatusExtSystemErrorSourceTest() {
302         RequestStatus requestStatus = new RequestStatus();
303         requestStatus.setExtSystemErrorSource(EXT_SYSTEM_ERROR_SOURCE);
304         assertThat(requestStatus.getExtSystemErrorSource(), is(equalTo(EXT_SYSTEM_ERROR_SOURCE)));
305     }
306
307     @Test
308     public void mapRequestStatusToRequestForFormatDetailTest() throws ApiException {
309         iar.setRequestStatus(Status.ABORTED.toString());
310         String result =
311                 orchestrationRequests.mapRequestStatusToRequest(iar, OrchestrationRequestFormat.DETAIL.toString());
312
313         assertEquals(Status.ABORTED.toString(), result);
314     }
315
316     @Test
317     public void mapRequestStatusToRequestForFormatStatusDetailTest() throws ApiException {
318         iar.setRequestStatus(Status.ABORTED.toString());
319         String result = orchestrationRequests.mapRequestStatusToRequest(iar, "statusDetail");
320
321         assertEquals(Status.ABORTED.toString(), result);
322     }
323
324
325     @Test
326     public void mapRequestStatusToRequestForFormatEmptyStringTest() throws ApiException {
327         iar.setRequestStatus(Status.ABORTED.toString());
328         String result = orchestrationRequests.mapRequestStatusToRequest(iar, StringUtils.EMPTY);
329
330         assertEquals(Status.FAILED.toString(), result);
331     }
332
333     @Test
334     public void infraActiveRequestNullValidationExceptionTest() throws ApiException {
335         iar.setRequestId(REQUEST_ID);
336         thrown.expect(ValidateException.class);
337         thrown.expectMessage(containsString("Null response from RequestDB when searching by RequestId " + REQUEST_ID));
338         orchestrationRequests.infraActiveRequestLookup(iar.getRequestId());
339     }
340
341 }