Update import service to import node filter 61/125661/6
authorKrupaNagabhushan <krupa.nagabhushan@est.tech>
Wed, 3 Nov 2021 20:43:16 +0000 (20:43 +0000)
committerMichael Morris <michael.morris@est.tech>
Mon, 6 Dec 2021 14:05:00 +0000 (14:05 +0000)
Issue-ID: SDC-3775
Signed-off-by: KrupaNagabhushan <krupa.nagabhushan@est.tech>
Change-Id: Ide75c9319ad321d796a1ead34cbf425ad8de5504

catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ComponentNodeFilterBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportParseLogic.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentNodeFilterBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceImportParseLogicTest.java

index 43187a5..729538c 100644 (file)
@@ -21,11 +21,17 @@ package org.openecomp.sdc.be.components.impl;
 import static org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode.BUSINESS_PROCESS_ERROR;
 
 import fj.data.Either;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.sdc.be.components.impl.exceptions.BusinessLogicException;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
+import org.openecomp.sdc.be.components.impl.utils.CINodeFilterUtils;
 import org.openecomp.sdc.be.components.impl.utils.NodeFilterConstraintAction;
 import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
@@ -38,6 +44,7 @@ import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.NodeFilterConstraintType;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.ComponentInstance;
+import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
 import org.openecomp.sdc.be.model.User;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation;
@@ -318,4 +325,83 @@ public class ComponentNodeFilterBusinessLogic extends BaseBusinessLogic {
             new ConstraintConvertor().convert(uiConstraint), true, componentTypeEnum, nodeFilterConstraintType,
             StringUtils.isEmpty(uiConstraint.getCapabilityName()) ? "" : uiConstraint.getCapabilityName());
     }
+
+    public StorageOperationStatus associateNodeFilterToComponentInstance(final String componentId,
+                                                                         final Map<String, UploadNodeFilterInfo> instNodeFilter) {
+        for (Entry<String, UploadNodeFilterInfo> filter : instNodeFilter.entrySet()) {
+            String componentInstanceId = filter.getKey();
+            CINodeFilterDataDefinition ciNodeFilterDataDefinition = new CINodeFilterUtils()
+                .getNodeFilterDataDefinition(filter.getValue(), componentInstanceId);
+            Either<CINodeFilterDataDefinition, StorageOperationStatus> nodeFilter = nodeFilterOperation.createNodeFilter(componentId,
+                componentInstanceId);
+            if (nodeFilter.isRight()) {
+                LOGGER.error(BUSINESS_PROCESS_ERROR, "Failed to Create Node filter on component instance with id {}",
+                    filter.getKey());
+                return nodeFilter.right().value();
+            }
+
+            //associate node filter properties to component instance
+            List<RequirementNodeFilterPropertyDataDefinition> properties = ciNodeFilterDataDefinition.getProperties()
+                .getListToscaDataDefinition();
+            if (!properties.isEmpty()) {
+                properties.forEach(property -> {
+                    RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition =
+                        getRequirementNodeFilterPropertyDataDefinition(property);
+                    Either<CINodeFilterDataDefinition, StorageOperationStatus> nodeFilterProperty = nodeFilterOperation
+                        .addNewProperty(componentId, componentInstanceId, nodeFilter.left().value(), requirementNodeFilterPropertyDataDefinition);
+                    if (nodeFilterProperty.isRight()) {
+                        throw new ComponentException(
+                            componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(nodeFilterProperty.right().value()),
+                                componentInstanceId));
+                    }
+                });
+            }
+
+            //associate node filter capabilities to component instance
+            List<RequirementNodeFilterCapabilityDataDefinition> capabilities = ciNodeFilterDataDefinition.getCapabilities()
+                .getListToscaDataDefinition();
+            if (!capabilities.isEmpty()) {
+                capabilities.forEach(capability -> {
+                    RequirementNodeFilterCapabilityDataDefinition requirementNodeFilterCapabilityDataDefinition =
+                        new RequirementNodeFilterCapabilityDataDefinition();
+                    requirementNodeFilterCapabilityDataDefinition.setName(capability.getName());
+                    requirementNodeFilterCapabilityDataDefinition.setProperties(getProperties(capability.getProperties()));
+                    Either<CINodeFilterDataDefinition, StorageOperationStatus> nodeFilterCapability = nodeFilterOperation
+                        .addNewCapabilities(componentId, componentInstanceId, nodeFilter.left().value(),
+                            requirementNodeFilterCapabilityDataDefinition);
+                    if (nodeFilterCapability.isRight()) {
+                        throw new ComponentException(
+                            componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(nodeFilterCapability.right().value()),
+                                componentInstanceId));
+                    }
+                });
+            }
+        }
+        return StorageOperationStatus.OK;
+    }
+
+    private List<String> getNodeFilterConstraints(String name, List<String> value) {
+        List<String> constraints = new ArrayList<>();
+        String values = value.get(0).split("\n")[0];
+        constraints.add(name + ": {" + values + "}");
+        return constraints;
+    }
+
+    private ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> getProperties(ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> properties) {
+        ListDataDefinition<RequirementNodeFilterPropertyDataDefinition> updatedProperties = new ListDataDefinition<>();
+        properties.getListToscaDataDefinition().forEach(property -> {
+            RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition = getRequirementNodeFilterPropertyDataDefinition(
+                property);
+            updatedProperties.add(requirementNodeFilterPropertyDataDefinition);
+        });
+        return updatedProperties;
+    }
+
+    private RequirementNodeFilterPropertyDataDefinition getRequirementNodeFilterPropertyDataDefinition(
+        RequirementNodeFilterPropertyDataDefinition property) {
+        RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition = new RequirementNodeFilterPropertyDataDefinition();
+        requirementNodeFilterPropertyDataDefinition.setName(property.getName());
+        requirementNodeFilterPropertyDataDefinition.setConstraints(getNodeFilterConstraints(property.getName(), property.getConstraints()));
+        return requirementNodeFilterPropertyDataDefinition;
+    }
 }
