Import VSP with non-standard policy types 82/123882/9
authordavsad <david.sadlier@est.tech>
Mon, 1 Nov 2021 16:35:05 +0000 (16:35 +0000)
committerAndr� Schmid <andre.schmid@est.tech>
Tue, 2 Nov 2021 11:18:22 +0000 (11:18 +0000)
Issue-ID: SDC-3715

Signed-off-by: davsad <david.sadlier@est.tech>
Change-Id: I48e9831b8a27341db2d33d85125cb9d42043e71b

12 files changed:
catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarInfo.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/DataTypeBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ModelBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyTypeBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/DataTypeBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ModelBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/PolicyTypeBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java
catalog-be/src/test/resources/csars/nonOnapCsar.csar
common-be/src/main/java/org/openecomp/sdc/be/utils/TypeUtils.java

index 0571f55..dc6f7c4 100644 (file)
@@ -88,6 +88,7 @@ public class CsarInfo {
     @Getter
     private Map<String, Resource> createdNodes;
     private Map<String, Object> datatypeDefinitions;
+    private Map<String, Object> policytypeDefinitions;
     private List<Map.Entry<String, byte[]>> globalSubstitutes;
 
 
@@ -195,16 +196,24 @@ public class CsarInfo {
             for (Map.Entry<String, byte[]> entry : globalSubstitutes) {
                 final String yamlFileContents = new String(entry.getValue());
                 final Map<String, Object> mappedToscaTemplate = new Yaml().load(yamlFileContents);
-                datatypeDefinitions.putAll(getDataTypesFromTemplate(mappedToscaTemplate));
+                datatypeDefinitions.putAll(getTypesFromTemplate(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.DATA_TYPES));
             }
-            datatypeDefinitions.putAll(getDataTypesFromTemplate(mappedToscaMainTemplate));
+            datatypeDefinitions.putAll(getTypesFromTemplate(mappedToscaMainTemplate, TypeUtils.ToscaTagNamesEnum.DATA_TYPES));
         }
         return datatypeDefinitions;
     }
+
+    public Map<String, Object> getPolicyTypes() {
+        if (policytypeDefinitions == null) {
+            policytypeDefinitions = new HashMap<>();
+            policytypeDefinitions.putAll(getTypesFromTemplate(mappedToscaMainTemplate, TypeUtils.ToscaTagNamesEnum.POLICY_TYPES));
+        }
+        return policytypeDefinitions;
+    }
     
     @SuppressWarnings("unchecked")    
