Use resource list for SkipCDSBuildingBlockListener 62/126362/2
authorJozsef Csongvai <jozsef.csongvai@bell.ca>
Tue, 30 Nov 2021 15:14:13 +0000 (10:14 -0500)
committerJozsef Csongvai <jozsef.csongvai@bell.ca>
Tue, 21 Dec 2021 23:05:42 +0000 (18:05 -0500)
The listener was using a customizationId from the requestPayload.
Since the requestPayload is slightly different for VNF LCM requests,
this logic was inconsistent and not working properly.

By adding modelCustomizationId and modelVersionId to the Resource
class, the SkipCDSBuildingBlockListener can leverage this to perform
more reliable lookups for customization objects.

This also enables SkipCDSBuildingBlockListener to run for delete
requests. Previously this would have failed as the resourceKey is
instance-id in the delete case and customization-id in for create.
By using the explicit property of the resource object, there will
be no confusion.

Issue-ID: SO-3807
Change-Id: I0922e5e7373990d9b409651cb4365e11d5618558
Signed-off-by: Jozsef Csongvai <jozsef.csongvai@bell.ca>
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/VnfEBBLoader.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/SkipCDSBuildingBlockListener.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/VnfEBBLoaderTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/SkipCDSBuildingBlockListenerTest.java