index d3e7085..2fa20ea 100644 (file)
@@ -68,6 +68,7 @@ import org.openecomp.sdc.be.config.ConfigurationManager;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.datamodel.utils.ArtifactUtils;
 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
+import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListRequirementDataDefinition;
@@ -171,6 +172,8 @@ public class ServiceImportBusinessLogic {
     private ResourceDataMergeBusinessLogic resourceDataMergeBusinessLogic;
     @Autowired
     private ServiceImportParseLogic serviceImportParseLogic;
+    @Autowired
+    private ComponentNodeFilterBusinessLogic componentNodeFilterBusinessLogic;
 
     @Autowired
     public ServiceImportBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, IGroupInstanceOperation groupInstanceOperation,
@@ -971,6 +974,7 @@ public class ServiceImportBusinessLogic {
         Map<String, Resource> originCompMap = new HashMap<>();
         List<RequirementCapabilityRelDef> relations = new ArrayList<>();
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
 
         log.debug("enter ServiceImportBusinessLogic createResourceInstancesRelations#createResourceInstancesRelations - Before get all datatypes. ");
         final ApplicationDataTypeCache applicationDataTypeCache = serviceBusinessLogic.applicationDataTypeCache;
@@ -979,7 +983,7 @@ public class ServiceImportBusinessLogic {
             uploadResInstancesMap.values().forEach(
                 i -> processComponentInstance(yamlName, finalResource, componentInstancesList,
                     componentsUtils.getAllDataTypes(applicationDataTypeCache, finalResource.getModel()), instProperties, instCapabilities,
-                    instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap, instInputs, i));
+                    instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap, instInputs, instNodeFilter, i));
         }
         serviceImportParseLogic.associateComponentInstancePropertiesToComponent(yamlName, resource, instProperties);
         serviceImportParseLogic.associateComponentInstanceInputsToComponent(yamlName, resource, instInputs);
