2  * ============LICENSE_START=======================================================
 
   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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  21 package org.onap.so.apihandlerinfra;
 
  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;
 
  53 @RunWith(MockitoJUnitRunner.class)
 
  54 public class OrchestrationRequestsUnitTest {
 
  56     private RequestsDbClient requestDbClient;
 
  58     private MsoRequest msoRequest;
 
  60     private ResponseBuilder builder;
 
  62     private Response response;
 
  64     private CamundaRequestHandler camundaRequestHandler;
 
  66     public ExpectedException thrown = ExpectedException.none();
 
  68     private OrchestrationRequests orchestrationRequests;
 
  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";
 
  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);
 
  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));
 
 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);
 
 114         iar.setOriginalRequestId(ORIGINAL_REQUEST_ID);
 
 116         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 117                 OrchestrationRequestFormat.DETAIL.toString());
 
 118         assertThat(result, sameBeanAs(expected));
 
 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);
 
 136         Request result = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 137                 OrchestrationRequestFormat.DETAIL.toString());
 
 138         assertThat(result, sameBeanAs(expected));
 
 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));
 
 151         Request expected = new Request();
 
 152         expected.setRequestId(REQUEST_ID);
 
 153         expected.setInstanceReferences(instanceReferences);
 
 154         expected.setRequestStatus(requestStatus);
 
 155         expected.setRequestScope(SERVICE);
 
 157         includeCloudRequest = false;
 
 159         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 160                 OrchestrationRequestFormat.DETAIL.toString());
 
 161         assertThat(actual, sameBeanAs(expected));
 
 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);
 
 177         Request expected = new Request();
 
 178         expected.setRequestId(REQUEST_ID);
 
 179         expected.setInstanceReferences(instanceReferences);
 
 180         expected.setRequestStatus(requestStatus);
 
 181         expected.setRequestScope(SERVICE);
 
 183         includeCloudRequest = false;
 
 185         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 186                 OrchestrationRequestFormat.STATUSDETAIL.toString());
 
 187         assertThat(actual, sameBeanAs(expected));
 
 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");
 
 199         Request expected = new Request();
 
 200         expected.setRequestId(REQUEST_ID);
 
 201         expected.setInstanceReferences(instanceReferences);
 
 202         expected.setRequestStatus(requestStatus);
 
 203         expected.setRequestScope(SERVICE);
 
 205         includeCloudRequest = false;
 
 207         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 208                 OrchestrationRequestFormat.SIMPLENOTASKINFO.toString());
 
 209         assertThat(expected, sameBeanAs(actual));
 
 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");
 
 222         Request expected = new Request();
 
 223         expected.setRequestId(REQUEST_ID);
 
 224         expected.setInstanceReferences(instanceReferences);
 
 225         expected.setRequestStatus(requestStatus);
 
 226         expected.setRequestScope(SERVICE);
 
 228         includeCloudRequest = false;
 
 230         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest, null);
 
 231         assertThat(expected, sameBeanAs(actual));
 
 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));
 
 244         Request expected = new Request();
 
 245         expected.setRequestId(REQUEST_ID);
 
 246         expected.setInstanceReferences(instanceReferences);
 
 247         expected.setRequestStatus(requestStatus);
 
 248         expected.setRequestScope(SERVICE);
 
 250         includeCloudRequest = false;
 
 252         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 253                 OrchestrationRequestFormat.DETAIL.toString());
 
 255         assertThat(actual, sameBeanAs(expected));
 
 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));
 
 267         Request expected = new Request();
 
 268         expected.setRequestId(REQUEST_ID);
 
 269         expected.setInstanceReferences(instanceReferences);
 
 270         expected.setRequestStatus(requestStatus);
 
 271         expected.setRequestScope(SERVICE);
 
 273         includeCloudRequest = false;
 
 274         iar.setFlowStatus(null);
 
 276         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 277                 OrchestrationRequestFormat.DETAIL.toString());
 
 279         assertThat(actual, sameBeanAs(expected));
 
 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");
 
 290         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 291                 OrchestrationRequestFormat.DETAIL.toString());
 
 293         assertTrue(actual.getRequestStatus().getStatusMessage()
 
 294                 .contains("Error Source: " + ROLLBACK_EXT_SYSTEM_ERROR_SOURCE));
 
 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));
 
 306         Request expected = new Request();
 
 307         expected.setRequestId(REQUEST_ID);
 
 308         expected.setInstanceReferences(instanceReferences);
 
 309         expected.setRequestStatus(requestStatus);
 
 310         expected.setRequestScope(SERVICE);
 
 312         includeCloudRequest = false;
 
 313         iar.setFlowStatus("Successfully completed all Building Blocks");
 
 315         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 316                 OrchestrationRequestFormat.DETAIL.toString());
 
 318         assertThat(actual, sameBeanAs(expected));
 
 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));
 
 330         Request expected = new Request();
 
 331         expected.setRequestId(REQUEST_ID);
 
 332         expected.setInstanceReferences(instanceReferences);
 
 333         expected.setRequestStatus(requestStatus);
 
 334         expected.setRequestScope(SERVICE);
 
 336         includeCloudRequest = false;
 
 337         iar.setFlowStatus("All Rollback flows have completed successfully");
 
 339         Request actual = orchestrationRequests.mapInfraActiveRequestToRequest(iar, includeCloudRequest,
 
 340                 OrchestrationRequestFormat.DETAIL.toString());
 
 342         assertThat(actual, sameBeanAs(expected));
 
 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)));
 
 353     public void mapRequestStatusToRequestForFormatDetailTest() throws ApiException {
 
 354         iar.setRequestStatus(Status.ABORTED.toString());
 
 356                 orchestrationRequests.mapRequestStatusToRequest(iar, OrchestrationRequestFormat.DETAIL.toString());
 
 358         assertEquals(Status.ABORTED.toString(), result);
 
 362     public void mapRequestStatusToRequestForFormatStatusDetailTest() throws ApiException {
 
 363         iar.setRequestStatus(Status.ABORTED.toString());
 
 364         String result = orchestrationRequests.mapRequestStatusToRequest(iar, "statusDetail");
 
 366         assertEquals(Status.ABORTED.toString(), result);
 
 371     public void mapRequestStatusToRequestForFormatEmptyStringTest() throws ApiException {
 
 372         iar.setRequestStatus(Status.ABORTED.toString());
 
 373         String result = orchestrationRequests.mapRequestStatusToRequest(iar, StringUtils.EMPTY);
 
 375         assertEquals(Status.FAILED.toString(), result);
 
 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());
 
 387     public void isRequestProcessingDataRequiredTest() {
 
 388         boolean required = orchestrationRequests.isRequestProcessingDataRequired("simpleNoTaskInfo");
 
 389         assertFalse(required);