index 2a8852a..57ff837 100644 (file)
@@ -40,6 +40,8 @@ public class Resource implements Serializable {
     private String cvnfModuleCustomizationId;
     private String instanceName;
     private String modelInvariantId;
+    private String modelVersionId;
+    private String modelCustomizationId;
     private int processingPriority;
     private Resource parent;
     private List<Resource> children;
@@ -140,6 +142,21 @@ public class Resource implements Serializable {
         this.modelInvariantId = modelInvariantId;
     }
 
+    public String getModelVersionId() {
+        return modelVersionId;
+    }
+
+    public void setModelVersionId(String modelVersionId) {
+        this.modelVersionId = modelVersionId;
+    }
+
+    public String getModelCustomizationId() {
+        return modelCustomizationId;
+    }
+
+    public void setModelCustomizationId(String modelCustomizationId) {
+        this.modelCustomizationId = modelCustomizationId;
+    }
 
     public int getProcessingPriority() {
         return processingPriority == 0 ? (isBaseVfModule() ? Integer.MIN_VALUE + 1 : 0) : processingPriority;
index b5ad8d8..cb4ee01 100644 (file)
@@ -38,6 +38,8 @@ import org.onap.so.bpmn.infrastructure.workflow.tasks.VrfBondingServiceException
 import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowType;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoPnf;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
 import org.onap.so.client.exception.ExceptionBuilder;
@@ -199,6 +201,7 @@ public class ServiceEBBLoader {
             var serviceResource =
                     new Resource(WorkflowType.SERVICE, serviceInstanceMSO.getServiceInstanceId(), false, null);
             serviceResource.setModelInvariantId(serviceInstanceAAI.getModelInvariantId());
+            serviceResource.setModelVersionId(serviceInstanceAAI.getModelVersionId());
             resourceList.add(serviceResource);
             traverseServiceInstanceMSOVnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO);
             traverseServiceInstanceMSOPnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO);
@@ -206,8 +209,15 @@ public class ServiceEBBLoader {
                 for (org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network : serviceInstanceMSO
                         .getNetworks()) {
                     aaiResourceIds.add(new Pair<>(WorkflowType.NETWORK, network.getNetworkId()));
-                    resourceList
-                            .add(new Resource(WorkflowType.NETWORK, network.getNetworkId(), false, serviceResource));
+                    Resource networkResource =
+                            new Resource(WorkflowType.NETWORK, network.getNetworkId(), false, serviceResource);
+                    ModelInfoNetwork modelInfoNetwork = network.getModelInfoNetwork();
+                    if (modelInfoNetwork != null) {
+                        networkResource.setModelCustomizationId(modelInfoNetwork.getModelCustomizationUUID());
+                        networkResource.setModelVersionId(modelInfoNetwork.getModelUUID());
+                        networkResource.setModelCustomizationId(modelInfoNetwork.getModelCustomizationUUID());
+                    }
+                    resourceList.add(networkResource);
                 }
             }
             if (serviceInstanceMSO.getCollection() != null) {
@@ -252,6 +262,8 @@ public class ServiceEBBLoader {
             GenericVnf genericVnf = bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId());
             Resource vnfResource = new Resource(WorkflowType.VNF, vnf.getVnfId(), false, serviceResource);
             vnfResource.setVnfCustomizationId(genericVnf.getModelCustomizationId());
+            vnfResource.setModelCustomizationId(genericVnf.getModelCustomizationId());
+            vnfResource.setModelVersionId(genericVnf.getModelVersionId());
             resourceList.add(vnfResource);
             traverseVnfModules(resourceList, vnfResource, aaiResourceIds, vnf);
             if (vnf.getVolumeGroups() != null) {
@@ -272,7 +284,13 @@ public class ServiceEBBLoader {
         }
         for (org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf : serviceInstanceMSO.getPnfs()) {
             aaiResourceIds.add(new Pair<>(WorkflowType.PNF, pnf.getPnfId()));
-            resourceList.add(new Resource(WorkflowType.PNF, pnf.getPnfId(), false, serviceResource));
+            Resource resource = new Resource(WorkflowType.PNF, pnf.getPnfId(), false, serviceResource);
+            ModelInfoPnf modelInfo = pnf.getModelInfoPnf();
+            if (modelInfo != null) {
+                resource.setModelVersionId(modelInfo.getModelUuid());
+                resource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
+            }
+            resourceList.add(resource);
         }
     }
 
@@ -437,6 +455,10 @@ public class ServiceEBBLoader {
         for (VfModule vfModule : vnf.getVfModules()) {
             aaiResourceIds.add(new Pair<>(WorkflowType.VFMODULE, vfModule.getVfModuleId()));
             Resource resource = new Resource(WorkflowType.VFMODULE, vfModule.getVfModuleId(), false, vnfResource);
+            org.onap.aai.domain.yang.VfModule aaiVfModule =
+                    bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId());
+            resource.setModelCustomizationId(aaiVfModule.getModelCustomizationId());
+            resource.setModelInvariantId(aaiVfModule.getModelInvariantId());
             resource.setBaseVfModule(vfModule.getModelInfoVfModule().getIsBaseBoolean());
             resourceList.add(resource);
         }
index c383b4a..77cd65b 100644 (file)
@@ -38,6 +38,7 @@ import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.CvnfcCustomization;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.Networks;
 import org.onap.so.serviceinstancebeans.Pnfs;
 import org.onap.so.serviceinstancebeans.Service;
@@ -93,6 +94,11 @@ public class UserParamsServiceTraversal {
         List<Resource> resourceList = new ArrayList<>();
         Resource serviceResource =
                 new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false, null);
+        ModelInfo modelInfo = validate.getModelInfo();
+        if (modelInfo != null) {
+            serviceResource.setModelVersionId(modelInfo.getModelVersionId());
+            serviceResource.setModelInvariantId(modelInfo.getModelInvariantUuid());
+        }
         resourceList.add(serviceResource);
         if (validate.getResources().getVnfs() != null) {
             setResourceListForVnfs(execution, resourceList, serviceResource, validate);
@@ -115,6 +121,11 @@ public class UserParamsServiceTraversal {
                     serviceResource);
             vnfResource.setProcessingPriority(vnf.getProcessingPriority());
             vnfResource.setInstanceName(vnf.getInstanceName());
+            ModelInfo modelInfo = vnf.getModelInfo();
+            if (modelInfo != null) {
+                vnfResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
+                vnfResource.setModelVersionId(modelInfo.getModelVersionId());
+            }
             resourceList.add(vnfResource);
             setResourceListForVfModules(execution, resourceList, vnfResource, validate, vnf);
         }
@@ -160,6 +171,11 @@ public class UserParamsServiceTraversal {
             foundVfModuleOrVG = true;
             Resource resource =
                     setVfModuleWorkFlowTypeToResourceList(resourceList, vnfResource, vfModuleCustomization, vfModule);
+            if (vnf.getModelInfo() != null) {
+                resource.setModelVersionId(vnf.getModelInfo().getModelVersionId());
+            }
+            resource.setVfModuleCustomizationId(vfModuleCustomization.getModelCustomizationUUID());
+            resource.setModelCustomizationId(vfModuleCustomization.getModelCustomizationUUID());
             setConfigurationWorkFlowTypeToResourceList(resourceList, vnfResource, validate, vnf, vfModule, resource);
         }
     }
@@ -211,6 +227,11 @@ public class UserParamsServiceTraversal {
         for (Pnfs pnf : validate.getResources().getPnfs()) {
             Resource pnfResource = new Resource(WorkflowType.PNF, pnf.getModelInfo().getModelCustomizationId(), false,
                     serviceResource);
+            ModelInfo modelInfo = pnf.getModelInfo();
+            if (modelInfo != null) {
+                pnfResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
+                pnfResource.setModelVersionId(modelInfo.getModelVersionId());
+            }
             pnfResource.setProcessingPriority(pnf.getProcessingPriority());
             resourceList.add(pnfResource);
         }
@@ -222,6 +243,11 @@ public class UserParamsServiceTraversal {
             Resource networkResource = new Resource(WorkflowType.NETWORK,
                     network.getModelInfo().getModelCustomizationId(), false, serviceResource);
             networkResource.setProcessingPriority(network.getProcessingPriority());
+            ModelInfo modelInfo = network.getModelInfo();
+            if (modelInfo != null) {
+                networkResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
+                networkResource.setModelVersionId(modelInfo.getModelVersionId());
+            }
             resourceList.add(networkResource);
         }
         if (requestAction.equals(CREATE_INSTANCE)) {
index b950eb4..3778f64 100644 (file)
@@ -40,7 +40,6 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
-import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
 import org.onap.so.client.exception.ExceptionBuilder;
@@ -117,6 +116,9 @@ public class VnfEBBLoader {
             if (vnf.getVnfId().equals(vnfId)) {
                 aaiResourceIds.add(new Pair<>(WorkflowType.VNF, vnf.getVnfId()));
                 Resource vnfResource = new Resource(WorkflowType.VNF, vnf.getVnfId(), false, serviceResource);
+                org.onap.aai.domain.yang.GenericVnf aaiGenericVnf = bbInputSetupUtils.getAAIGenericVnf(vnfId);
+                vnfResource.setModelCustomizationId(aaiGenericVnf.getModelCustomizationId());
+                vnfResource.setModelVersionId(aaiGenericVnf.getModelVersionId());
                 resourceList.add(vnfResource);
                 processVfModules(vnf, aaiResourceIds, resourceList, vnfResource, execution);
                 processVolumeGroups(vnf, aaiResourceIds, resourceList, vnfResource);
@@ -131,8 +133,11 @@ public class VnfEBBLoader {
         for (GenericVnf vnf : serviceInstanceMSO.getVnfs()) {
             if (vnf.getVnfId().equals(vnfId)) {
                 aaiResourceIds.add(new Pair<>(WorkflowType.VNF, vnf.getVnfId()));
-                Resource vnfResource = new Resource(WorkflowType.VNF,
-                        bbInputSetupUtils.getAAIGenericVnf(vnfId).getModelCustomizationId(), false, serviceResource);
+                org.onap.aai.domain.yang.GenericVnf aaiGenericVnf = bbInputSetupUtils.getAAIGenericVnf(vnfId);
+                Resource vnfResource =
+                        new Resource(WorkflowType.VNF, aaiGenericVnf.getModelCustomizationId(), false, serviceResource);
+                vnfResource.setModelCustomizationId(aaiGenericVnf.getModelCustomizationId());
+                vnfResource.setModelVersionId(aaiGenericVnf.getModelVersionId());
                 resourceList.add(vnfResource);
                 processVfModules(vnf, aaiResourceIds, resourceList, vnfResource, execution);
                 processVolumeGroups(vnf, aaiResourceIds, resourceList, vnfResource);
@@ -141,10 +146,10 @@ public class VnfEBBLoader {
         }
     }
 
-    private void findConfigurationsInsideVfModule(DelegateExecution execution, String vnfId, String vfModuleId,
-            List<Resource> resourceList, Resource vfModuleResource, List<Pair<WorkflowType, String>> aaiResourceIds) {
+    private void findConfigurationsInsideVfModule(DelegateExecution execution,
+            org.onap.aai.domain.yang.VfModule aaiVfModule, List<Resource> resourceList, Resource vfModuleResource,
+            List<Pair<WorkflowType, String>> aaiResourceIds) {
         try {
-            org.onap.aai.domain.yang.VfModule aaiVfModule = bbInputSetupUtils.getAAIVfModule(vnfId, vfModuleId);
             AAIResultWrapper vfModuleWrapper = new AAIResultWrapper(
                     new AAICommonObjectMapperProvider().getMapper().writeValueAsString(aaiVfModule));
             Optional<Relationships> relationshipsOp;
@@ -166,11 +171,14 @@ public class VnfEBBLoader {
                 aaiResourceIds.add(new Pair<>(WorkflowType.VFMODULE, vfModule.getVfModuleId()));
                 Resource vfModuleResource =
                         new Resource(WorkflowType.VFMODULE, vfModule.getVfModuleId(), false, vnfResource);
-                Optional.ofNullable(vfModule.getModelInfoVfModule()).map(ModelInfoVfModule::getIsBaseBoolean)
-                        .ifPresent(vfModuleResource::setBaseVfModule);
+                org.onap.aai.domain.yang.VfModule aaiVfModule =
+                        bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId());
+                vfModuleResource.setModelInvariantId(aaiVfModule.getModelInvariantId());
+                vfModuleResource.setModelCustomizationId(aaiVfModule.getModelCustomizationId());
+                vfModuleResource.setBaseVfModule(aaiVfModule.isIsBaseVfModule());
                 resourceList.add(vfModuleResource);
-                findConfigurationsInsideVfModule(execution, vnf.getVnfId(), vfModule.getVfModuleId(), resourceList,
-                        vfModuleResource, aaiResourceIds);
+                findConfigurationsInsideVfModule(execution, aaiVfModule, resourceList, vfModuleResource,
+                        aaiResourceIds);
             }
         }
     }
index ff6c113..dc77ea1 100644 (file)
@@ -24,12 +24,10 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.apache.logging.log4j.util.Strings;
 import org.onap.so.bpmn.common.BBConstants;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
 import org.onap.so.bpmn.common.listener.flowmanipulator.PreFlowManipulator;
-import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.Resource;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.db.catalog.beans.PnfResourceCustomization;
 import org.onap.so.db.catalog.beans.Service;
@@ -40,7 +38,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 
 @Component
 public class SkipCDSBuildingBlockListener implements PreFlowManipulator {
@@ -76,43 +73,37 @@ public class SkipCDSBuildingBlockListener implements PreFlowManipulator {
     @Override
     public void run(List<ExecuteBuildingBlock> flowsToExecute, ExecuteBuildingBlock currentBB,
             BuildingBlockExecution execution) {
-        String customizationUUID = currentBB.getBuildingBlock().getKey();
+        String resourceKey = currentBB.getBuildingBlock().getKey();
+        List<Resource> resources = execution.getVariable("resources");
+        Resource resource = resources.stream().filter(r -> resourceKey.equals(r.getResourceId())).findFirst()
+                .orElseThrow(() -> new IllegalArgumentException("Resource not found for key:" + resourceKey));
 
-        if ("SERVICE".equalsIgnoreCase(currentBB.getBuildingBlock().getBpmnScope())) {
-            String modelUUID = currentBB.getRequestDetails().getModelInfo().getModelUuid();
-            Service service = catalogDbClient.getServiceByID(modelUUID);
-            currentSequenceSkipCheck(execution, service.getSkipPostInstConf());
-        } else if (currentBB.getBuildingBlock().getBpmnScope().equalsIgnoreCase("VNF")
-                && containsIgnoreCaseAction(currentBB, vnfActions)) {
-            List<VnfResourceCustomization> vnfResourceCustomizations =
-                    catalogDbClient.getVnfResourceCustomizationByModelUuid(
-                            currentBB.getRequestDetails().getModelInfo().getModelUuid());
-            if (!CollectionUtils.isEmpty(vnfResourceCustomizations)) {
-                VnfResourceCustomization vrc = catalogDbClient.findVnfResourceCustomizationInList(customizationUUID,
-                        vnfResourceCustomizations);
-                if (null != vrc) {
-                    logger.debug("getSkipPostInstConf value: " + vrc.getSkipPostInstConf().booleanValue());
-                    boolean skipConfigVNF = vrc.getSkipPostInstConf().booleanValue();
-                    currentSequenceSkipCheck(execution, skipConfigVNF);
-                }
+        String scope = currentBB.getBuildingBlock().getBpmnScope();
 
+        if ("SERVICE".equalsIgnoreCase(scope)) {
+            Service service = catalogDbClient.getServiceByID(resource.getModelVersionId());
+            currentSequenceSkipCheck(execution, service.getSkipPostInstConf());
+        } else if ("VNF".equalsIgnoreCase(scope) && containsIgnoreCaseAction(currentBB, vnfActions)) {
+            VnfResourceCustomization vrc = catalogDbClient
+                    .getVnfResourceCustomizationByModelCustomizationUUID(resource.getModelCustomizationId());
+            if (vrc != null) {
+                logger.debug("getSkipPostInstConf value: " + vrc.getSkipPostInstConf());
+                boolean skipConfigVNF = vrc.getSkipPostInstConf();
+                currentSequenceSkipCheck(execution, skipConfigVNF);
             }
         } else if (currentBB.getBuildingBlock().getBpmnScope().equalsIgnoreCase("VFModule")
                 && containsIgnoreCaseAction(currentBB, vFModuleAction)) {
-
-            VfModuleCustomization vfc =
-                    catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(customizationUUID);
-
+            VfModuleCustomization vfc = catalogDbClient
+                    .getVfModuleCustomizationByModelCuztomizationUUID(resource.getModelCustomizationId());
             if (null != vfc) {
                 logger.debug("getSkipPostInstConf value: " + vfc.getSkipPostInstConf().booleanValue());
                 boolean skipVfModule = vfc.getSkipPostInstConf();
                 currentSequenceSkipCheck(execution, skipVfModule);
             }
-
         } else if (currentBB.getBuildingBlock().getBpmnScope().equalsIgnoreCase("PNF")
                 && containsIgnoreCaseAction(currentBB, pnfActions)) {
-            PnfResourceCustomization pnfResourceCustomization =
-                    catalogDbClient.getPnfResourceCustomizationByModelCustomizationUUID(customizationUUID);
+            PnfResourceCustomization pnfResourceCustomization = catalogDbClient
+                    .getPnfResourceCustomizationByModelCustomizationUUID(resource.getModelCustomizationId());
 
             if (null != pnfResourceCustomization) {
                 logger.debug("getSkipPostInstConf value: " + pnfResourceCustomization.getSkipPostInstConf());
index 52196aa..a044944 100644 (file)
@@ -409,6 +409,10 @@ public class WorkflowActionTest extends BaseTaskTest {
 
         serviceInstanceMSO.getVnfs().add(vnf);
 
+        VfModule aaiVfModule = new VfModule();
+        aaiVfModule.setIsBaseVfModule(false);
+
+        doReturn(aaiVfModule).when(bbSetupUtils).getAAIVfModule(any(), any());
         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("si0");
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         doReturn(Mockito.mock(GenericVnf.class)).when(bbSetupUtils).getAAIGenericVnf(any());
@@ -932,6 +936,10 @@ public class WorkflowActionTest extends BaseTaskTest {
         serviceInstanceMSO.getVnfs().add(vnf);
         serviceInstanceMSO.getPnfs().add(pnf);
 
+        VfModule aaiVfModule = new VfModule();
+        aaiVfModule.setIsBaseVfModule(false);
+
+        doReturn(aaiVfModule).when(bbSetupUtils).getAAIVfModule(any(), any());
         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         doReturn(Mockito.mock(GenericVnf.class)).when(bbSetupUtils).getAAIGenericVnf(any());
@@ -1013,6 +1021,10 @@ public class WorkflowActionTest extends BaseTaskTest {
 
         serviceInstanceMSO.getVnfs().add(vnf);
 
+        VfModule aaiVfModule = new VfModule();
+        aaiVfModule.setIsBaseVfModule(false);
+
+        doReturn(aaiVfModule).when(bbSetupUtils).getAAIVfModule(any(), any());
         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         doReturn(Mockito.mock(GenericVnf.class)).when(bbSetupUtils).getAAIGenericVnf(any());
@@ -1104,6 +1116,11 @@ public class WorkflowActionTest extends BaseTaskTest {
 
         serviceInstanceMSO.getVnfs().add(vnf);
 
+        org.onap.aai.domain.yang.VfModule aaiVfModule = new org.onap.aai.domain.yang.VfModule();
+        aaiVfModule.setIsBaseVfModule(false);
+
+        doReturn(aaiVfModule).when(bbSetupUtils).getAAIVfModule(any(), any());
+        doReturn(new org.onap.aai.domain.yang.GenericVnf()).when(bbSetupUtils).getAAIGenericVnf(vnf.getVnfId());
         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
@@ -1151,21 +1168,26 @@ public class WorkflowActionTest extends BaseTaskTest {
         vfModule2.setVfModuleId("vfModule2");
         vnf.getVfModules().add(vfModule2);
         serviceInstanceMSO.getVnfs().add(vnf);
-        VfModule vfModuleAAI = new VfModule();
-        vfModuleAAI.setVfModuleId("vfModule2");
+        VfModule vfModuleAAI1 = new VfModule();
+        vfModuleAAI1.setIsBaseVfModule(false);
+        VfModule vfModuleAAI2 = new VfModule();
+        vfModuleAAI2.setIsBaseVfModule(false);
+        vfModuleAAI2.setVfModuleId("vfModule2");
         RelationshipList relationshipList = new RelationshipList();
         Relationship relationship = new Relationship();
         relationshipList.getRelationship().add(relationship);
-        vfModuleAAI.setRelationshipList(relationshipList);
+        vfModuleAAI2.setRelationshipList(relationshipList);
         Relationships relationships = new Relationships("abc");
         Configuration config = new Configuration();
         config.setConfigurationId("configId");
         Optional<Configuration> configOp = Optional.of(config);
         Optional<Relationships> relationshipsOp = Optional.of(relationships);
 
+        doReturn(new org.onap.aai.domain.yang.GenericVnf()).when(bbSetupUtils).getAAIGenericVnf(vnf.getVnfId());
         doReturn(relationshipsOp).when(workflowActionUtils).extractRelationshipsVnfc(isA(Relationships.class));
         doReturn(configOp).when(workflowActionUtils).extractRelationshipsConfiguration(isA(Relationships.class));
-        doReturn(vfModuleAAI).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
+        doReturn(vfModuleAAI1).when(bbSetupUtils).getAAIVfModule("1234", "vfModule1");
+        doReturn(vfModuleAAI2).when(bbSetupUtils).getAAIVfModule("1234", "vfModule2");
         doReturn(serviceInstanceAAI).when(bbSetupUtils).getAAIServiceInstanceById("123");
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
index 2725626..76763e8 100644 (file)
@@ -239,6 +239,9 @@ public class ServiceEBBLoaderTest extends BaseTaskTest {
         aaiConfiguration2.setConfigurationId("testConfigurationId2");
         aaiConfiguration2.setRelationshipList(relationshipList1);
 
+        org.onap.aai.domain.yang.VfModule aaiVfModule = new org.onap.aai.domain.yang.VfModule();
+        aaiVfModule.setIsBaseVfModule(true);
+
         try {
             doReturn(genericVnfAai).when(mockBbInputSetupUtils).getAAIGenericVnf(genericVnf.getVnfId());
             doReturn(serviceInstanceAAI).when(mockBbInputSetupUtils).getAAIServiceInstanceById(resourceId);
@@ -247,6 +250,7 @@ public class ServiceEBBLoaderTest extends BaseTaskTest {
                     .getConfiguration("testConfigurationId");
             doReturn(Optional.of(aaiConfiguration2)).when(mockAaiConfigurationResources)
                     .getConfiguration("testConfigurationId2");
+            doReturn(aaiVfModule).when(mockBbInputSetupUtils).getAAIVfModule(any(), any());
             serviceEBBLoader.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
             assertEquals(8, resourceCounter.size());
             assertTrue(resourceCounter.get(2).isBaseVfModule());
index 78a9628..2775c6d 100644 (file)
@@ -47,12 +47,14 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.only;
 
 
 public class VnfEBBLoaderTest {
 
     private String serviceId;
     private String vnfId;
+    private String vfModuleId;
     private BBInputSetupUtils bbInputSetupUtils;
     private BBInputSetup bbInputSetup;
     private WorkflowActionExtractResourcesAAI workflowActionUtils;
@@ -67,6 +69,7 @@ public class VnfEBBLoaderTest {
     public void setup() {
         serviceId = "service123";
         vnfId = "vnf123";
+        vfModuleId = "vfModule123";
         serviceInstanceAAI = mock(org.onap.aai.domain.yang.ServiceInstance.class);
         serviceInstanceMSO = mock(ServiceInstance.class);
         bbInputSetupUtils = mock(BBInputSetupUtils.class);
@@ -95,11 +98,19 @@ public class VnfEBBLoaderTest {
         GenericVnf genericVnf = mock(GenericVnf.class);
         doReturn(vnfId).when(genericVnf).getVnfId();
 
+        org.onap.aai.domain.yang.GenericVnf aaiVnf = mock(org.onap.aai.domain.yang.GenericVnf.class);
+        doReturn(aaiVnf).when(bbInputSetupUtils).getAAIGenericVnf(vnfId);
+
         VfModule vfModule = mock(VfModule.class);
+        doReturn(vfModuleId).when(vfModule).getVfModuleId();
         ModelInfoVfModule modelInfoVfModule = new ModelInfoVfModule();
         modelInfoVfModule.setIsBaseBoolean(true);
         doReturn(modelInfoVfModule).when(vfModule).getModelInfoVfModule();
 
+        org.onap.aai.domain.yang.VfModule aaiVfModule = new org.onap.aai.domain.yang.VfModule();
+        aaiVfModule.setIsBaseVfModule(true);
+        doReturn(aaiVfModule).when(bbInputSetupUtils).getAAIVfModule(vnfId, vfModuleId);
+
         doReturn(serviceInstanceAAI).when(bbInputSetupUtils).getAAIServiceInstanceById(serviceId);
         doReturn(serviceInstanceMSO).when(bbInputSetup).getExistingServiceInstance(serviceInstanceAAI);
         doReturn(List.of(genericVnf)).when(serviceInstanceMSO).getVnfs();
index b23147e..1fbee2d 100644 (file)
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
 import org.junit.Before;
 import org.junit.Test;
@@ -34,6 +35,8 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.so.bpmn.common.BBConstants;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.common.DelegateExecutionImpl;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.Resource;
+import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowType;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.db.catalog.beans.PnfResourceCustomization;
@@ -41,7 +44,6 @@ import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
-import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.RequestDetails;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
@@ -51,25 +53,24 @@ public class SkipCDSBuildingBlockListenerTest {
     private static final String VNF_SCOPE = "VNF";
     private static final String VF_SCOPE = "VFModule";
     private static final String PNF_SCOPE = "pnf";
-    private static final String TEST_MODELUUID = "123456789";
     private static final String VNF_TEST_ACTION = "VnfConfigAssign";
     private static final String VFModule_TEST_ACTION = "VfModuleConfigAssign";
     private static final String PNFModule_TEST_ACTION = "config-assign";
-    private static final String MODELCUSTOMIZATIONUUID = "123456789";
+    private static final String SERVICE_MODEL_VERSION_ID = UUID.randomUUID().toString();
+    private static final String VNF_MODEL_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+    private static final String VF_MODULE_CUSTOMIZATION_ID = UUID.randomUUID().toString();
+    private static final String PNF_CUSTOMIZATION_ID = UUID.randomUUID().toString();
     private static final String BBNAME = "ControllerExecutionBB";
     private static final boolean ISFIRST = true;
 
-    private int actual;
     private List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
-    private List<VnfResourceCustomization> vnfResourceCustomization;
-    private List<VfModuleCustomization> vfModuleCustomization;
-    private ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock();
+    private ExecuteBuildingBlock executeBuildingBlock;
     private RequestDetails reqDetail = new RequestDetails();
     private BuildingBlockExecution buildingBlockExecution = new DelegateExecutionImpl(new DelegateExecutionFake());
-    private VnfResourceCustomization vnfCust = new VnfResourceCustomization();
-    private VfModuleCustomization vfCust = new VfModuleCustomization();
-    private PnfResourceCustomization pnfResourceCustomization = new PnfResourceCustomization();
-    private BuildingBlock buildingBlock = new BuildingBlock();
+    private VnfResourceCustomization vnfCust;
+    private VfModuleCustomization vfCust;
+    private PnfResourceCustomization pnfResourceCustomization;
+    private BuildingBlock buildingBlock;
 
     @InjectMocks
     private SkipCDSBuildingBlockListener skipCDSBuildingBlockListener;
@@ -78,10 +79,27 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Before
     public void before() {
-        ModelInfo model = new ModelInfo();
-        model.setModelUuid(TEST_MODELUUID);
-        reqDetail.setModelInfo(model);
-        executeBuildingBlock.setRequestDetails(reqDetail);
+        executeBuildingBlock = new ExecuteBuildingBlock();
+        buildingBlock = new BuildingBlock();
+
+        ArrayList<Resource> resources = new ArrayList<>();
+        Resource service = new Resource(WorkflowType.SERVICE, SERVICE_MODEL_VERSION_ID, false, null);
+        service.setModelVersionId(SERVICE_MODEL_VERSION_ID);
+        resources.add(service);
+        Resource vnf = new Resource(WorkflowType.VNF, VNF_MODEL_CUSTOMIZATION_ID, false, null);
+        vnf.setModelCustomizationId(VNF_MODEL_CUSTOMIZATION_ID);
+        resources.add(vnf);
+        Resource vfModule = new Resource(WorkflowType.VFMODULE, VF_MODULE_CUSTOMIZATION_ID, false, null);
+        vfModule.setModelCustomizationId(VF_MODULE_CUSTOMIZATION_ID);
+        resources.add(vfModule);
+        Resource pnf = new Resource(WorkflowType.PNF, PNF_CUSTOMIZATION_ID, false, null);
+        pnf.setModelCustomizationId(PNF_CUSTOMIZATION_ID);
+        resources.add(pnf);
+        buildingBlockExecution.setVariable("resources", resources);
+
+        vnfCust = new VnfResourceCustomization();
+        vfCust = new VfModuleCustomization();
+        pnfResourceCustomization = new PnfResourceCustomization();
     }
 
     @Test
@@ -93,133 +111,83 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testSkipCDSforService() {
-        setBuildingBlockAndCurrentSequence(SERVICE_SCOPE, "service-config-assign", 0);
-        Service service = new Service();
-        when(catalogDbClient.getServiceByID(TEST_MODELUUID)).thenReturn(service);
+        setBuildingBlockAndCurrentSequence(SERVICE_SCOPE, "service-config-assign", SERVICE_MODEL_VERSION_ID, 0);
+        when(catalogDbClient.getServiceByID(SERVICE_MODEL_VERSION_ID)).thenReturn(new Service());
 
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(1, actual);
+        assertEquals(1, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     @Test
     public void testProcessForVNFToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
-        vnfResourceCustomization = getVnfResourceCustomizationList(true);
+        setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, VNF_MODEL_CUSTOMIZATION_ID, 0);
+        when(catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(VNF_MODEL_CUSTOMIZATION_ID))
+                .thenReturn(vnfCust);
 
-        when(catalogDbClient.getVnfResourceCustomizationByModelUuid(
-                executeBuildingBlock.getRequestDetails().getModelInfo().getModelUuid()))
-                        .thenReturn(vnfResourceCustomization);
-        when(catalogDbClient.findVnfResourceCustomizationInList(executeBuildingBlock.getBuildingBlock().getKey(),
-                vnfResourceCustomization)).thenReturn(vnfCust);
-
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(1, actual);
-
+        assertEquals(1, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     @Test
     public void testProcessForVNFNotToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
-        vnfResourceCustomization = getVnfResourceCustomizationList(false);
-
-        when(catalogDbClient.getVnfResourceCustomizationByModelUuid(
-                executeBuildingBlock.getRequestDetails().getModelInfo().getModelUuid()))
-                        .thenReturn(vnfResourceCustomization);
-        when(catalogDbClient.findVnfResourceCustomizationInList(executeBuildingBlock.getBuildingBlock().getKey(),
-                vnfResourceCustomization)).thenReturn(vnfCust);
+        setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, VNF_MODEL_CUSTOMIZATION_ID, 0);
+        vnfCust.setSkipPostInstConf(false);
+        when(catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(VNF_MODEL_CUSTOMIZATION_ID))
+                .thenReturn(vnfCust);
 
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(0, actual);
-
+        assertEquals(0, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
 
     @Test
     public void testProcessForVFToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
-        vfModuleCustomization = getVfModuleCustomizationList(true);
-
-        when(catalogDbClient
-                .getVfModuleCustomizationByModelCuztomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
-                        .thenReturn(vfCust);
+        setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, VF_MODULE_CUSTOMIZATION_ID, 0);
+        when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(VF_MODULE_CUSTOMIZATION_ID))
+                .thenReturn(vfCust);
 
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(1, actual);
-
+        assertEquals(1, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     @Test
     public void testProcessForVFNotToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
-        vfModuleCustomization = getVfModuleCustomizationList(false);
-
+        setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, VF_MODULE_CUSTOMIZATION_ID, 0);
+        vfCust.setSkipPostInstConf(false);
         when(catalogDbClient
                 .getVfModuleCustomizationByModelCuztomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
                         .thenReturn(vfCust);
 
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(0, actual);
-
+        assertEquals(0, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     @Test
     public void testProcessForPNFToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
-        pnfResourceCustomization = getPnfResourceCustomization(true);
-
-        when(catalogDbClient
-                .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
-                        .thenReturn(pnfResourceCustomization);
+        setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, PNF_CUSTOMIZATION_ID, 0);
+        when(catalogDbClient.getPnfResourceCustomizationByModelCustomizationUUID(PNF_CUSTOMIZATION_ID))
+                .thenReturn(pnfResourceCustomization);
 
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(1, actual);
-
+        assertEquals(1, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     @Test
     public void testProcessForPNFNotToSkipCDSBB() {
-        // given
-        setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
-        pnfResourceCustomization = getPnfResourceCustomization(false);
-
-        when(catalogDbClient
-                .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
-                        .thenReturn(pnfResourceCustomization);
+        setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, PNF_CUSTOMIZATION_ID, 0);
+        pnfResourceCustomization.setSkipPostInstConf(false);
+        when(catalogDbClient.getPnfResourceCustomizationByModelCustomizationUUID(PNF_CUSTOMIZATION_ID))
+                .thenReturn(pnfResourceCustomization);
 
-        // when
         skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
 
-        // then
-        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-        assertEquals(0, actual);
-
+        assertEquals(0, (int) buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE));
     }
 
     /**
@@ -229,37 +197,13 @@ public class SkipCDSBuildingBlockListenerTest {
      * @param action
      * @param squence
      */
-    private void setBuildingBlockAndCurrentSequence(String scope, String action, int sequence) {
+    private void setBuildingBlockAndCurrentSequence(String scope, String action, String key, int sequence) {
         buildingBlock.setBpmnScope(scope);
         buildingBlock.setBpmnAction(action);
         buildingBlock.setBpmnFlowName("ControllerExecutionBB");
-        buildingBlock.setKey(MODELCUSTOMIZATIONUUID);
+        buildingBlock.setKey(key);
         executeBuildingBlock.setBuildingBlock(buildingBlock);
         buildingBlockExecution.setVariable(BBConstants.G_CURRENT_SEQUENCE, sequence);
-
-    }
-
-    private List<VnfResourceCustomization> getVnfResourceCustomizationList(boolean setSkippost) {
-        List<VnfResourceCustomization> vnfResourceCustomizations = new ArrayList<>();
-        vnfCust.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
-        vnfCust.setSkipPostInstConf(setSkippost);
-        vnfResourceCustomizations.add(vnfCust);
-        return vnfResourceCustomizations;
-    }
-
-    private List<VfModuleCustomization> getVfModuleCustomizationList(boolean setSkippost) {
-        List<VfModuleCustomization> vfModuleCustomizations = new ArrayList<>();
-        vfCust.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
-        vfCust.setSkipPostInstConf(setSkippost);
-        vfModuleCustomizations.add(vfCust);
-        return vfModuleCustomizations;
-    }
-
-    private PnfResourceCustomization getPnfResourceCustomization(boolean setSkippost) {
-        PnfResourceCustomization pnfResourceCustomization = new PnfResourceCustomization();
-        pnfResourceCustomization.setModelCustomizationUUID(MODELCUSTOMIZATIONUUID);
-        pnfResourceCustomization.setSkipPostInstConf(setSkippost);
-        return pnfResourceCustomization;
     }
 
 }