From a5a24ad0f22bdb06e3194f392df322b48b1b2316 Mon Sep 17 00:00:00 2001 From: "Sheshukov, Natalia (ns019t)" Date: Mon, 9 Apr 2018 15:03:06 +0300 Subject: vLAN Tagging Support Tosca Groups - TOSCA parser (refactoring) Change-Id: I10c6b8e5356bea0e85e8b448c23d9f05ac3ab837 Issue-ID: SDC-1199 Signed-off-by: Sheshukov, Natalia (ns019t) --- pom.xml | 2 +- .../onap/sdc/tosca/parser/api/ISdcCsarHelper.java | 34 +-- .../sdc/tosca/parser/impl/SdcCsarHelperImpl.java | 282 ++++++++------------- .../sdc/tosca/parser/impl/SdcPropertyNames.java | 3 + .../org/onap/sdc/impl/SdcToscaParserBasicTest.java | 10 + .../onap/sdc/impl/ToscaParserNodeTemplateTest.java | 133 +++++++++- src/test/resources/csars/resource-Policy-csar.csar | Bin 27747 -> 27745 bytes src/test/resources/csars/resource-Vdbe-csar.csar | Bin 0 -> 68955 bytes .../resources/csars/service-AlService-csar.csar | Bin 37565 -> 37564 bytes .../resources/csars/service-Groupstest-csar.csar | Bin 0 -> 177826 bytes src/test/resources/csars/service-VdbePx-csar.csar | Bin 0 -> 39145 bytes src/test/resources/csars/service-VdbeSrv-csar.csar | Bin 0 -> 75330 bytes .../resources/csars/service-VlanD2dSrv-csar.csar | Bin 0 -> 75442 bytes version.properties | 2 +- 14 files changed, 264 insertions(+), 202 deletions(-) create mode 100644 src/test/resources/csars/resource-Vdbe-csar.csar create mode 100644 src/test/resources/csars/service-Groupstest-csar.csar create mode 100644 src/test/resources/csars/service-VdbePx-csar.csar create mode 100644 src/test/resources/csars/service-VdbeSrv-csar.csar create mode 100644 src/test/resources/csars/service-VlanD2dSrv-csar.csar diff --git a/pom.xml b/pom.xml index d0dfa36..65e4383 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ org.onap.sdc.jtosca jtosca - 1.3.3-SNAPSHOT + 1.3.4-SNAPSHOT diff --git a/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java b/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java index b5eed35..4f2ef29 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java +++ b/src/main/java/org/onap/sdc/tosca/parser/api/ISdcCsarHelper.java @@ -19,6 +19,7 @@ package org.onap.sdc.tosca.parser.api; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -455,21 +456,21 @@ public interface ISdcCsarHelper { * Get all the policies of the main topology template (either VF or service) * @return the list of the policies */ - public List>> getPoliciesOfTopologyTemplate(); + public List getPoliciesOfTopologyTemplate(); /** * Get all the policies of the main topology template (either VF or service) specified by policy type * @param policyTypeName the name of the policy type * @return the list of the policies */ - public List>> getPoliciesOfTopologyTemplateByToscaPolicyType(String policyTypeName); + public List getPoliciesOfTopologyTemplateByToscaPolicyType(String policyTypeName); /** * Get all the policies of the origin component (nested topology template) of the node template * @param nodeTemplate the node template * @return the list of the policies */ - public List> getPoliciesOfOriginOfNodeTemplate(NodeTemplate nodeTemplate); + public List getPoliciesOfOriginOfNodeTemplate(NodeTemplate nodeTemplate); /** * Get all the policies of the origin component (nested topology template) of the node template specified by policy type @@ -477,7 +478,7 @@ public interface ISdcCsarHelper { * @param policyTypeName the name of the policy type * @return the list of the policies */ - public List> getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName); + public List getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName); /** * Get all the node templates of the topology template, which are the targets of the policy specified by name @@ -492,7 +493,7 @@ public interface ISdcCsarHelper { * @param policyName the name of the policy * @return the list of the node templates */ - public List> getPolicyTargetsFromOrigin(NodeTemplate nodeTemplate, String policyName); + public List getPolicyTargetsFromOrigin(NodeTemplate nodeTemplate, String policyName); /** * Get the node template of the topology template specified by name @@ -506,7 +507,7 @@ public interface ISdcCsarHelper { * @param targetNode the node template * @return the list of the policies */ - public List>> getPoliciesOfTarget(NodeTemplate targetNode); + public List getPoliciesOfTarget(NodeTemplate targetNode); /** * Get all the policies of the specified type, which contain the specified node template as a target @@ -514,28 +515,27 @@ public interface ISdcCsarHelper { * @param policyTypeName the name of the policy type * @return the list of the policies */ - public List>> getPoliciesOfTargetByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName); - - /** - * Get all groups of this of the main topology template (either VF or service) - * @return the list of the groups - */ - public List>> getGroupsOfTopologyTemplate(); + public List getPoliciesOfTargetByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName); /** * Get all the groups of the origin component (nested topology template) of the node template * @param nodeTemplate the node template * @return the list of the groups */ - public List> getGroupsOfOriginOfNodeTemplate(NodeTemplate nodeTemplate); + public ArrayList getGroupsOfOriginOfNodeTemplate(NodeTemplate nodeTemplate); /** * Get all groups of this of the main topology template (either VF or service) by specified tosca group type * @param groupType the group type * @return the list of the groups */ - public List>> getGroupsOfTopologyTemplateByToscaGroupType(String groupType); + public ArrayList getGroupsOfTopologyTemplateByToscaGroupType(String groupType); + /** + * Get all groups of this of the main topology template (either VF or service) + * @return the list of the groups + */ + public ArrayList getGroupsOfTopologyTemplate(); /** * Get all groups of this of the origin component (nested topology template) of the node template by specified tosca group type @@ -543,7 +543,7 @@ public interface ISdcCsarHelper { * @param groupType the group type * @return the list of the groups */ - public List> getGroupsOfOriginOfNodeTemplateByToscaGroupType(NodeTemplate nodeTemplate, String groupType); + public ArrayList getGroupsOfOriginOfNodeTemplateByToscaGroupType(NodeTemplate nodeTemplate, String groupType); /** * Get members of the group belongs to the main topology template (either VF or service) by group name @@ -558,6 +558,6 @@ public interface ISdcCsarHelper { * @param groupName the name of the group * @return the list of the node templates */ - public List> getGroupMembersOfOriginOfNodeTemplate(NodeTemplate nodeTemplate, String groupName); + public List getGroupMembersOfOriginOfNodeTemplate(NodeTemplate nodeTemplate, String groupName); } \ No newline at end of file diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java index 8675d5e..8e16c14 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcCsarHelperImpl.java @@ -20,16 +20,34 @@ package org.onap.sdc.tosca.parser.impl; -import java.util.*; -import java.util.Map.Entry; import static java.util.stream.Collectors.toList; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; import org.onap.sdc.tosca.parser.config.ConfigurationManager; import org.onap.sdc.tosca.parser.utils.GeneralUtility; import org.onap.sdc.tosca.parser.utils.SdcToscaUtility; -import org.onap.sdc.toscaparser.api.*; +import org.onap.sdc.toscaparser.api.CapabilityAssignment; +import org.onap.sdc.toscaparser.api.CapabilityAssignments; +import org.onap.sdc.toscaparser.api.Group; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Policy; +import org.onap.sdc.toscaparser.api.Property; +import org.onap.sdc.toscaparser.api.RequirementAssignment; +import org.onap.sdc.toscaparser.api.RequirementAssignments; +import org.onap.sdc.toscaparser.api.SubstitutionMappings; +import org.onap.sdc.toscaparser.api.TopologyTemplate; +import org.onap.sdc.toscaparser.api.ToscaTemplate; import org.onap.sdc.toscaparser.api.elements.Metadata; import org.onap.sdc.toscaparser.api.elements.NodeType; import org.onap.sdc.toscaparser.api.functions.Function; @@ -37,8 +55,6 @@ import org.onap.sdc.toscaparser.api.parameters.Input; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.onap.sdc.tosca.parser.impl.SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID; - public class SdcCsarHelperImpl implements ISdcCsarHelper { private static final String PATH_DELIMITER = "#"; @@ -57,47 +73,36 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { } @Override - public List>> getPoliciesOfTarget(NodeTemplate nodeTemplate) { + public List getPoliciesOfTarget(NodeTemplate nodeTemplate) { return getPoliciesOfNodeTemplate(nodeTemplate.getName()) .stream() .sorted(Policy::compareTo) - .map(this::convertPolicyToMap) .collect(toList()); } @Override - public List> getPoliciesOfOriginOfNodeTemplate(NodeTemplate nodeTemplate) { - List> policies = new ArrayList<>(); - if(toscaTemplate.getNestedTopologyTemplates() != null && !toscaTemplate.getNestedTopologyTemplates().isEmpty()){ - String invariantUUID = nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID); - Optional nestedTopTmpl = toscaTemplate.getNestedTopologyTemplates() - .values() - .stream() - .filter(nt->invariantUuidEqualsTo(invariantUUID, nt)) - .findFirst(); - if(nestedTopTmpl.isPresent()){ - policies = getPoliciesSection(nestedTopTmpl.get()); - } - } - return policies; + public List getPoliciesOfOriginOfNodeTemplate(NodeTemplate nodeTemplate) { + if(StringUtils.isNotEmpty(nodeTemplate.getName())){ + return getNodeTemplateByName(nodeTemplate.getName()).getOriginComponentTemplate().getPolicies(); + } + return new ArrayList<>(); } @Override - public List>> getPoliciesOfTargetByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName) { + public List getPoliciesOfTargetByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName) { return getPoliciesOfNodeTemplate(nodeTemplate.getName()) .stream() .filter(p->p.getType().equals(policyTypeName)) .sorted(Policy::compareTo) - .map(this::convertPolicyToMap) .collect(toList()); } @Override - public List> getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName) { + public List getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(NodeTemplate nodeTemplate, String policyTypeName) { return getPoliciesOfOriginOfNodeTemplate(nodeTemplate) .stream() - .filter(p->typeEqualsTo(p, policyTypeName)) - .sorted(this::comparePolicyMapObjects) + .filter(p->p.getType().equals(policyTypeName)) + .sorted(Policy::compareTo) .collect(toList()); } @@ -113,63 +118,40 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { } @Override - public List> getPolicyTargetsFromOrigin(NodeTemplate nodeTemplate, String policyName) { - List targets = getTargetsOfPolicyOfNestedTopologyTemplate(nodeTemplate, policyName); - if(targets.isEmpty()){ - return new ArrayList<>(); + public List getPolicyTargetsFromOrigin(NodeTemplate nodeTemplate, String policyName) { + Optional policyOpt = null; + if(StringUtils.isNotEmpty(nodeTemplate.getName())){ + policyOpt = getNodeTemplateByName(nodeTemplate.getName()).getOriginComponentTemplate().getPolicies().stream().filter(p -> p.getName().equals(policyName)).findFirst(); } - return toscaTemplate.getNestedTopologyTemplates() - .values() - .stream() - .map(this::getNodeTemplatesSection) - .filter(nt->targets.contains(nt.keySet().iterator().next())) - .collect(toList()); + if(policyOpt.isPresent()){ + List targets = policyOpt.get().getTargets(); + return nodeTemplate.getOriginComponentTemplate().getNodeTemplates() + .stream() + .filter(nt -> targets.contains(nt.getName())).collect(Collectors.toList()); + } + return new ArrayList<>(); } @Override - public List>> getPoliciesOfTopologyTemplate(){ + public List getPoliciesOfTopologyTemplate(){ if(toscaTemplate.getPolicies() == null) return new ArrayList<>(); return toscaTemplate.getPolicies() .stream() .sorted(Policy::compareTo) - .map(this::convertPolicyToMap) .collect(toList()); } @Override - public List>> getPoliciesOfTopologyTemplateByToscaPolicyType(String policyTypeName){ + public List getPoliciesOfTopologyTemplateByToscaPolicyType(String policyTypeName){ if(toscaTemplate.getPolicies() == null) return new ArrayList<>(); return toscaTemplate.getPolicies() .stream() .filter(p->p.getType().equals(policyTypeName)) .sorted(Policy::compareTo) - .map(this::convertPolicyToMap) .collect(toList()); } - - - private List getTargetsOfPolicyOfNestedTopologyTemplate(NodeTemplate nodeTemplate, String policyName) { - if(toscaTemplate.getNodeTemplates() == null){ - return new ArrayList<>(); - } - Optional> policy = getPolicyOfNestedTopologyTemplateByName(nodeTemplate, policyName); - if(!policy.isPresent()){ - return new ArrayList<>(); - } - return getTargetsSection(policy.get()); - } - - private Optional> getPolicyOfNestedTopologyTemplateByName(NodeTemplate nodeTemplate, String policyName) { - return getPoliciesOfOriginOfNodeTemplate(nodeTemplate).stream() - .filter(p->policyNameEqualsTo(p, policyName)) - .findFirst(); - } - - private boolean policyNameEqualsTo(Map policy, String policyName) { - return policy != null && !policy.isEmpty() && policy.keySet().iterator().next().equals(policyName); - } public NodeTemplate getNodeTemplateByName(String nodeTemplateName) { if(toscaTemplate.getNodeTemplates() == null) @@ -180,86 +162,6 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { .findFirst().orElse(null); } - - private int comparePolicyMapObjects(Map policy, Map otherPolicy){ - if(policy.equals(otherPolicy)) - return 0; - return getTypeSection(policy).compareTo(getTypeSection(otherPolicy)) == 0 ? getNameSection(policy).compareTo(getNameSection(otherPolicy)) : getTypeSection(policy).compareTo(getTypeSection(otherPolicy)); - } - - @SuppressWarnings("unchecked") - private List getTargetsSection(Map policy) { - if(policy == null || policy.isEmpty()){ - return new ArrayList<>(); - } - List targets = (List) ((Map)policy.values().iterator().next()).get(SdcPropertyNames.PROPERTY_NAME_TARGETS); - if(targets == null){ - return new ArrayList<>(); - } - return targets; - } - @SuppressWarnings("unchecked") - private boolean typeEqualsTo(Map policy, String policyTypeName) { - if(policy.values().iterator().hasNext()){ - return ((Map)policy.values().iterator().next()).get(SdcPropertyNames.PROPERTY_NAME_TYPE).equals(policyTypeName); - } - return false; - } - - private String getNameSection(Map policy) { - Object name = policy.get(SdcPropertyNames.PROPERTY_NAME_NAME); - if(name == null) - return ""; - return (String)name; - } - - private String getTypeSection(Map policy) { - Object type = policy.get(SdcPropertyNames.PROPERTY_NAME_TYPE); - if(type == null) - return ""; - return (String)type; - } - - @SuppressWarnings("unchecked") - private List> getPoliciesSection(Object nestedTopTmpl) { - List> policies = (List>)getTopologyTemplateSection(nestedTopTmpl).get(SdcPropertyNames.PROPERTY_NAME_POLICIES); - if(policies == null || policies.isEmpty()) - return new ArrayList<>(); - return policies; - } - - @SuppressWarnings("unchecked") - private Map getNodeTemplatesSection(Object topologyTemplate) { - Map nodeTemplates = (Map)getTopologyTemplateSection(topologyTemplate).get(SdcPropertyNames.PROPERTY_NAME_NODE_TEMPLATES); - if(nodeTemplates == null || nodeTemplates.isEmpty()) - return new HashMap<>(); - return nodeTemplates; - } - - @SuppressWarnings("unchecked") - private Map getTopologyTemplateSection(Object topologyTemplate) { - Map topologyTemplateSection = (Map)((Map)topologyTemplate).get(SdcPropertyNames.PROPERTY_NAME_TOPOLOGY_TEMPLATE); - if(topologyTemplateSection == null || topologyTemplateSection.isEmpty()) - return new HashMap<>(); - return topologyTemplateSection; - } - - @SuppressWarnings("unchecked") - private boolean invariantUuidEqualsTo(String invariantUUID, Object nt) { - return ((Map)((Map)nt).get(SdcPropertyNames.PROPERTY_NAME_METADATA)).get(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).equals(invariantUUID); - } - - private Map> convertPolicyToMap(Policy policy){ - Map> policyMap = new HashMap<>(); - Map policyValue = new HashMap<>(); - policyMap.put(policy.getName(), policyValue); - policyValue.put(SdcPropertyNames.PROPERTY_NAME_TYPE, policy.getType()); - policyValue.put(SdcPropertyNames.PROPERTY_NAME_METADATA, policy.getmetadata()); - policyValue.put(SdcPropertyNames.PROPERTY_NAME_TARGETS, policy.getTargets()); - policyValue.put(SdcPropertyNames.PROPERTY_NAME_PROPERTIES, policy.getPolicyProperties()); - return policyMap; - } - private List getPoliciesOfNodeTemplate(String nodeTemplateName) { if(toscaTemplate.getPolicies() == null) return new ArrayList<>(); @@ -273,6 +175,10 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { return getPolicyByName(policyName).map(Policy::getTargets).orElse(new ArrayList<>()); } + private List getGroupMembers(String groupName) { + return getGroupByName(groupName).map(Group::getMembers).orElse(new ArrayList<>()); + } + private Optional getPolicyByName(String policyName) { if(toscaTemplate.getPolicies() == null) return Optional.empty(); @@ -281,6 +187,14 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { .filter(p -> p.getName().equals(policyName)).findFirst(); } + private Optional getGroupByName(String groupName) { + if(toscaTemplate.getGroups() == null) + return Optional.empty(); + return toscaTemplate.getGroups() + .stream() + .filter(g -> g.getName().equals(groupName)).findFirst(); + } + @Override //Sunny flow - covered with UT, flat and nested public String getNodeTemplatePropertyLeafValue(NodeTemplate nodeTemplate, String leafValuePath) { @@ -1029,44 +943,75 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { } @Override - public List>> getGroupsOfTopologyTemplate() { - // TODO Auto-generated method stub - return null; + public ArrayList getGroupsOfOriginOfNodeTemplate(NodeTemplate nodeTemplate) { + if(StringUtils.isNotEmpty(nodeTemplate.getName())){ + return getNodeTemplateByName(nodeTemplate.getName()).getSubMappingToscaTemplate().getGroups(); + } + return new ArrayList<>(); } - + @Override - public List> getGroupsOfOriginOfNodeTemplate(NodeTemplate nodeTemplate) { - // TODO Auto-generated method stub - return null; + public ArrayList getGroupsOfTopologyTemplateByToscaGroupType(String groupType) { + if(toscaTemplate.getGroups() == null) + return new ArrayList<>(); + return (ArrayList) toscaTemplate.getGroups() + .stream() + .filter(g->g.getType().equals(groupType)) + .sorted(Group::compareTo) + .collect(toList()); } - + @Override - public List>> getGroupsOfTopologyTemplateByToscaGroupType(String groupType) { - // TODO Auto-generated method stub - return null; + public ArrayList getGroupsOfTopologyTemplate() { + return toscaTemplate.getGroups() == null ? new ArrayList<>() : toscaTemplate.getGroups(); } @Override - public List> getGroupsOfOriginOfNodeTemplateByToscaGroupType(NodeTemplate nodeTemplate, String groupType) { - // TODO Auto-generated method stub - return null; + public ArrayList getGroupsOfOriginOfNodeTemplateByToscaGroupType(NodeTemplate nodeTemplate, String groupType) { + return (ArrayList) getGroupsOfOriginOfNodeTemplate(nodeTemplate) + .stream() + .filter(g->g.getType().equals(groupType)) + .sorted(Group::compareTo) + .collect(toList()); } @Override public List getGroupMembersFromTopologyTemplate(String groupName) { - // TODO Auto-generated method stub - return null; + if(toscaTemplate.getNodeTemplates() == null){ + return new ArrayList<>(); + } + List membersNames = getGroupMembers(groupName); + return toscaTemplate.getNodeTemplates().stream() + .filter(nt->membersNames.contains(nt.getName())) + .collect(toList()); } @Override - public List> getGroupMembersOfOriginOfNodeTemplate(NodeTemplate nodeTemplate, String groupName) { - // TODO Auto-generated method stub - return null; + public List getGroupMembersOfOriginOfNodeTemplate(NodeTemplate nodeTemplate, String groupName) { + ArrayList groups = getGroupsOfOriginOfNodeTemplate(nodeTemplate); + if(!groups.isEmpty()){ + Optional group = groups.stream().filter(g -> g.getName().equals(groupName)).findFirst(); + if(group.isPresent()){ + return nodeTemplate.getSubMappingToscaTemplate().getNodeTemplates().stream() + .filter(nt -> group.get().getMembers().contains(nt.getName())) + .collect(toList()); + } + } + return new ArrayList<>(); + } + + public List getServiceNodeTemplateBySdcType(SdcTypes sdcType) { + if (sdcType == null) { + log.error("getServiceNodeTemplateBySdcType - sdcType is null or empty"); + return new ArrayList<>(); + } + + TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate(); + return getNodeTemplateBySdcType(topologyTemplate, sdcType); } - - /************************************* helper functions ***********************************/ + /************************************* helper functions ***********************************/ private boolean isVNFType(NodeTemplate nt) { return nt.getType().endsWith("VnfConfiguration"); } @@ -1091,18 +1036,7 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { return filterMap; } - - public List getServiceNodeTemplateBySdcType(SdcTypes sdcType) { - if (sdcType == null) { - log.error("getServiceNodeTemplateBySdcType - sdcType is null or empty"); - return new ArrayList<>(); - } - - TopologyTemplate topologyTemplate = toscaTemplate.getTopologyTemplate(); - return getNodeTemplateBySdcType(topologyTemplate, sdcType); - } - /************************************* helper functions ***********************************/ private List getNodeTemplateBySdcType(TopologyTemplate topologyTemplate, SdcTypes sdcType) { if (sdcType == null) { diff --git a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java index db4d167..6f7e568 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java +++ b/src/main/java/org/onap/sdc/tosca/parser/impl/SdcPropertyNames.java @@ -111,7 +111,10 @@ public class SdcPropertyNames { public static String PROPERTY_NAME_TOPOLOGY_TEMPLATE = "topology_template"; public static String PROPERTY_NAME_NODE_TEMPLATES = "node_templates"; public static String PROPERTY_NAME_POLICIES = "policies"; + public static String PROPERTY_NAME_GROUPS = "groups"; public static String PROPERTY_NAME_METADATA = "metadata"; public static String PROPERTY_NAME_PROPERTIES = "properties"; public static String PROPERTY_NAME_TARGETS = "targets"; + public static String PROPERTY_NAME_MEMBERS = "members"; + public static String PROPERTY_NAME_CAPABILITIES = "capabilities"; } diff --git a/src/test/java/org/onap/sdc/impl/SdcToscaParserBasicTest.java b/src/test/java/org/onap/sdc/impl/SdcToscaParserBasicTest.java index e1ea39f..ff4f3db 100644 --- a/src/test/java/org/onap/sdc/impl/SdcToscaParserBasicTest.java +++ b/src/test/java/org/onap/sdc/impl/SdcToscaParserBasicTest.java @@ -37,6 +37,11 @@ public abstract class SdcToscaParserBasicTest { static ISdcCsarHelper csarHelperServiceWithCrs; static ISdcCsarHelper csarHelperServicePolicy; static ISdcCsarHelper csarHelperVfPolicy; + static ISdcCsarHelper csarHelperServiceGroups; + static ISdcCsarHelper csarHelperServiceGroupsInputs; + static ISdcCsarHelper csarHelperServiceGroupsCapabilities; + static ISdcCsarHelper csarHelperVfGroupsPolicies; + static ISdcCsarHelper csarHelperServiceGroupsPolicies; static Map>> fdntCsarHelper_Data; @@ -61,6 +66,11 @@ public abstract class SdcToscaParserBasicTest { csarHelperServiceWithCrs = getCsarHelper("csars/service-CrTestService-csar.csar"); csarHelperVfPolicy = getCsarHelper("csars/resource-Policy-csar.csar"); csarHelperServicePolicy = getCsarHelper("csars/service-AlService-csar.csar"); + csarHelperServiceGroups = getCsarHelper("csars/service-Groupstest-csar.csar"); + csarHelperServiceGroupsInputs = getCsarHelper("csars/service-VdbeSrv-csar.csar"); + csarHelperServiceGroupsCapabilities = getCsarHelper("csars/service-VdbePx-csar.csar"); + csarHelperVfGroupsPolicies = getCsarHelper("csars/resource-Vdbe-csar.csar"); + csarHelperServiceGroupsPolicies = getCsarHelper("csars/service-VlanD2dSrv-csar.csar"); fdntCsarHelper_Data = new HashMap>>(){ { diff --git a/src/test/java/org/onap/sdc/impl/ToscaParserNodeTemplateTest.java b/src/test/java/org/onap/sdc/impl/ToscaParserNodeTemplateTest.java index 9cd56c4..0acfdf6 100644 --- a/src/test/java/org/onap/sdc/impl/ToscaParserNodeTemplateTest.java +++ b/src/test/java/org/onap/sdc/impl/ToscaParserNodeTemplateTest.java @@ -5,18 +5,21 @@ import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import java.util.*; +import java.util.stream.Collectors; + import com.google.common.collect.ImmutableMap; import org.apache.commons.lang3.tuple.Pair; import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; import org.onap.sdc.tosca.parser.impl.FilterType; import org.onap.sdc.tosca.parser.impl.SdcTypes; +import org.onap.sdc.toscaparser.api.CapabilityAssignment; +import org.onap.sdc.toscaparser.api.CapabilityAssignments; import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Policy; import org.onap.sdc.toscaparser.api.Property; import org.testng.annotations.Test; -import fj.data.fingertrees.Node; - public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { //region getServiceVfList @@ -334,6 +337,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { //endregion //region getCpPropertiesFromVfc + @SuppressWarnings("unchecked") @Test public void testGetCpPropertiesFromVfc() { List vfcs = ipAssignCsarHelper.getVfcListByVf("b5190df2-7880-4d6f-836f-56ab17e1b85b"); @@ -759,6 +763,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { //endregion //region resolve get_input + @SuppressWarnings("rawtypes") @Test public void testResolveGetInputForComplexTypeAndList() { //port_pd01_port_ip_requirements is of type list @@ -793,6 +798,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { assertEquals("1", propertyAsObject); } + @SuppressWarnings("rawtypes") @Test public void testResolveGetInputForMap() { //This test covers "default" resolving of primitive - as Map @@ -835,6 +841,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { // region Added by QA - Continue with testings of resolve get_input + @SuppressWarnings("rawtypes") @Test public void testResolveGetInputForComplexTypeAndListWithFalseValue() { @@ -926,6 +933,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { // endregion Added by QA - Continue with testings of resolve get_input + @SuppressWarnings("rawtypes") @Test public void testResolveGetInputArrayStructure() { List vfcs = resolveGetInputCsarQA.getVfcListByVf("b5190df2-7880-4d6f-836f-56ab17e1b85b"); @@ -968,7 +976,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { public void testGetPoliciesOfOriginOfNodeTemplate() { NodeTemplate nt0 = csarHelperServicePolicy.getNodeTemplateByName("al_vf 0"); NodeTemplate nt1 = csarHelperServicePolicy.getNodeTemplateByName("al_vf 1"); - List> policies = csarHelperServicePolicy.getPoliciesOfOriginOfNodeTemplate(nt0); + List policies = csarHelperServicePolicy.getPoliciesOfOriginOfNodeTemplate(nt0); assertNotNull(policies); assertEquals(policies.size(), 3); policies = csarHelperServicePolicy.getPoliciesOfOriginOfNodeTemplate(nt1); @@ -980,7 +988,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { public void testGetPoliciesOfOriginOfNodeTemplateByToscaPolicyType() { NodeTemplate nt0 = csarHelperServicePolicy.getNodeTemplateByName("al_vf 0"); NodeTemplate nt1 = csarHelperServicePolicy.getNodeTemplateByName("al_vf 1"); - List> policies = csarHelperServicePolicy.getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(nt0, "org.openecomp.policies.placement.Colocate"); + List policies = csarHelperServicePolicy.getPoliciesOfOriginOfNodeTemplateByToscaPolicyType(nt0, "org.openecomp.policies.placement.Colocate"); assertNotNull(policies); assertEquals(policies.size(), 1); @@ -1007,7 +1015,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { @Test public void testGetPolicyTargetNodeTemplatesFromOrigin() { - List> nodeTemplates = csarHelperServicePolicy.getPolicyTargetsFromOrigin(csarHelperServicePolicy.getNodeTemplateByName("al_vf 1"),"policy..Colocate..0"); + List nodeTemplates = csarHelperServicePolicy.getPolicyTargetsFromOrigin(csarHelperServicePolicy.getNodeTemplateByName("al_vf 1"),"policy..Colocate..0"); assertNotNull(nodeTemplates); assertEquals(nodeTemplates.size(), 2); } @@ -1015,7 +1023,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { @Test public void testGetPoliciesOfNodeTemplate() { NodeTemplate nt0 = csarHelperVfPolicy.getNodeTemplateByName("al_vfc 1"); - List>> policies = csarHelperVfPolicy.getPoliciesOfTarget(nt0); + List policies = csarHelperVfPolicy.getPoliciesOfTarget(nt0); assertNotNull(policies); assertEquals(policies.size(), 1); } @@ -1023,14 +1031,14 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { @Test public void testGetPoliciesOfNodeTemplateByToscaPolicyType() { NodeTemplate nt0 = csarHelperVfPolicy.getNodeTemplateByName("al_vfc 1"); - List>> policies = csarHelperVfPolicy.getPoliciesOfTargetByToscaPolicyType(nt0, "org.openecomp.policies.placement.Colocate"); + List policies = csarHelperVfPolicy.getPoliciesOfTargetByToscaPolicyType(nt0, "org.openecomp.policies.placement.Colocate"); assertNotNull(policies); assertEquals(policies.size(), 1); } @Test public void testGetPoliciesOfTopologyTemplate() { - List>> policies = csarHelperVfPolicy.getPoliciesOfTopologyTemplate(); + List policies = csarHelperVfPolicy.getPoliciesOfTopologyTemplate(); assertNotNull(policies); assertEquals(policies.size(), 1); } @@ -1041,7 +1049,114 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { assertNotNull(nodeTemplates); assertEquals(nodeTemplates.size(), 2); } - + + @Test + public void testGetGroups() { + NodeTemplate groupsVf = csarHelperServiceGroups.getNodeTemplateByName("GroupsVf 0"); + NodeTemplate vlanGroups = csarHelperServiceGroups.getNodeTemplateByName("VlanGroups 0"); + + ArrayList groups = csarHelperServiceGroups.getGroupsOfOriginOfNodeTemplate(groupsVf); + assertNotNull(groups); + assertEquals(groups.size(), 5); + + groups = csarHelperServiceGroups.getGroupsOfOriginOfNodeTemplate(vlanGroups); + assertNotNull(groups); + assertEquals(groups.size(), 4); + + groups = csarHelperServiceGroups.getGroupsOfOriginOfNodeTemplateByToscaGroupType(groupsVf, "org.openecomp.groups.VfcInstanceGroup"); + assertNotNull(groups); + assertEquals(groups.size(), 1); + + groups = csarHelperServiceGroups.getGroupsOfOriginOfNodeTemplateByToscaGroupType(vlanGroups, "org.openecomp.groups.VfcInstanceGroup"); + assertNotNull(groups); + assertEquals(groups.size(), 2); + + List members = csarHelperServiceGroups.getGroupMembersOfOriginOfNodeTemplate(groupsVf, "x_group"); + + assertNotNull(members); + assertEquals(members.size(), 3); + Optional memberOpt = (members.stream().filter(m -> m.getName().equals("lb_1"))).findFirst(); + assertTrue(memberOpt.isPresent()); + memberOpt = (members.stream().filter(m -> m.getName().equals("lb_2"))).findFirst(); + assertTrue(memberOpt.isPresent()); + memberOpt = (members.stream().filter(m -> m.getName().equals("mg_4"))).findFirst(); + assertTrue(memberOpt.isPresent()); + + members = csarHelperServiceGroups.getGroupMembersOfOriginOfNodeTemplate(vlanGroups, "oam_group"); + assertNotNull(members); + assertEquals(members.size(), 1); + memberOpt = (members.stream().filter(m -> m.getName().equals("abstract_vdbe_1"))).findFirst(); + assertTrue(memberOpt.isPresent()); + + members = csarHelperServiceGroups.getGroupMembersOfOriginOfNodeTemplate(vlanGroups, "untr_group"); + assertNotNull(members); + assertEquals(members.size(), 1); + memberOpt = (members.stream().filter(m -> m.getName().equals("abstract_vdbe"))).findFirst(); + assertTrue(memberOpt.isPresent()); + } + + @Test + public void testGetGroupsInputsProperties() { + NodeTemplate vdbe0 = csarHelperServiceGroupsInputs.getNodeTemplateByName("vDBE 0"); + ArrayList groups = csarHelperServiceGroupsInputs.getGroupsOfOriginOfNodeTemplate(vdbe0); + assertNotNull(groups); + assertEquals(groups.size(), 4); + + Optional groupOpt = (groups.stream().filter(g -> g.getName().equals("oam_group"))).findFirst(); + assertTrue(groupOpt.isPresent()); + Group group = groupOpt.get(); + validateInputsProperties(vdbe0, group); + + groupOpt = (groups.stream().filter(g -> g.getName().equals("untr_group"))).findFirst(); + assertTrue(groupOpt.isPresent()); + group = groupOpt.get(); + validateInputsProperties(vdbe0, group); + } + + @Test + public void testGetGroupsInputsCapabilities() { + NodeTemplate vdbe = csarHelperServiceGroupsCapabilities.getNodeTemplateByName("vdbe_srv_proxy 0"); + CapabilityAssignments capabilities = csarHelperServiceGroupsCapabilities.getCapabilitiesOf(vdbe); + CapabilityAssignment capability = capabilities.getCapabilityByName("vdbe0.oam_group.vlan_assignment"); + assertNotNull(capability); + } + + @SuppressWarnings("unchecked") + private void validateInputsProperties(NodeTemplate vdbe0, Group group) { + assertNotNull(group.getPropertiesObjects()); + ArrayList properties = group.getPropertiesObjects(); + + List inputs = properties.stream() + .filter(p -> p.getValue() instanceof Map) + .map(p -> ((Map)p.getValue()).get("get_input")) + .collect(Collectors.toList()); + + assertEquals(inputs.size(), 2); + + inputs.forEach(i -> assertTrue(vdbe0.getProperties().containsKey(i))); + + List list = vdbe0.getProperties().entrySet().stream() + .filter(e -> inputs.contains(e.getKey())) + .map(e -> e.getValue().getValue()) + .collect(Collectors.toList()); + assertEquals(list.size(), 2); + } + + @Test + public void testGetVfGroupsPolicies() { + List policies = csarHelperVfGroupsPolicies.getPoliciesOfTopologyTemplate(); + assertNotNull(policies); + List groups = csarHelperVfGroupsPolicies.getGroupsOfTopologyTemplate(); + assertNotNull(groups); + } + @Test + public void testGetServiceGroupsPolicies() { + NodeTemplate nt = csarHelperServiceGroupsPolicies.getNodeTemplateByName("vDBE 0"); + List policies = csarHelperServiceGroupsPolicies.getPoliciesOfOriginOfNodeTemplate(nt); + assertNotNull(policies); + List groups = csarHelperServiceGroupsPolicies.getGroupsOfOriginOfNodeTemplate(nt); + assertNotNull(groups); + } } diff --git a/src/test/resources/csars/resource-Policy-csar.csar b/src/test/resources/csars/resource-Policy-csar.csar index d6d7b42..67cc528 100644 Binary files a/src/test/resources/csars/resource-Policy-csar.csar and b/src/test/resources/csars/resource-Policy-csar.csar differ diff --git a/src/test/resources/csars/resource-Vdbe-csar.csar b/src/test/resources/csars/resource-Vdbe-csar.csar new file mode 100644 index 0000000..3bf878c Binary files /dev/null and b/src/test/resources/csars/resource-Vdbe-csar.csar differ diff --git a/src/test/resources/csars/service-AlService-csar.csar b/src/test/resources/csars/service-AlService-csar.csar index 2532683..c02097d 100644 Binary files a/src/test/resources/csars/service-AlService-csar.csar and b/src/test/resources/csars/service-AlService-csar.csar differ diff --git a/src/test/resources/csars/service-Groupstest-csar.csar b/src/test/resources/csars/service-Groupstest-csar.csar new file mode 100644 index 0000000..2428c03 Binary files /dev/null and b/src/test/resources/csars/service-Groupstest-csar.csar differ diff --git a/src/test/resources/csars/service-VdbePx-csar.csar b/src/test/resources/csars/service-VdbePx-csar.csar new file mode 100644 index 0000000..3032768 Binary files /dev/null and b/src/test/resources/csars/service-VdbePx-csar.csar differ diff --git a/src/test/resources/csars/service-VdbeSrv-csar.csar b/src/test/resources/csars/service-VdbeSrv-csar.csar new file mode 100644 index 0000000..2958cfc Binary files /dev/null and b/src/test/resources/csars/service-VdbeSrv-csar.csar differ diff --git a/src/test/resources/csars/service-VlanD2dSrv-csar.csar b/src/test/resources/csars/service-VlanD2dSrv-csar.csar new file mode 100644 index 0000000..cbe355f Binary files /dev/null and b/src/test/resources/csars/service-VlanD2dSrv-csar.csar differ diff --git a/version.properties b/version.properties index 5ad9fe3..a8f201d 100644 --- a/version.properties +++ b/version.properties @@ -5,7 +5,7 @@ major=1 minor=3 -patch=3 +patch=4 base_version=${major}.${minor}.${patch} -- cgit 1.2.3-korg