From 5e8cbf046554b64aa85f8671756087be5ccdae10 Mon Sep 17 00:00:00 2001 From: "k.kedron" Date: Mon, 3 Jun 2019 16:29:50 +0200 Subject: Add new unit and refactor tests for YamlTemplateParsingHandler. Issue-ID: SDC-2327 Signed-off-by: Krystian Kedron Change-Id: Id3c8b6df65beddedf822748f517bd48585014df9 --- .../src/test/java/org/openecomp/sdc/ZipUtil.java | 14 + .../impl/utils/YamlTemplateParsingHandlerTest.java | 300 ++++++++++++--------- 2 files changed, 193 insertions(+), 121 deletions(-) diff --git a/catalog-be/src/test/java/org/openecomp/sdc/ZipUtil.java b/catalog-be/src/test/java/org/openecomp/sdc/ZipUtil.java index cb68189403..87e351be8a 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/ZipUtil.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/ZipUtil.java @@ -4,6 +4,8 @@ * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -25,6 +27,7 @@ import org.apache.commons.io.output.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -126,4 +129,15 @@ public class ZipUtil { } + private static byte[] loadResource(String resourceDir) throws IOException, URISyntaxException { + + Path path = Paths.get(ZipUtil.class.getResource(resourceDir).toURI()); + return Files.readAllBytes(path); + } + + public static Map readData(String resourceDir) throws IOException, URISyntaxException { + + byte[] data = loadResource(resourceDir); + return readZip(data); + } } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/utils/YamlTemplateParsingHandlerTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/utils/YamlTemplateParsingHandlerTest.java index 055276b243..151303fa26 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/utils/YamlTemplateParsingHandlerTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/utils/YamlTemplateParsingHandlerTest.java @@ -1,37 +1,73 @@ +/*- + * ============LICENSE_START=============================================== + * ONAP SDC + * ======================================================================== + * Modifications Copyright (c) 2019 Samsung + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END================================================= + */ + package org.openecomp.sdc.be.components.impl.utils; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.*; +import java.util.stream.Collectors; + import org.assertj.core.util.Lists; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; + +import org.openecomp.sdc.ZipUtil; +import org.openecomp.sdc.be.components.csar.CsarInfo; import org.openecomp.sdc.be.components.csar.YamlTemplateParsingHandler; import org.openecomp.sdc.be.components.impl.AnnotationBusinessLogic; import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic; import org.openecomp.sdc.be.components.validation.AnnotationValidator; import org.openecomp.sdc.be.dao.jsongraph.TitanDao; import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; -import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.be.model.operations.impl.AnnotationTypeOperations; -import org.openecomp.sdc.common.util.ZipUtil; -import java.io.File; -import java.io.IOException; -import java.io.StringReader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; -import java.util.stream.Collectors; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class YamlTemplateParsingHandlerTest { + @Mock + private GroupTypeBusinessLogic groupTypeBusinessLogic; + @Mock + private AnnotationTypeOperations annotationTypeOperations; + @Mock + private AnnotationValidator annotationValidator; + @Mock + private TitanDao titanDao; + @Mock + private User user; + + private YamlTemplateParsingHandler handler; + + private static Map csar; + private static String resourceYml; + private final static String VFC_GROUP_TYPE = "org.openecomp.groups.VfcInstanceGroup"; private final static String HEAT_GROUP_TYPE = "org.openecomp.groups.heat.HeatStack"; private final static String ROOT_GROUP_TYPE = "tosca.groups.Root"; @@ -40,140 +76,127 @@ public class YamlTemplateParsingHandlerTest { private final static GroupTypeDefinition rootGroupType = buildRootGroupType(); private final static String CAPABILITY_TYPE = "org.openecomp.capabilities.VLANAssignment"; private final static String CAPABILITY_NAME = "vlan_assignment"; - public static final String csarsFilePath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "test" + File.separator + "resources" + File.separator + "csars" ; + private static final String CSAR_FILE_PATH = "/csars/with_groups.csar"; - private YamlTemplateParsingHandler handler; - private AnnotationBusinessLogic annotationBusinessLogic; - @Mock - private ComponentsUtils componentsUtils; - @Mock - private GroupTypeBusinessLogic groupTypeBusinessLogic; - @Mock - private AnnotationTypeOperations annotationTypeOperations; - @Mock - private AnnotationValidator annotationValidator; - @Mock - private TitanDao titanDao; + private static final String FILE_NAME = "MainServiceTemplate.yaml"; + + private static final String CSAR_UUID = "csarUUID"; + private static final String RESOURCE_NAME = "resourceName"; + private static final String MAIN_TEMPLATE_NAME = "Definitions/MainServiceTemplate.yaml"; + private static final String NODE_NAME = "org.openecomp.resource.abstract.nodes.heat.mg"; + private static final String MAIN_GROUP_NAME = "x_group"; + private static final String NESTED_GROUP_NAME = "nested_mg_vepdg_group"; + + @BeforeClass() + public static void prepareData() throws IOException, URISyntaxException { + csar = ZipUtil.readData(CSAR_FILE_PATH); + + Optional keyOp = csar.keySet().stream().filter(k -> k.endsWith(FILE_NAME)).findAny(); + byte[] mainTemplateService = keyOp.map(csar::get).orElse(null); + assertNotNull(mainTemplateService); + + resourceYml = new String(mainTemplateService); + } @Before - public void init(){ - annotationBusinessLogic = new AnnotationBusinessLogic(annotationTypeOperations, annotationValidator); + public void setup() { + + AnnotationBusinessLogic annotationBusinessLogic = new AnnotationBusinessLogic(annotationTypeOperations, + annotationValidator); handler = new YamlTemplateParsingHandler(titanDao, groupTypeBusinessLogic, annotationBusinessLogic); + stubGetGroupType(); } @Test - public void parseResourceInfoFromYAMLTest(){ - Path path = Paths.get(csarsFilePath + File.separator + "with_groups.csar"); - try { - Map csar = ZipUtil.readZip(Files.readAllBytes(path)); - String fileName = "MainServiceTemplate.yaml"; - Optional keyOp = csar.keySet().stream().filter(k -> k.endsWith(fileName)).findAny(); - byte[] mainTemplateService = csar.get(keyOp.get()); - Properties props = new Properties(); - String resourceYml = new String(mainTemplateService); - props.load(new StringReader(resourceYml.replace("\\","\\\\"))); - Resource resource = new Resource(); - - stubGetGroupType(); - - ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(fileName, resourceYml, new HashMap<>(), new HashMap<>(), ""); - - validateParsedYaml(parsedYaml); - - } catch (IOException e) { - e.printStackTrace(); - } + public void parseResourceInfoFromOneNodeTest() { + + String main_template_content = new String(csar.get(MAIN_TEMPLATE_NAME)); + CsarInfo csarInfo = new CsarInfo(user, CSAR_UUID, csar, RESOURCE_NAME, + MAIN_TEMPLATE_NAME, main_template_content, true); + + ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(), + csarInfo.extractNodeTypesInfo(), NODE_NAME); + + validateParsedYaml(parsedYaml, NESTED_GROUP_NAME, + Lists.newArrayList("heat_file", "description")); } + @Test + public void parseResourceInfoFromYAMLTest() { + + ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(), + new HashMap<>(), ""); + validateParsedYamlWithCapability(parsedYaml); + } + + private void validateParsedYaml(ParsedToscaYamlInfo parsedYaml, String group, List expectedProp) { + assertThat(parsedYaml).isNotNull(); + assertThat(parsedYaml.getGroups()).isNotNull().containsKey(group); + assertThat(parsedYaml.getGroups().get(group)).isNotNull(); + + assertThat(parsedYaml.getGroups().get(group).getProperties()).isNotNull(); + assertThat(parsedYaml.getGroups().get(group).getProperties() + .stream() + .map(PropertyDataDefinition::getName) + .collect(Collectors.toList())) + .containsAll(expectedProp); + assertThat(parsedYaml.getGroups().get(group).getMembers()).isNotNull(); + } + + private void validateParsedYamlWithCapability(ParsedToscaYamlInfo parsedYaml) { + + final List expectedProp = Lists.newArrayList("vfc_parent_port_role", + "network_collection_function", "vfc_instance_group_function", "subinterface_role"); - private void validateParsedYaml(ParsedToscaYamlInfo parsedYaml) { - assertThat(parsedYaml).isNotNull(); - assertThat(parsedYaml.getGroups()).isNotNull().containsKey("x_group"); - assertThat(parsedYaml.getGroups().get("x_group")).isNotNull(); - assertThat(parsedYaml.getGroups().get("x_group").getProperties()).isNotNull(); - assertThat(parsedYaml.getGroups().get("x_group").getProperties() - .stream() - .map(PropertyDataDefinition::getName) - .collect(Collectors.toList())) - .containsAll(Lists.newArrayList("vfc_parent_port_role", "network_collection_function", "vfc_instance_group_function", "subinterface_role")); - assertThat(parsedYaml.getGroups().get("x_group").getCapabilities() - .get(CAPABILITY_TYPE) - .get(0).getProperties().get(0).getValue()).isEqualTo("success"); - assertThat(parsedYaml.getGroups().get("x_group").getProperties() - .stream() - .map(PropertyDataDefinition::getName) - .collect(Collectors.toList())) - .containsAll(Lists.newArrayList("vfc_parent_port_role", "network_collection_function", "vfc_instance_group_function", "subinterface_role")); - assertThat(parsedYaml.getGroups().get("x_group").getCapabilities()).isNotNull(); - assertThat(parsedYaml.getGroups().get("x_group").getMembers()).isNotNull(); + validateParsedYaml(parsedYaml, MAIN_GROUP_NAME, expectedProp); + + assertThat(parsedYaml.getGroups().get(MAIN_GROUP_NAME).getCapabilities() + .get(CAPABILITY_TYPE) + .get(0).getProperties().get(0).getValue()).isEqualTo("success"); + assertThat(parsedYaml.getGroups().get(MAIN_GROUP_NAME).getCapabilities()).isNotNull(); } private void stubGetGroupType() { when(groupTypeBusinessLogic.getLatestGroupTypeByType(eq(VFC_GROUP_TYPE))).thenReturn(VfcInstanceGroupType); when(groupTypeBusinessLogic.getLatestGroupTypeByType(eq(HEAT_GROUP_TYPE))).thenReturn(heatGroupType); when(groupTypeBusinessLogic.getLatestGroupTypeByType(eq(ROOT_GROUP_TYPE))).thenReturn(rootGroupType); -// when(annotationBusinessLogic.validateAndMergeAnnotationsAndAssignToInput(any(Map.class))).thenReturn(null); } private static GroupTypeDefinition buildRootGroupType() { - GroupTypeDefinition groupType = new GroupTypeDefinition(); - groupType.setType(ROOT_GROUP_TYPE); - groupType.setDescription("The TOSCA Group Type all other TOSCA Group Types derive from"); - return groupType; + return createGroupTypeDefinition(ROOT_GROUP_TYPE, null, + "The TOSCA Group Type all other TOSCA Group Types derive from"); } private static GroupTypeDefinition buildHeatStackGroupType() { - GroupTypeDefinition groupType = new GroupTypeDefinition(); - groupType.setType(HEAT_GROUP_TYPE); - groupType.setDerivedFrom("tosca.groups.Root"); - groupType.setDescription("Grouped all heat resources which are in the same heat stack"); - - GroupProperty property1 = new GroupProperty(); - property1.setName("heat_file"); - property1.setType("string"); - property1.setRequired(true); - property1.setDescription("Heat file which associate to this group/heat stack"); - property1.setStatus("SUPPORTED"); - - GroupProperty property2 = new GroupProperty(); - property2.setName("description"); - property2.setType("string"); - property2.setRequired(true); - property2.setDescription("group description"); - property2.setStatus("SUPPORTED"); + GroupTypeDefinition groupType = createGroupTypeDefinition(HEAT_GROUP_TYPE, "tosca.groups.Root", + "Grouped all heat resources which are in the same heat stack"); + + GroupProperty property1 = createGroupProperty("heat_file", + "Heat file which associate to this group/heat stack", "SUPPORTED"); + + GroupProperty property2 = createGroupProperty("description", + "Group description", "SUPPORTED"); + groupType.setProperties(Lists.newArrayList(property1, property2)); return groupType; } private static GroupTypeDefinition buildVfcInstanceGroupType() { - GroupTypeDefinition groupType = new GroupTypeDefinition(); - groupType.setType(VFC_GROUP_TYPE); - groupType.setDerivedFrom("tosca.groups.Root"); - groupType.setDescription("groups VFCs with same parent port role"); - GroupProperty property1 = new GroupProperty(); - property1.setName("vfc_instance_group_function"); - property1.setType("string"); - property1.setRequired(true); - property1.setDescription("function of this VFC group"); - - GroupProperty property2 = new GroupProperty(); - property2.setName("vfc_parent_port_role"); - property2.setType("string"); - property2.setRequired(true); - property2.setDescription("common role of parent ports of VFCs in this group"); - - GroupProperty property3 = new GroupProperty(); - property3.setName("network_collection_function"); - property3.setType("string"); - property3.setRequired(true); - property3.setDescription("network collection function assigned to this group"); - - GroupProperty property4 = new GroupProperty(); - property4.setName("subinterface_role"); - property4.setType("string"); - property4.setRequired(true); - property4.setDescription("common role of subinterfaces of VFCs in this group, criteria the group is created"); + GroupTypeDefinition groupType = createGroupTypeDefinition(VFC_GROUP_TYPE, "tosca.groups.Root", + "Groups of VFCs with same parent port role"); + + GroupProperty property1 = createGroupProperty("vfc_instance_group_function", + "Function of this VFC group", null); + + GroupProperty property2 = createGroupProperty("vfc_parent_port_role", + "Common role of parent ports of VFCs in this group", null); + + GroupProperty property3 = createGroupProperty("network_collection_function", + "Network collection function assigned to this group", null); + + GroupProperty property4 = createGroupProperty("subinterface_role", + "Common role of subinterfaces of VFCs in this group, criteria the group is created", null); groupType.setProperties(Lists.newArrayList(property1, property2, property3, property4)); @@ -183,7 +206,7 @@ public class YamlTemplateParsingHandlerTest { ComponentInstanceProperty capabilityProperty = new ComponentInstanceProperty(); capabilityProperty.setName("vfc_instance_group_reference"); capabilityProperty.setType("string"); - capability.setProperties(Arrays.asList(capabilityProperty)); + capability.setProperties(Collections.singletonList(capabilityProperty)); Map capabilityMap = new HashMap<>(); capabilityMap.put(CAPABILITY_NAME, capability); @@ -191,4 +214,39 @@ public class YamlTemplateParsingHandlerTest { return groupType; } + private static GroupTypeDefinition createGroupTypeDefinition(String type, String derivedFrom, String description){ + GroupTypeDefinition property = new GroupTypeDefinition(); + + if (type != null) + property.setType(type); + + if (derivedFrom != null) { + property.setDerivedFrom(derivedFrom); + } + + if (description != null) { + property.setDescription(description); + } + + return property; + } + private static GroupProperty createGroupProperty(String name, String description, + String status){ + GroupProperty property = new GroupProperty(); + if (name != null) + property.setName(name); + + if (description != null) { + property.setDescription(description); + } + + if (status != null) { + property.setStatus(status); + } + + property.setType("string"); + property.setRequired(true); + + return property; + } } -- cgit 1.2.3-korg