@@ -1334,6 +1338,7 @@ public class ServiceImportBusinessLogic {
         Map<String, Resource> originCompMap = new HashMap<>();
         List<RequirementCapabilityRelDef> relations = new ArrayList<>();
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
         log.debug("enter ServiceImportBusinessLogic  createServiceInstancesRelations#createResourceInstancesRelations - Before get all datatypes. ");
         final ApplicationDataTypeCache applicationDataTypeCache = serviceBusinessLogic.applicationDataTypeCache;
         if (applicationDataTypeCache != null) {
@@ -1341,10 +1346,11 @@ public class ServiceImportBusinessLogic {
             uploadResInstancesMap.values().forEach(
                 i -> processComponentInstance(yamlName, finalResource, componentInstancesList,
                     componentsUtils.getAllDataTypes(applicationDataTypeCache, finalResource.getModel()), instProperties,
-                    instCapabilities, instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap, instInputs, i));
+                    instCapabilities, instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap, instInputs, instNodeFilter, i));
         }
         serviceImportParseLogic.associateComponentInstancePropertiesToComponent(yamlName, service, instProperties);
         serviceImportParseLogic.associateComponentInstanceInputsToComponent(yamlName, service, instInputs);
+        serviceImportParseLogic.associateCINodeFilterToComponent(yamlName, service, instNodeFilter);
         serviceImportParseLogic.associateDeploymentArtifactsToInstances(user, yamlName, service, instDeploymentArtifacts);
         serviceImportParseLogic.associateArtifactsToInstances(yamlName, service, instArtifacts);
         serviceImportParseLogic.associateOrAddCalculatedCapReq(yamlName, service, instCapabilities, instRequirements);
