Port capabilities handling in OTN topology 23/94123/3
authorChristophe Betoule <christophe.betoule@orange.com>
Wed, 25 Nov 2020 15:08:31 +0000 (16:08 +0100)
committerGilles Thouenon <gilles.thouenon@orange.com>
Sat, 12 Dec 2020 07:31:19 +0000 (07:31 +0000)
- 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 <christophe.betoule@orange.com>
Co-authored-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Ic38f2c5be6ad98eedbe201414a9e303895d893bb

networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java
tests/transportpce_tests/2.2.1/test_otn_topology.py

index 8ce413a192b4faf4abec554bbe71365f443ed105..b870eb560c4f3d540c04a64e2ab99779a0de726c 100644 (file)
@@ -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<String, String> xpdrNetConnectionMap;
     private Map<String, String> xpdrCliConnectionMap;
+    private List<Mapping> xpdrClMappings;
+    private List<Mapping> xpdrNetMappings;
 
     public OtnTopoNode(String nodeid, String clli, int xpdrNb, XpdrNodeTypes xpdrNodeTypes,
-        Map<String, String> xpdrNetConnectionMap, Map<String, String> xpdrCliConnectionMap) {
+        Map<String, String> xpdrNetConnectionMap, Map<String, String> xpdrCliConnectionMap, List<Mapping> xpdrNetMaps,
+        List<Mapping> 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<String, String> getXpdrCliConnectionMap() {
         return xpdrCliConnectionMap;
     }
+
+    public List<Mapping> getXpdrClMappings() {
+        return xpdrClMappings;
+    }
+
+    public List<Mapping> getXpdrNetMappings() {
+        return xpdrNetMappings;
+    }
 }
index fa95cb7d29eed0df402744971a8c5ac5ba0065a0..12b69c3666eb1755c3bdbb29652883cb27bc6d13 100644 (file)
@@ -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<TerminationPointKey,TerminationPoint> 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<TerminationPointKey, TerminationPoint> 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<TerminationPointKey, TerminationPoint> 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<TerminationPointKey, TerminationPoint> tpMap,
-            OtnTopoNode node, OpenroadmTpType tpType,
-        Class<? extends SupportedIfCapability> 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<Mapping> 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<TerminationPointKey, TerminationPoint> tpMap, OtnTopoNode node,
+            OpenroadmTpType tpType, boolean withRate, List<Mapping> mappings) {
+        for (Mapping mapping : mappings) {
             // openroadm-otn-topoology augmentation
-            SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
-                .setIfCapType(ifCapType)
-                .build();
+            Map<SupportedInterfaceCapabilityKey, SupportedInterfaceCapability> supIfMap = new HashMap<>();
+            for (Class<? extends SupportedIfCapability> 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<TerminationPointKey, TerminationPoint> 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<? extends OduRateIdentity> fixRate(Class<? extends SupportedIfCapability> ifCapaType) {
-        switch (ifCapaType.getSimpleName()) {
+    private static Class<? extends OduRateIdentity> fixRate(Class<? extends
+            SupportedIfCapability> ifCapType) {
+        switch (ifCapType.getSimpleName()) {
             case "If100GEODU4":
             case "IfOCHOTU4ODU4":
                 return ODU4.class;
@@ -624,6 +655,32 @@ public final class OpenRoadmOtnTopology {
         }
     }
 
+    private static Class<? extends SupportedIfCapability> convertSupIfCapa(Class<? extends
+            SupportedIfCapability> 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<SupportingNodeKey,SupportingNode> createSupportingNodes(OtnTopoNode node) {
         SupportingNode suppNode1 = new SupportingNodeBuilder()
             .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
index 7086bbc97f84fec6d1803ae6f46103ad3645a7a6..b54c0c1c8240aea7f36019ec0e44523169228427 100644 (file)
@@ -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<SupportedInterfaceCapability> 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<SupportedInterfaceCapability> 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<SupportedInterfaceCapability> 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)
index 4c27fb9fbbf456123818c055a05dc3a97cd0384e..fd80a5c75fac3c613c23de63201f0c5b6149a164 100644 (file)
@@ -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]