Fix flat node type interface 64/82564/4
authorshiria <shiri.amichai@amdocs.com>
Mon, 18 Mar 2019 10:07:12 +0000 (12:07 +0200)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Mon, 18 Mar 2019 12:15:08 +0000 (12:15 +0000)
Change-Id: I45457f1f33f2197c11d0711cedca82f53db5df79
Issue-ID: SDC-2198
Signed-off-by: shiria <shiri.amichai@amdocs.com>
openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImpl.java
openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/services/impl/ToscaAnalyzerServiceImplTest.java
openecomp-be/lib/openecomp-tosca-lib/src/test/resources/mock/analyzerService/ServiceTemplateInterfaceInheritanceTest.yaml

index 1f0b728..332555d 100644 (file)
@@ -920,10 +920,13 @@ public class ToscaAnalyzerServiceImpl implements ToscaAnalyzerService {
             targetNodeType.setInterfaces(interfaceNoMerge.get());
             return;
         }
-        targetNodeType.setInterfaces(combineInterfaces(sourceNodeType, targetNodeType));
+        combineInterfaces(sourceNodeType, targetNodeType).ifPresent(targetNodeType::setInterfaces);
     }
 
-    private Map<String, Object> combineInterfaces(NodeType sourceNodeType, NodeType targetNodeType) {
+    private Optional<Map<String, Object>> combineInterfaces(NodeType sourceNodeType, NodeType targetNodeType) {
+        if (MapUtils.isEmpty(sourceNodeType.getInterfaces())) {
+            return Optional.empty();
+        }
         Map<String, Object> combineInterfaces = new HashMap<>();
         for (Map.Entry<String, Object> sourceInterfaceDefEntry : sourceNodeType.getInterfaces().entrySet()) {
             String interfaceName = sourceInterfaceDefEntry.getKey();
@@ -943,7 +946,7 @@ public class ToscaAnalyzerServiceImpl implements ToscaAnalyzerService {
             }
         }
 
-        return combineInterfaces;
+        return Optional.of(combineInterfaces);
     }
 
     private Optional<Map<String, Object>> combineInterfaceNoMerge(NodeType sourceNodeType, NodeType targetNodeType) {
index 4962f24..d2c1ed8 100644 (file)
@@ -85,6 +85,7 @@ public class ToscaAnalyzerServiceImplTest {
     private static final String TOSCA_LIFECYCLE_STANDARD = "tosca.interfaces.node.lifecycle.Standard";
     private static final String CMAUI_INTERFACE_TEST =
             "org.openecomp.resource.vfc.nodes.heat.cmaui_image_interfaceTest";
+    private static final String NODE_TYPE_NO_INTERFACE = "org.openecomp.resource.vfc.nodes.nodeBNoInterface";
 
     /*
     Dictionary:
@@ -227,6 +228,29 @@ public class ToscaAnalyzerServiceImplTest {
         }
     }
 
+    @Test
+    public void testGetFlatNodeTypeNoInterfaces() throws Exception {
+        ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+        try (InputStream yamlFile = toscaExtensionYamlUtil.loadYamlFileIs(
+                "/mock/analyzerService/ServiceTemplateInterfaceInheritanceTest.yaml")) {
+
+            ServiceTemplate serviceTemplateFromYaml =
+                    toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
+
+            ToscaFlatData flatData = toscaAnalyzerService
+                                             .getFlatEntity(ToscaElementTypes.NODE_TYPE, NODE_TYPE_NO_INTERFACE,
+                                                     serviceTemplateFromYaml, toscaServiceModel);
+
+            Assert.assertNotNull(flatData);
+            Assert.assertNotNull(flatData.getFlatEntity());
+            NodeType flatEntity = (NodeType) flatData.getFlatEntity();
+            Assert.assertNull(flatEntity.getInterfaces());
+            List<String> inheritanceHierarchyType = flatData.getInheritanceHierarchyType();
+            Assert.assertNotNull(inheritanceHierarchyType);
+            Assert.assertEquals(2, inheritanceHierarchyType.size());
+        }
+    }
+
 
     @Test
     public void testGetFlatEntityDataType() throws Exception {
index 17cfe33..3df6798 100644 (file)
@@ -70,6 +70,17 @@ node_types:
             name:
               type: string
 
+  org.openecomp.resource.vfc.nodes.nodeANoInterface:
+    properties:
+      name:
+        type: string
+
+  org.openecomp.resource.vfc.nodes.nodeBNoInterface:
+    derived_from: org.openecomp.resource.vfc.nodes.nodeANoInterface
+    properties:
+      name:
+        type: string
+
 data_types:
   org.openecomp.datatypes.heat.network.MyAddressPair:
     derived_from: org.openecomp.datatypes.heat.network.AddressPair