From 63966da5c7a9bd6ba3fa9e97807447d7759e8ace Mon Sep 17 00:00:00 2001 From: JvD_Ericsson Date: Wed, 13 Jul 2022 11:49:36 +0100 Subject: [PATCH] Fix changed instance attribute value not visible in generated tosca also fixes attributes not being exported/imported with a schema Issue-ID: SDC-4093 Signed-off-by: JvD_Ericsson Change-Id: I693ae5c4c7717764445b20279bf61a7d3b47b434 --- .../csar/YamlTemplateParsingHandler.java | 33 ++++++++++++++++++ .../be/components/impl/ResourceImportManager.java | 6 ++++ .../impl/ServiceImportBusinessLogic.java | 20 +++++++++++ .../openecomp/sdc/be/tosca/AttributeConverter.java | 12 +++++-- .../openecomp/sdc/be/tosca/ToscaExportHandler.java | 5 +-- .../csar/YamlTemplateParsingHandlerTest.java | 37 +++++++++++++++++++++ .../sdc/be/tosca/AttributeConverterTest.java | 32 +++++++++++++----- .../src/test/resources/csars/with_groups.csar | Bin 66187 -> 66267 bytes .../sdc/be/model/UploadAttributeInfo.java | 31 +++++++++++++++++ .../sdc/be/model/UploadComponentInstanceInfo.java | 1 + .../ci/tests/execute/sanity/ImportVfcUiTest.java | 5 +-- 11 files changed, 163 insertions(+), 19 deletions(-) create mode 100644 catalog-model/src/main/java/org/openecomp/sdc/be/model/UploadAttributeInfo.java diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java index ed753fdd18..940363bce4 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java @@ -19,6 +19,7 @@ * Modifications copyright (c) 2019 Nokia * ================================================================================ */ + package org.openecomp.sdc.be.components.csar; import static java.util.stream.Collectors.toList; @@ -29,6 +30,7 @@ import static org.openecomp.sdc.be.components.impl.ImportUtils.findFirstToscaMap import static org.openecomp.sdc.be.components.impl.ImportUtils.findToscaElement; import static org.openecomp.sdc.be.components.impl.ImportUtils.loadYamlAsStrictMap; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.ARTIFACTS; +import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.ATTRIBUTES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.CAPABILITIES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.CAPABILITY; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.DEFAULT_VALUE; @@ -100,6 +102,7 @@ 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.UploadArtifactInfo; +import org.openecomp.sdc.be.model.UploadAttributeInfo; import org.openecomp.sdc.be.model.UploadCapInfo; import org.openecomp.sdc.be.model.UploadComponentInstanceInfo; import org.openecomp.sdc.be.model.UploadPropInfo; @@ -645,6 +648,7 @@ public class YamlTemplateParsingHandler { setCapabilities(nodeTemplateInfo, nodeTemplateJsonMap); setArtifacts(nodeTemplateInfo, nodeTemplateJsonMap); updateProperties(nodeTemplateInfo, nodeTemplateJsonMap); + updateAttributes(nodeTemplateInfo, nodeTemplateJsonMap); setDirectives(nodeTemplateInfo, nodeTemplateJsonMap); setNodeFilter(nodeTemplateInfo, nodeTemplateJsonMap); setSubstitutions(substitutionMappings, nodeTemplateInfo); @@ -682,6 +686,15 @@ public class YamlTemplateParsingHandler { } } + private void updateAttributes(UploadComponentInstanceInfo nodeTemplateInfo, Map nodeTemplateJsonMap) { + if (nodeTemplateJsonMap.containsKey(ATTRIBUTES.getElementName())) { + Map attributes = buildAttributeModuleFromYaml(nodeTemplateJsonMap); + if (!attributes.isEmpty()) { + nodeTemplateInfo.setAttributes(attributes); + } + } + } + private void setCapabilities(UploadComponentInstanceInfo nodeTemplateInfo, Map nodeTemplateJsonMap) { if (nodeTemplateJsonMap.containsKey(CAPABILITIES.getElementName())) { Map> eitherCapRes = createCapModuleFromYaml(nodeTemplateJsonMap); @@ -915,6 +928,26 @@ public class YamlTemplateParsingHandler { return regTemplateInfo; } + private Map buildAttributeModuleFromYaml(Map nodeTemplateJsonMap) { + Map moduleAttribute = new HashMap<>(); + Either, ResultStatusEnum> toscaAttributes = findFirstToscaMapElement(nodeTemplateJsonMap, ATTRIBUTES); + if (toscaAttributes.isLeft()) { + Map jsonAttributes = toscaAttributes.left().value(); + for (Map.Entry jsonAttributeObj : jsonAttributes.entrySet()) { + UploadAttributeInfo attributeDef = buildAttribute(jsonAttributeObj.getKey(), jsonAttributeObj.getValue()); + moduleAttribute.put(attributeDef.getName(), attributeDef); + } + } + return moduleAttribute; + } + + private UploadAttributeInfo buildAttribute(String attributeName, Object attributeValue) { + UploadAttributeInfo attributeDef = new UploadAttributeInfo(); + attributeDef.setValue(attributeValue); + attributeDef.setName(attributeName); + return attributeDef; + } + private Map> buildPropModuleFromYaml(Map nodeTemplateJsonMap) { Map> moduleProp = new HashMap<>(); Either, ResultStatusEnum> toscaProperties = findFirstToscaMapElement(nodeTemplateJsonMap, PROPERTIES); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java index aa420673c7..d02a84f491 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceImportManager.java @@ -66,6 +66,7 @@ import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum; import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum; import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; @@ -630,6 +631,11 @@ public class ResourceImportManager { } final AttributeDefinition attributeDefinition = entry.getValue(); attributeDefinition.setName(name); + if (attributeDefinition.getEntry_schema() != null && attributeDefinition.getEntry_schema().getType() != null) { + attributeDefinition.setSchema(new SchemaDefinition()); + attributeDefinition.getSchema().setProperty(new PropertyDataDefinition()); + attributeDefinition.getSchema().getProperty().setType(entry.getValue().getEntry_schema().getType()); + } attributeDefinitionList.add(attributeDefinition); } resource.setAttributes(attributeDefinitionList); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java index 3c21ae16a7..225a6c4408 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java @@ -23,6 +23,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 com.google.gson.Gson; import fj.data.Either; import java.util.ArrayList; import java.util.Collection; @@ -107,6 +108,7 @@ import org.openecomp.sdc.be.model.RequirementCapabilityRelDef; 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.UploadAttributeInfo; import org.openecomp.sdc.be.model.UploadComponentInstanceInfo; import org.openecomp.sdc.be.model.UploadNodeFilterInfo; import org.openecomp.sdc.be.model.UploadPropInfo; @@ -1447,6 +1449,7 @@ public class ServiceImportBusinessLogic { } if (originResource.getAttributes() != null && !originResource.getAttributes().isEmpty()) { instAttributes.put(resourceInstanceId, originResource.getAttributes()); + addAttributeValueToResourceInstance(instAttributes, uploadComponentInstanceInfo.getAttributes()); } if (uploadComponentInstanceInfo.getUploadNodeFilterInfo() != null) { instNodeFilter.put(resourceInstanceId, uploadComponentInstanceInfo.getUploadNodeFilterInfo()); @@ -1514,6 +1517,23 @@ public class ServiceImportBusinessLogic { } } + private void addAttributeValueToResourceInstance(Map> instAttributes, + Map attributeMap) { + if (attributeMap == null) { + return; + } + attributeMap.forEach((attributeName, attributeValue) -> instAttributes.values() + .forEach(value -> value.stream().filter(attr -> attr.getName().equals(attributeName)).forEach(attr -> { + if (attributeValue.getValue() instanceof Collection || attributeValue.getValue() instanceof Map) { + Gson gson = new Gson(); + String json = gson.toJson(attributeValue.getValue()); + attr.setValue(json); + } else { + attr.setValue(String.valueOf(attributeValue.getValue())); + } + }))); + } + protected ResponseFormat addPropertyValuesToRi(UploadComponentInstanceInfo uploadComponentInstanceInfo, Component component, Resource originResource, ComponentInstance currentCompInstance, Map> instProperties, diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/AttributeConverter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/AttributeConverter.java index 561480dd64..40d531d788 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/AttributeConverter.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/AttributeConverter.java @@ -27,6 +27,7 @@ import java.io.StringReader; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.onap.sdc.tosca.datatypes.model.EntrySchema; +import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.model.AttributeDefinition; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; @@ -73,7 +74,14 @@ public class AttributeConverter { final ToscaAttribute toscaAttribute = new ToscaAttribute(); LOGGER.trace("Converting attribute '{}' from type '{}' with default value '{}'", attributeDefinition.getName(), attributeDefinition.getType(), attributeDefinition.getDefaultValue()); - toscaAttribute.setEntrySchema(convert(attributeDefinition.getEntry_schema())); + SchemaDefinition schema = attributeDefinition.getSchema(); + if (schema != null && schema.getProperty() != null && schema.getProperty().getType() != null + && StringUtils.isNotEmpty(schema.getProperty().getType())) { + final ToscaSchemaDefinition toscaSchemaDefinition = new ToscaSchemaDefinition(); + toscaSchemaDefinition.setType(schema.getProperty().getType()); + toscaSchemaDefinition.setDescription(schema.getProperty().getDescription()); + toscaAttribute.setEntrySchema(toscaSchemaDefinition); + } toscaAttribute.setType(attributeDefinition.getType()); toscaAttribute.setDescription(attributeDefinition.getDescription()); toscaAttribute.setStatus(attributeDefinition.getStatus()); @@ -173,7 +181,7 @@ public class AttributeConverter { public void convertAndAddValue(final Map attribs, final AttributeDefinition attribute) { - final Object convertedValue = convertToToscaObject(attribute, attribute.getDefaultValue(), false); + final Object convertedValue = convertToToscaObject(attribute, attribute.getValue(), false); if (!ToscaValueBaseConverter.isEmptyObjectValue(convertedValue)) { attribs.put(attribute.getName(), convertedValue); } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java index 069e4f366e..a8aa6b33a9 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java @@ -1128,10 +1128,7 @@ public class ToscaExportHandler { final Map attribs) { if (isNotEmpty(componentInstancesAttributes) && componentInstancesAttributes.containsKey(instanceUniqueId)) { - componentInstancesAttributes.get(instanceUniqueId).stream() - // Filters out Attributes with empty default values - .filter(attributeDefinition -> StringUtils.isNotEmpty(attributeDefinition.getDefaultValue())) - // Converts and adds each value to attribute map + componentInstancesAttributes.get(instanceUniqueId) .forEach(attributeDefinition -> attributeConverter.convertAndAddValue(attribs, attributeDefinition)); } } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandlerTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandlerTest.java index a2931a515b..edf17b7e61 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandlerTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandlerTest.java @@ -31,6 +31,7 @@ import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.ARTIFACTS; import java.io.File; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -260,6 +261,42 @@ public class YamlTemplateParsingHandlerTest { validateParsedYamlWithPolicies(parsedYaml); } + @Test + void parseResourceInstanceWithAttributesTest() { + stubGetGroupType(); + stubGetPolicyType(); + Resource resource = new Resource(); + ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(), + new HashMap<>(), "", resource, null); + validateParsedYamlWithAttributes(parsedYaml); + } + + private void validateParsedYamlWithAttributes(ParsedToscaYamlInfo parsedYaml) { + ArrayList expectedSubnetsShowList = new ArrayList<>(); + expectedSubnetsShowList.add("val1"); + expectedSubnetsShowList.add("val2"); + + HashMap expectedSubnetsNameMap = new HashMap<>(); + expectedSubnetsNameMap.put("name1", "name_val1"); + expectedSubnetsNameMap.put("name2", "name_val2"); + + + assertThat(parsedYaml.getInstances().get("resource_instance_with_attributes")).isNotNull(); + UploadComponentInstanceInfo resourceInstanceWithAttributes = parsedYaml.getInstances().get("resource_instance_with_attributes"); + assertEquals(5, resourceInstanceWithAttributes.getAttributes().size()); + + assertTrue(resourceInstanceWithAttributes.getAttributes().containsKey("fq_name")); + assertEquals(resourceInstanceWithAttributes.getAttributes().get("fq_name").getValue(), "fq_name_value"); + assertTrue(resourceInstanceWithAttributes.getAttributes().containsKey("tosca_name")); + assertEquals(resourceInstanceWithAttributes.getAttributes().get("tosca_name").getValue(), "tosca_name_value"); + assertTrue(resourceInstanceWithAttributes.getAttributes().containsKey("subnets_show")); + assertEquals(resourceInstanceWithAttributes.getAttributes().get("subnets_show").getValue(), expectedSubnetsShowList); + assertTrue(resourceInstanceWithAttributes.getAttributes().containsKey("subnets_name")); + assertEquals(resourceInstanceWithAttributes.getAttributes().get("subnets_name").getValue(), expectedSubnetsNameMap); + assertTrue(resourceInstanceWithAttributes.getAttributes().containsKey("new_attribute")); + assertEquals(resourceInstanceWithAttributes.getAttributes().get("new_attribute").getValue(), "new_attribute_value"); + } + private void validateParsedYaml(ParsedToscaYamlInfo parsedYaml, String group, List expectedProp) { assertThat(parsedYaml).isNotNull(); assertThat(parsedYaml.getGroups()).isNotNull().containsKey(group); diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/AttributeConverterTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/AttributeConverterTest.java index fcc0ebfffd..00779d40e2 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/AttributeConverterTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/AttributeConverterTest.java @@ -33,12 +33,15 @@ import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; import org.onap.sdc.tosca.datatypes.model.EntrySchema; +import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.model.AttributeDefinition; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; import org.openecomp.sdc.be.tosca.exception.ToscaConversionException; import org.openecomp.sdc.be.tosca.model.ToscaAttribute; +import org.openecomp.sdc.be.tosca.model.ToscaSchemaDefinition; class AttributeConverterTest { @@ -80,10 +83,10 @@ class AttributeConverterTest { attributeDefinition.setType(ToscaPropertyType.LIST.getType()); attributeDefinition.setDescription("aDescription"); attributeDefinition.setStatus("aStatus"); - final EntrySchema entrySchema = new EntrySchema(); - entrySchema.setDescription("anEntrySchemaDescription"); - entrySchema.setType(ToscaPropertyType.LIST.getType()); - attributeDefinition.setEntry_schema(entrySchema); + attributeDefinition.setSchema(new SchemaDefinition()); + attributeDefinition.getSchema().setProperty(new PropertyDataDefinition()); + attributeDefinition.getSchema().getProperty().setType(ToscaPropertyType.LIST.getType()); + attributeDefinition.getSchema().getProperty().setDescription("anEntrySchemaDescription"); final List defaultValueList = new ArrayList<>(); defaultValueList.add("entry1"); defaultValueList.add("entry2"); @@ -143,15 +146,26 @@ class AttributeConverterTest { } @Test - void testConvertAndAddValue() throws ToscaConversionException { + void testConvertAndAddDefaultValue() throws ToscaConversionException { final AttributeConverter converter = createTestSubject(); final AttributeDefinition attribute = new AttributeDefinition(); attribute.setName("attrib"); attribute.setDefaultValue("default"); final Map attribs = new HashMap<>(); converter.convertAndAddValue(attribs, attribute); + assertEquals(0, attribs.size()); + } + + @Test + void testConvertAndAddValue() throws ToscaConversionException { + final AttributeConverter converter = createTestSubject(); + final AttributeDefinition attribute = new AttributeDefinition(); + attribute.setName("attrib"); + attribute.setValue("value"); + final Map attribs = new HashMap<>(); + converter.convertAndAddValue(attribs, attribute); assertEquals(1, attribs.size()); - assertEquals("default", attribs.get("attrib")); + assertEquals("value", attribs.get("attrib")); } private AttributeConverter createTestSubject() { @@ -167,13 +181,13 @@ class AttributeConverterTest { assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType()); assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription()); assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus()); - if (expectedAttributeDefinition.getEntry_schema() == null) { + if (expectedAttributeDefinition.getSchema() == null) { assertNull(actualToscaAttribute.getEntrySchema()); } else { - assertEquals(expectedAttributeDefinition.getEntry_schema().getType(), + assertEquals(expectedAttributeDefinition.getSchema().getProperty().getType(), actualToscaAttribute.getEntrySchema().getType()); assertEquals( - expectedAttributeDefinition.getEntry_schema().getDescription(), + expectedAttributeDefinition.getSchema().getProperty().getDescription(), actualToscaAttribute.getEntrySchema().getDescription()); } assertEquals(expectedDefault, actualToscaAttribute.getDefault()); diff --git a/catalog-be/src/test/resources/csars/with_groups.csar b/catalog-be/src/test/resources/csars/with_groups.csar index 49b5a440ea259e0ee14630935ea47dadd6ded19f..dd7f5dfb692763b7b704604ac033f0e74542acb4 100644 GIT binary patch delta 5215 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 TtiO-W_Gdr-Gc`n>{B{2a%J%w7 delta 5112 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 requirements; private Map> artifacts; private Map> properties; + private Map attributes; private Map capabilitiesNamesToUpdate; private Map requirementsNamesToUpdate; private Collection directives; diff --git a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java index ba4b6d77fe..c8a45de563 100644 --- a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java +++ b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/execute/sanity/ImportVfcUiTest.java @@ -397,10 +397,7 @@ public class ImportVfcUiTest extends SetupCDTest { assertFalse(MapUtils.isEmpty(nodeTemplates)); final Map attributes = getMapEntry((Map) nodeTemplates.get(createdComponentInstance.getName()), "attributes"); - assertFalse(MapUtils.isEmpty(attributes)); - assertEquals(4, attributes.keySet().stream() - .filter(s -> (s.contains("test_1") || s.contains("test_3") || s.contains("test_4") || s.contains("test_9")) && !s.contains("test_2")) - .count()); + assertTrue(MapUtils.isEmpty(attributes)); final Map substitutionMappings = getMapEntry(topologyTemplate, "substitution_mappings"); assertFalse(MapUtils.isEmpty(substitutionMappings)); -- 2.16.6