From: Christophe Betoule Date: Wed, 25 Nov 2020 15:08:31 +0000 (+0100) Subject: Port capabilities handling in OTN topology X-Git-Tag: 2.2.0~36 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=fed129b4ed9f3f3bb87f10c96d3f2bc3b4cb93a5 Port capabilities handling in OTN topology - replace hardcoded capabilities of a termination point by the ones coming from device port (via portmapping) - adapt pce consequently - adapt functional tests consequently - adapt UT consequently JIRA: TRNSPRTPCE-287 Signed-off-by: Christophe Betoule Co-authored-by: Gilles Thouenon Change-Id: Ic38f2c5be6ad98eedbe201414a9e303895d893bb --- diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java index 8ce413a19..b870eb560 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java @@ -7,7 +7,9 @@ */ package org.opendaylight.transportpce.networkmodel.dto; +import java.util.List; import java.util.Map; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes; public class OtnTopoNode { @@ -17,9 +19,12 @@ public class OtnTopoNode { private int xpdrNb; private Map xpdrNetConnectionMap; private Map xpdrCliConnectionMap; + private List xpdrClMappings; + private List xpdrNetMappings; public OtnTopoNode(String nodeid, String clli, int xpdrNb, XpdrNodeTypes xpdrNodeTypes, - Map xpdrNetConnectionMap, Map xpdrCliConnectionMap) { + Map xpdrNetConnectionMap, Map xpdrCliConnectionMap, List xpdrNetMaps, + List xpdrClMaps) { super(); this.nodeId = nodeid; this.clli = clli; @@ -27,6 +32,8 @@ public class OtnTopoNode { this.xpdrNb = xpdrNb; this.xpdrNetConnectionMap = xpdrNetConnectionMap; this.xpdrCliConnectionMap = xpdrCliConnectionMap; + this.xpdrNetMappings = xpdrNetMaps; + this.xpdrClMappings = xpdrClMaps; } public String getNodeId() { @@ -60,4 +67,12 @@ public class OtnTopoNode { public Map getXpdrCliConnectionMap() { return xpdrCliConnectionMap; } + + public List getXpdrClMappings() { + return xpdrClMappings; + } + + public List getXpdrNetMappings() { + return xpdrNetMappings; + } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java index fa95cb7d2..12b69c366 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java @@ -32,6 +32,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODTU4TsAllocated; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU0; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2e; @@ -54,7 +55,12 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev2 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GE; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GEODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2e; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GEODU0; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU4ODU4; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.SupportedIfCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev191129.SwitchingPoolTypes; @@ -369,10 +375,12 @@ public final class OpenRoadmOtnTopology { OtnTopoNode otnNode = null; if (mapping.getXponderType() != null) { otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, - mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + mapping.getXponderType(), fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps), + xpdrNetMaps, xpdrClMaps); } else { otnNode = new OtnTopoNode(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb, - XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps)); + XpdrNodeTypes.Tpdr, fillConnectionMapLcp(xpdrNetMaps), fillConnectionMapLcp(xpdrClMaps), + xpdrNetMaps, xpdrClMaps); } xpdrMap.put(xpdrNb, otnNode); } @@ -409,8 +417,8 @@ public final class OpenRoadmOtnTopology { // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If100GE.class, false); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, false); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() @@ -471,8 +479,8 @@ public final class OpenRoadmOtnTopology { // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If10GEODU2e.class, true); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() @@ -538,8 +546,8 @@ public final class OpenRoadmOtnTopology { // create ietf node augmentation to add TP list Map tpMap = new HashMap<>(); // creation of tps - createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, If100GEODU4.class, true); - createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, IfOCHOTU4ODU4.class, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERCLIENT, true); + createTP(tpMap, node, OpenroadmTpType.XPONDERNETWORK, true); org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 ietfNodeAug = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder() .setTerminationPoint(tpMap) @@ -557,29 +565,40 @@ public final class OpenRoadmOtnTopology { } private static void createTP(Map tpMap, - OtnTopoNode node, OpenroadmTpType tpType, - Class ifCapType, boolean withRate) { - long nbTps = 0; - if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { - nbTps = node.getNbTpClient(); - } else if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { - nbTps = node.getNbTpNetwork(); - } else { - LOG.warn("Wrong tp-type {}, cannot create tp {}", tpType, tpType.getName()); + OtnTopoNode node, OpenroadmTpType tpType, boolean withRate) { + List mappings = null; + switch (tpType) { + case XPONDERNETWORK: + mappings = node.getXpdrNetMappings(); + break; + case XPONDERCLIENT: + mappings = node.getXpdrClMappings(); + break; + default: + LOG.error("Error with Termination Point type {}", tpType); + return; } + fillTpMap(tpMap, node, tpType, withRate, mappings); + } - for (int i = 1; i <= nbTps; i++) { + private static void fillTpMap(Map tpMap, OtnTopoNode node, + OpenroadmTpType tpType, boolean withRate, List mappings) { + for (Mapping mapping : mappings) { // openroadm-otn-topoology augmentation - SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder() - .setIfCapType(ifCapType) - .build(); + Map supIfMap = new HashMap<>(); + for (Class supInterCapa : mapping.getSupportedInterfaceCapability()) { + SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder() + .withKey(new SupportedInterfaceCapabilityKey(convertSupIfCapa(supInterCapa))) + .setIfCapType(convertSupIfCapa(supInterCapa)) + .build(); + supIfMap.put(supIfCapa.key(), supIfCapa); + } TpSupportedInterfaces tpSupIf = new TpSupportedInterfacesBuilder() - .setSupportedInterfaceCapability(Map.of(supIfCapa.key(),supIfCapa)) + .setSupportedInterfaceCapability(supIfMap) .build(); - XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder(); if (withRate) { - xtpcaBldr.setRate(fixRate(ifCapType)); + xtpcaBldr.setRate(fixRate(mapping.getSupportedInterfaceCapability().get(0))); } TerminationPoint1 otnTp1 = new TerminationPoint1Builder() .setTpSupportedInterfaces(tpSupIf) @@ -587,31 +606,43 @@ public final class OpenRoadmOtnTopology { .build(); org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder tpceTp1Bldr = new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder(); - if (OpenroadmTpType.XPONDERNETWORK.equals(tpType)) { - TpId tpId = new TpId("XPDR" + node.getXpdrNb() + NETWORK + i); + TpId tpId = new TpId(mapping.getLogicalConnectionPoint()); + setclientNwTpAttr(tpMap, node, tpId, tpType, otnTp1, tpceTp1Bldr); + } + } + + private static void setclientNwTpAttr(Map tpMap, OtnTopoNode node, TpId tpId, + OpenroadmTpType tpType, TerminationPoint1 otnTp1, + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1Builder tpceTp1Bldr) { + switch (tpType) { + case XPONDERNETWORK: if (node.getXpdrNetConnectionMap().get(tpId.getValue()) != null) { tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrNetConnectionMap().get(tpId.getValue())); } SupportingTerminationPoint stp = new SupportingTerminationPointBuilder() .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)) .setNodeRef(new NodeId(node.getNodeId() + XPDR + node.getXpdrNb())) - .setTpRef("XPDR" + node.getXpdrNb() + NETWORK + i) + .setTpRef(tpId.getValue()) .build(); - TerminationPoint ietfTp = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp)); - tpMap.put(ietfTp.key(),ietfTp); - } else if (OpenroadmTpType.XPONDERCLIENT.equals(tpType)) { - TpId tpId = new TpId("XPDR" + node.getXpdrNb() + CLIENT + i); + TerminationPoint ietfTpNw = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp)); + tpMap.put(ietfTpNw.key(),ietfTpNw); + break; + case XPONDERCLIENT: if (node.getXpdrCliConnectionMap().get(tpId.getValue()) != null) { tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrCliConnectionMap().get(tpId.getValue())); } - TerminationPoint ietfTp = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null); - tpMap.put(ietfTp.key(),ietfTp); - } + TerminationPoint ietfTpCl = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null); + tpMap.put(ietfTpCl.key(),ietfTpCl); + break; + default: + LOG.error("Undefined tpType for Termination point {} of {}", tpId.getValue(), node.getNodeId()); + break; } } - private static Class fixRate(Class ifCapaType) { - switch (ifCapaType.getSimpleName()) { + private static Class fixRate(Class ifCapType) { + switch (ifCapType.getSimpleName()) { case "If100GEODU4": case "IfOCHOTU4ODU4": return ODU4.class; @@ -624,6 +655,32 @@ public final class OpenRoadmOtnTopology { } } + private static Class convertSupIfCapa(Class ifCapType) { + switch (ifCapType.getSimpleName()) { + case "If100GEODU4": + return If100GEODU4.class; + case "IfOCHOTU4ODU4": + return IfOCHOTU4ODU4.class; + case "If1GEODU0": + return If1GEODU0.class; + case "If10GEODU2e": + return If10GEODU2e.class; + case "If10GEODU2": + return If10GEODU2.class; + case "If100GE": + return If100GE.class; + case "If10GE": + return If10GE.class; + case "If1GE": + return If1GE.class; + case "IfOCH": + return IfOCH.class; + default: + return null; + } + } + private static Map createSupportingNodes(OtnTopoNode node) { SupportingNode suppNode1 = new SupportingNodeBuilder() .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java index 7086bbc97..b54c0c1c8 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java @@ -7,6 +7,8 @@ */ package org.opendaylight.transportpce.networkmodel.util; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.either; import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.CoreMatchers.not; @@ -47,13 +49,17 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.re import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2e; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU4; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.networks.network.node.SwitchingPools; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GE; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GEODU4; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GE; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2e; +import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH; import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU4ODU4; import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.OtnLinkType; import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev201019.TerminationPoint1; @@ -173,7 +179,7 @@ public class OpenRoadmOtnTopologyTest { "XPDR1-CLIENT1", tps.get(2).augmentation(TerminationPoint1.class).getAssociatedConnectionMapPort()); assertEquals( - "only IfOCHOTU4ODU4 interface capabitily expected", + "only IfOCH interface capabitily expected", 1, tps.get(2).augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 @@ -182,7 +188,7 @@ public class OpenRoadmOtnTopologyTest { .getSupportedInterfaceCapability() .size()); assertEquals( - IfOCHOTU4ODU4.class.getName(), + IfOCH.class.getName(), tps.get(2).augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 .TerminationPoint1.class) @@ -192,15 +198,13 @@ public class OpenRoadmOtnTopologyTest { .get() .getIfCapType() .getName()); - assertEquals( - "the rate should be ODU4", - ODU4.class.getName(), + assertNull( + "the rate should be null", tps.get(2).augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 .TerminationPoint1.class) .getXpdrTpPortConnectionAttributes() - .getRate() - .getName()); + .getRate()); assertEquals( "third TP must be of type network", OpenroadmTpType.XPONDERNETWORK, @@ -907,23 +911,55 @@ public class OpenRoadmOtnTopologyTest { assertEquals( "XPDR" + xpdrNb + "-NETWORK1", tpList.get(4).getSupportingTerminationPoint().values().stream().findFirst() - .get().getTpRef()); + .get().getTpRef().toString()); if (xpdrNb.equals(Uint16.valueOf(1))) { assertEquals("should contain 5 TPs", 5, tpList.size()); assertEquals("XPDR1-CLIENT1", tpList.get(0).getTpId().getValue()); assertEquals("XPDR1-CLIENT2", tpList.get(1).getTpId().getValue()); assertEquals("XPDR1-NETWORK1", tpList.get(4).getTpId().getValue()); assertEquals( - "only If10GEODU2e interface capabitily expected", - If10GEODU2e.class, - tpList.get(2) + "supported interface capability of tp-id XPDR1-CLIENT2 should contain 2 if-cap-type", + 2, + tpList.get(1) .augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 .TerminationPoint1.class) .getTpSupportedInterfaces() - .getSupportedInterfaceCapability().values().stream().findFirst() - .get() - .getIfCapType()); + .getSupportedInterfaceCapability().values().size()); + assertEquals( + "supported interface capability of tp-id XPDR1-CLIENT1 should contain 3 if-cap-type", + 3, + tpList.get(0) + .augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 + .TerminationPoint1.class) + .getTpSupportedInterfaces() + .getSupportedInterfaceCapability().values().size()); + List sicListClient3 = tpList.get(2) + .augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 + .TerminationPoint1.class) + .getTpSupportedInterfaces() + .getSupportedInterfaceCapability().values().stream().collect(Collectors.toList()); + for (SupportedInterfaceCapability supportedInterfaceCapability : sicListClient3) { + assertThat("tp should have 2 if-cap-type: if-10GE-ODU2e, if-10GE-ODU2", + String.valueOf(supportedInterfaceCapability.getIfCapType()), + either(containsString(String.valueOf(If10GEODU2e.class))) + .or(containsString(String.valueOf(If10GEODU2.class)))); + } + List sicListClient1 = tpList.get(0) + .augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 + .TerminationPoint1.class) + .getTpSupportedInterfaces() + .getSupportedInterfaceCapability().values().stream().collect(Collectors.toList()); + for (SupportedInterfaceCapability supportedInterfaceCapability : sicListClient1) { + assertThat("tp should have 3 if-cap-type: if-10GE-ODU2e, if-10GE-ODU2, if-10GE", + String.valueOf(supportedInterfaceCapability.getIfCapType()), + either(containsString(String.valueOf(If10GEODU2e.class))) + .or(containsString(String.valueOf(If10GEODU2.class))) + .or(containsString(String.valueOf(If10GE.class)))); + } assertEquals( "the rate should be ODU2e", ODU2e.class, @@ -956,9 +992,9 @@ public class OpenRoadmOtnTopologyTest { assertEquals("XPDR2-NETWORK1", tpList.get(4).getTpId().getValue()); assertEquals("XPDR2-NETWORK2", tpList.get(5).getTpId().getValue()); assertEquals( - "only If100GEODU4 interface capabitily expected", - If100GEODU4.class, - tpList.get(2) + "only IfOCHOTU4ODU4 interface capabitily expected", + IfOCHOTU4ODU4.class, + tpList.get(5) .augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 .TerminationPoint1.class) @@ -967,14 +1003,26 @@ public class OpenRoadmOtnTopologyTest { .get() .getIfCapType()); assertEquals( - "the rate should be ODU4", - ODU4.class, + "supported interface capability of tp should contain 2 IfCapType", + 2, tpList.get(2) .augmentation( org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 .TerminationPoint1.class) - .getXpdrTpPortConnectionAttributes() - .getRate()); + .getTpSupportedInterfaces() + .getSupportedInterfaceCapability().values().size()); + List sicListClient3 = tpList.get(2) + .augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529 + .TerminationPoint1.class) + .getTpSupportedInterfaces() + .getSupportedInterfaceCapability().values().stream().collect(Collectors.toList()); + for (SupportedInterfaceCapability supportedInterfaceCapability : sicListClient3) { + assertThat("tp should have 2 if-cap-type: if-100GE-ODU4, if-100GE", + String.valueOf(supportedInterfaceCapability.getIfCapType()), + either(containsString(String.valueOf(If100GEODU4.class))) + .or(containsString(String.valueOf(If100GE.class)))); + } assertEquals( "TP should be of type client", OpenroadmTpType.XPONDERCLIENT, tpList.get(2) diff --git a/tests/transportpce_tests/2.2.1/test_otn_topology.py b/tests/transportpce_tests/2.2.1/test_otn_topology.py index 4c27fb9fb..fd80a5c75 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_topology.py +++ b/tests/transportpce_tests/2.2.1/test_otn_topology.py @@ -136,7 +136,8 @@ class TransportPCEtesting(unittest.TestCase): 'SPDR-SA1-XPDR1': { 'node-type': 'MUXPDR', 'xpdr-number': 1, - 'port-types': 'org-openroadm-port-types:if-10GE-ODU2e', + 'port-types': ['org-openroadm-port-types:if-10GE-ODU2', 'org-openroadm-port-types:if-10GE-ODU2e', + 'org-openroadm-port-types:if-10GE'], 'otn-common-types': 'org-openroadm-otn-common-types:ODU2e', 'network_nb': 1, 'nbl_nb': 4, @@ -178,14 +179,16 @@ class TransportPCEtesting(unittest.TestCase): tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if tpType == 'XPONDER-CLIENT': client += 1 - self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + print("tpId = {}".format(tpId)) + print("tp= {}".format(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j])) + nbIfCapType = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-otn-network-topology:tp-supported-interfaces'] + ['supported-interface-capability'][0]) + for k in range(0, nbIfCapType): + self.assertIn((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['org-openroadm-otn-network-topology:tp-supported-interfaces'] ['supported-interface-capability'][0]['if-cap-type']), - CHECK_LIST[nodeId]['port-types']) - self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] - ['rate']), - CHECK_LIST[nodeId]['otn-common-types']) + CHECK_LIST[nodeId]['port-types']) elif tpType == 'XPONDER-NETWORK': network += 1 self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]