@@ -1379,6 +1385,7 @@ public class ServiceImportBusinessLogic {
                                             Map<String, Map<String, ArtifactDefinition>> instArtifacts,
                                             Map<String, List<AttributeDefinition>> instAttributes, Map<String, Resource> originCompMap,
                                             Map<String, List<ComponentInstanceInput>> instInputs,
+                                            Map<String, UploadNodeFilterInfo> instNodeFilter,
                                             UploadComponentInstanceInfo uploadComponentInstanceInfo) {
         log.debug("enter ServiceImportBusinessLogic processComponentInstance");
         Optional<ComponentInstance> currentCompInstanceOpt = componentInstancesList.stream()
@@ -1409,6 +1416,9 @@ public class ServiceImportBusinessLogic {
         if (originResource.getAttributes() != null && !originResource.getAttributes().isEmpty()) {
             instAttributes.put(resourceInstanceId, originResource.getAttributes());
         }
+        if (uploadComponentInstanceInfo.getUploadNodeFilterInfo() != null) {
+            instNodeFilter.put(resourceInstanceId, uploadComponentInstanceInfo.getUploadNodeFilterInfo());
+        }
         if (originResource.getResourceType() != ResourceTypeEnum.VF) {
             ResponseFormat addPropertiesValueToRiRes = addPropertyValuesToRi(uploadComponentInstanceInfo, component, originResource,
                 currentCompInstance, instProperties, allDataTypes);
index 196fc67..d9f5e1a 100644 (file)
@@ -23,6 +23,7 @@ import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
 
 import fj.data.Either;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -49,6 +50,7 @@ import org.openecomp.sdc.be.config.BeEcompErrorManager;
 import org.openecomp.sdc.be.config.ConfigurationManager;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
@@ -87,6 +89,7 @@ import org.openecomp.sdc.be.model.Service;
 import org.openecomp.sdc.be.model.UploadCapInfo;
 import org.openecomp.sdc.be.model.UploadComponentInstanceInfo;
 import org.openecomp.sdc.be.model.UploadInfo;
+import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
 import org.openecomp.sdc.be.model.UploadPropInfo;
 import org.openecomp.sdc.be.model.UploadReqInfo;
 import org.openecomp.sdc.be.model.UploadResourceInfo;
@@ -147,6 +150,8 @@ public class ServiceImportParseLogic {
     private IInterfaceLifecycleOperation interfaceTypeOperation = null;
     @Autowired
     private ICapabilityTypeOperation capabilityTypeOperation = null;
+    @Autowired
+    private ComponentNodeFilterBusinessLogic componentNodeFilterBusinessLogic;
 
     public Either<Map<String, EnumMap<ArtifactsBusinessLogic.ArtifactOperationEnum, List<ArtifactDefinition>>>, ResponseFormat> findNodeTypesArtifactsToHandle(
         Map<String, NodeTypeInfo> nodeTypesInfo, CsarInfo csarInfo, Service oldResource) {
@@ -2127,6 +2132,17 @@ public class ServiceImportParseLogic {
         }
     }
 
+    public void associateCINodeFilterToComponent(String yamlName, Service service, Map<String, UploadNodeFilterInfo> nodeFilter) {
+        log.trace("************* Going to associate all resource node filters {}", yamlName);
+        if (MapUtils.isNotEmpty(nodeFilter)) {
+            StorageOperationStatus status = componentNodeFilterBusinessLogic.associateNodeFilterToComponentInstance(service.getUniqueId(), nodeFilter);
+            if (status != StorageOperationStatus.OK) {
+                throw new ComponentException(
+                    componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(status), yamlName));
+            }
+        }
+    }
+
     public void associateComponentInstancePropertiesToComponent(String yamlName, Service service,
                                                                 Map<String, List<ComponentInstanceProperty>> instProperties) {
         Either<Map<String, List<ComponentInstanceProperty>>, StorageOperationStatus> addPropToInst = toscaOperationFacade
index a5ff6d9..cd70859 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.components.impl;
 
 import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -41,6 +42,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -50,6 +52,7 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.openecomp.sdc.be.components.impl.exceptions.BusinessLogicException;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
 import org.openecomp.sdc.be.components.impl.utils.NodeFilterConstraintAction;
 import org.openecomp.sdc.be.components.validation.NodeFilterValidator;
 import org.openecomp.sdc.be.components.validation.UserValidations;
@@ -71,6 +74,8 @@ import org.openecomp.sdc.be.model.ComponentInstance;
 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
 import org.openecomp.sdc.be.model.PropertyDefinition;
 import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
+import org.openecomp.sdc.be.model.UploadNodeFilterPropertyInfo;
 import org.openecomp.sdc.be.model.User;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeFilterOperation;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
@@ -539,6 +544,52 @@ public class ComponentNodeFilterBusinessLogicTest extends BaseBusinessLogicMock
         verify(toscaOperationFacade, times(1)).getToscaElement(componentId);
     }
 
+    @Test
+    public void testAssociateNodeFilterToComponentInstance() {
+        CINodeFilterDataDefinition ciNodeFilterDataDefinition = new CINodeFilterDataDefinition();
+
+        UploadNodeFilterInfo filter = new UploadNodeFilterInfo();
+        UploadNodeFilterPropertyInfo propertyDataDefinition = new UploadNodeFilterPropertyInfo();
+        propertyDataDefinition.setName("order");
+        propertyDataDefinition.setValues(Collections.singletonList("order: {equal: 2"));
+        List<UploadNodeFilterPropertyInfo> propertyList = new LinkedList<>();
+        propertyList.add(propertyDataDefinition);
+        filter.setProperties(Collections.singletonList(propertyDataDefinition));
+
+        Map<String, UploadNodeFilterInfo> nodeFilterMap = new HashMap<>();
+        nodeFilterMap.put(componentInstanceId, filter);
+
+        when(nodeFilterOperation.createNodeFilter(componentId, componentInstanceId)).thenReturn(Either.left(ciNodeFilterDataDefinition));
+        when(nodeFilterOperation.addNewProperty(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
+            any(RequirementNodeFilterPropertyDataDefinition.class))).thenReturn(Either.left(ciNodeFilterDataDefinition));
+
+        StorageOperationStatus status = componentNodeFilterBusinessLogic.associateNodeFilterToComponentInstance(componentId, nodeFilterMap);
+        assertEquals(StorageOperationStatus.OK, status);
+    }
+
+    @Test
+    public void testAssociateNodeFilterToComponentInstanceFail() {
+        CINodeFilterDataDefinition ciNodeFilterDataDefinition = new CINodeFilterDataDefinition();
+
+        UploadNodeFilterInfo filter = new UploadNodeFilterInfo();
+        UploadNodeFilterPropertyInfo propertyDataDefinition = new UploadNodeFilterPropertyInfo();
+        propertyDataDefinition.setName("order");
+        propertyDataDefinition.setValues(Collections.singletonList("order: {equal: 2"));
+        List<UploadNodeFilterPropertyInfo> propertyList = new LinkedList<>();
+        propertyList.add(propertyDataDefinition);
+        filter.setProperties(Collections.singletonList(propertyDataDefinition));
+
+        Map<String, UploadNodeFilterInfo> nodeFilterMap = new HashMap<>();
+        nodeFilterMap.put(componentInstanceId, filter);
+
+        when(nodeFilterOperation.createNodeFilter(componentId, componentInstanceId)).thenReturn(Either.left(ciNodeFilterDataDefinition));
+        when(nodeFilterOperation.addNewProperty(anyString(), anyString(), any(CINodeFilterDataDefinition.class),
+            any(RequirementNodeFilterPropertyDataDefinition.class))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
+
+        Assertions.assertThrows(ComponentException.class, () -> componentNodeFilterBusinessLogic.associateNodeFilterToComponentInstance(componentId,
+            nodeFilterMap));
+    }
+
     @Test
     public void validateUserTes() {
         final String USER_ID = "jh0003";
index ee52431..822fad5 100644 (file)
@@ -61,6 +61,7 @@ import org.openecomp.sdc.be.components.impl.utils.CreateServiceFromYamlParameter
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
@@ -93,6 +94,7 @@ import org.openecomp.sdc.be.model.RequirementDefinition;
 import org.openecomp.sdc.be.model.Resource;
 import org.openecomp.sdc.be.model.Service;
 import org.openecomp.sdc.be.model.UploadComponentInstanceInfo;
+import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
 import org.openecomp.sdc.be.model.UploadPropInfo;
 import org.openecomp.sdc.be.model.UploadReqInfo;
 import org.openecomp.sdc.be.model.UploadResourceInfo;
@@ -848,6 +850,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Map<String, Map<String, ArtifactDefinition>> instDeploymentArtifacts = new HashMap<>();
         Map<String, Map<String, ArtifactDefinition>> instArtifacts = new HashMap<>();
         Map<String, List<AttributeDefinition>> instAttributes = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
         Map<String, Resource> originCompMap = new HashMap<>();
         originCompMap.put("componentUid", originResource);
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
@@ -857,7 +860,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Assertions.assertNotNull(yamlName);
         sIB1.processComponentInstance(yamlName, resource, componentInstancesList, allDataTypes.left().value(), instProperties,
                 instCapabilties, instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes,
-                originCompMap, instInputs, uploadComponentInstanceInfo);
+                originCompMap, instInputs, instNodeFilter, uploadComponentInstanceInfo);
     }
 
     @Test
@@ -874,6 +877,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Map<String, Map<String, ArtifactDefinition>> instArtifacts = new HashMap<>();
         Map<String, List<AttributeDefinition>> instAttributes = new HashMap<>();
         Map<String, Resource> originCompMap = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
         originCompMap.put("componentUid", originResource);
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
         UploadComponentInstanceInfo uploadComponentInstanceInfo = new UploadComponentInstanceInfo();
@@ -882,7 +886,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Assertions.assertThrows(ComponentException.class, () -> sIB1.processComponentInstance(yamlName,
                 resource, componentInstancesList, null, instProperties, instCapabilties,
                 instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap,
-                instInputs, uploadComponentInstanceInfo));
+                instInputs, instNodeFilter, uploadComponentInstanceInfo));
     }
 
     @Test
