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.ArgumentMatchers;
 
  38 import org.mockito.InjectMocks;
 
  39 import org.onap.so.bpmn.BaseTaskTest;
 
  40 import org.onap.so.bpmn.common.BuildingBlockExecution;
 
  41 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 
  42 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 
  43 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 
  44 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 
  45 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 
  46 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
 
  47 import org.onap.so.db.catalog.beans.OrchestrationAction;
 
  48 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 
  49 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
 
  50 import org.onap.so.db.catalog.beans.OrchestrationStatusValidationDirective;
 
  51 import org.onap.so.db.catalog.beans.ResourceType;
 
  52 import org.springframework.beans.factory.annotation.Autowired;
 
  54 public class OrchestrationStatusValidatorTest extends BaseTaskTest {
 
  56     protected OrchestrationStatusValidator orchestrationStatusValidator = new OrchestrationStatusValidator();
 
  61     public void test_validateOrchestrationStatus() throws Exception {
 
  62         String flowToBeCalled = "AssignServiceInstanceBB";
 
  63         setServiceInstance().setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  64         execution.setVariable("aLaCarte", true);
 
  65         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
  67         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
  68         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
  69         buildingBlockDetail.setId(1);
 
  70         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
  71         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
  73         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
  75         org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance =
 
  76                 new org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance();
 
  77         serviceInstance.setServiceInstanceId("serviceInstanceId");
 
  78         serviceInstance.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  79         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID)))
 
  80                 .thenReturn(serviceInstance);
 
  82         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
  83                 new OrchestrationStatusStateTransitionDirective();
 
  84         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
  85         orchestrationStatusStateTransitionDirective.setId(1);
 
  86         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
  87         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
  88         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
  90         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
  91                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
 
  92                         OrchestrationAction.ASSIGN);
 
  94         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
  96         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
  97                 execution.getVariable("orchestrationStatusValidationResult"));
 
 101     public void test_validateOrchestrationStatusConfiguration() throws Exception {
 
 102         lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, "configurationId");
 
 103         String flowToBeCalled = "UnassignFabricConfigurationBB";
 
 104         ServiceInstance si = setServiceInstance();
 
 105         List<Configuration> configurations = new ArrayList<>();
 
 106         Configuration config = new Configuration();
 
 108         si.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 109         config.setConfigurationId("configurationId");
 
 110         config.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 111         configurations.add(config);
 
 112         si.setConfigurations(configurations);
 
 114         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 115         execution.setVariable("aLaCarte", true);
 
 117         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 118         buildingBlockDetail.setBuildingBlockName("UnassignFabricConfigurationBB");
 
 119         buildingBlockDetail.setId(1);
 
 120         buildingBlockDetail.setResourceType(ResourceType.CONFIGURATION);
 
 121         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
 
 123         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 125         org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration configuration =
 
 126                 new org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration();
 
 127         configuration.setConfigurationId("configurationId");
 
 128         configuration.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 129         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.CONFIGURATION_ID)))
 
 130                 .thenReturn(configuration);
 
 132         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 133                 new OrchestrationStatusStateTransitionDirective();
 
 134         orchestrationStatusStateTransitionDirective
 
 135                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 136         orchestrationStatusStateTransitionDirective.setId(1);
 
 137         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 138         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.CONFIGURATION);
 
 139         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.UNASSIGN);
 
 141         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 142                 .getOrchestrationStatusStateTransitionDirective(ResourceType.CONFIGURATION,
 
 143                         OrchestrationStatus.PRECREATED, OrchestrationAction.UNASSIGN);
 
 145         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 147         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 148                 execution.getVariable("orchestrationStatusValidationResult"));
 
 153     public void test_validateOrchestrationStatus_buildingBlockDetailNotFound() throws Exception {
 
 154         expectedException.expect(BpmnError.class);
 
 156         String flowToBeCalled = "AssignServiceInstanceBB";
 
 158         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 160         doReturn(null).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 162         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 167     public void test_validateOrchestrationStatus_orchestrationValidationFail() throws Exception {
 
 168         expectedException.expect(BpmnError.class);
 
 170         String flowToBeCalled = "AssignServiceInstanceBB";
 
 172         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 174         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 175         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
 176         buildingBlockDetail.setId(1);
 
 177         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 178         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
 180         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 182         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 183                 new OrchestrationStatusStateTransitionDirective();
 
 184         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
 
 185         orchestrationStatusStateTransitionDirective.setId(1);
 
 186         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 187         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
 188         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
 190         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 191                 .getOrchestrationStatusStateTransitionDirective(ResourceType.SERVICE, OrchestrationStatus.PRECREATED,
 
 192                         OrchestrationAction.ASSIGN);
 
 194         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 199     public void test_validateOrchestrationStatus_orchestrationValidationNotFound() throws Exception {
 
 200         expectedException.expect(BpmnError.class);
 
 202         String flowToBeCalled = "AssignServiceInstanceBB";
 
 204         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 206         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 207         buildingBlockDetail.setBuildingBlockName("AssignServiceInstanceBB");
 
 208         buildingBlockDetail.setId(1);
 
 209         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 210         buildingBlockDetail.setTargetAction(OrchestrationAction.ASSIGN);
 
 212         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 214         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 215                 new OrchestrationStatusStateTransitionDirective();
 
 216         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.FAIL);
 
 217         orchestrationStatusStateTransitionDirective.setId(1);
 
 218         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
 
 219         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.SERVICE);
 
 220         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ASSIGN);
 
 222         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 223                 .getOrchestrationStatusStateTransitionDirective(ResourceType.NETWORK, OrchestrationStatus.PRECREATED,
 
 224                         OrchestrationAction.ASSIGN);
 
 226         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 230     public void test_validateOrchestrationStatus_unassignNotFound() throws Exception {
 
 231         String flowToBeCalled = "UnassignServiceInstanceBB";
 
 233         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 234         execution.setVariable("aLaCarte", true);
 
 236         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 237         buildingBlockDetail.setBuildingBlockName("UnassignServiceInstanceBB");
 
 238         buildingBlockDetail.setId(1);
 
 239         buildingBlockDetail.setResourceType(ResourceType.SERVICE);
 
 240         buildingBlockDetail.setTargetAction(OrchestrationAction.UNASSIGN);
 
 242         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 244         lookupKeyMap = new HashMap<ResourceKey, String>();
 
 246         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 248         assertNull(execution.getVariable("orchestrationStatusValidationResult"));
 
 252     public void test_validateOrchestrationStatusSecondStageOfMultiStageEnabledVfModule() throws Exception {
 
 253         String flowToBeCalled = "CreateVfModuleBB";
 
 255         execution.setVariable("orchestrationStatusValidationResult",
 
 256                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 257         execution.setVariable("aLaCarte", true);
 
 258         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 260         GenericVnf genericVnf = buildGenericVnf();
 
 261         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 262         modelInfoGenericVnf.setMultiStageDesign("true");
 
 263         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 264         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 266         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 267                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 268         vfModule.setVfModuleId("vfModuleId");
 
 269         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 270         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 272         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 273         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 274         buildingBlockDetail.setId(1);
 
 275         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 276         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 278         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 280         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 281                 new OrchestrationStatusStateTransitionDirective();
 
 282         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
 283         orchestrationStatusStateTransitionDirective.setId(1);
 
 284         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 285         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 286         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 288         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 289                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 290                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 292         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 294         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
 295                 execution.getVariable("orchestrationStatusValidationResult"));
 
 300     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongPrevStatusVfModule() throws Exception {
 
 301         String flowToBeCalled = "CreateVfModuleBB";
 
 303         execution.setVariable("orchestrationStatusValidationResult", OrchestrationStatusValidationDirective.CONTINUE);
 
 304         execution.setVariable("aLaCarte", true);
 
 305         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 307         GenericVnf genericVnf = buildGenericVnf();
 
 308         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 309         modelInfoGenericVnf.setMultiStageDesign("true");
 
 310         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 311         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 313         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 314                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 315         vfModule.setVfModuleId("vfModuleId");
 
 316         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 317         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 319         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 320         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 321         buildingBlockDetail.setId(1);
 
 322         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 323         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 325         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 327         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 328                 new OrchestrationStatusStateTransitionDirective();
 
 329         orchestrationStatusStateTransitionDirective
 
 330                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 331         orchestrationStatusStateTransitionDirective.setId(1);
 
 332         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 333         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 334         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 336         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 337                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 338                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 340         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 342         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 343                 execution.getVariable("orchestrationStatusValidationResult"));
 
 347     public void test_validateOrchestrationStatusSecondStageOfMultiStageDisabledVfModule() throws Exception {
 
 348         String flowToBeCalled = "CreateVfModuleBB";
 
 350         execution.setVariable("orchestrationStatusValidationResult",
 
 351                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 352         execution.setVariable("aLaCarte", true);
 
 353         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 355         GenericVnf genericVnf = buildGenericVnf();
 
 356         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 357         modelInfoGenericVnf.setMultiStageDesign("false");
 
 358         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 359         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 361         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 362         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 363         buildingBlockDetail.setId(1);
 
 364         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 365         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 367         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 369         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 370                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 371         vfModule.setVfModuleId("vfModuleId");
 
 372         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 373         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 375         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 376                 new OrchestrationStatusStateTransitionDirective();
 
 377         orchestrationStatusStateTransitionDirective
 
 378                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 379         orchestrationStatusStateTransitionDirective.setId(1);
 
 380         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 381         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 382         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 384         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 385                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 386                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 388         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 390         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 391                 execution.getVariable("orchestrationStatusValidationResult"));
 
 395     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongOrchStatusVfModule() throws Exception {
 
 396         String flowToBeCalled = "CreateVfModuleBB";
 
 398         execution.setVariable("orchestrationStatusValidationResult",
 
 399                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 400         execution.setVariable("aLaCarte", true);
 
 401         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 403         GenericVnf genericVnf = buildGenericVnf();
 
 404         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 405         modelInfoGenericVnf.setMultiStageDesign("true");
 
 406         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 407         setVfModule().setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
 409         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 410         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 411         buildingBlockDetail.setId(1);
 
 412         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 413         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 415         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 417         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 418                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 419         vfModule.setVfModuleId("vfModuleId");
 
 420         vfModule.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
 
 421         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 423         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 424                 new OrchestrationStatusStateTransitionDirective();
 
 425         orchestrationStatusStateTransitionDirective
 
 426                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 427         orchestrationStatusStateTransitionDirective.setId(1);
 
 428         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 429         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 430         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.CREATE);
 
 432         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 433                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ASSIGNED,
 
 434                         OrchestrationAction.CREATE);
 
 436         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 438         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 439                 execution.getVariable("orchestrationStatusValidationResult"));
 
 443     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongTargetActionVfModule() throws Exception {
 
 444         String flowToBeCalled = "CreateVfModuleBB";
 
 446         execution.setVariable("orchestrationStatusValidationResult",
 
 447                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 448         execution.setVariable("aLaCarte", true);
 
 449         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 451         GenericVnf genericVnf = buildGenericVnf();
 
 452         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 453         modelInfoGenericVnf.setMultiStageDesign("true");
 
 454         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 455         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 457         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 458         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 459         buildingBlockDetail.setId(1);
 
 460         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 461         buildingBlockDetail.setTargetAction(OrchestrationAction.ACTIVATE);
 
 463         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 465         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 466                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 467         vfModule.setVfModuleId("vfModuleId");
 
 468         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 469         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 471         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 472                 new OrchestrationStatusStateTransitionDirective();
 
 473         orchestrationStatusStateTransitionDirective
 
 474                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 475         orchestrationStatusStateTransitionDirective.setId(1);
 
 476         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 477         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 478         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
 
 480         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 481                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 482                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.ACTIVATE);
 
 484         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 486         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 487                 execution.getVariable("orchestrationStatusValidationResult"));
 
 491     public void test_validateOrchestrationStatusSecondStageOfMultiStageWrongAlacarteValueVfModule() throws Exception {
 
 492         String flowToBeCalled = "CreateVfModuleBB";
 
 494         execution.setVariable("orchestrationStatusValidationResult",
 
 495                 OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 496         execution.setVariable("aLaCarte", false);
 
 497         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 499         GenericVnf genericVnf = buildGenericVnf();
 
 500         ModelInfoGenericVnf modelInfoGenericVnf = genericVnf.getModelInfoGenericVnf();
 
 501         modelInfoGenericVnf.setMultiStageDesign("true");
 
 502         setGenericVnf().setModelInfoGenericVnf(modelInfoGenericVnf);
 
 503         setVfModule().setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 505         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 506         buildingBlockDetail.setBuildingBlockName("CreateVfModuleBB");
 
 507         buildingBlockDetail.setId(1);
 
 508         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 509         buildingBlockDetail.setTargetAction(OrchestrationAction.CREATE);
 
 511         doReturn(buildingBlockDetail).when(catalogDbClient).getBuildingBlockDetail(flowToBeCalled);
 
 513         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 514                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 515         vfModule.setVfModuleId("vfModuleId");
 
 516         vfModule.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 517         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 519         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 520                 new OrchestrationStatusStateTransitionDirective();
 
 521         orchestrationStatusStateTransitionDirective
 
 522                 .setFlowDirective(OrchestrationStatusValidationDirective.SILENT_SUCCESS);
 
 523         orchestrationStatusStateTransitionDirective.setId(1);
 
 524         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.PENDING_ACTIVATION);
 
 525         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 526         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.ACTIVATE);
 
 528         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 529                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE,
 
 530                         OrchestrationStatus.PENDING_ACTIVATION, OrchestrationAction.CREATE);
 
 532         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 534         assertEquals(OrchestrationStatusValidationDirective.SILENT_SUCCESS,
 
 535                 execution.getVariable("orchestrationStatusValidationResult"));
 
 539     public void continueValidationActivatedTest() throws Exception {
 
 540         String flowToBeCalled = "DeactivateVnfBB";
 
 541         BuildingBlockDetail buildingBlockDetail = new BuildingBlockDetail();
 
 542         buildingBlockDetail.setBuildingBlockName(flowToBeCalled);
 
 543         buildingBlockDetail.setId(1);
 
 544         buildingBlockDetail.setResourceType(ResourceType.VF_MODULE);
 
 545         buildingBlockDetail.setTargetAction(OrchestrationAction.DEACTIVATE);
 
 546         when(catalogDbClient.getBuildingBlockDetail(flowToBeCalled)).thenReturn(buildingBlockDetail);
 
 548         org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule vfModule =
 
 549                 new org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule();
 
 550         vfModule.setVfModuleId("vfModuleId");
 
 551         vfModule.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
 
 552         when(extractPojosForBB.extractByKey(any(), ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID))).thenReturn(vfModule);
 
 554         OrchestrationStatusStateTransitionDirective orchestrationStatusStateTransitionDirective =
 
 555                 new OrchestrationStatusStateTransitionDirective();
 
 556         orchestrationStatusStateTransitionDirective.setFlowDirective(OrchestrationStatusValidationDirective.CONTINUE);
 
 557         orchestrationStatusStateTransitionDirective.setId(1);
 
 558         orchestrationStatusStateTransitionDirective.setOrchestrationStatus(OrchestrationStatus.ACTIVATED);
 
 559         orchestrationStatusStateTransitionDirective.setResourceType(ResourceType.VF_MODULE);
 
 560         orchestrationStatusStateTransitionDirective.setTargetAction(OrchestrationAction.DEACTIVATE);
 
 561         doReturn(orchestrationStatusStateTransitionDirective).when(catalogDbClient)
 
 562                 .getOrchestrationStatusStateTransitionDirective(ResourceType.VF_MODULE, OrchestrationStatus.ACTIVATED,
 
 563                         OrchestrationAction.DEACTIVATE);
 
 565         execution.setVariable("aLaCarte", true);
 
 566         execution.setVariable("flowToBeCalled", flowToBeCalled);
 
 567         orchestrationStatusValidator.validateOrchestrationStatus(execution);
 
 569         assertEquals(OrchestrationStatusValidationDirective.CONTINUE,
 
 570                 execution.getVariable("orchestrationStatusValidationResult"));