Fix NPE, add getters to IEntityDetails 21/76121/1
authorManzon, Inna (im453s) <im453s@intl.att.com>
Tue, 22 Jan 2019 08:45:12 +0000 (10:45 +0200)
committerManzon, Inna (im453s) <im453s@intl.att.com>
Tue, 22 Jan 2019 12:16:31 +0000 (14:16 +0200)
Change-Id: Ia150f003fade5a276d785b2be90a8d9f63ab9f4e
Issue-ID: SDC-2057
Signed-off-by: Manzon, Inna (im453s) <im453s@intl.att.com>
15 files changed:
pom.xml
src/main/java/org/onap/sdc/tosca/parser/api/IEntityDetails.java
src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java
src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java
src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java
src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java
src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java
src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java
src/test/java/org/onap/sdc/impl/GetEntityPortMirroringTest.java [new file with mode: 0644]
src/test/java/org/onap/sdc/impl/GetEntityTest.java
src/test/java/org/onap/sdc/impl/ToscaParserPolicyTest.java [new file with mode: 0644]
src/test/java/org/onap/sdc/impl/ToscaParserSubsMappingsTest.java
src/test/resources/csars/service-CgnatFwVnfNc-csar.csar [new file with mode: 0644]
src/test/resources/csars/service-JennnyVepdgPortMirroringTest-csar.csar [new file with mode: 0644]
version.properties

diff --git a/pom.xml b/pom.xml
index a3e2699..49d4590 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
        <artifactId>sdc-tosca</artifactId>
        <name>sdc-sdc-tosca</name>
        <description>SDC Tosca Parser JAR file for use by consumers</description>
-       <version>1.4.12-SNAPSHOT</version>
+       <version>1.5.0-SNAPSHOT</version>
        <packaging>jar</packaging>
 
        <properties>
                <dependency>
                        <groupId>org.onap.sdc.jtosca</groupId>
                        <artifactId>jtosca</artifactId>
-                       <version>1.4.10</version>
+                       <version>1.5.0-SNAPSHOT</version>
                </dependency>
 
 