@@ -1194,6 +1198,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Map<String, Map<String, ArtifactDefinition>> instDeploymentArtifacts = new HashMap<>();
         Map<String, Map<String, ArtifactDefinition>> instArtifacts = new HashMap<>();
         Map<String, List<AttributeDefinition>> instAttributes = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
         Map<String, Resource> originCompMap = new HashMap<>();
         originCompMap.put("componentUid", originResource);
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
@@ -1203,7 +1208,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
 
         sIB1.processComponentInstance(yamlName, service, componentInstancesList, allDataTypes.left().value(),
                 instProperties, instCapabilties, instRequirements, instDeploymentArtifacts,
-                instArtifacts, instAttributes, originCompMap, instInputs,
+                instArtifacts, instAttributes, originCompMap, instInputs, instNodeFilter,
                 uploadComponentInstanceInfo);
     }
 
@@ -1220,6 +1225,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Map<String, Map<String, ArtifactDefinition>> instDeploymentArtifacts = new HashMap<>();
         Map<String, Map<String, ArtifactDefinition>> instArtifacts = new HashMap<>();
         Map<String, List<AttributeDefinition>> instAttributes = new HashMap<>();
+        Map<String, UploadNodeFilterInfo> instNodeFilter = new HashMap<>();
         Map<String, Resource> originCompMap = new HashMap<>();
         originCompMap.put("componentUid", originResource);
         Map<String, List<ComponentInstanceInput>> instInputs = new HashMap<>();
