Create plugin point for csar generation
[sdc.git] / catalog-be-plugins / etsi-nfv-nsd-csar-plugin / src / test / java / org / openecomp / sdc / be / plugins / etsi / nfv / nsd / generator / NsDescriptorGeneratorImplTest.java
index 69d9b0f..7ad43db 100644 (file)
@@ -26,6 +26,10 @@ import static org.hamcrest.Matchers.not;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.hamcrest.core.IsNull.nullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.mock;
@@ -40,6 +44,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
@@ -59,6 +64,7 @@ import org.openecomp.sdc.be.tosca.model.ToscaNodeType;
 import org.openecomp.sdc.be.tosca.model.ToscaProperty;
 import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraint;
 import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintValidValues;
+import org.openecomp.sdc.be.tosca.model.ToscaRequirement;
 import org.openecomp.sdc.be.tosca.model.ToscaTemplate;
 import org.openecomp.sdc.be.tosca.model.ToscaTemplateCapability;
 import org.openecomp.sdc.be.tosca.model.ToscaTopolgyTemplate;
@@ -70,6 +76,9 @@ class NsDescriptorGeneratorImplTest {
 
     private static final String VNFD_AMF_NODE_NAME = "vnfd_amf";
     private static final String VIRTUAL_LINK_REQUIREMENT_NAME = "virtual_link";
+    private static final String VIRTUAL_BINDING_REQUIREMENT_NAME = "virtual_binding";
+    private static final String DOT = ".";
+    private static final String PREFIX = "VNF";
     private final ObjectProvider<ToscaTemplateYamlGenerator> toscaTemplateYamlGeneratorProvider = new ObjectProvider<>() {
         @Override
         public ToscaTemplateYamlGenerator getObject(Object... args) {
@@ -98,7 +107,7 @@ class NsDescriptorGeneratorImplTest {
     @BeforeEach
     void setUp() {
         setUpConfigurationMock();
-        MockitoAnnotations.initMocks(this);
+        MockitoAnnotations.openMocks(this);
         nsDescriptorGenerator = new NsDescriptorGeneratorImpl(toscaExportHandler, toscaTemplateYamlGeneratorProvider);
     }
 
@@ -119,6 +128,7 @@ class NsDescriptorGeneratorImplTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     void testGenerate() throws IOException, NsdException {
         //given
         final Component component = mock(Component.class);
@@ -142,24 +152,36 @@ class NsDescriptorGeneratorImplTest {
         componentToscaTopologyTemplate.setNode_templates(nodeTemplateMap);
         final SubstitutionMapping substitutionMapping = mock(SubstitutionMapping.class);
         Map<String, String[]> requirements = new HashMap<>();
-        String[] requirementAssignment = {"VNF1", VIRTUAL_LINK_REQUIREMENT_NAME};
-        requirements.put(VIRTUAL_LINK_REQUIREMENT_NAME, requirementAssignment);
+        String[] requirementAssignmentVl = {"VNF1", PREFIX + DOT + VIRTUAL_LINK_REQUIREMENT_NAME};
+        requirements.put("VNF1" + DOT + VIRTUAL_LINK_REQUIREMENT_NAME, requirementAssignmentVl);
         when(substitutionMapping.getRequirements()).thenReturn(requirements);
         Map<String, String[]> capabilities = new HashMap<>();
         String[] capabilitiesAssignment = {"VNF1", "capability1"};
         capabilities.put("capability", capabilitiesAssignment);
         when(substitutionMapping.getCapabilities()).thenReturn(capabilities);
         componentToscaTopologyTemplate.setSubstitution_mappings(substitutionMapping);
+        
+        Map<String, ToscaProperty> inputs = new HashMap<>();
+        inputs.put("invariant_id", new ToscaProperty());
+        inputs.put("other_property", new ToscaProperty());
+        componentToscaTopologyTemplate.setInputs(inputs );
         final ToscaTemplate componentInterfaceToscaTemplate = new ToscaTemplate("");
         final String designerPropertyValue = "designerValue";
         final String versionPropertyValue = "versionValue";
         final String namePropertyValue = "nameValue";
         final String invariantIdPropertyValue = "invariantIdValue";
+        final String otherPropertyValue = "otherValue";
         final ToscaNodeType interfaceToscaNodeType = createDefaultInterfaceToscaNodeType(designerPropertyValue, versionPropertyValue,
-            namePropertyValue, invariantIdPropertyValue);
+            namePropertyValue, invariantIdPropertyValue, otherPropertyValue);
+        List<Map<String, ToscaRequirement>> interfaceNodeTypeRequirements = new ArrayList<>();
+        Map<String, ToscaRequirement> interfaceNodeTypeRequirementMap = new HashMap<>();
+        interfaceNodeTypeRequirementMap.put("VNF1" + DOT + VIRTUAL_LINK_REQUIREMENT_NAME, mock(ToscaRequirement.class));
+        interfaceNodeTypeRequirementMap.put("VNF1" + DOT + VIRTUAL_BINDING_REQUIREMENT_NAME, mock(ToscaRequirement.class));
+        interfaceNodeTypeRequirements.add(interfaceNodeTypeRequirementMap);
+        interfaceToscaNodeType.setRequirements(interfaceNodeTypeRequirements);
         final String nsNodeTypeName = "nsNodeTypeName";
         componentInterfaceToscaTemplate.setNode_types(ImmutableMap.of(nsNodeTypeName, interfaceToscaNodeType));
-        when(toscaExportHandler.convertToToscaTemplate(component)).thenReturn(Either.left(componentToscaTemplate));
+        when(toscaExportHandler.convertToToscaTemplate(component, false)).thenReturn(Either.left(componentToscaTemplate));
         when(toscaExportHandler.convertInterfaceNodeType(any(), any(), any(), any(), anyBoolean()))
             .thenReturn(Either.left(componentInterfaceToscaTemplate));
         final List<VnfDescriptor> vnfDescriptorList = new ArrayList<>();
@@ -177,32 +199,53 @@ class NsDescriptorGeneratorImplTest {
         assertThat("Nsd name should be as expected", nsd.getName(), is(namePropertyValue));
         assertThat("Nsd invariantId should be as expected", nsd.getInvariantId(), is(invariantIdPropertyValue));
         final Map<String, Object> toscaTemplateYaml = readYamlAsMap(nsd.getContents());
-        @SuppressWarnings("unchecked") final Map<String, Object> topologyTemplate = (Map<String, Object>) toscaTemplateYaml.get("topology_template");
+        final Map<String, Object> topologyTemplate = (Map<String, Object>) toscaTemplateYaml.get("topology_template");
         assertThat("topology_template should not be empty", topologyTemplate, is(not(anEmptyMap())));
-        @SuppressWarnings("unchecked") final Map<String, Object> substitutionMappings = (Map<String, Object>) topologyTemplate
+        final Map<String, Object> substitutionMappings = (Map<String, Object>) topologyTemplate
             .get("substitution_mappings");
         assertThat("substitution_mappings should not be empty", substitutionMappings, is(not(anEmptyMap())));
         assertThat("substitution_mappings->node_type should not be null", substitutionMappings.get("node_type"), is(notNullValue()));
         assertThat("substitution_mappings->node_type should be as expected", substitutionMappings.get("node_type"), is(nsNodeTypeName));
         final Map<String, List<String>> subMappingRequirements = (Map<String, List<String>>) substitutionMappings.get("requirements");
-        assertThat(subMappingRequirements.get(VIRTUAL_LINK_REQUIREMENT_NAME).get(0), is("VNF1"));
-        assertThat(subMappingRequirements.get(VIRTUAL_LINK_REQUIREMENT_NAME).get(1), is(VIRTUAL_LINK_REQUIREMENT_NAME));
+        assertThat(subMappingRequirements.get("VNF1" + DOT + VIRTUAL_LINK_REQUIREMENT_NAME).get(0), is("VNF1"));
+        assertThat(subMappingRequirements.get("VNF1" + DOT + VIRTUAL_LINK_REQUIREMENT_NAME).get(1), is(VIRTUAL_LINK_REQUIREMENT_NAME));
+        assertEquals(1, subMappingRequirements.size());
         final Map<String, List<String>> subMappingCapabilities = (Map<String, List<String>>) substitutionMappings.get("capabilities");
-        assertThat(subMappingCapabilities.get("capability").get(0), is("VNF1"));
-        assertThat(subMappingCapabilities.get("capability").get(1), is("capability1"));
-        @SuppressWarnings("unchecked") final Map<String, Object> nodeTemplates = (Map<String, Object>) topologyTemplate.get("node_templates");
-        @SuppressWarnings("unchecked") final Map<String, Object> nodeTemplate = (Map<String, Object>) nodeTemplates.get(VNFD_AMF_NODE_NAME);
-        assertThat("capabilities should be null", nodeTemplate.get("capabilities"), is(nullValue()));
+        assertNull(subMappingCapabilities);
+        
+        final Map<String, Object> topologyInputs = (Map<String, Object>) topologyTemplate.get("inputs");
+        assertTrue(topologyInputs.containsKey("other_property"));
+        assertEquals(1, topologyInputs.size());
+        
+        final Map<String, Object> nodeTemplates = (Map<String, Object>) ((Map<String, Object>) topologyTemplate.get("node_templates"));
+        final Map<String, Object> nodeTemplateVnfd = (Map<String, Object>) ((Map<String, Object>) nodeTemplates.get(VNFD_AMF_NODE_NAME));
+        final Map<String, Object> nodeTemplateProperties = (Map<String, Object>) ((Map<String, Object>) nodeTemplateVnfd.get("properties"));
+        assertTrue(nodeTemplateProperties.containsKey("will_not_be_excluded"));
+
+        final Map<String, Object> nodeType = (Map<String, Object>) ((Map<String, Object>) toscaTemplateYaml.get("node_types")).get(nsNodeTypeName);
+        assertTrue(((List<Map<String, Map>>)nodeType.get("requirements")).get(0).containsKey("VNF1" + DOT + VIRTUAL_LINK_REQUIREMENT_NAME));
+        assertFalse(((List<Map<String, Map>>)nodeType.get("requirements")).get(0).containsKey("VNF1" + DOT + VIRTUAL_BINDING_REQUIREMENT_NAME));
+        
+        assertEquals(5, ((Map<String, Map>)nodeType.get("properties")).size());
+        for (final Entry<String, Map> property: ((Map<String, Map>)nodeType.get("properties")).entrySet()) {
+            if (property.getKey().equals("other_property")) {
+                assertNull(property.getValue().get("constraints"));
+            } else {
+                assertEquals(1, ((List<Map>)property.getValue().get("constraints")).size());
+            }
+        }
+
     }
 
     private ToscaNodeType createDefaultInterfaceToscaNodeType(final String designerPropertyValue, final String versionPropertyValue,
-                                                              final String namePropertyValue, final String invariantIdPropertyValue) {
+                                                              final String namePropertyValue, final String invariantIdPropertyValue, String otherPropertyValue) {
         final ToscaNodeType interfaceToscaNodeType = new ToscaNodeType();
         final Map<String, ToscaProperty> propertyMap = new HashMap<>();
         propertyMap.put("designer", createToscaProperty(designerPropertyValue));
         propertyMap.put("version", createToscaProperty(versionPropertyValue));
         propertyMap.put("name", createToscaProperty(namePropertyValue));
         propertyMap.put("invariant_id", createToscaProperty(invariantIdPropertyValue));
+        propertyMap.put("other_property", createToscaProperty(otherPropertyValue));
         interfaceToscaNodeType.setProperties(propertyMap);
         return interfaceToscaNodeType;
     }
@@ -215,8 +258,7 @@ class NsDescriptorGeneratorImplTest {
 
     private ToscaProperty createToscaProperty(final String value) {
         final ToscaProperty toscaProperty = new ToscaProperty();
-        final ToscaPropertyConstraint toscaPropertyConstraint = new ToscaPropertyConstraintValidValues(ImmutableList.of(value));
-        toscaProperty.setConstraints(ImmutableList.of(toscaPropertyConstraint));
+        toscaProperty.setDefaultp(value);
         return toscaProperty;
     }