Added getVFModule API 01/98801/3
authorShabanov, Marina (ms656r) <ms656r@intl.att.com>
Sun, 24 Nov 2019 08:51:10 +0000 (10:51 +0200)
committerShabanov, Marina (ms656r) <ms656r@intl.att.com>
Mon, 25 Nov 2019 14:47:36 +0000 (16:47 +0200)
Issue-ID: SDC-2651
Signed-off-by: Shabanov, Marina (ms656r) <ms656r@intl.att.com>
Change-Id: I6adf3c2f00a1d4b94a4191ba595a52d65df56dff

16 files changed:
pom.xml
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/api/IEntityDetails.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java
sdc-tosca/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java
sdc-tosca/src/test/java/org/onap/sdc/impl/GetCvfcWithVfcTest.java [new file with mode: 0644]
sdc-tosca/src/test/java/org/onap/sdc/impl/GetEntityTest.java
sdc-tosca/src/test/java/org/onap/sdc/impl/GetForwardingPathTest.java [new file with mode: 0644]
sdc-tosca/src/test/java/org/onap/sdc/impl/GetVfModulesWithMembersTest.java [new file with mode: 0644]
sdc-tosca/src/test/java/org/onap/sdc/tosca/parser/elements/queries/EntityQueryTest.java
sdc-tosca/src/test/resources/csars/service-Metaswitch1-csar.csar [new file with mode: 0644]
sdc-tosca/src/test/resources/csars/service-Servicefp1-csar.csar [new file with mode: 0644]
sdc-tosca/src/test/resources/csars/service-Servicenovfmodules-csar.csar [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index 9fb21e2..9984767 100644 (file)
--- a/pom.xml
+++ b/pom.xml
       <scope>compile</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <version>3.13.2</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>5.3.2</version>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
 
   <reporting>
index b69a8b3..64b6fd5 100644 (file)
@@ -110,4 +110,9 @@ public interface IEntityDetails {
      * Retrieves list of inputs
      */
     List<Input> getInputs();
+
+    /**
+     * Retrieves list of CVFC members of a VfModule that contain VFC
+     */
+    List<IEntityDetails> getMemberNodesCVFCWithVFC();
 }
index e4e8f3c..0b08315 100644 (file)
@@ -678,4 +678,17 @@ public interface ISdcCsarHelper {
         * @return      list of data_type value
         */
        HashSet<DataType> getDataTypes();
+
+       /**
+        * Get VfModule groups of service that belong to a specific VF on this service,
+        * when members from VFModule groups on the relevant VF are added to each group respectively.
+        * @return list of VfModule group entities
+        * */
+       List<IEntityDetails> getVFModule(String cuuid);
+
+       /**
+        * Get VfModule groups of service when members from VFModule groups on VFs are added to each group respectively.
+        * @return list of VfModule group entities
+        * */
+       List<IEntityDetails> getVFModule();
 }
\ No newline at end of file
index 6054ac9..afdb90e 100644 (file)
@@ -22,21 +22,22 @@ package org.onap.sdc.tosca.parser.elements;
 
 import org.onap.sdc.tosca.parser.api.IEntityDetails;
 import org.onap.sdc.tosca.parser.enums.EntityTemplateType;
-import org.onap.sdc.toscaparser.api.CapabilityAssignment;
-import org.onap.sdc.toscaparser.api.EntityTemplate;
-import org.onap.sdc.toscaparser.api.Property;
-import org.onap.sdc.toscaparser.api.RequirementAssignment;
+import org.onap.sdc.tosca.parser.enums.SdcTypes;
+import org.onap.sdc.toscaparser.api.*;
 import org.onap.sdc.toscaparser.api.parameters.Input;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toList;
 
 public abstract class EntityDetails implements IEntityDetails {
 
     private final EntityTemplate entityTemplate;
     private final IEntityDetails parentNodeTemplate;
+    private static final String TYPE = "type";
 
     EntityDetails(EntityTemplate entityTemplate) {
         this.entityTemplate = entityTemplate;
@@ -48,7 +49,7 @@ public abstract class EntityDetails implements IEntityDetails {
         return entityTemplate.getName();
     }
 
-    public EntityTemplate getEntityTemplate() {
+    EntityTemplate getEntityTemplate() {
         return entityTemplate;
     }
 
@@ -118,6 +119,21 @@ public abstract class EntityDetails implements IEntityDetails {
         return Collections.emptyList();
     }
 
+    @Override
+    public List<IEntityDetails> getMemberNodesCVFCWithVFC() {
+        return getMemberNodes().stream()
+                .filter(m -> SdcTypes.CVFC.getValue().equals(m.getMetadata().getValue(TYPE)))
+                .filter(this::isCvfcsWithVfc)
+                .distinct()
+                .collect(toList());
+    }
 
-
+    private boolean isCvfcsWithVfc(IEntityDetails member) {
+        List<NodeTemplate> children =((NodeTemplate) ((NodeTemplateEntityDetails)member).getEntityTemplate())
+                .getSubMappingToscaTemplate().getNodeTemplates();
+        List<NodeTemplate> vfcChildren = children.stream()
+                .filter(c -> SdcTypes.VFC.getValue().equals(c.getMetaData().getValue(TYPE)))
+                .collect(toList());
+        return !vfcChildren.isEmpty();
+    }
 }
index 664fe42..df9e5b9 100644 (file)
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
 
 public class GroupEntityDetails extends EntityDetails {
     private final Group group;
-    private final List<IEntityDetails> memberNodes;
+    private List<IEntityDetails> memberNodes;
 
     GroupEntityDetails(EntityTemplate entityTemplate)  {
         super(entityTemplate);
@@ -58,6 +58,10 @@ public class GroupEntityDetails extends EntityDetails {
         return memberNodes;
     }
 
+    public void setMemberNodes(List<IEntityDetails> memberNodes) {
+        this.memberNodes = memberNodes;
+    }
+
     @Override
     public Metadata getMetadata() {
         return group.getMetadata();
index 3b7aa99..b5c1340 100644 (file)
@@ -27,6 +27,7 @@ import org.onap.sdc.toscaparser.api.elements.Metadata;
 import org.onap.sdc.toscaparser.api.parameters.Input;
 
 import java.util.List;
+import java.util.Objects;
 
 public class NodeTemplateEntityDetails extends EntityDetails {
 
@@ -54,4 +55,17 @@ public class NodeTemplateEntityDetails extends EntityDetails {
         }
         return super.getInputs();
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof NodeTemplateEntityDetails)) return false;
+        NodeTemplateEntityDetails that = (NodeTemplateEntityDetails) o;
+        return nodeTemplate.equals(that.nodeTemplate);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(nodeTemplate);
+    }
 }
index e3af94f..bfeabf7 100644 (file)
@@ -90,10 +90,12 @@ public abstract class EntityQuery {
     }
 
     boolean isSearchCriteriaMatched(Metadata metadata, String toscaType, String uuidKeyName, String cuuidKeyName) {
-        return Objects.nonNull(metadata)
+        return  Objects.nonNull(metadata)
                 && isStringMatchingOrNull(metadata.getValue(uuidKeyName), getUUID())
                 && isStringMatchingOrNull(metadata.getValue(cuuidKeyName), getCustomizationUUID())
-                && isStringMatchingOrNull(toscaType, getToscaType());
+                && isStringMatchingOrNull(toscaType, getToscaType()) ||
+                Objects.isNull(metadata)
+                        && isStringMatchingOrNull(toscaType, getToscaType());
     }
 
     boolean isSearchCriteriaMatched(Metadata metadata, String toscaType) {
index 95530f0..921a145 100644 (file)
 
 package org.onap.sdc.tosca.parser.impl;
 
-import static java.util.stream.Collectors.toList;
-
+import java.util.List;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.Collections;
+import java.util.Objects;
 import java.util.stream.Collectors;
+import static java.util.stream.Collectors.toList;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -40,6 +40,7 @@ import org.apache.commons.lang3.tuple.Pair;
 import org.onap.sdc.tosca.parser.api.IEntityDetails;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
 import org.onap.sdc.tosca.parser.config.ConfigurationManager;
+import org.onap.sdc.tosca.parser.elements.GroupEntityDetails;
 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.FilterType;
@@ -72,6 +73,7 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper {
 
     private static final String PATH_DELIMITER = "#";
     private static final String CUSTOMIZATION_UUID = "customizationUUID";
+    private static final String GROUPS_VF_MODULE = "org.openecomp.groups.VfModule";
     private ToscaTemplate toscaTemplate;
     private ConfigurationManager configurationManager;
     private static Logger log = LoggerFactory.getLogger(SdcCsarHelperImpl.class.getName());
@@ -418,7 +420,7 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper {
             if (serviceLevelGroups != null) {
                 return serviceLevelGroups
                         .stream()
-                        .filter(x -> "org.openecomp.groups.VfModule".equals(x.getTypeDefinition().getType()) && x.getName().startsWith(normaliseComponentInstanceName))
+                        .filter(x -> GROUPS_VF_MODULE.equals(x.getTypeDefinition().getType()) && x.getName().startsWith(normaliseComponentInstanceName))
                         .collect(toList());
             }
         }
@@ -1227,4 +1229,87 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper {
         return toscaTemplate.getDataTypes();
     }
 
+    @Override
+    public List<IEntityDetails> getVFModule(String cuuid){
+        String normalisedComponentInstanceName = SdcToscaUtility.normaliseComponentInstanceName(getVfiNameByCuuid(cuuid));
+        List<IEntityDetails> vfModulesFromVf = getVfModulesFromVf(cuuid);
+        List<IEntityDetails> vfModulesFromService = getVfModulesFromService().stream()
+                .filter(v->v.getName().startsWith(normalisedComponentInstanceName))
+                .collect(toList());
+        addMembersToVfModuleInstances(vfModulesFromVf, vfModulesFromService);
+        return vfModulesFromService;
+    }
+
+    @Override
+    public List<IEntityDetails> getVFModule() {
+        List<IEntityDetails> vfModules = new ArrayList<>();
+        List<IEntityDetails> vfModuleInstances = new ArrayList<>();
+
+        getVfModulesFromVf().forEach(vfmodule -> {
+            if (Objects.isNull(vfmodule.getParent())){
+                vfModuleInstances.add(vfmodule);
+            } else {
+                vfModules.add(vfmodule);
+            }
+        });
+
+        addMembersToVfModuleInstances(vfModules,vfModuleInstances);
+        return vfModuleInstances;
+    }
+
+    private void addMembersToVfModuleInstances(List<IEntityDetails> vfModules, List<IEntityDetails> vfModuleInstances) {
+        for(IEntityDetails vfModuleInstance : vfModuleInstances){
+            String origGroupName = getOriginalGroupName(vfModuleInstance);
+            setVFModuleMembers(vfModules, vfModuleInstance, origGroupName);
+        }
+    }
+
+    private void setVFModuleMembers(List<IEntityDetails> vfModules, IEntityDetails vfModuleInstance, String origGroupName) {
+        for (IEntityDetails vfModule : vfModules){
+            if (vfModuleInstance instanceof GroupEntityDetails && vfModule.getName().equals(origGroupName)){
+                List<IEntityDetails> memberNodes = vfModule.getMemberNodes();
+                ((GroupEntityDetails)vfModuleInstance).setMemberNodes(memberNodes);
+            }
+        }
+    }
+
+    private String getOriginalGroupName(IEntityDetails vfModuleInstance) {
+        String groupName = vfModuleInstance.getName();
+        return groupName.substring(groupName.indexOf('.') + 2);
+    }
+
+    private List<IEntityDetails> getVfModulesFromService() {
+        EntityQuery entityQuery = EntityQuery.newBuilder(GROUPS_VF_MODULE)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+        return getEntity(entityQuery, topologyTemplateQuery, false);
+    }
+
+    private List<IEntityDetails> getVfModulesFromVf(String cuuid) {
+        EntityQuery entityQuery = EntityQuery.newBuilder(GROUPS_VF_MODULE)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.VF)
+                .customizationUUID(cuuid)
+                .build();
+        return getEntity(entityQuery, topologyTemplateQuery, false);
+    }
+
+    private List<IEntityDetails> getVfModulesFromVf() {
+        EntityQuery entityQuery = EntityQuery.newBuilder(GROUPS_VF_MODULE)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+        return getEntity(entityQuery, topologyTemplateQuery, true);
+    }
+
+    private String getVfiNameByCuuid(String cuuid) {
+        EntityQuery entityQuery = EntityQuery.newBuilder(SdcTypes.VF)
+                .customizationUUID(cuuid)
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+        return getEntity(entityQuery, topologyTemplateQuery, true).get(0).getName();
+    }
+
  }
diff --git a/sdc-tosca/src/test/java/org/onap/sdc/impl/GetCvfcWithVfcTest.java b/sdc-tosca/src/test/java/org/onap/sdc/impl/GetCvfcWithVfcTest.java
new file mode 100644 (file)
index 0000000..0fe75e2
--- /dev/null
@@ -0,0 +1,118 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-tosca
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.onap.sdc.impl;
+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.exceptions.SdcToscaParserException;
+import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URL;
+import java.util.*;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+public class GetCvfcWithVfcTest {
+    private static final String SERVICE_WITH_SINGLE_VF_CSAR = "csars/service-JennyVtsbcVlanSvc-csar.csar";
+    private static final String SERVICE_WITH_DOUBLE_VF_CSAR = "csars/service-Metaswitch1-csar.csar";
+    private static final String ABSTRACT_RTP_MSC = "abstract_rtp_msc";
+    private static final String ABSTRACT_SSC = "abstract_ssc";
+    private static final String ABSTRACT_RTP_MSC_A = "abstract_rtp_msc_a";
+    private static final String ABSTRACT_RTP_MSC_B = "abstract_rtp_msc_b";
+    private static final String ABSTRACT_SSC_A = "abstract_ssc_a";
+    private static final String ABSTRACT_SSC_B = "abstract_ssc_b";
+    private ISdcCsarHelper helper;
+    private static Logger log = LoggerFactory.getLogger(GetCvfcWithVfcTest.class.getName());
+
+    public  void setUp(String path) {
+        try {
+            URL resource = GetCvfcWithVfcTest.class.getClassLoader().getResource(path);
+            if (resource != null) {
+                helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
+            }
+
+        } catch (SdcToscaParserException e) {
+            log.error("Failed to create ISdcCsarHelper object from {}.", path, e);
+        }
+    }
+
+    @Test
+    public void getCvfcsWithVfcsFromServiceWithSingleVfTest(){
+        setUp(SERVICE_WITH_SINGLE_VF_CSAR);
+        List<IEntityDetails> entities = helper.getVFModule();
+        List<String> actualMembersList = newArrayList();
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 0, Collections.singletonList(ABSTRACT_RTP_MSC));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 1, Collections.singletonList(ABSTRACT_SSC));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 2, Collections.emptyList());
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 3, Collections.singletonList(ABSTRACT_SSC));
+    }
+
+    @Test
+    public void getCvfcsWithVfcsFromVfiSingleVfTest(){
+        setUp(SERVICE_WITH_SINGLE_VF_CSAR);
+        List<IEntityDetails> entities = helper.getVFModule("05e77410-a1d8-44fe-8440-b9410c8f98ee");
+        List<String> actualMembersList = newArrayList();
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 0, Collections.singletonList(ABSTRACT_RTP_MSC));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 1, Collections.singletonList(ABSTRACT_SSC));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 2, Collections.emptyList());
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 3, Collections.singletonList(ABSTRACT_SSC));
+    }
+
+    @Test
+    public void getCvfcsWithVfcsFromServiceWithDuplicateVfTest(){
+        setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
+        List<IEntityDetails> entities = helper.getVFModule();
+        List<String> actualMembersList = newArrayList();
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 0, Collections.emptyList());
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 1, Arrays.asList(ABSTRACT_RTP_MSC_A, ABSTRACT_RTP_MSC_B));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 2, Arrays.asList(ABSTRACT_RTP_MSC_A, ABSTRACT_RTP_MSC_B));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 3, Collections.singletonList(ABSTRACT_SSC_A));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 4, Collections.emptyList());
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 5, Collections.singletonList(ABSTRACT_SSC_A));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 6, Collections.singletonList(ABSTRACT_SSC_B));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 7, Collections.singletonList(ABSTRACT_SSC_B));
+    }
+
+
+    @Test
+    public void getCvfcsWithVfcsFromVfiOnServiceWithDuplicateVfTest(){
+        setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
+        List<IEntityDetails> entities = helper.getVFModule("2b5f00de-8816-465c-b7bc-c36e26775e1e");
+        List<String> actualMembersList = newArrayList();
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 0, Collections.emptyList());
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 1, Arrays.asList(ABSTRACT_RTP_MSC_A, ABSTRACT_RTP_MSC_B));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 2, Collections.singletonList(ABSTRACT_SSC_A));
+        verifyCvfcWithVfcMembers(entities, actualMembersList, 3, Collections.singletonList(ABSTRACT_SSC_B));
+    }
+
+
+    private void verifyCvfcWithVfcMembers(List<IEntityDetails> entities, List<String> actualMembersList, int index, List<String> values) {
+        List<IEntityDetails> list = entities.get(index).getMemberNodesCVFCWithVFC();
+        list.forEach(e -> actualMembersList.add(e.getName()));
+        assertThat(actualMembersList).containsOnlyElementsOf(values);
+        actualMembersList.clear();
+    }
+
+
+}
index e741cea..327ab68 100644 (file)
@@ -24,7 +24,6 @@ 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.EntityDetails;
 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.EntityTemplateType;