@@ -1229,7 +1235,7 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Assertions.assertThrows(ComponentException.class, () -> sIB1.processComponentInstance(yamlName,
                 service, componentInstancesList, null, instProperties, instCapabilties,
                 instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, originCompMap,
-                instInputs, uploadComponentInstanceInfo));
+                instInputs, instNodeFilter, uploadComponentInstanceInfo));
     }
 
     @Test
index ccc7139..6d9467d 100644 (file)
@@ -24,6 +24,9 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyMap;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import fj.data.Either;
@@ -45,7 +48,6 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.openecomp.sdc.ElementOperationMock;
 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
@@ -55,10 +57,13 @@ import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
 import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListRequirementDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.RequirementNodeFilterPropertyDataDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
 import org.openecomp.sdc.be.impl.ComponentsUtils;
@@ -84,6 +89,8 @@ import org.openecomp.sdc.be.model.Resource;
 import org.openecomp.sdc.be.model.Service;
 import org.openecomp.sdc.be.model.UploadCapInfo;
 import org.openecomp.sdc.be.model.UploadComponentInstanceInfo;
+import org.openecomp.sdc.be.model.UploadNodeFilterInfo;
+import org.openecomp.sdc.be.model.UploadNodeFilterPropertyInfo;
 import org.openecomp.sdc.be.model.UploadPropInfo;
 import org.openecomp.sdc.be.model.UploadReqInfo;
 import org.openecomp.sdc.be.model.User;
@@ -110,14 +117,15 @@ class ServiceImportParseLogicTest extends ServiceImportBussinessLogicBaseTestSet
     private static final String RESOURCE_CATEGORY1 = "Network Layer 2-3";
     private static final String RESOURCE_SUBCATEGORY = "Router";
 