index c4393cc..15bff9c 100644 (file)
@@ -14,13 +14,18 @@ public interface IEntityDetails {
      * Retrieves entity instance template type.
      * @return {@link EntityTemplateType} enum entry describing given object type
      */
-    EntityTemplateType getType();
+    EntityTemplateType getEntityType();
 
     /**
      * Retrieves entity instance name
      */
     String getName();
 
+    /**
+     * Retrieves entity Tosca type
+     */
+    String getToscaType();
+
     /**
      * Retrieves entity {@link Metadata} object
      */
@@ -32,6 +37,12 @@ public interface IEntityDetails {
      */
     Map<String, Property> getProperties();
 
+    /**
+     * Retrieves member names of the entity instance
+     * @return List of member names
+     */
+    List<String> getMembers();
+
     /**
      * Retrieves member nodes of the entity instance
      * @return List of member nodes entity objects
@@ -72,5 +83,5 @@ public interface IEntityDetails {
     /**
      * Retrieves list of policy target entity instances (groups or node templates)
      */
-    List<IEntityDetails> getTargetNodes();
+    List<IEntityDetails> getTargetEntities();
 }
\ No newline at end of file
index 129f7b4..12edd55 100644 (file)
@@ -665,7 +665,7 @@ public interface ISdcCsarHelper {
         *                    SDC (node template) type, tosca type as well as optional customizationUUID and UUID
         * @param topologyTemplateQuery parameters of the topology template containing the above entity.
         *                  Includes SDC type of the container and optional customizationUUID
-        * @param isRecursive indicates if the search within the required topology template is recursive.
+        * @param isRecursive indicates if the search is recursive starting from the required topology template .
         * @return list of @{@link IEntityDetails} objects containing information about the found entities.
         * If either no entities found or the provided query is incorrect, an empty list is returned
         */
index 2567700..82e6fc6 100644 (file)
@@ -68,7 +68,7 @@ public abstract class EntityDetails implements IEntityDetails {
     }
 
     @Override
-    public List<IEntityDetails> getTargetNodes() {
+    public List<IEntityDetails> getTargetEntities() {
         return Collections.emptyList();
     }
 
@@ -87,6 +87,14 @@ public abstract class EntityDetails implements IEntityDetails {
         return pathBld.toString();
     }
 
+    @Override
+    public String getToscaType() {
+        return entityTemplate.getType();
+    }
+
+    @Override
+    public List<String> getMembers() { return Collections.emptyList(); }
+
 
 
 }
index 32a91aa..2777ab5 100644 (file)
@@ -29,7 +29,7 @@ public class GroupEntityDetails extends EntityDetails {
     }
 
     @Override
-    public EntityTemplateType getType() {
+    public EntityTemplateType getEntityType() {
         return EntityTemplateType.GROUP;
     }
 
@@ -42,4 +42,12 @@ public class GroupEntityDetails extends EntityDetails {
     public Metadata getMetadata() {
         return group.getMetadata();
     }
+
+    @Override
+    public List<String> getMembers() {
+        if (group.getMembers() != null) {
+            return group.getMembers();
+        }
+        return super.getMembers();
+    }
 }
index ad3b1a0..5ee253d 100644 (file)
@@ -15,7 +15,7 @@ public class NodeTemplateEntityDetails extends EntityDetails {
     }
 
     @Override
-    public EntityTemplateType getType() {
+    public EntityTemplateType getEntityType() {
         return EntityTemplateType.NODE_TEMPLATE;
     }
 
index 7b97175..ab792d1 100644 (file)
@@ -21,7 +21,7 @@ public class PolicyEntityDetails extends EntityDetails {
     }
 
     @Override
-    public EntityTemplateType getType() {
+    public EntityTemplateType getEntityType() {
         return EntityTemplateType.POLICY;
     }
 
@@ -39,7 +39,7 @@ public class PolicyEntityDetails extends EntityDetails {
     }
 
     @Override
-    public List<IEntityDetails> getTargetNodes() {
+    public List<IEntityDetails> getTargetEntities() {
         if (policy.getTargetsType().equals(NODE_TEMPLATES_TARGET_TYPE)) {
             return policy.getTargetsList()
                     .stream()
index 1ae3471..01c72d4 100644 (file)
@@ -130,15 +130,22 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper {
        
        @Override
        public List<NodeTemplate> getPolicyTargetsFromOrigin(NodeTemplate nodeTemplate, String policyName) {
-               Optional<Policy> policyOpt = null;
        if(StringUtils.isNotEmpty(nodeTemplate.getName())){
-               policyOpt = getNodeTemplateByName(nodeTemplate.getName()).getOriginComponentTemplate().getPolicies().stream().filter(p -> p.getName().equals(policyName)).findFirst();
-       }
-       if(policyOpt.isPresent()){
-               List<String> targets = policyOpt.get().getTargets();
-               return nodeTemplate.getOriginComponentTemplate().getNodeTemplates()
-                               .stream()
-                               .filter(nt -> targets.contains(nt.getName())).collect(Collectors.toList());
+            Optional<Policy> policyOpt = getNodeTemplateByName(nodeTemplate.getName())
+                    .getOriginComponentTemplate()
+                    .getPolicies()
+                    .stream()
+                    .filter(p -> p.getName()
+                            .equals(policyName))
+                    .findFirst();
+            if(policyOpt.isPresent()){
+                List<String> targets = policyOpt.get().getTargets();
+                if (targets != null) {
+                    return nodeTemplate.getOriginComponentTemplate().getNodeTemplates()
+                            .stream()
+                            .filter(nt -> targets.contains(nt.getName())).collect(Collectors.toList());
+                }
+            }
        }
        return new ArrayList<>();
     }
@@ -178,7 +185,7 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper {
                return new ArrayList<>();
        return toscaTemplate.getPolicies()
        .stream()
-       .filter(p -> p.getTargets().contains(nodeTemplateName))
+       .filter(p -> p.getTargets()!= null && p.getTargets().contains(nodeTemplateName))
        .collect(toList());
     }
     
diff --git a/src/test/java/org/onap/sdc/impl/GetEntityPortMirroringTest.java b/src/test/java/org/onap/sdc/impl/GetEntityPortMirroringTest.java
new file mode 100644 (file)
index 0000000..aa33910
--- /dev/null
@@ -0,0 +1,115 @@
+package org.onap.sdc.impl;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.sdc.tosca.parser.api.IEntityDetails;
+import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
+import org.onap.sdc.tosca.parser.elements.queries.EntityQuery;
+import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery;
+import org.onap.sdc.tosca.parser.enums.SdcTypes;
+import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
+import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
+import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
+import org.onap.sdc.toscaparser.api.CapabilityAssignment;
+import org.onap.sdc.toscaparser.api.RequirementAssignment;
+
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class GetEntityPortMirroringTest {
+
+    private final static String cap0 = "vepdg5afn0.vlb_1.port_mirroring_vlb_gn_vepdg_fn_5_RVMI";
+    private final static String cap1 = "radcomfnvlbavf11_3_3vepdg0.abstract_vlbagentbase_eph_aff.port_mirroring_vlbagentbase_eph_aff_vlbagentbase_eph_aff_int_pktmirror_1_port";
+    private static ISdcCsarHelper helper = null;
+
+    @BeforeClass
+    public static void setUpClass() {
+        try {
+            URL resource = GetEntityPortMirroringTest.class.getClassLoader()
+                    .getResource("csars/service-JennnyVepdgPortMirroringTest-csar.csar");
+            if (resource != null) {
+                helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
+            }
+
+        } catch (SdcToscaParserException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void getServiceConfigurations() {
+        EntityQuery entityQuery = EntityQuery.newBuilder(SdcTypes.CONFIGURATION)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+
+        List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, false);
+
+        assertEquals(1, entities.size());
+        assertEquals("54308d8b-21ca-40a1-bd3e-efde64791605", entities.get(0).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+        assertEquals("Port Mirroring Configuration", entities.get(0).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
+        assertEquals(2, entities.get(0).getRequirements().size());
+        assertTrue(entities.get(0).getProperties().isEmpty());
+        assertEquals(1, entities.get(0).getCapabilities().size());
+    }
+
+    @Test
+    public void getServiceProxyOnService() {
+        EntityQuery entityQuery = EntityQuery.newBuilder(SdcTypes.SERVICE_PROXY)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+
+        List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, false);
+
+        assertEquals(2, entities.size());
+        assertTrue("vEPDG-5A-FN SVC Service Proxy".equals(entities.get(0).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)) ||
+                        "vEPDG-5A-FN SVC Service Proxy".equals(entities.get(1).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
+        assertTrue("Radcom FN vLBA SVC 11_3_3 vEPDG Service Proxy".equals(entities.get(0).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)) ||
+                "Radcom FN vLBA SVC 11_3_3 vEPDG Service Proxy".equals(entities.get(1).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
+
+        assertTrue(entities.get(0).getRequirements().isEmpty());
+        assertTrue(entities.get(0).getProperties().isEmpty());
+        assertEquals(940, entities.get(0).getCapabilities().size());
+        assertEquals(197, entities.get(1).getCapabilities().size());
+    }
+
+    @Test
+    public void getCapabilityForCOnfigurationRequirementOnService() {
+        EntityQuery entityQueryC = EntityQuery.newBuilder(SdcTypes.CONFIGURATION)
+                .build();
+
+        EntityQuery entityQueryS = EntityQuery.newBuilder(SdcTypes.SERVICE_PROXY)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+
+        List<IEntityDetails> configurationNodes = helper.getEntity(entityQueryC, topologyTemplateQuery, false);
+        List<IEntityDetails> proxyNodes = helper.getEntity(entityQueryS, topologyTemplateQuery, false);
+
+        assertEquals(2, proxyNodes.size());
+        assertEquals(1, configurationNodes.size());
+
+        Map<String, RequirementAssignment> reqMap = configurationNodes.get(0).getRequirements();
+        assertEquals(cap0, reqMap.get("source").getCapabilityName());
+        assertEquals(cap1, reqMap.get("collector").getCapabilityName());
+
+        assertTrue(isCapabilityFound(proxyNodes.get(0), cap0));
+        assertTrue(isCapabilityFound(proxyNodes.get(1), cap1));
+    }
+
+    private boolean isCapabilityFound(IEntityDetails nodeDetails, String capName) {
+        List<CapabilityAssignment> assignments = nodeDetails.getCapabilities()
+                .values()
+                .stream()
+                .filter(ca->capName.equals(ca.getDefinition()
+                        .getName()))
+                .collect(Collectors.toList());
+        return assignments.size() == 1;
+    }
+}
index 5c19072..cd332e4 100644 (file)
@@ -39,7 +39,7 @@ public class GetEntityTest {
         }
     }
 
-        @Test
+    @Test
     public void getCpEntitiesFromCVFC() {
         EntityQuery entityQuery = EntityQuery.newBuilder(SdcTypes.CP)
                 .build();
@@ -183,6 +183,7 @@ public class GetEntityTest {
         assertTrue(entities.get(0).getMemberNodes().get(0).getName().equals("abstract_rtp_msc") ||
                 entities.get(0).getMemberNodes().get(1).getName().equals("abstract_rtp_msc"));
         assertEquals(4, entities.get(0).getProperties().size());
+        assertEquals(2, entities.get(0).getMembers().size());
         assertTrue(entities.get(0).getRequirements().isEmpty());
 
     }
@@ -198,7 +199,11 @@ public class GetEntityTest {
         List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, false);
 
         assertEquals(1, entities.size());
+        assertEquals("org.openecomp.groups.VfModule", entities.get(0).getToscaType());
+        assertTrue(entities.get(0).getPath().isEmpty());
+        assertTrue(entities.get(0).getMembers().isEmpty());
         assertNull(entities.get(0).getParent());
+        assertTrue(entities.get(0).getTargets().isEmpty());
     }
 
     @Test
@@ -211,7 +216,9 @@ public class GetEntityTest {
         List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, true);
 
         assertEquals(19, entities.size());
-        assertTrue(entities.get(9).getTargetNodes().isEmpty());
+        assertTrue(entities.get(9).getTargetEntities().isEmpty());
+        assertEquals(1, entities.get(7).getMembers().size());
+        assertEquals("org.openecomp.groups.VfModule", entities.get(7).getToscaType());
         assertEquals("rtp_msc_subint_avpn_vmi_0", entities.get(5).getMemberNodes().get(0).getName());
     }
 
@@ -226,7 +233,9 @@ public class GetEntityTest {
 
         assertEquals(1, entities.size());
         assertEquals("jennyvtsbcvlanvnf..External..0", entities.get(0).getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
-        assertEquals(EntityTemplateType.GROUP, entities.get(0).getTargetNodes().get(0).getType());
+        assertEquals(EntityTemplateType.GROUP, entities.get(0).getTargetEntities().get(0).getEntityType());
+        assertEquals("org.openecomp.policies.External", entities.get(0).getToscaType());
+        assertTrue(entities.get(0).getMembers().isEmpty());
         assertEquals("jenny vTSBC vlan VNF 0", entities.get(0).getPath());
     }
 
@@ -252,7 +261,8 @@ public class GetEntityTest {
         List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, false);
 
         assertEquals(1, entities.size());
-        assertEquals(EntityTemplateType.GROUP, entities.get(0).getTargetNodes().get(0).getType());
+        assertEquals(EntityTemplateType.GROUP, entities.get(0).getTargetEntities().get(0).getEntityType());
+        assertTrue(entities.get(0).getMembers().isEmpty());
         assertTrue(entities.get(0).getRequirements().isEmpty());
         assertTrue(entities.get(0).getCapabilities().isEmpty());
         assertEquals("jenny vTSBC vlan VNF 0", entities.get(0).getPath());
@@ -290,6 +300,8 @@ public class GetEntityTest {
 
         List<IEntityDetails> entities = helper.getEntity(null, topologyTemplateQuery, false);
         assertEquals(5, entities.size());
+        assertEquals("org.openecomp.resource.vf.JennyVtsbcVlanVnf", entities.get(4).getToscaType());
+        assertEquals("org.openecomp.groups.VfModule", entities.get(0).getToscaType());
     }
 
 
@@ -310,7 +322,15 @@ public class GetEntityTest {
 
         List<IEntityDetails> entities = helper.getEntity(null, topologyTemplateQuery, false);
         assertEquals(2, entities.size());
-        assertTrue("ssc_subint_mis_vmi_0".equals(entities.get(0).getName()) || "ssc_subint_mis_vmi_0".equals(entities.get(1).getName()));
+        assertTrue(entities.get(1).getMembers().isEmpty());
+        assertEquals("ssc_subint_mis_vmi_0", entities.get(0).getMembers().get(0));
+        assertTrue("ssc_subint_mis_vmi_0".equals(entities.get(1).getName()));
+        assertTrue("vlan_subinterface_ssc_mis_group".equals(entities.get(0).getName()));
+        assertEquals("org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface",
+                entities.get(1).getToscaType());
+        assertEquals("org.openecomp.groups.heat.HeatStack", entities.get(0).getToscaType());
+        assertTrue(entities.get(0).getTargetEntities().isEmpty());
+
     }
 
     @Test
diff --git a/src/test/java/org/onap/sdc/impl/ToscaParserPolicyTest.java b/src/test/java/org/onap/sdc/impl/ToscaParserPolicyTest.java
new file mode 100644 (file)
index 0000000..f77b070
--- /dev/null
@@ -0,0 +1,55 @@
+package org.onap.sdc.impl;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
+import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
+import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
+import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.Policy;
+
+import java.net.URL;
+import java.util.List;
+
+import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+public class ToscaParserPolicyTest {
+
+    private static ISdcCsarHelper helper = null;
+
+    @BeforeClass
+    public static void setUpClass() {
+        try {
+            URL resource = GetEntityPortMirroringTest.class.getClassLoader()
+                    .getResource("csars/service-CgnatFwVnfNc-csar.csar");
+            if (resource != null) {
+                helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
+            }
+
+        } catch (SdcToscaParserException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void getPolicyOfTargetByNodeTemplate() {
+        List<NodeTemplate> vfList = helper.getServiceVfList();
+        assertEquals(1, vfList.size());
+        List<Policy> policies = helper.getPoliciesOfTarget(vfList.get(0));
+        assertNotNull(policies);
+        assertTrue(policies.isEmpty());
+    }
+
+    @Test
+    public void getPolicyTargetFromOrigin() {
+        List<NodeTemplate> vfList = helper.getServiceVfList();
+        assertEquals(1, vfList.size());
+        List<NodeTemplate> targets = helper.getPolicyTargetsFromOrigin(vfList.get(0), "cgnatfwvnf_nc..External..0");
+        assertNotNull(targets);
+        assertTrue(targets.isEmpty());
+    }
+
+
+}
index cbd8e8a..afb5101 100644 (file)
@@ -81,7 +81,7 @@ public class ToscaParserSubsMappingsTest extends SdcToscaParserBasicTest {
 //
 //                             CapabilityAssignment cCp = lCapabilitys.get(CPkeys.get(i));
 //                             CapabilityTypeDef CpDef = cCp.getDefinition();
-//                             CapabilitiesTypes.add(CpDef.getType());
+//                             CapabilitiesTypes.add(CpDef.getEntityType());
 //
 //                             //LinkedHashMap<String,Object> lProperties = cCp.getDefinition().getProperties();
 //                             LinkedHashMap<String, Property> lPropertiesR = cCp.getProperties();
@@ -93,7 +93,7 @@ public class ToscaParserSubsMappingsTest extends SdcToscaParserBasicTest {
 //                             Property p = lPropertiesR.get(CP_Propkeys.get(j));
 //
 //                             if(p !=  null){
-//                                     String sPType = p.getType();
+//                                     String sPType = p.getEntityType();
 //                                     Boolean bPRequired = p.isRequired();
 //
 //                                     System.out.println(sPType + "  " + bPRequired);
diff --git a/src/test/resources/csars/service-CgnatFwVnfNc-csar.csar b/src/test/resources/csars/service-CgnatFwVnfNc-csar.csar
new file mode 100644 (file)
index 0000000..b4736cd
Binary files /dev/null and b/src/test/resources/csars/service-CgnatFwVnfNc-csar.csar differ
diff --git a/src/test/resources/csars/service-JennnyVepdgPortMirroringTest-csar.csar b/src/test/resources/csars/service-JennnyVepdgPortMirroringTest-csar.csar
new file mode 100644 (file)
index 0000000..7e8ebb3
Binary files /dev/null and b/src/test/resources/csars/service-JennnyVepdgPortMirroringTest-csar.csar differ
index 45ee9cd..011dc3c 100644 (file)
@@ -4,8 +4,8 @@
 # because they are used in Jenkins, whose plug-in doesn't support
 
 major=1
-minor=4
-patch=12
+minor=5
+patch=0
 
 base_version=${major}.${minor}.${patch}