2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 - 2018 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.bpmn.infrastructure.workflow.tasks;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.junit.Assert.assertNull;
 
  25 import static org.mockito.ArgumentMatchers.any;
 
  26 import static org.mockito.ArgumentMatchers.eq;
 
  27 import static org.mockito.Mockito.doReturn;
 
  28 import static org.mockito.Mockito.doThrow;
 
  29 import static org.mockito.Mockito.when;
 
  30 import java.util.ArrayList;
 
  31 import java.util.HashMap;
 
  32 import java.util.List;
 
  33 import org.camunda.bpm.engine.delegate.BpmnError;
 
  34 import org.junit.Before;
 
  35 import org.junit.Ignore;
 
  36 import org.junit.Test;
 
  37 import org.mockito.ArgumentCaptor;
 
  38 import org.mockito.ArgumentMatchers;
 
  39 import org.mockito.InjectMocks;
 
  40 import org.mockito.Mockito;
 
  41 import org.onap.so.bpmn.BaseTaskTest;
 
  42 import org.onap.so.bpmn.common.BuildingBlockExecution;
 
  43 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 
  44 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 
  45 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 
  46 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 
  47 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 
  48 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
 
  49 import org.onap.so.db.catalog.beans.OrchestrationAction;
 
  50 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 
  51 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
 
  52 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
 
  53 import org.onap.so.db.catalog.beans.ResourceType;
 
  54 import org.onap.so.db.request.beans.InfraActiveRequests;
 
  55 import org.springframework.beans.factory.annotation.Autowired;
 
  57 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
 
  59     private static final String vfModuleExistExpectedMessage =
 
  60             "The VfModule was found to already exist, thus no new VfModule was created in the cloud via this request";
 
  62     private static final String vfModuleNotExistExpectedMessage =
 
  63             "The VfModule was not found, thus no VfModule was deleted in the cloud via this request";
 
  66     protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
 
  69     public void test_validateOrchestrationStatus() throws Exception {
 
  70         String flowToBeCalled = "AssignServiceInstanceBB";
 
  71         setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  72         execution.setVariable("aLaCarte", true);
 
  73         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
  75         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
  76         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
  77         buildingBlockDetail.setId(1);
 
  78         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
  79         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
  81         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
  83         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance =
 
  84                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
  85         serviceInstance.setServiceInstanceId("serviceInstanceId");
 
  86         serviceInstance.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  87         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
 
  88                 .thenReturn(serviceInstance);
 
  90         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
  91                 new OrchestrationStatusStateTransitionDirective();
 
  92         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
  93         orchestrationStatusStateTransitionDirective.setId(1);
 
  94         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  95         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
  96         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
  98         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
  99                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
 
 100                         OrchestrationAction.ASSIGN);
 
 102         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 104         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
 105                 execution.getVariable("orchestrationStatusValidationResult"));
 
 107         Mockito.verifyZeroInteractions(requestsDbClient);
 
 111     public void test_validateOrchestrationStatusConfiguration() throws Exception {
 
 112         lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
 
 113         String flowToBeCalled = "UnassignFabricConfigurationBB";
 
 114         ServiceInstance si = setServiceInstance();
 
 115         List<Configuration> configurations = new ArrayList<>();
 
 116         Configuration config = new Configuration();
 
 118         si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 119         config.setConfigurationId("configurationId");
 
 120         config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 121         configurations.add(config);
 
 122         si.setConfigurations(configurations);
 
 124         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 125         execution.setVariable("aLaCarte", true);
 
 127         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 128         buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
 
 129         buildingBlockDetail.setId(1);
 
 130         buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
 
 131         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
 
 133         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 135         org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration configuration =
 
 136                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration();
 
 137         configuration.setConfigurationId("configurationId");
 
 138         configuration.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 139         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.CONFIGURATION_ID)))
 
 140                 .thenReturn(configuration);
 
 142         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 143                 new OrchestrationStatusStateTransitionDirective();
 
 144         orchestrationStatusStateTransitionDirective
 
 145                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 146         orchestrationStatusStateTransitionDirective.setId(1);
 
 147         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 148         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
 
 149         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
 
 151         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 152                 .getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION,
 
 153                         OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
 
 155         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 157         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 158                 execution.getVariable("orchestrationStatusValidationResult"));
 
 160         Mockito.verifyZeroInteractions(requestsDbClient);
 
 165     public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
 
 166         expectedException.expect(BpmnError.class);
 
 168         String flowToBeCalled = "AssignServiceInstanceBB";
 
 170         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 172         doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 174         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 179     public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
 
 180         expectedException.expect(BpmnError.class);
 
 182         String flowToBeCalled = "AssignServiceInstanceBB";
 
 184         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 186         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 187         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
 188         buildingBlockDetail.setId(1);
 
 189         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 190         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
 192         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 194         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 195                 new OrchestrationStatusStateTransitionDirective();
 
 196         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
 
 197         orchestrationStatusStateTransitionDirective.setId(1);
 
 198         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 199         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
 200         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
 202         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 203                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
 
 204                         OrchestrationAction.ASSIGN);
 
 206         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 208         Mockito.verifyZeroInteractions(requestsDbClient);
 
 213     public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
 
 214         expectedException.expect(BpmnError.class);
 
 216         String flowToBeCalled = "AssignServiceInstanceBB";
 
 218         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 220         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 221         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
 222         buildingBlockDetail.setId(1);
 
 223         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 224         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
 226         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 228         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 229                 new OrchestrationStatusStateTransitionDirective();
 
 230         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
 
 231         orchestrationStatusStateTransitionDirective.setId(1);
 
 232         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 233         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
 234         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
 236         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 237                 .getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED,
 
 238                         OrchestrationAction.ASSIGN);
 
 240         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 242         Mockito.verifyZeroInteractions(requestsDbClient);
 
 246     public void test_validateOrchestrationStatus_unassignNotFound() throws Exception {
 
 247         String flowToBeCalled = "UnassignServiceInstanceBB";
 
 249         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 250         execution.setVariable("aLaCarte", true);
 
 252         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 253         buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
 
 254         buildingBlockDetail.setId(1);
 
 255         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 256         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
 
 258         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 260         lookupKeyMap = new HashMap<ResourceKey, String>();
 
 262         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 264         assertNull(execution.getVariable("orchestrationStatusValidationResult"));
 
 268     public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
 
 269         String flowToBeCalled = "CreateVfModuleBB";
 
 271         execution.setVariable("orchestrationStatusValidationResult",
 
 272                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 273         execution.setVariable("aLaCarte", true);
 
 274         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 276         GenericVnf genericVnf = buildGenericVnf();
 
 277         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 278         modelInfoGenericVnf.setMultiStageDesign("true");
 
 279         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 280         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 282         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 283                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 284         vfModule.setVfModuleId("vfModuleId");
 
 285         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 286         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 288         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 289         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 290         buildingBlockDetail.setId(1);
 
 291         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 292         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 294         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 296         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 297                 new OrchestrationStatusStateTransitionDirective();
 
 298         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
 299         orchestrationStatusStateTransitionDirective.setId(1);
 
 300         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 301         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 302         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 304         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 305                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 306                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 308         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 310         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
 311                 execution.getVariable("orchestrationStatusValidationResult"));
 
 313         Mockito.verifyZeroInteractions(requestsDbClient);
 
 318     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
 
 319         String flowToBeCalled = "CreateVfModuleBB";
 
 321         execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
 
 322         execution.setVariable("aLaCarte", true);
 
 323         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 325         GenericVnf genericVnf = buildGenericVnf();
 
 326         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 327         modelInfoGenericVnf.setMultiStageDesign("true");
 
 328         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 329         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 331         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 332                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 333         vfModule.setVfModuleId("vfModuleId");
 
 334         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 335         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 337         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 338         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 339         buildingBlockDetail.setId(1);
 
 340         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 341         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 343         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 345         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 346                 new OrchestrationStatusStateTransitionDirective();
 
 347         orchestrationStatusStateTransitionDirective
 
 348                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 349         orchestrationStatusStateTransitionDirective.setId(1);
 
 350         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 351         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 352         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 354         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 355                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 356                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 358         InfraActiveRequests request = new InfraActiveRequests();
 
 359         request.setRequestId("testVfModuleId1");
 
 360         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
 
 362         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 364         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 366         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 367                 execution.getVariable("orchestrationStatusValidationResult"));
 
 369         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 370         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 372         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
 
 376     public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
 
 377         String flowToBeCalled = "CreateVfModuleBB";
 
 379         execution.setVariable("orchestrationStatusValidationResult",
 
 380                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 381         execution.setVariable("aLaCarte", true);
 
 382         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 384         GenericVnf genericVnf = buildGenericVnf();
 
 385         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 386         modelInfoGenericVnf.setMultiStageDesign("false");
 
 387         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 388         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 390         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 391         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 392         buildingBlockDetail.setId(1);
 
 393         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 394         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 396         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 398         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 399                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 400         vfModule.setVfModuleId("vfModuleId");
 
 401         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 402         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 404         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 405                 new OrchestrationStatusStateTransitionDirective();
 
 406         orchestrationStatusStateTransitionDirective
 
 407                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 408         orchestrationStatusStateTransitionDirective.setId(1);
 
 409         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 410         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 411         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 413         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 414                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 415                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 417         InfraActiveRequests request = new InfraActiveRequests();
 
 418         request.setRequestId("testVfModuleId1");
 
 419         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
 
 421         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 423         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 425         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 426                 execution.getVariable("orchestrationStatusValidationResult"));
 
 428         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 429         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 431         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
 
 435     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
 
 436         String flowToBeCalled = "CreateVfModuleBB";
 
 438         execution.setVariable("orchestrationStatusValidationResult",
 
 439                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 440         execution.setVariable("aLaCarte", true);
 
 441         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 443         GenericVnf genericVnf = buildGenericVnf();
 
 444         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 445         modelInfoGenericVnf.setMultiStageDesign("true");
 
 446         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 447         setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
 449         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 450         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 451         buildingBlockDetail.setId(1);
 
 452         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 453         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 455         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 457         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 458                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 459         vfModule.setVfModuleId("vfModuleId");
 
 460         vfModule.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
 461         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 463         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 464                 new OrchestrationStatusStateTransitionDirective();
 
 465         orchestrationStatusStateTransitionDirective
 
 466                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 467         orchestrationStatusStateTransitionDirective.setId(1);
 
 468         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 469         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 470         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 472         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 473                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED,
 
 474                         OrchestrationAction.CREATE);
 
 476         InfraActiveRequests request = new InfraActiveRequests();
 
 477         request.setRequestId("testVfModuleId1");
 
 478         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
 
 480         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 482         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 484         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 485                 execution.getVariable("orchestrationStatusValidationResult"));
 
 487         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 488         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 490         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
 
 494     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
 
 495         String flowToBeCalled = "CreateVfModuleBB";
 
 497         execution.setVariable("orchestrationStatusValidationResult",
 
 498                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 499         execution.setVariable("aLaCarte", true);
 
 500         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 502         GenericVnf genericVnf = buildGenericVnf();
 
 503         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 504         modelInfoGenericVnf.setMultiStageDesign("true");
 
 505         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 506         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 508         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 509         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 510         buildingBlockDetail.setId(1);
 
 511         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 512         buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
 
 514         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 516         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 517                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 518         vfModule.setVfModuleId("vfModuleId");
 
 519         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 520         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 522         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 523                 new OrchestrationStatusStateTransitionDirective();
 
 524         orchestrationStatusStateTransitionDirective
 
 525                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 526         orchestrationStatusStateTransitionDirective.setId(1);
 
 527         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 528         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 529         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
 
 531         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 532                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 533                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
 
 535         InfraActiveRequests request = new InfraActiveRequests();
 
 536         request.setRequestId("testVfModuleId1");
 
 537         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
 
 539         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 541         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 543         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 544                 execution.getVariable("orchestrationStatusValidationResult"));
 
 546         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 547         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 549         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
 
 553     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongAlacarteValueVfModule() throws Exception {
 
 554         String flowToBeCalled = "CreateVfModuleBB";
 
 556         execution.setVariable("orchestrationStatusValidationResult",
 
 557                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 558         execution.setVariable("aLaCarte", false);
 
 559         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 561         GenericVnf genericVnf = buildGenericVnf();
 
 562         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 563         modelInfoGenericVnf.setMultiStageDesign("true");
 
 564         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 565         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 567         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 568         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 569         buildingBlockDetail.setId(1);
 
 570         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 571         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 573         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 575         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 576                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 577         vfModule.setVfModuleId("vfModuleId");
 
 578         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 579         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 581         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 582                 new OrchestrationStatusStateTransitionDirective();
 
 583         orchestrationStatusStateTransitionDirective
 
 584                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 585         orchestrationStatusStateTransitionDirective.setId(1);
 
 586         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 587         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 588         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
 
 590         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 591                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 592                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 594         InfraActiveRequests request = new InfraActiveRequests();
 
 595         request.setRequestId("testVfModuleId1");
 
 596         request.setResourceStatusMessage(vfModuleExistExpectedMessage);
 
 598         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 600         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 602         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 603                 execution.getVariable("orchestrationStatusValidationResult"));
 
 605         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 606         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 608         assertEquals(vfModuleExistExpectedMessage, argument.getValue().getResourceStatusMessage());
 
 612     public void continueValidationActivatedTest() throws Exception {
 
 613         String flowToBeCalled = "DeactivateVnfBB";
 
 614         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 615         buildingBlockDetail.setBuildingBlockName(flowToBeCalled);
 
 616         buildingBlockDetail.setId(1);
 
 617         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 618         buildingBlockDetail.setTargetAction(OrchestrationAction.DEACTIVATE);
 
 619         when(catalogDbClient.getBuildingBlockDetail(flowToBeCalled)).thenReturn(buildingBlockDetail);
 
 621         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 622                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 623         vfModule.setVfModuleId("vfModuleId");
 
 624         vfModule.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
 
 625         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 627         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 628                 new OrchestrationStatusStateTransitionDirective();
 
 629         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
 630         orchestrationStatusStateTransitionDirective.setId(1);
 
 631         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
 
 632         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 633         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.DEACTIVATE);
 
 634         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 635                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ACTIVATED,
 
 636                         OrchestrationAction.DEACTIVATE);
 
 638         execution.setVariable("aLaCarte", true);
 
 639         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 640         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 642         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
 643                 execution.getVariable("orchestrationStatusValidationResult"));
 
 645         Mockito.verifyZeroInteractions(requestsDbClient);
 
 649     public void test_validateOrchestrationStatusDeleteVfModuleSilentSuccess() throws Exception {
 
 650         String flowToBeCalled = "DeleteVfModuleBB";
 
 652         execution.setVariable("orchestrationStatusValidationResult",
 
 653                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 654         execution.setVariable("aLaCarte", true);
 
 655         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 657         GenericVnf genericVnf = buildGenericVnf();
 
 658         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 659         modelInfoGenericVnf.setMultiStageDesign("true");
 
 660         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 661         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 663         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 664                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 665         vfModule.setVfModuleId("vfModuleId");
 
 666         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 667         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 669         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 670         buildingBlockDetail.setBuildingBlockName("DeleteVfModuleBB");
 
 671         buildingBlockDetail.setId(1);
 
 672         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 673         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 675         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 677         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 678                 new OrchestrationStatusStateTransitionDirective();
 
 679         orchestrationStatusStateTransitionDirective
 
 680                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 681         orchestrationStatusStateTransitionDirective.setId(1);
 
 682         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 683         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 684         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 686         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 687                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 688                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 690         InfraActiveRequests request = new InfraActiveRequests();
 
 691         request.setRequestId("testVfModuleId1");
 
 692         request.setResourceStatusMessage(vfModuleNotExistExpectedMessage);
 
 694         Mockito.doNothing().when(requestsDbClient).patchInfraActiveRequests(request);
 
 696         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 698         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 699                 execution.getVariable("orchestrationStatusValidationResult"));
 
 701         ArgumentCaptor<InfraActiveRequests> argument = ArgumentCaptor.forClass(InfraActiveRequests.class);
 
 702         Mockito.verify(requestsDbClient).patchInfraActiveRequests(argument.capture());
 
 704         assertEquals(vfModuleNotExistExpectedMessage, argument.getValue().getResourceStatusMessage());