From 3b2a4a9f36d21c0d5519e83551fde633945eb3a7 Mon Sep 17 00:00:00 2001 From: Pavel Aharoni Date: Mon, 17 Jul 2017 16:45:26 +0300 Subject: [SDC-137] update port properties function Change-Id: I1e2de708ca8fc327941cbb04290d52f07e243ecd Signed-off-by: Pavel Aharoni --- .../sdc/tosca/parser/api/ISdcCsarHelper.java | 12 +++++ .../sdc/tosca/parser/impl/SdcCsarHelperImpl.java | 37 +++++++++++++++ .../sdc/impl/SdcToscaParserBasicTest.java | 4 +- .../sdc/impl/ToscaParserNodeTemplateTest.java | 50 ++++++++++----------- .../csars/service-Ipassignservice-csar.csar | Bin 0 -> 49975 bytes 5 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 src/test/resources/csars/service-Ipassignservice-csar.csar (limited to 'src') diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java b/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java index 6c8f5df..bb5bd25 100644 --- a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java +++ b/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java @@ -326,9 +326,21 @@ public interface ISdcCsarHelper { * port_fe_oam={ip_requirements#ip_count_required#count=2, ip_requirements#dhcp_enabled=true, ip_requirements#ip_version=4, subnetpoolid="subnet_2", network_role_tag="Mobility_OAM_protected"}}

* @param vfc - VFC node template to look for CP-related props. * @return map CP node template name to a map of full path to a property on this CP - value of this property on this CP. + * @deprecated This function is deprecated since its flattened form doesn't provide solution for cp properties of type List. */ + @Deprecated public Map> getCpPropertiesFromVfc(NodeTemplate vfc); + /** + * Get the map of CP-related props from a VFC node template.
+ * Let's say there are 2 CPs (ports) related to this VFC. Then the output will look like this:

+ * {port_fe_sigtran={ip_requirements={ip_count_required: {count: 1}, dhcp_enabled: true, ip_version: 4}, subnetpoolid: "subnet_1", network_role_tag: "SIGNET_vrf_B1_direct"}
+ * port_fe_cluster={ip_requirements={ip_count_required: {count: 2}, dhcp_enabled: true, ip_version: 4}}
+ * @param vfc - VFC node template to look for CP-related props. + * @return map CP node template name to a map of property name - property value as object. + */ + public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc); + /** * Get customization UUID of a node template * @param nt - node template diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java index 7b901ec..c927817 100644 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java +++ b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java @@ -90,6 +90,43 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { LinkedHashMap properties = nodeTemplate.getProperties(); return processProperties(split, properties); } + + public Map> getCpPropertiesFromVfcAsObject(NodeTemplate vfc) { + if (vfc == null) { + log.error("getCpPropertiesFromVfc - vfc is null"); + return new HashMap<>(); + } + + String presetProperty = "_ip_requirements"; + Map> cps = new HashMap<>(); + + Map props = vfc.getProperties(); + if (props != null) { + // find all port names by pre-set property (ip_requirements) + for (Map.Entry entry : props.entrySet()) { + if (entry.getKey().endsWith(presetProperty)) { + String portName = entry.getKey().replaceAll(presetProperty, ""); + cps.put(portName, new HashMap<>()); + } + } + + if (cps.size() > 0) { + // ports found - find all their properties + for (String portName : cps.keySet()) { + for (Map.Entry property: props.entrySet()) { + if (property.getKey().startsWith(portName)) { + String portProperty = property.getKey().replaceFirst(portName + "_", ""); + if (property.getValue() != null) { + cps.get(portName).put(portProperty, property.getValue().getValue()); + } + } + } + } + } + } + + return cps; + } public Map> getCpPropertiesFromVfc(NodeTemplate vfc) { diff --git a/src/test/java/org/openecomp/sdc/impl/SdcToscaParserBasicTest.java b/src/test/java/org/openecomp/sdc/impl/SdcToscaParserBasicTest.java index 471fbc0..817ac92 100644 --- a/src/test/java/org/openecomp/sdc/impl/SdcToscaParserBasicTest.java +++ b/src/test/java/org/openecomp/sdc/impl/SdcToscaParserBasicTest.java @@ -27,7 +27,8 @@ public abstract class SdcToscaParserBasicTest { static ISdcCsarHelper complexCps; static ISdcCsarHelper fdntCsarHelperWithInputs; static ISdcCsarHelper nfodCsarHlper; - static ISdcCsarHelper nestedVfcCsarHlper; + static ISdcCsarHelper ipAssignCsarHelper; + static ISdcCsarHelper nestedVfcCsarHlper; static Map>> fdntCsarHelper_Data; @BeforeClass @@ -40,6 +41,7 @@ public abstract class SdcToscaParserBasicTest { complexCps = getCsarHelper("csars/service-consolidated-props-csar.csar"); fdntCsarHelperWithInputs = getCsarHelper("csars/service-ServiceFdnt-with-get-input.csar"); nfodCsarHlper = getCsarHelper("csars/service-NfodService-csar.csar"); + ipAssignCsarHelper = getCsarHelper("csars/service-Ipassignservice-csar.csar"); nestedVfcCsarHlper = getCsarHelper("csars/service-nested-vfc-csar.csar"); fdntCsarHelper_Data = new HashMap>>(){ { diff --git a/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java b/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java index d8e065b..9818a89 100644 --- a/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java +++ b/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java @@ -331,45 +331,41 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { //region getCpPropertiesFromVfc @Test public void testGetCpPropertiesFromVfc() { - List vfcs = complexCps.getVfcListByVf("f999e2ca-72c0-42d3-9b11-13f2122fb8ef"); + List vfcs = ipAssignCsarHelper.getVfcListByVf("b5190df2-7880-4d6f-836f-56ab17e1b85b"); boolean isChecked = false; - boolean isChecked1 = false; - for (int i = 0; i < vfcs.size(); i++) { - - if(vfcs.get(i).getName().equalsIgnoreCase("abstract_ddc")) - { - isChecked = true; - Map> cps = complexCps.getCpPropertiesFromVfc(vfcs.get(i)); - - assertEquals(3,cps.size()); - assertEquals(new Integer(1), cps.get("port_ddc_int_imbl__port").get("ip_requirements#ip_count_required#count")); - assertEquals(new Boolean(true), cps.get("port_ddc_int_imbl__port").get("ip_requirements#dhcp_enabled")); - assertEquals(new Integer(6), cps.get("port_ddc_int_imbl__port").get("ip_requirements#ip_version")); - assertEquals("subnetpoolid_test", cps.get("port_ddc_int_imbl__port").get("subnetpoolid")); - assertEquals("int_imbl", cps.get("port_ddc_int_imbl__port").get("network_role_tag")); + for (NodeTemplate vfc: vfcs) { - } - - if(vfcs.get(i).getName().equalsIgnoreCase("abstract_mda")) + if(vfc.getName().equalsIgnoreCase("abstract_pd_server")) { - isChecked1 = true; - Map> cps1 = complexCps.getCpPropertiesFromVfc(vfcs.get(i)); - - assertEquals(new Integer(4), cps1.get("port_mda_int_imsp__port").get("ip_requirements#ip_version")); - assertEquals(null, cps1.get("port_mda_int_imsp__port").get("ip_requirements#ip_count_required#count")); - - } + isChecked = true; + Map> cps = ipAssignCsarHelper.getCpPropertiesFromVfcAsObject(vfc); + + assertEquals(2,cps.size()); + Map pd01 = cps.get("port_pd01_port"); + assertEquals(5, pd01.size()); + + Map firstIpRequirements = (Map) ((List)pd01.get("ip_requirements")).get(0); + Map secondIpRequirements = (Map) ((List)pd01.get("ip_requirements")).get(1); + + assertEquals("subnet_role_4", firstIpRequirements.get("subnet_role")); + assertEquals(4, firstIpRequirements.get("ip_version")); + assertEquals(true, ((Map) firstIpRequirements.get("ip_count_required")).get("is_required")); + assertEquals(4, ((Map) firstIpRequirements.get("ip_count_required")).get("count")); + assertEquals(false, ((Map)((Map)pd01.get("mac_requirements")).get("mac_count_required")).get("is_required")); + assertEquals("test_subnetpoolid", pd01.get("subnetpoolid")); + assertEquals("oam", pd01.get("network_role_tag")); + assertEquals(6, secondIpRequirements.get("ip_version")); + } } assertTrue(isChecked); - assertTrue(isChecked1); } @Test public void testGetCpPropertiesFromVfcForNullVFC() { - Map> cps = complexCps.getCpPropertiesFromVfc(null); + Map> cps = ipAssignCsarHelper.getCpPropertiesFromVfcAsObject(null); assertNotNull(cps); assertEquals(0, cps.size()); } diff --git a/src/test/resources/csars/service-Ipassignservice-csar.csar b/src/test/resources/csars/service-Ipassignservice-csar.csar new file mode 100644 index 0000000..0507457 Binary files /dev/null and b/src/test/resources/csars/service-Ipassignservice-csar.csar differ -- cgit 1.2.3-korg