-    private Map<String, Object> getDataTypesFromTemplate(final Map<String, Object> mappedToscaTemplate) {
-        final Either<Object, ResultStatusEnum> dataTypesEither = findToscaElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.DATA_TYPES,
+    private Map<String, Object> getTypesFromTemplate(final Map<String, Object> mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum type) {
+        final Either<Object, ResultStatusEnum> dataTypesEither = findToscaElement(mappedToscaTemplate, type,
                         ToscaElementTypeEnum.MAP);
         if (dataTypesEither != null && dataTypesEither.isLeft()) {
             return (Map<String, Object>) dataTypesEither.left().value();
index 4012228..892536f 100644 (file)
@@ -40,12 +40,15 @@ import org.springframework.util.CollectionUtils;
 @org.springframework.stereotype.Component("dataTypeBusinessLogic")
 public class DataTypeBusinessLogic extends BaseBusinessLogic {
 
+    final DataTypeImportManager dataTypeImportManager;
+
     @Autowired
     public DataTypeBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, IGroupInstanceOperation groupInstanceOperation,
                                  IGroupTypeOperation groupTypeOperation, InterfaceOperation interfaceOperation,
-                                 InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsOperations artifactToscaOperation) {
+                                 InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsOperations artifactToscaOperation, DataTypeImportManager dataTypeImportManager) {
         super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
             artifactToscaOperation);
+        this.dataTypeImportManager = dataTypeImportManager;
     }
 
     /**
@@ -139,4 +142,25 @@ public class DataTypeBusinessLogic extends BaseBusinessLogic {
         // return deleted data type if ok
         return Either.left(dataTypeResult.get());
     }
+
+    /**
+     * Creates given data types. The data types must be provided in a yaml format, where each entry is one data type object, for
+     * example:
+     * <pre>
+     * tosca.datatypes.TimeInterval:
+     *   derived_from: tosca.datatypes.Root
+     *   [...]
+     *
+     * tosca.datatypes.network.NetworkInfo:
+     *   derived_from: tosca.datatypes.Root
+     *   [...]
+     * </pre>
+     *
+     * @param dataTypesYaml the data types to create in yaml format. It can contain multiple data types entries.
+     * @param model Model name to associate with data type
+     * @param includeToModelDefaultImports Add data type entry to default imports for model
+     */
+    public void createDataTypeFromYaml(final String dataTypesYaml, final String model, final boolean includeToModelDefaultImports) {
+        dataTypeImportManager.createDataTypes(dataTypesYaml, model, includeToModelDefaultImports);
+    }
 }
index c80f993..b318f97 100644 (file)
@@ -44,35 +44,10 @@ public class ModelBusinessLogic {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ModelBusinessLogic.class);
     private final ModelOperation modelOperation;
-    private final DataTypeImportManager dataTypeImportManager;
 
     @Autowired
-    public ModelBusinessLogic(final ModelOperation modelOperation, final DataTypeImportManager dataTypeImportManager) {
+    public ModelBusinessLogic(final ModelOperation modelOperation) {
         this.modelOperation = modelOperation;
-        this.dataTypeImportManager = dataTypeImportManager;
-    }
-
-    /**
-     * Creates a model along with given data types. The data types must be provided in a yaml format, where each entry is one data type object, for
-     * example:
-     * <pre>
-     * tosca.datatypes.TimeInterval:
-     *   derived_from: tosca.datatypes.Root
-     *   [...]
-     *
-     * tosca.datatypes.network.NetworkInfo:
-     *   derived_from: tosca.datatypes.Root
-     *   [...]
-     * </pre>
-     *
-     * @param model         the model to create
-     * @param datatypesYaml the data types to create in yaml format. It can contain multiple data types entries.
-     * @return the created model.
-     */
-    public Model createModel(final Model model, final String datatypesYaml) {
-        createModel(model);
-        dataTypeImportManager.createDataTypes(datatypesYaml, model.getName(), true);
-        return model;
     }
 
     public Model createModel(final Model model) {
index c7e6a98..224b01a 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.openecomp.sdc.be.components.impl;
 
 import static java.util.Collections.emptySet;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.apache.commons.lang3.StringUtils;
 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
+import org.openecomp.sdc.be.components.impl.model.ToscaTypeImportData;
 import org.openecomp.sdc.be.components.validation.UserValidations;
 import org.openecomp.sdc.be.config.ConfigurationManager;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
@@ -39,15 +42,18 @@ import org.springframework.stereotype.Component;
 @Component("policyTypeBusinessLogic")
 public class PolicyTypeBusinessLogic {
 
-    private PolicyTypeOperation policyTypeOperation;
-    private JanusGraphDao janusGraphDao;
-    private UserValidations userValidations;
+    private final PolicyTypeOperation policyTypeOperation;
+    private final JanusGraphDao janusGraphDao;
+    private final UserValidations userValidations;
+    private final PolicyTypeImportManager policyTypeImportManager;
 
     @Autowired
-    public PolicyTypeBusinessLogic(PolicyTypeOperation policyTypeOperation, JanusGraphDao janusGraphDao, UserValidations userValidations) {
+    public PolicyTypeBusinessLogic(final PolicyTypeOperation policyTypeOperation, final JanusGraphDao janusGraphDao,
+            final UserValidations userValidations, final PolicyTypeImportManager policyTypeImportManager) {
         this.policyTypeOperation = policyTypeOperation;
         this.janusGraphDao = janusGraphDao;
         this.userValidations = userValidations;
+        this.policyTypeImportManager = policyTypeImportManager;
     }
 
     public List<PolicyTypeDefinition> getAllPolicyTypes(String userId, String internalComponentType, String modelName) {
@@ -57,19 +63,31 @@ public class PolicyTypeBusinessLogic {
     }
 
     public PolicyTypeDefinition getLatestPolicyTypeByType(String policyTypeName, String modelName) {
-        return policyTypeOperation.getLatestPolicyTypeByType(policyTypeName, modelName).left().on(e -> failOnPolicyType(e, policyTypeName));
+        return policyTypeOperation.getLatestPolicyTypeByType(policyTypeName, modelName).left()
+                .on(e -> failOnPolicyType(e, policyTypeName));
     }
 
     public Set<String> getExcludedPolicyTypes(String internalComponentType) {
         if (StringUtils.isEmpty(internalComponentType)) {
             return emptySet();
         }
-        Map<String, Set<String>> excludedPolicyTypesMapping = ConfigurationManager.getConfigurationManager().getConfiguration()
-            .getExcludedPolicyTypesMapping();
+        Map<String, Set<String>> excludedPolicyTypesMapping =
+                ConfigurationManager.getConfigurationManager().getConfiguration().getExcludedPolicyTypesMapping();
         Set<String> excludedTypes = excludedPolicyTypesMapping.get(internalComponentType);
         return excludedTypes == null ? emptySet() : excludedTypes;
     }
 
+    /**
+     * Create policy types based on yaml string.
+     * @param policyTypesYaml the policy types to create in yaml format. It can contain multiple entries.
+     * @param model Model name to associate with policy type
+     * @param includeToModelDefaultImports Add policy type entry to default imports for model
+     */
+    public void createPolicyTypeFromYaml(final String policyTypesYaml, final String model, final boolean includeToModelDefaultImports) {
+        policyTypeImportManager
+            .createPolicyTypes(new ToscaTypeImportData(policyTypesYaml, Collections.emptyMap()), model, includeToModelDefaultImports);
+    }
+
     private List<PolicyTypeDefinition> getPolicyTypes(Set<String> excludedTypes, String modelName) {
         return policyTypeOperation.getAllPolicyTypes(excludedTypes, modelName);
     }
index 9ba20f4..f7beca6 100644 (file)
@@ -29,6 +29,7 @@ import static org.openecomp.sdc.be.components.impl.ImportUtils.findFirstToscaStr
 import static org.openecomp.sdc.be.components.impl.ImportUtils.getPropertyJsonStringValue;
 import static org.openecomp.sdc.be.tosca.CsarUtils.VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN;
 import static org.openecomp.sdc.common.api.Constants.DEFAULT_GROUP_VF_MODULE;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -46,6 +47,7 @@ import java.util.Set;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
@@ -124,6 +126,7 @@ import org.openecomp.sdc.be.model.NodeTypeInfo;
 import org.openecomp.sdc.be.model.Operation;
 import org.openecomp.sdc.be.model.ParsedToscaYamlInfo;
 import org.openecomp.sdc.be.model.PolicyDefinition;
+import org.openecomp.sdc.be.model.PolicyTypeDefinition;
 import org.openecomp.sdc.be.model.PropertyDefinition;
 import org.openecomp.sdc.be.model.RelationshipImpl;
 import org.openecomp.sdc.be.model.RelationshipInfo;
@@ -182,7 +185,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
+
 import com.google.common.annotations.VisibleForTesting;
+
 import fj.data.Either;
 
 @org.springframework.stereotype.Component("resourceBusinessLogic")
@@ -217,6 +222,9 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
     private final ModelBusinessLogic modelBusinessLogic;
     private IInterfaceLifecycleOperation interfaceTypeOperation;
     private LifecycleBusinessLogic lifecycleBusinessLogic;
+    private final DataTypeBusinessLogic dataTypeBusinessLogic;
+    private final PolicyTypeBusinessLogic policyTypeBusinessLogic;
+
     @Autowired
     private ICapabilityTypeOperation capabilityTypeOperation;
     @Autowired
@@ -247,7 +255,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
                                  final ComponentValidator componentValidator, final ComponentIconValidator componentIconValidator,
                                  final ComponentProjectCodeValidator componentProjectCodeValidator,
                                  final ComponentDescriptionValidator componentDescriptionValidator, final PolicyBusinessLogic policyBusinessLogic,
-                                 final ModelBusinessLogic modelBusinessLogic) {
+                                 final ModelBusinessLogic modelBusinessLogic,
+                                 final DataTypeBusinessLogic dataTypeBusinessLogic, final PolicyTypeBusinessLogic policyTypeBusinessLogic) {
         super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation,
             interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation, componentContactIdValidator, componentNameValidator,
             componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator);
@@ -264,6 +273,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
         this.propertyBusinessLogic = propertyBusinessLogic;
         this.policyBusinessLogic = policyBusinessLogic;
         this.modelBusinessLogic = modelBusinessLogic;
+        this.dataTypeBusinessLogic = dataTypeBusinessLogic;
+        this.policyTypeBusinessLogic = policyTypeBusinessLogic;
     }
 
     static <T> Either<T, RuntimeException> rollbackWithEither(final JanusGraphDao janusGraphDao, final ActionStatus actionStatus,
@@ -1031,19 +1042,18 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
                 user.getUserId());
         CsarInfo csarInfo = csarBusinessLogic.getCsarInfo(resource, null, user, csarUIPayload, csarUUID);
         Map<String, NodeTypeInfo> nodeTypesInfo = csarInfo.extractTypesInfo();
-        if (StringUtils.isNotEmpty(resource.getModel())) {
-            final Map<String, Object> dataTypesToCreate = new HashMap<>();
-            for (final String dataType: csarInfo.getDataTypes().keySet()) {
-                final Either<DataTypeDefinition, StorageOperationStatus> result = propertyOperation.getDataTypeByName(dataType, resource.getModel());
-                if (result.isRight() && result.right().value().equals(StorageOperationStatus.NOT_FOUND)) {
-                    dataTypesToCreate.put(dataType, csarInfo.getDataTypes().get(dataType));
-                }
+        final String model = resource.getModel();
+        if (StringUtils.isNotEmpty(model)) {
+            final Map<String, Object> dataTypesToCreate = getDatatypesToCreate(model, csarInfo.getDataTypes());
+            final Map<String, Object> policyTypesToCreate = getPolicytypesToCreate(model, csarInfo.getPolicyTypes());
+            if (MapUtils.isNotEmpty(dataTypesToCreate) || MapUtils.isNotEmpty(policyTypesToCreate)) {
+                createModel(resource, csarInfo.getVfResourceName());
             }
             if (MapUtils.isNotEmpty(dataTypesToCreate)) {
-                final String nameForGeneratedModel = resource.getModel() + "_" + csarInfo.getVfResourceName() + resource.getCsarVersion();
-                final Model model = new Model(nameForGeneratedModel, resource.getModel(), ModelTypeEnum.NORMATIVE_EXTENSION);
-                modelBusinessLogic.createModel(model, new Yaml().dump(dataTypesToCreate));
-                resource.setModel(nameForGeneratedModel);
+                dataTypeBusinessLogic.createDataTypeFromYaml(new Yaml().dump(dataTypesToCreate), model, true);
+            }
+            if (MapUtils.isNotEmpty(policyTypesToCreate)) {
+                policyTypeBusinessLogic.createPolicyTypeFromYaml(new Yaml().dump(policyTypesToCreate), model, true);
             }
         }
         
@@ -1148,6 +1158,37 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
         return ImportUtils.findFirstToscaMapElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.NODE_TYPES).left().orValue(HashMap::new);
     }
 
+    private void createModel(final Resource resource, final String vfResourcename) {
+        final String nameForGeneratedModel = resource.getModel() + "_" + vfResourcename + resource.getCsarVersion();
+        Model model = new Model(nameForGeneratedModel, resource.getModel(), ModelTypeEnum.NORMATIVE_EXTENSION);
+        modelBusinessLogic.createModel(model);
+        resource.setModel(nameForGeneratedModel);
+    }
+
+    private Map<String, Object> getDatatypesToCreate(final String model, final Map<String, Object> dataTypes) {
+        final Map<String, Object> dataTypesToCreate = new HashMap<>();
+        for (final String dataType : dataTypes.keySet()) {
+            final Either<DataTypeDefinition, StorageOperationStatus> result =
+                    propertyOperation.getDataTypeByName(dataType, model);
+            if (result.isRight() && result.right().value().equals(StorageOperationStatus.NOT_FOUND)) {
+                dataTypesToCreate.put(dataType, dataTypes.get(dataType));
+            }
+        }
+        return dataTypesToCreate;
+    }
+
+    private Map<String, Object> getPolicytypesToCreate(final String model, final Map<String, Object> policyTypes) {
+        final Map<String, Object> policyTypesToCreate = new HashMap<>();
+        for (final String policyType : policyTypes.keySet()) {
+            final Either<PolicyTypeDefinition, StorageOperationStatus> result =
+                    policyTypeOperation.getLatestPolicyTypeByType(policyType, model);
+            if (result.isRight() && result.right().value().equals(StorageOperationStatus.NOT_FOUND)) {
+                policyTypesToCreate.put(policyType, policyTypes.get(policyType));
+            }
+        }
+        return policyTypesToCreate;
+    }
+
     private void createNodeTypes(String yamlName, Resource resource, boolean needLock,
                                  Map<String, EnumMap<ArtifactOperationEnum, List<ArtifactDefinition>>> nodeTypesArtifactsToHandle,
                                  List<ArtifactDefinition> nodeTypesNewCreatedArtifacts, Map<String, NodeTypeInfo> nodeTypesInfo, CsarInfo csarInfo,
index cc05eaf..c870d3b 100644 (file)
 
 package org.openecomp.sdc.be.components.impl;
 
-import fj.data.Either;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.InjectMocks;
@@ -40,16 +52,7 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
 import org.openecomp.sdc.be.user.UserBusinessLogic;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.when;
+import fj.data.Either;
 
 public class DataTypeBusinessLogicTest {
 
@@ -74,6 +77,9 @@ public class DataTypeBusinessLogicTest {
     @Mock
     private ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
 
+    @Mock
+    private DataTypeImportManager dataTypeImportManager;
+
     @InjectMocks
     private DataTypeBusinessLogic testInstance;
 
@@ -106,6 +112,12 @@ public class DataTypeBusinessLogicTest {
         when(userAdminMock.getUser(USER_ID, false)).thenReturn(new User());
     }
 
+    @Test
+    public void createDataTypeByYaml() {
+        testInstance.createDataTypeFromYaml("test", "test", true);
+        verify(dataTypeImportManager, Mockito.times(1)).createDataTypes("test", "test", true);
+    }
+
     @Test
     public void test_getPrivateDataTypes() throws Exception {
         setMockitoWhenGetToscaElementCalled();
index cbb0de8..a1719d7 100644 (file)
@@ -81,17 +81,6 @@ class ModelBusinessLogicTest {
         assertThat(result.getName()).isEqualTo(model.getName());
     }
 
-    @Test
-    void createModelWithDataTypesTest() {
-        final String dataTypes = "dummyString";
-        when(modelOperation.createModel(model, false)).thenReturn(model);
-        final Model result = modelBusinessLogic.createModel(model, dataTypes);
-        assertThat(result).isNotNull();
-        assertThat(result.getName()).isEqualTo(model.getName());
-
-        verify(dataTypeImportManager).createDataTypes(dataTypes, model.getName(), true);
-    }
-
     @Test
     void createModelFailTest() {
         when(modelOperation.createModel(model, false))
index 88a16f6..48716c8 100644 (file)
@@ -23,23 +23,27 @@ package org.openecomp.sdc.be.components.impl;
 
 import static com.google.common.collect.Sets.newHashSet;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.google.common.collect.ImmutableMap;
-import fj.data.Either;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.openecomp.sdc.be.DummyConfigurationManager;
 import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
+import org.openecomp.sdc.be.components.impl.model.ToscaTypeImportData;
 import org.openecomp.sdc.be.components.utils.PolicyTypeBuilder;
 import org.openecomp.sdc.be.components.validation.UserValidations;
 import org.openecomp.sdc.be.config.ConfigurationManager;
@@ -52,6 +56,10 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.model.operations.impl.PolicyTypeOperation;
 import org.openecomp.sdc.exception.ResponseFormat;
 
+import com.google.common.collect.ImmutableMap;
+
+import fj.data.Either;
+
 @RunWith(MockitoJUnitRunner.class)
 public class PolicyTypeBusinessLogicTest {
 
@@ -66,6 +74,8 @@ public class PolicyTypeBusinessLogicTest {
     @Mock
     private PolicyTypeOperation policyTypeOperation;
     @Mock
+    private PolicyTypeImportManager policyTypeImportManager;
+    @Mock
     private ComponentsUtils componentsUtils;
     @Mock
     private UserValidations userValidations;
@@ -81,6 +91,12 @@ public class PolicyTypeBusinessLogicTest {
         new DummyConfigurationManager();
     }
 
+    @Test
+    public void createPolicyByYaml() {
+        testInstance.createPolicyTypeFromYaml("test", "test", true);
+        verify(policyTypeImportManager, Mockito.times(1)).createPolicyTypes(any(ToscaTypeImportData.class), eq("test"), eq(true));
+    }
+
     @Test
     public void getAllPolicyTypes_userNotExist() {
         ResponseFormat userNotExistResponse = new ResponseFormat();
index 2f4239f..90c1864 100644 (file)
@@ -34,7 +34,6 @@ import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
-import fj.data.Either;
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Method;
@@ -50,7 +49,9 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+
 import javax.servlet.ServletContext;
+
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.junit.Assert;
 import org.junit.Before;
@@ -85,8 +86,8 @@ import org.openecomp.sdc.be.components.validation.component.ComponentValidator;
 import org.openecomp.sdc.be.config.ConfigurationManager;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
-import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.datamodel.api.HighestFilterEnum;
 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
@@ -131,6 +132,7 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.model.operations.impl.CsarOperation;
 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
+import org.openecomp.sdc.be.model.operations.impl.PolicyTypeOperation;
 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
@@ -151,6 +153,8 @@ import org.openecomp.sdc.common.zip.exception.ZipException;
 import org.openecomp.sdc.exception.ResponseFormat;
 import org.springframework.web.context.WebApplicationContext;
 
+import fj.data.Either;
+
 public class ResourceBusinessLogicTest {
 
        private final ConfigurationManager configurationManager = new ConfigurationManager(new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be"));
@@ -208,7 +212,10 @@ public class ResourceBusinessLogicTest {
        private final MergeInstanceUtils mergeInstanceUtils = Mockito.mock(MergeInstanceUtils.class);
        private final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
        private final ToscaExportHandler toscaExportHandler = Mockito.mock(ToscaExportHandler.class);
+       private final PolicyTypeOperation policyTypeOperation = Mockito.mock(PolicyTypeOperation.class);
        private final PolicyBusinessLogic policyBusinessLogic = Mockito.mock(PolicyBusinessLogic.class);
+       private final DataTypeBusinessLogic dataTypeBusinessLogic = Mockito.mock(DataTypeBusinessLogic.class);
+       private final PolicyTypeBusinessLogic policyTypeBusinessLogic = Mockito.mock(PolicyTypeBusinessLogic.class);
 
        private YamlTemplateParsingHandler yamlTemplateParsingHandler = Mockito.mock(YamlTemplateParsingHandler.class);
        @InjectMocks
@@ -306,7 +313,8 @@ public class ResourceBusinessLogicTest {
                Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<>();
                when(applicationDataTypeCache.getAll(null)).thenReturn(Either.left(emptyDataTypes));
                when(mockJanusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
-
+               when(policyTypeOperation.getLatestPolicyTypeByType(any(String.class), any(String.class)))
+                       .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
                // BL object
                artifactManager.setNodeTemplateOperation(nodeTemplateOperation);
                bl = new ResourceBusinessLogic(mockElementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic,
@@ -315,7 +323,7 @@ public class ResourceBusinessLogicTest {
                                csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils, uiComponentDataConverter, csarBusinessLogic,
                                artifactToscaOperation, propertyBusinessLogic, componentContactIdValidator, componentNameValidator,
                                componentTagsValidator, componentValidator,     componentIconValidator, componentProjectCodeValidator,
-                               componentDescriptionValidator, policyBusinessLogic, modelBusinessLogic);
+                               componentDescriptionValidator, policyBusinessLogic, modelBusinessLogic, dataTypeBusinessLogic, policyTypeBusinessLogic);
                bl.setElementDao(mockElementDao);
                bl.setUserAdmin(mockUserAdmin);
                bl.setCapabilityTypeOperation(capabilityTypeOperation);
@@ -334,6 +342,7 @@ public class ResourceBusinessLogicTest {
                bl.setToscaOperationFacade(toscaOperationFacade);
                bl.setUserValidations(userValidations);
                bl.setInterfaceTypeOperation(interfaceTypeOperation);
+               bl.setPolicyTypeOperation(policyTypeOperation);
 
                csarBusinessLogic.setCsarOperation(csarOperation);
                Resource resourceCsar = createResourceObjectCsar(true);
index 46040ca..b1e17b8 100644 (file)
@@ -29,10 +29,12 @@ import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic;
 import org.openecomp.sdc.be.components.csar.CsarBusinessLogic;
 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
 import org.openecomp.sdc.be.components.impl.CompositionBusinessLogic;
+import org.openecomp.sdc.be.components.impl.DataTypeBusinessLogic;
 import org.openecomp.sdc.be.components.impl.InputsBusinessLogic;
 import org.openecomp.sdc.be.components.impl.ModelBusinessLogic;
 import org.openecomp.sdc.be.components.impl.OutputsBusinessLogic;
 import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
+import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
 import org.openecomp.sdc.be.components.impl.ResourceImportManager;
@@ -70,6 +72,8 @@ public class CheckoutTest extends LifecycleTestBase {
     private final ComponentNameValidator componentNameValidator = new ComponentNameValidator(componentsUtils, toscaOperationFacade);
     private final PolicyBusinessLogic policyBusinessLogic = Mockito.mock(PolicyBusinessLogic.class);
     private final ModelBusinessLogic modelBusinessLogic = Mockito.mock(ModelBusinessLogic.class);
+    private final DataTypeBusinessLogic dataTypeBusinessLogic = Mockito.mock(DataTypeBusinessLogic.class);
+    private final PolicyTypeBusinessLogic policyTypeBusinessLogic = Mockito.mock(PolicyTypeBusinessLogic.class);
     @InjectMocks
     ResourceBusinessLogic bl = new ResourceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
         groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic,
@@ -77,7 +81,8 @@ public class CheckoutTest extends LifecycleTestBase {
         resourceDataMergeBusinessLogic, csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils,
         uiComponentDataConverter, csarBusinessLogic, artifactToscaOperation, propertyBusinessLogic,
         componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator,
-            componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator ,policyBusinessLogic, modelBusinessLogic);
+        componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator ,policyBusinessLogic, modelBusinessLogic,
+        dataTypeBusinessLogic, policyTypeBusinessLogic);
 
     @Before
     public void setup() {
index 9e09705..b5902d5 100644 (file)
Binary files a/catalog-be/src/test/resources/csars/nonOnapCsar.csar and b/catalog-be/src/test/resources/csars/nonOnapCsar.csar differ
index be6a8c2..e2266bf 100644 (file)
@@ -73,7 +73,7 @@ public class TypeUtils {
         //functions
         GET_INPUT("get_input"),
         // Definitions
-        DATA_TYPES("data_types"), NODE_TYPES("node_types"), IMPORTS("imports"),
+        DATA_TYPES("data_types"), NODE_TYPES("node_types"), POLICY_TYPES("policy_types"),  IMPORTS("imports"),
         //Operations
         IMPLEMENTATION("implementation"),