-    private final ComponentsUtils componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
-    private final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
-    private final ServiceBusinessLogic serviceBusinessLogic = Mockito.mock(ServiceBusinessLogic.class);
-    private final ICapabilityTypeOperation capabilityTypeOperation = Mockito.mock(ICapabilityTypeOperation.class);
-    private final IElementOperation elementDao = Mockito.mock(IElementOperation.class);
-    private final IInterfaceLifecycleOperation interfaceTypeOperation = Mockito.mock(IInterfaceLifecycleOperation.class);
-    private final InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
-    private final LifecycleBusinessLogic lifecycleBusinessLogic = Mockito.mock(LifecycleBusinessLogic.class);
+    private final ComponentsUtils componentsUtils = new ComponentsUtils(mock(AuditingManager.class));
+    private final ToscaOperationFacade toscaOperationFacade = mock(ToscaOperationFacade.class);
+    private final ServiceBusinessLogic serviceBusinessLogic = mock(ServiceBusinessLogic.class);
+    private final ICapabilityTypeOperation capabilityTypeOperation = mock(ICapabilityTypeOperation.class);
+    private final IElementOperation elementDao = mock(IElementOperation.class);
+    private final IInterfaceLifecycleOperation interfaceTypeOperation = mock(IInterfaceLifecycleOperation.class);
+    private final InputsBusinessLogic inputsBusinessLogic = mock(InputsBusinessLogic.class);
+    private final LifecycleBusinessLogic lifecycleBusinessLogic = mock(LifecycleBusinessLogic.class);
+    private final ComponentNodeFilterBusinessLogic componentNodeFilterBusinessLogic = mock(ComponentNodeFilterBusinessLogic.class);
 
     private ResponseFormatManager responseManager = null;
     private User user = null;
@@ -151,6 +159,7 @@ class ServiceImportParseLogicTest extends ServiceImportBussinessLogicBaseTestSet
         testSubject.setInterfaceTypeOperation(interfaceTypeOperation);
         testSubject.setInputsBusinessLogic(inputsBusinessLogic);
         testSubject.setLifecycleBusinessLogic(lifecycleBusinessLogic);
+        testSubject.setComponentNodeFilterBusinessLogic(componentNodeFilterBusinessLogic);
     }
 
     @Test
@@ -1153,6 +1162,34 @@ class ServiceImportParseLogicTest extends ServiceImportBussinessLogicBaseTestSet
         assertNotNull(inputsOnService);
     }
 
+    @Test
+    public void testAssociateCINodeFilterToComponent() {
+        String yamlName = "yamlName.yml";
+        Service service = createServiceObject(true);
+        Map<String, UploadNodeFilterInfo> nodeFilterMap = new HashMap<>();
+        nodeFilterMap.put("componentInstanceID", new UploadNodeFilterInfo());
+
+        when(componentNodeFilterBusinessLogic.associateNodeFilterToComponentInstance(service.getUniqueId(), nodeFilterMap))
+            .thenReturn(StorageOperationStatus.OK);
+
+        testSubject.associateCINodeFilterToComponent(yamlName, service, nodeFilterMap);
+        verify(componentNodeFilterBusinessLogic, times(1)).associateNodeFilterToComponentInstance(service.getUniqueId(),
+            nodeFilterMap);
+    }
+
+    @Test
+    public void testAssociateCINodeFilterToComponentFail() {
+        String yamlName = "yamlName.yml";
+        Service service = createServiceObject(true);
+        Map<String, UploadNodeFilterInfo> nodeFilterMap = new HashMap<>();
+        nodeFilterMap.put("componentInstanceID", new UploadNodeFilterInfo());
+
+        when(componentNodeFilterBusinessLogic.associateNodeFilterToComponentInstance(service.getUniqueId(), nodeFilterMap))
+            .thenReturn(StorageOperationStatus.NOT_FOUND);
+
+        Assertions.assertThrows(ComponentException.class, () -> testSubject.associateCINodeFilterToComponent(yamlName, service, nodeFilterMap));
+    }
+
     @Test
     void testCreateServiceTransaction() {
         Service service = createServiceObject(true);