@@ -34,11 +33,9 @@ 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.Property;
-import org.onap.sdc.toscaparser.api.parameters.Input;
 
 import java.net.URL;
 import java.util.List;
-import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -405,7 +402,7 @@ public class GetEntityTest {
 
 
     @Test
-    public void getServiceInputs() {
+    public void getServiceInputsTest() {
         EntityQuery entityQuery = EntityQuery.newBuilder(EntityTemplateType.NODE_TEMPLATE)
                 .build();
         TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
diff --git a/sdc-tosca/src/test/java/org/onap/sdc/impl/GetForwardingPathTest.java b/sdc-tosca/src/test/java/org/onap/sdc/impl/GetForwardingPathTest.java
new file mode 100644 (file)
index 0000000..6c910e6
--- /dev/null
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-tosca
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.onap.sdc.impl;
+
+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.SdcToscaParserFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URL;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class GetForwardingPathTest {
+    private ISdcCsarHelper helper;
+    private static Logger log = LoggerFactory.getLogger(GetForwardingPathTest.class.getName());
+
+    public  void setUp(String path) {
+        try {
+            URL resource = GetEntityTest.class.getClassLoader().getResource(path);
+            if (resource != null) {
+                helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
+            }
+
+        } catch (SdcToscaParserException e) {
+            log.error("Failed to create ISdcCsarHelper object from {}.", path, e);
+        }
+    }
+
+    @Test
+    public void fpTest(){
+        setUp("csars/service-Servicefp1-csar.csar");
+
+        EntityQuery entityQuery = EntityQuery.newBuilder("org.openecomp.nodes.ForwardingPath")
+                .build();
+        TopologyTemplateQuery topologyTemplateQuery = TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE)
+                .build();
+
+        List<IEntityDetails> entities = helper.getEntity(entityQuery, topologyTemplateQuery, false);
+        assertThat(entities.size()).isEqualTo(1);
+    }
+}
diff --git a/sdc-tosca/src/test/java/org/onap/sdc/impl/GetVfModulesWithMembersTest.java b/sdc-tosca/src/test/java/org/onap/sdc/impl/GetVfModulesWithMembersTest.java
new file mode 100644 (file)
index 0000000..55bff57
--- /dev/null
@@ -0,0 +1,310 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-tosca
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.onap.sdc.impl;
+
+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.exceptions.SdcToscaParserException;
+import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
+import org.onap.sdc.toscaparser.api.Property;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class GetVfModulesWithMembersTest {
+
+    private static final String SERVICE_WITH_SINGLE_VF_CSAR = "csars/service-JennyVtsbcVlanSvc-csar.csar";
+    private static final String SERVICE_WITH_DOUBLE_VF_CSAR = "csars/service-Metaswitch1-csar.csar";
+    private static final String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID";
+    private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
+    private static final String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion";
+    private static final String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID";
+    private static final String INT_UNUSED_NETWORK = "int_unused_network";
+    private static final String INT_HA_RSG = "int_ha_rsg";
+    private static final String INT_HA_NETWORK = "int_ha_network";
+    private static final String ABSTRACT_RTP_MSC = "abstract_rtp_msc";
+    private static final String ABSTRACT_SSC = "abstract_ssc";
+    private static final String MODULE_1_PERIMETA_SSC_B = "module_1_perimeta_ssc_b";
+    private static final String MODULE_1_PERIMETA_SSC_A = "module_1_perimeta_ssc_a";
+    private static final String MODULE_2_PERIMETA_RTP_MSC = "module_2_perimeta_rtp_msc";
+    private static final String SHARED_PERIMETA_INT_HA_RSG = "shared_perimeta_int_ha_rsg";
+    private static final String SHARED_PERIMETA_INTERNAL_HA_NET_0 = "shared_perimeta_internal_ha_net_0";
+    private static final String SHARED_PERIMETA_INTERNAL_UNUSED_NET_0 = "shared_perimeta_internal_unused_net_0";
+    private static final String ABSTRACT_RTP_MSC_A = "abstract_rtp_msc_a";
+    private static final String ABSTRACT_RTP_MSC_B = "abstract_rtp_msc_b";
+    private static final String ABSTRACT_SSC_B = "abstract_ssc_b";
+    private static final String ABSTRACT_SSC_A = "abstract_ssc_a";
+    private static final String MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL = "Module with index %s does not exist in the model of %s";
+    private ISdcCsarHelper helper;
+    private static Logger log = LoggerFactory.getLogger(GetVfModulesWithMembersTest.class.getName());
+
+    public  void setUp(String path) {
+        try {
+            URL resource = GetEntityTest.class.getClassLoader().getResource(path);
+            if (resource != null) {
+                helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
+            }
+
+        } catch (SdcToscaParserException e) {
+            log.error("Failed to create ISdcCsarHelper object from {}.", path, e);
+        }
+    }
+
+    @Test
+    public void getVfModulesByVfSingleVfTest() {
+        setUp(SERVICE_WITH_SINGLE_VF_CSAR);
+        List<String> expectedVfModules = newArrayList("jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_2_perimeta_rtp_msc..module-1",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..base_perimeta_deployment_create..module-0",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_a..module-3",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_b..module-2");
+
+        List<IEntityDetails> entities = helper.getVFModule("05e77410-a1d8-44fe-8440-b9410c8f98ee");
+        verifyVfModulesNames(expectedVfModules, entities);
+
+        for(IEntityDetails entity : entities){
+            char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
+            List<String> actualMembersList = newArrayList();
+            switch (moduleIndex){
+                case '0':
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"a141bf13-d817-4258-98d6-9f9d51fbe1c6");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"e10458d4-6e4f-40a4-b47b-57a97380efc1");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"8f07ed2f-7f10-4f06-bba6-8f1222ced3ef");
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(INT_UNUSED_NETWORK, INT_HA_RSG, INT_HA_NETWORK));
+                    verifyModuleProperties(entity,moduleIndex,null);
+                    break;
+                case '1':
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"eff0e0fd-67c5-4891-9382-d6959d761442");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"d65b3d01-7b3d-4b27-9bd2-0165bab75709");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"97b648a3-eaf1-4dfb-a685-259b74a1a6fb");
+                    verifyModuleMember(entity, ABSTRACT_RTP_MSC);
+                    verifyModuleProperties(entity,moduleIndex,MODULE_2_PERIMETA_RTP_MSC);
+
+                    break;
+                case '2':
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"1c0e7c32-897c-454a-bb5d-42cc5e8f135c");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"99589e9b-e650-4b0a-aa01-0dbf51adb226");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"fedb631d-211b-4659-a7eb-19421905808c");
+                    verifyModuleMember(entity, ABSTRACT_SSC);
+                    verifyModuleProperties(entity,moduleIndex, MODULE_1_PERIMETA_SSC_B);
+                    break;
+                case '3':
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"5a7f8d9c-e102-4556-9484-3a5be8020977");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"6130333c-6e41-4abe-84aa-7c669c6d2287");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
+                    verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"94d27f05-a116-4662-b330-8758c2b049d7");
+                    verifyModuleMember(entity, ABSTRACT_SSC);
+                    verifyModuleProperties(entity,moduleIndex, MODULE_1_PERIMETA_SSC_A);
+                    break;
+                default:
+                    log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_SINGLE_VF_CSAR));
+            }
+        }
+    }
+
+    @Test
+    public void getVfModulesByServiceSingleVfTest() {
+        setUp(SERVICE_WITH_SINGLE_VF_CSAR);
+        List<String> expectedVfModules = newArrayList("jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_2_perimeta_rtp_msc..module-1",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..base_perimeta_deployment_create..module-0",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_a..module-3",
+                "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_b..module-2");
+
+        List<IEntityDetails> entities = helper.getVFModule();
+        verifyVfModulesNames(expectedVfModules, entities);
+
+        for(IEntityDetails entity : entities){
+            char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
+            List<String> actualMembersList = newArrayList();
+            entity.getMembers();
+            switch (moduleIndex){
+                case '0':
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(INT_UNUSED_NETWORK, INT_HA_RSG, INT_HA_NETWORK));
+                    break;
+                case '1':
+                    verifyModuleMember(entity, ABSTRACT_RTP_MSC);
+                    break;
+                case '2':
+                case '3':
+                    verifyModuleMember(entity, ABSTRACT_SSC);
+                    break;
+                default:
+                    log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_SINGLE_VF_CSAR));
+            }
+        }
+    }
+
+    @Test
+    public void getVfModulesByVfDuplicateVfTest() {
+        setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
+        List<String> expectedVfModules = newArrayList("vsp10..Vsp1..base_perimeta_deployment_create..module-0",
+                "vsp10..Vsp1..module_2_perimeta_rtp_msc..module-1",
+                "vsp10..Vsp1..module_1_perimeta_ssc_a..module-3",
+                "vsp10..Vsp1..module_1_perimeta_ssc_b..module-2");
+
+        List<IEntityDetails> entities = helper.getVFModule("2b5f00de-8816-465c-b7bc-c36e26775e1e");
+        verifyVfModulesNames(expectedVfModules, entities);
+
+        for(IEntityDetails entity : entities){
+            char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
+            List<String> actualMembersList = newArrayList();
+            switch (moduleIndex){
+                case '0':
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(SHARED_PERIMETA_INT_HA_RSG, SHARED_PERIMETA_INTERNAL_HA_NET_0,
+                            SHARED_PERIMETA_INTERNAL_UNUSED_NET_0));
+                    break;
+                case '1':
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(ABSTRACT_RTP_MSC_A, ABSTRACT_RTP_MSC_B));
+                    break;
+                case '2':
+                    verifyModuleMember(entity, ABSTRACT_SSC_B);
+                    break;
+                case '3':
+                    verifyModuleMember(entity, ABSTRACT_SSC_A);
+                    break;
+                default:
+                    log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_DOUBLE_VF_CSAR));
+            }
+        }
+    }
+
+    @Test
+    public void getVfModulesByServiceDuplicateVfTest() {
+        setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
+        List<String> expectedVfModules = newArrayList("vsp10..Vsp1..base_perimeta_deployment_create..module-0",
+                "vsp10..Vsp1..module_2_perimeta_rtp_msc..module-1",
+                "vsp10..Vsp1..module_1_perimeta_ssc_a..module-3",
+                "vsp10..Vsp1..module_1_perimeta_ssc_b..module-2",
+                "vsp11..Vsp1..base_perimeta_deployment_create..module-0",
+                "vsp11..Vsp1..module_2_perimeta_rtp_msc..module-1",
+                "vsp11..Vsp1..module_1_perimeta_ssc_a..module-3",
+                "vsp11..Vsp1..module_1_perimeta_ssc_b..module-2");
+
+        List<IEntityDetails> entities = helper.getVFModule();
+        verifyVfModulesNames(expectedVfModules, entities);
+
+        for(IEntityDetails entity : entities){
+            char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
+            List<String> actualMembersList = newArrayList();
+            switch (moduleIndex){
+                case '0':
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(SHARED_PERIMETA_INT_HA_RSG,
+                            SHARED_PERIMETA_INTERNAL_HA_NET_0,
+                            SHARED_PERIMETA_INTERNAL_UNUSED_NET_0));
+                    break;
+                case '1':
+                    verifyModuleMembers(entity, actualMembersList, Arrays.asList(ABSTRACT_RTP_MSC_A,
+                            ABSTRACT_RTP_MSC_B));
+                    break;
+                case '2':
+                    verifyModuleMember(entity, ABSTRACT_SSC_B);
+                    break;
+                case '3':
+                    verifyModuleMember(entity, ABSTRACT_SSC_A);
+                    break;
+                default:
+                    log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_DOUBLE_VF_CSAR));
+            }
+        }
+    }
+
+    @Test
+    public void getVfModulesManualServiceTest(){
+        setUp("csars/service-Servicenovfmodules-csar.csar");
+        List<IEntityDetails> entities = helper.getVFModule();
+        assertThat(entities.size()).isEqualTo(0);
+    }
+
+    private void verifyVfModulesNames(List<String> expectedVfModules, List<IEntityDetails> entities) {
+        List<String> actualVfModules = newArrayList();
+        for (IEntityDetails entity : entities) {
+            actualVfModules.add(entity.getName());
+        }
+        assertThat(actualVfModules).containsExactlyInAnyOrderElementsOf(expectedVfModules);
+    }
+
+    private void verifyModuleMembers(IEntityDetails entity, List<String> actualMembersList, List<String> expectedMembersList) {
+        entity.getMemberNodes().forEach(member -> actualMembersList.add(member.getName()));
+        assertThat(actualMembersList).containsOnlyElementsOf(expectedMembersList);
+        actualMembersList.clear();
+    }
+
+    private void verifyModuleMember(IEntityDetails entity, String expectedMember) {
+        String actualMember = entity.getMemberNodes().get(0).getName();
+        assertThat(actualMember).isEqualTo(expectedMember);
+    }
+
+    private void verifyModuleMetadata(IEntityDetails entity, String metadataKey, String metadataValue) {
+        assertThat(entity.getMetadata().getValue(metadataKey)).isEqualTo(metadataValue);
+    }
+
+    private void verifyModuleProperties(IEntityDetails entity, char moduleNumber, String vfModuleLabel){
+        Map<String, String> expectedProperties;
+        if (moduleNumber == '0'){
+            expectedProperties = getExpectedPropertiesBase();
+        } else {
+            expectedProperties = getExpectedPropertiesNonBase(vfModuleLabel);
+        }
+        assertThat(expectedProperties).isEqualTo(getActualProperties(entity));
+    }
+
+    private Map<String, String> getExpectedPropertiesNonBase(String vfModuleLabel){
+        Map<String, String> properties = new HashMap<>();
+        properties.put("min_vf_module_instances","0");
+        properties.put("vf_module_label",vfModuleLabel);
+        properties.put("vf_module_type","Expansion");
+        properties.put("isBase","false");
+        properties.put("initial_count","0");
+        properties.put("volume_group","false");
+        return properties;
+    }
+
+    private Map<String,String> getExpectedPropertiesBase(){
+        Map<String, String> properties = new HashMap<>();
+        properties.put("min_vf_module_instances","1");
+        properties.put("vf_module_label","base_perimeta_deployment_create");
+        properties.put("max_vf_module_instances","1");
+        properties.put("vf_module_type","Base");
+        properties.put("isBase","true");
+        properties.put("initial_count","1");
+        properties.put("volume_group","false");
+        return properties;
+    }
+
+    private Map<String,String> getActualProperties(IEntityDetails entity){
+        Map<String, String> properties = new HashMap<>();
+        for (Property prop : entity.getProperties().values()){
+            properties.put(prop.getName(),prop.getValue().toString());
+        }
+        return properties;
+    }
+}
+
index a9af7d9..df8be5b 100644 (file)
@@ -51,7 +51,7 @@ public class EntityQueryTest {
     public void findEntityWhenMetadataIsNull() {
         EntityQuery entityQuery =  EntityQuery.newBuilder(EntityTemplateType.GROUP)
                 .build();
-        assertFalse(entityQuery.isSearchCriteriaMatched(null,"abc"));
+        assertTrue(entityQuery.isSearchCriteriaMatched(null,"abc"));
     }
 
     @Test
@@ -60,7 +60,7 @@ public class EntityQueryTest {
                 .customizationUUID("2345")
                 .uUID("9700")
                 .build();
-        assertFalse(entityQuery.isSearchCriteriaMatched(null, ""));
+        assertTrue(entityQuery.isSearchCriteriaMatched(null, ""));
     }
 
     @Test
diff --git a/sdc-tosca/src/test/resources/csars/service-Metaswitch1-csar.csar b/sdc-tosca/src/test/resources/csars/service-Metaswitch1-csar.csar
new file mode 100644 (file)
index 0000000..7d3d589
Binary files /dev/null and b/sdc-tosca/src/test/resources/csars/service-Metaswitch1-csar.csar differ
diff --git a/sdc-tosca/src/test/resources/csars/service-Servicefp1-csar.csar b/sdc-tosca/src/test/resources/csars/service-Servicefp1-csar.csar
new file mode 100644 (file)
index 0000000..1402509
Binary files /dev/null and b/sdc-tosca/src/test/resources/csars/service-Servicefp1-csar.csar differ
diff --git a/sdc-tosca/src/test/resources/csars/service-Servicenovfmodules-csar.csar b/sdc-tosca/src/test/resources/csars/service-Servicenovfmodules-csar.csar
new file mode 100644 (file)
index 0000000..9b7c54d
Binary files /dev/null and b/sdc-tosca/src/test/resources/csars/service-Servicenovfmodules-csar.csar differ