From d68f21ba371246f1749bb61e629e26d79bf17187 Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Fri, 23 Oct 2020 09:56:30 +0200 Subject: [PATCH] TAPI topology consolidation - step2 - integrate into T0 mulilayer TAPI topology the 100GE Transponders when their network ports are connected to the ROADM infra through xponder-input/output links - manage the client to network port association for the 100GE transponder case - adapt ConvertORTopoToTapiTopo and TapiTopologyImpl classes to add new UT for the 100G transponder use case - rationalise samples of xml files to adapt portmapping and topologies to new test cases with 100GE transponder - separate in a dedicated test file UT testing TAPI exceptions JIRA: TRNSPRTPCE-344 Signed-off-by: Gilles Thouenon Co-authored-by: Christophe Betoule Change-Id: I665f2e6290c5a6be1628179a54fb35218c85739b --- .../topology/ConvertORTopoToTapiTopo.java | 95 ++- .../tapi/topology/TapiTopologyImpl.java | 9 +- ...onvertORTopoObjectToTapiTooObjectTest.java | 281 ++++++-- .../TapiTopologyImplExceptionTest.java | 76 +++ .../tapi/topology/TapiTopologyImplTest.java | 59 +- .../tapi/utils/TopologyDataUtils.java | 6 +- ...m-topology2.xml => openroadm-topology.xml} | 579 ++++++++++++----- ...gy-with-otn-links.xml => otn-topology.xml} | 613 ++++++++++++++---- .../{get_portmapping.xml => portmapping.xml} | 162 +++-- 9 files changed, 1415 insertions(+), 465 deletions(-) create mode 100644 tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java rename tapi/src/test/resources/{get_openroadm-topology2.xml => openroadm-topology.xml} (85%) rename tapi/src/test/resources/{otn-topology-with-otn-links.xml => otn-topology.xml} (59%) rename tapi/src/test/resources/{get_portmapping.xml => portmapping.xml} (79%) diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java index 2e8c183bd..e12a6b5db 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java @@ -20,7 +20,11 @@ import java.util.UUID; import java.util.stream.Collectors; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPools; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev181130.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.Link1; @@ -74,6 +78,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.to import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,6 +93,7 @@ public class ConvertORTopoToTapiTopo { private static final String RDM_INFRA = "ROADM-infra"; private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiTopo.class); private String ietfNodeId; + private OpenroadmNodeType ietfNodeType; private List oorClientPortList; private List oorNetworkPortList; private OduSwitchingPools oorOduSwitchingPool; @@ -107,26 +113,48 @@ public class ConvertORTopoToTapiTopo { public void convertNode(Node ietfNode, List networkPorts) { this.ietfNodeId = ietfNode.getNodeId().getValue(); - this.oorClientPortList = ietfNode.augmentation( + if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class) + == null) { + return; + } + this.ietfNodeType = ietfNode.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class).getNodeType(); + this.oorNetworkPortList = ietfNode.augmentation( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) .getTerminationPoint().values().stream() .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.XPONDERCLIENT.getIntValue()) + == OpenroadmTpType.XPONDERNETWORK.getIntValue() + && networkPorts.contains(tp.getTpId().getValue())) .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) .collect(Collectors.toList()); - this.oorNetworkPortList = ietfNode.augmentation( + if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) { + this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools() + .values().stream().findFirst().get(); + this.oorClientPortList = ietfNode.augmentation( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) .getTerminationPoint().values().stream() .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() - == OpenroadmTpType.XPONDERNETWORK.getIntValue() - && networkPorts.contains(tp.getTpId().getValue())) + == OpenroadmTpType.XPONDERCLIENT.getIntValue()) .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) .collect(Collectors.toList()); - this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools() - .values().stream().findFirst().get(); + } else { + this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G(); + List toto = this.oorOduSwitchingPool.getNonBlockingList().values().stream() + .flatMap(nbl -> nbl.getTpList().stream()) + .collect(Collectors.toList()); + LOG.info("toto = {}", toto); + this.oorClientPortList = ietfNode.augmentation( + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class) + .getTerminationPoint().values().stream() + .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue() + == OpenroadmTpType.XPONDERCLIENT.getIntValue() && toto.contains(tp.getTpId())) + .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue())) + .collect(Collectors.toList()); + this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId())); + } // node creation [DSR/ODU] - LOG.info("creation of a DSR/ODU node"); + LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId); Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, DSR)) .getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, DSR), nodeUuid); @@ -137,7 +165,7 @@ public class ConvertORTopoToTapiTopo { tapiNodes.put(dsrNode.key(), dsrNode); // node creation [otsi] - LOG.info("creation of an OTSi node"); + LOG.info("creation of an OTSi node for {}", this.ietfNodeId); nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, OTSI)) .getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, OTSI), nodeUuid); @@ -205,6 +233,30 @@ public class ConvertORTopoToTapiTopo { } } + private OduSwitchingPools createOduSwitchingPoolForTp100G() { + Map nblMap = new HashMap<>(); + int count = 1; + for (TerminationPoint tp : this.oorNetworkPortList) { + TpId tpid1 = tp.getTpId(); + TpId tpid2 = new TpId(tp.augmentation( + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev200129.TerminationPoint1.class) + .getAssociatedConnectionMapPort()); + List tpList = new ArrayList<>(); + tpList.add(tpid1); + tpList.add(tpid2); + NonBlockingList nbl = new NonBlockingListBuilder() + .setNblNumber(Uint16.valueOf(count)) + .setTpList(tpList) + .build(); + nblMap.put(nbl.key(), nbl); + count++; + } + return new OduSwitchingPoolsBuilder() + .setNonBlockingList(nblMap) + .setSwitchingPoolNumber(Uint16.valueOf(1)) + .build(); + } + private List pruneTapiPhotonicNodes() { List @@ -246,8 +298,8 @@ public class ConvertORTopoToTapiTopo { return uuidNameMap; } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology - .Node createTapiNode(Map nodeNames, List layerProtocols) { + private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node + createTapiNode(Map nodeNames, List layerProtocols) { Uuid nodeUuid = null; Map onepl = new HashMap<>(); Map nodeRuleGroupList = new HashMap<>(); @@ -291,7 +343,7 @@ public class ConvertORTopoToTapiTopo { this.uuidMap.put(String.join("+", this.ietfNodeId, I_OTSI, oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1); Name onedName = new NameBuilder() - .setValueName(new StringBuilder("iNodeEdgePoint_").append(i + 1).toString()) + .setValueName("iNodeEdgePoint") .setValue(oorNetworkPortList.get(i).getTpId().getValue()) .build(); @@ -309,7 +361,7 @@ public class ConvertORTopoToTapiTopo { this.uuidMap.put(String.join("+", this.ietfNodeId, E_OTSI, oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); Name onedName = new NameBuilder() - .setValueName(new StringBuilder("eNodeEdgePoint_").append(i + 1).toString()) + .setValueName("eNodeEdgePoint") .setValue(oorNetworkPortList.get(i).getTpId().getValue()) .build(); @@ -366,10 +418,13 @@ public class ConvertORTopoToTapiTopo { .getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, DSR, oorClientPortList.get(i).getTpId().getValue()), nepUuid); - Name name = new NameBuilder() - .setValueName(new StringBuilder("NodeEdgePoint_C").append(i + 1).toString()) - .setValue(oorClientPortList.get(i).getTpId().getValue()) - .build(); + NameBuilder nameBldr = new NameBuilder().setValue(oorClientPortList.get(i).getTpId().getValue()); + Name name; + if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) { + name = nameBldr.setValueName("100G-tpdr").build(); + } else { + name = nameBldr.setValueName("NodeEdgePoint_C").build(); + } OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name), LayerProtocolName.ETH, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId, DSR)); @@ -383,7 +438,7 @@ public class ConvertORTopoToTapiTopo { this.uuidMap.put(String.join("+", this.ietfNodeId, DSR, oorNetworkPortList.get(i).getTpId().getValue()), nepUuid); Name onedName = new NameBuilder() - .setValueName(new StringBuilder("NodeEdgePoint_N").append(i + 1).toString()) + .setValueName("NodeEdgePoint_N") .setValue(oorNetworkPortList.get(i).getTpId().getValue()) .build(); @@ -393,7 +448,7 @@ public class ConvertORTopoToTapiTopo { } // create NodeRuleGroup int count = 1; - for (NonBlockingList nbl : this.oorOduSwitchingPool.getNonBlockingList().values()) { + for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) { Map nepList = new HashMap<>(); @@ -525,6 +580,8 @@ public class ConvertORTopoToTapiTopo { } else if (sic.getIfCapType().getSimpleName().equals("If100GEODU4")) { sclpqList.add(DIGITALSIGNALTYPE100GigE.class); sclpqList.add(ODUTYPEODU4.class); + } else if (sic.getIfCapType().getSimpleName().equals("If100GE")) { + sclpqList.add(DIGITALSIGNALTYPE100GigE.class); } break; case "PHOTONIC_MEDIA": diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java index 4a6625632..0068e6c22 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java @@ -105,7 +105,7 @@ public class TapiTopologyImpl implements TapiTopologyService { @Override public ListenableFuture> getTopologyDetails(GetTopologyDetailsInput input) { try { - LOG.info("Building TAPI Topology abstraction from {}", input.getTopologyIdOrName()); + LOG.info("Building TAPI Topology abstraction"); Topology topology = null; switch (input.getTopologyIdOrName()) { case NetworkUtils.OVERLAY_NETWORK_ID: @@ -121,6 +121,7 @@ public class TapiTopologyImpl implements TapiTopologyService { return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build()) .buildFuture(); } catch (TapiTopologyException e) { + LOG.error("error building TAPI topology"); return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().build()).buildFuture(); } } @@ -223,11 +224,7 @@ public class TapiTopologyImpl implements TapiTopologyService { .collect(Collectors.toList()); // read otn-topology Network otnTopo = readTopology(InstanceIdentifiers.OTN_NETWORK_II); - Map otnNodeMap = otnTopo.nonnullNode().values().stream().filter(nt -> nt.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class) - .getNodeType().equals(OpenroadmNodeType.SWITCH) || nt.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class) - .getNodeType().equals(OpenroadmNodeType.MUXPDR)) + Map otnNodeMap = otnTopo.nonnullNode().values().stream() .collect(Collectors.toMap(Node::getNodeId, node -> node)); Map> networkPortMap = new HashMap<>(); diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoObjectToTapiTooObjectTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoObjectToTapiTooObjectTest.java index 61e0a073f..ed61dcac2 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoObjectToTapiTooObjectTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoObjectToTapiTooObjectTest.java @@ -13,6 +13,7 @@ import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import com.google.common.util.concurrent.FluentFuture; import java.nio.charset.Charset; @@ -81,6 +82,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { private static Node otnMuxA; private static Node otnMuxC; private static Node otnSwitch; + private static Node tpdr100G; private static List otnLinks; private static Uuid topologyUuid; @@ -91,7 +93,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(), TopologyDataUtils.OPENROADM_TOPOLOGY_FILE, InstanceIdentifiers.OVERLAY_NETWORK_II); TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(), - TopologyDataUtils.OTN_TOPOLOGY_WITH_OTN_LINKS_FILE, InstanceIdentifiers.OTN_NETWORK_II); + TopologyDataUtils.OTN_TOPOLOGY_FILE, InstanceIdentifiers.OTN_NETWORK_II); TopologyDataUtils.writePortmappingFromFileToDatastore(getDataStoreContextUtil()); KeyedInstanceIdentifier muxAIID = InstanceIdentifier.create(Networks.class) @@ -112,10 +114,19 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { .child(Node.class, new NodeKey(new NodeId("SPDR-SA1-XPDR2"))); FluentFuture> switchFuture = dataBroker.newReadOnlyTransaction() .read(LogicalDatastoreType.CONFIGURATION, switchIID); + otnMuxA = muxAFuture.get().get(); otnMuxC = muxCFuture.get().get(); otnSwitch = switchFuture.get().get(); + KeyedInstanceIdentifier tpdrIID = InstanceIdentifier.create(Networks.class) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network + .class, new NetworkKey(new NetworkId("otn-topology"))) + .child(Node.class, new NodeKey(new NodeId("XPDR-A1-XPDR1"))); + FluentFuture> tpdrFuture = dataBroker.newReadOnlyTransaction() + .read(LogicalDatastoreType.CONFIGURATION, tpdrIID); + tpdr100G = tpdrFuture.get().get(); + InstanceIdentifier linksIID = InstanceIdentifier.create(Networks.class) .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network .class, new NetworkKey(new NetworkId("otn-topology"))) @@ -129,6 +140,38 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { LOG.info("TEST SETUP READY"); } + @Test + public void convertNodeForTransponder100G() { + ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid); + List networkPortList = new ArrayList<>(); + for (TerminationPoint tp : tpdr100G.augmentation(Node1.class).getTerminationPoint().values()) { + if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) { + networkPortList.add(tp.getTpId().getValue()); + } + } + tapiFactory.convertNode(tpdr100G, networkPortList); + List tapiNodes + = tapiFactory.getTapiNodes().values().stream() + .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) + .collect(Collectors.toList()); + + assertEquals("Node list size should be 2", 2, tapiFactory.getTapiNodes().size()); + assertEquals("Link list size should be 2", 2, tapiFactory.getTapiLinks().size()); + + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + .toString()); + checkDsrNode(tapiNodes.get(1), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1"); + Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + .toString()); + checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "tpdr", "XPDR-A1-XPDR1"); + + List tapiLinks = tapiFactory.getTapiLinks().values().stream() + .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) + .collect(Collectors.toList()); + checkTransitionalLink(tapiLinks.get(1), dsrNodeUuid, otsiNodeUuid, + "XPDR-A1-XPDR1+DSR+XPDR1-NETWORK1", "XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1", "XPDR-A1-XPDR1"); + } + @Test public void convertNodeForOtnMuxponder() { ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid); @@ -146,10 +189,9 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { assertEquals("Node list size should be 2", 2, tapiFactory.getTapiNodes().size()); assertEquals("Link list size should be 1", 1, tapiFactory.getTapiLinks().size()); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) .toString()); - checkDsrNode(tapiNodes.get(0), dsrNodeUuid, false, "SPDR-SA1-XPDR1"); + checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1"); Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) .toString()); checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "mux", "SPDR-SA1-XPDR1"); @@ -181,7 +223,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8"))) .toString()); - checkDsrNode(tapiNodes.get(0), dsrNodeUuid, true, "SPDR-SA1-XPDR2"); + checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "switch", "SPDR-SA1-XPDR2"); Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8"))) .toString()); checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "switch", "SPDR-SA1-XPDR2"); @@ -300,7 +342,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { } private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node, - Uuid nodeUuid, boolean isSwitch, String nodeId) { + Uuid nodeUuid, String dsrNodeType, String nodeId) { assertEquals("incorrect node uuid", nodeUuid, node.getUuid()); assertEquals("incorrect node name", nodeId, node.getName().get(new NameKey("dsr/odu node name")).getValue()); assertEquals("administrative state should be UNLOCKED", @@ -313,42 +355,83 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { 2, node.getLayerProtocolName().size()); assertThat("dsr node should manage 2 protocol layers : dsr and odu", node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU)); - List neps = node.nonnullOwnedNodeEdgePoint().values().stream() + List nepsN = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("NodeEdgePoint_N"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) .collect(Collectors.toList()); - if (isSwitch) { - assertEquals("Switch-DSR node should have 8 NEPs", 8, neps.size()); - OwnedNodeEdgePoint nep1 = neps.get(3); - Uuid client4NepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-CLIENT4").getBytes(Charset.forName("UTF-8"))) - .toString()); - checkNepClient100G(nep1, client4NepUuid, "XPDR2-CLIENT4", "NodeEdgePoint_C4"); - OwnedNodeEdgePoint nep2 = neps.get(4); - Uuid networkNepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - checkNepNetworkODU4(nep2, networkNepUuid, "XPDR2-NETWORK1", "NodeEdgePoint_N1"); - List nrgList = node.nonnullNodeRuleGroup().values().stream() - .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) - .collect(Collectors.toList()); - checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, networkNepUuid, nodeUuid); - } else { - assertEquals("Mux-DSR node should have 5 NEPs", 5, neps.size()); - OwnedNodeEdgePoint nep1 = neps.get(0); - Uuid client4NepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-CLIENT4").getBytes(Charset.forName("UTF-8"))) - .toString()); - checkNepClient10G(nep1, client4NepUuid, "XPDR1-CLIENT4", "NodeEdgePoint_C4"); - - OwnedNodeEdgePoint nep2 = neps.get(1); - Uuid networkNepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - checkNepNetworkODU4(nep2, networkNepUuid, "XPDR1-NETWORK1", "NodeEdgePoint_N1"); - List nrgList = node.nonnullNodeRuleGroup().values().stream() - .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) - .collect(Collectors.toList()); - checkNodeRuleGroupForMuxDSR(nrgList, client4NepUuid, networkNepUuid, nodeUuid); + List nepsC; + switch (dsrNodeType) { + case "switch": + nepsC = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("NodeEdgePoint_C"))) + .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) + .collect(Collectors.toList()); + assertEquals("Switch-DSR node should have 4 NEPs network", 4, nepsN.size()); + assertEquals("Switch-DSR node should have 4 NEPs client", 4, nepsC.size()); + OwnedNodeEdgePoint nep1 = nepsC.get(2); + Uuid client4NepUuid = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-CLIENT4").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepClient100GSwitch(nep1, client4NepUuid, "XPDR2-CLIENT4", "NodeEdgePoint_C"); + OwnedNodeEdgePoint nep2 = nepsN.get(1); + Uuid networkNepUuid = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR2-NETWORK1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepNetworkODU4(nep2, networkNepUuid, "XPDR2-NETWORK1", "NodeEdgePoint_N"); + List nrgList = node.nonnullNodeRuleGroup().values().stream() + .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) + .collect(Collectors.toList()); + checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, networkNepUuid, nodeUuid); + break; + case "mux": + nepsC = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("NodeEdgePoint_C"))) + .sorted((nep3, nep4) -> nep3.getUuid().getValue().compareTo(nep4.getUuid().getValue())) + .collect(Collectors.toList()); + assertEquals("Mux-DSR node should have 1 NEP network", 1, nepsN.size()); + assertEquals("Mux-DSR node should have 4 NEPs client", 4, nepsC.size()); + OwnedNodeEdgePoint nep3 = nepsC.get(2); + Uuid client3NepUuid = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-CLIENT3").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepClient10G(nep3, client3NepUuid, "XPDR1-CLIENT3", "NodeEdgePoint_C"); + + OwnedNodeEdgePoint nep4 = nepsN.get(0); + Uuid networkNepUuid2 = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepNetworkODU4(nep4, networkNepUuid2, "XPDR1-NETWORK1", "NodeEdgePoint_N"); + List nrgList2 = node.nonnullNodeRuleGroup().values().stream() + .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) + .collect(Collectors.toList()); + checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, networkNepUuid2, nodeUuid); + break; + case "tpdr": + nepsC = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("100G-tpdr"))) + .sorted((nep5, nep6) -> nep5.getUuid().getValue().compareTo(nep6.getUuid().getValue())) + .collect(Collectors.toList()); + assertEquals("Tpdr-DSR node should have 2 NEPs network", 2, nepsN.size()); + assertEquals("Tpdr-DSR node should have 2 NEPs client", 2, nepsC.size()); + OwnedNodeEdgePoint nep5 = nepsC.get(0); + Uuid client1NepUuid = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-CLIENT1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepClient100GTpdr(nep5, client1NepUuid, "XPDR1-CLIENT1", "100G-tpdr"); + + OwnedNodeEdgePoint nep6 = nepsN.get(0); + Uuid networkNepUuid3 = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+DSR+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepNetworkODU4(nep6, networkNepUuid3, "XPDR1-NETWORK1", "NodeEdgePoint_N"); + List nrgList3 = node.nonnullNodeRuleGroup().values().stream() + .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) + .collect(Collectors.toList()); + checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, networkNepUuid3, nodeUuid); + break; + default: + fail(); + break; } } @@ -367,44 +450,69 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { 1, node.getLayerProtocolName().size()); assertEquals("otsi node should manage a single protocol layer : PHOTONIC_MEDIA", LayerProtocolName.PHOTONICMEDIA, node.getLayerProtocolName().get(0)); - List neps = node.nonnullOwnedNodeEdgePoint().values().stream() + List nepsI = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("iNodeEdgePoint"))) + .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) + .collect(Collectors.toList()); + List nepsE = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("eNodeEdgePoint"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) .collect(Collectors.toList()); switch (otsiNodeType) { case "switch": - assertEquals("Switch-OTSi node should have 8 NEPs", 8, neps.size()); - OwnedNodeEdgePoint nep1 = neps.get(2); + assertEquals("Switch-OTSi node should have 4 eNEPs", 4, nepsE.size()); + assertEquals("Switch-OTSi node should have 4 iNEPs", 4, nepsI.size()); + OwnedNodeEdgePoint nep1 = nepsI.get(1); Uuid inepUuid = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep1, inepUuid, "XPDR2-NETWORK2", "iNodeEdgePoint_2"); - OwnedNodeEdgePoint nep2 = neps.get(0); + checkNepOtsiNode(nep1, inepUuid, "XPDR2-NETWORK2", "iNodeEdgePoint"); + OwnedNodeEdgePoint nep2 = nepsE.get(0); Uuid enepUuid = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep2, enepUuid, "XPDR2-NETWORK2", "eNodeEdgePoint_2"); + checkNepOtsiNode(nep2, enepUuid, "XPDR2-NETWORK2", "eNodeEdgePoint"); List nrgList = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); checkNodeRuleGroupForSwitchOTSi(nrgList, enepUuid, inepUuid, nodeUuid); break; case "mux": - assertEquals("Mux-OTSi node should have 2 NEPs", 2, neps.size()); - OwnedNodeEdgePoint nep3 = neps.get(0); + assertEquals("Mux-OTSi node should have 1 eNEP", 1, nepsE.size()); + assertEquals("Mux-OTSi node should have 1 iNEPs", 1, nepsI.size()); + OwnedNodeEdgePoint nep3 = nepsE.get(0); Uuid enepUuid2 = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep3, enepUuid2, "XPDR1-NETWORK1", "eNodeEdgePoint_1"); - OwnedNodeEdgePoint nep4 = neps.get(1); + checkNepOtsiNode(nep3, enepUuid2, "XPDR1-NETWORK1", "eNodeEdgePoint"); + OwnedNodeEdgePoint nep4 = nepsI.get(0); Uuid inepUuid2 = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep4, inepUuid2, "XPDR1-NETWORK1", "iNodeEdgePoint_1"); + checkNepOtsiNode(nep4, inepUuid2, "XPDR1-NETWORK1", "iNodeEdgePoint"); List nrgList2 = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); checkNodeRuleGroupForMuxOTSi(nrgList2, enepUuid2, inepUuid2, nodeUuid); break; + case "tpdr": + assertEquals("Tpdr-OTSi node should have 2 eNEPs", 2, nepsE.size()); + assertEquals("Tpdr-OTSi node should have 2 iNEPs", 2, nepsI.size()); + OwnedNodeEdgePoint nep5 = nepsE.get(0); + Uuid enepUuid3 = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepOtsiNode(nep5, enepUuid3, "XPDR1-NETWORK1", "eNodeEdgePoint"); + OwnedNodeEdgePoint nep6 = nepsI.get(0); + Uuid inepUuid3 = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + .toString()); + checkNepOtsiNode(nep6, inepUuid3, "XPDR1-NETWORK1", "iNodeEdgePoint"); + List nrgList3 = node.nonnullNodeRuleGroup().values().stream() + .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) + .collect(Collectors.toList()); + checkNodeRuleGroupForTpdrOTSi(nrgList3, enepUuid3, inepUuid3, nodeUuid); + break; default: Iterator nepIterator = node.nonnullOwnedNodeEdgePoint().values().iterator(); int count = 1; @@ -455,6 +563,34 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { checkCommonPartOfNep(nep, false); } + private void checkNodeRuleGroupForTpdrDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, + Uuid nodeUuid) { + assertEquals("transponder DSR should contain 2 node rule group", 2, nrgList.size()); + for (NodeRuleGroup nodeRuleGroup : nrgList) { + assertEquals("each node-rule-group should contain 2 NEP for transponder DSR", + 2, nodeRuleGroup.getNodeEdgePoint().size()); + } + List nodeEdgePointList = new ArrayList<>(nrgList.get(0).nonnullNodeEdgePoint().values()); + assertThat("node-rule-group nb 1 should be between nep-client1 and nep-network1", + nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(), + either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue()))); + assertThat("node-rule-group nb 1 should be between nep-client1 and nep-network1", + nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), + either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue()))); + assertEquals("node-rule-group nb 1 should be between nep-client1 and nep-network1 of the same node", + nodeEdgePointList.get(0).getNodeUuid(), nodeUuid); + assertEquals("node-rule-group nb 1 should be between nep-client1 and nep-network1 of the same node", + nodeEdgePointList.get(1).getNodeUuid(), nodeUuid); + List rule = new ArrayList<>(nrgList.get(1).nonnullRule().values()); + assertEquals("node-rule-group nb 1 should contain a single rule", 1, rule.size()); + assertEquals("local-id of the rule should be 'forward'", + "forward", rule.get(0).getLocalId()); + assertEquals("the forwarding rule should be 'MAYFORWARDACROSSGROUP'", + ForwardingRule.MAYFORWARDACROSSGROUP, rule.get(0).getForwardingRule()); + assertEquals("the rule type should be 'FORWARDING'", + RuleType.FORWARDING, rule.get(0).getRuleType()); + } + private void checkNodeRuleGroupForMuxDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, Uuid nodeUuid) { assertEquals("muxponder DSR should contain 4 node rule group", 4, nrgList.size()); @@ -464,7 +600,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { } List nodeEdgePointList = new ArrayList<>(nrgList.get(0).nonnullNodeEdgePoint().values()); assertThat("node-rule-group nb 2 should be between nep-client4 and nep-network1", - nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(), + nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue()))); assertThat("node-rule-group nb 2 should be between nep-client4 and nep-network1", nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), @@ -510,6 +646,31 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { RuleType.FORWARDING, ruleList.get(0).getRuleType()); } + private void checkNodeRuleGroupForTpdrOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, + Uuid nodeUuid) { + assertEquals("Tpdr-OTSi should contain two node rule groups", 2, nrgList.size()); + List nodeEdgePointList = new ArrayList<>(nrgList.get(0).getNodeEdgePoint().values()); + assertEquals("Tpdr-OTSi node-rule-group should contain 2 NEP", 2, nodeEdgePointList.size()); + assertThat("Tpdr-OTSi node-rule-group should be between eNEP and iNEP of XPDR1-NETWORK1", + nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(), + either(containsString(enepUuid.getValue())).or(containsString(inepUuid.getValue()))); + assertThat("Tpdr-OTSi node-rule-group should be between eNEP and iNEP of XPDR1-NETWORK1", + nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), + either(containsString(enepUuid.getValue())).or(containsString(inepUuid.getValue()))); + assertEquals("any item of the node-rule-group should have the same nodeUuid", + nodeUuid, nodeEdgePointList.get(0).getNodeUuid()); + assertEquals("any item of the node-rule-group should have the same nodeUuid", + nodeUuid, nodeEdgePointList.get(1).getNodeUuid()); + List ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values()); + assertEquals("node-rule-group should contain a single rule", 1, ruleList.size()); + assertEquals("local-id of the rule should be 'forward'", + "forward", ruleList.get(0).getLocalId()); + assertEquals("the forwarding rule should be 'MAYFORWARDACROSSGROUP'", + ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule()); + assertEquals("the rule type should be 'FORWARDING'", + RuleType.FORWARDING, ruleList.get(0).getRuleType()); + } + private void checkNodeRuleGroupForMuxOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, Uuid nodeUuid) { assertEquals("Mux-OTSi should contain a single node rule group", 1, nrgList.size()); @@ -564,7 +725,7 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { RuleType.FORWARDING, ruleList0.get(0).getRuleType()); } - private void checkNepClient100G(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) { + private void checkNepClient100GSwitch(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) { assertEquals("bad uuid for " + portName, nepUuid, nep.getUuid()); List nameList = new ArrayList<>(nep.nonnullName().values()); assertEquals("value of client nep should be '" + portName + "'", @@ -580,6 +741,22 @@ public class ConvertORTopoObjectToTapiTooObjectTest extends AbstractTest { checkCommonPartOfNep(nep, false); } + private void checkNepClient100GTpdr(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) { + assertEquals("bad uuid for " + portName, nepUuid, nep.getUuid()); + List nameList = new ArrayList<>(nep.nonnullName().values()); + assertEquals("value of client nep should be '" + portName + "'", + portName, nameList.get(0).getValue()); + assertEquals("value-name of client nep for '" + portName + "' should be 100G-tpdr'", + nepName, nameList.get(0).getValueName()); + assertEquals("Client nep should support 1 kind of cep", + 1, nep.getSupportedCepLayerProtocolQualifier().size()); + assertThat("client nep should support 2 kind of cep", + nep.getSupportedCepLayerProtocolQualifier(), + hasItems(DIGITALSIGNALTYPE100GigE.class)); + assertEquals("client nep should be of ETH protocol type", LayerProtocolName.ETH, nep.getLayerProtocolName()); + checkCommonPartOfNep(nep, false); + } + private void checkNepOtsiNode(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) { assertEquals("bad uuid for " + portName, nepUuid, nep.getUuid()); List nameList = new ArrayList<>(nep.nonnullName().values()); diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java new file mode 100644 index 000000000..551e75c88 --- /dev/null +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java @@ -0,0 +1,76 @@ +/* + * Copyright © 2019 Orange, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.transportpce.tapi.topology; + +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.when; + +import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.Optional; +import java.util.concurrent.ExecutionException; +import org.eclipse.jdt.annotation.NonNull; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.ReadTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.tapi.utils.TopologyDataUtils; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsOutput; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.Topology; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.RpcResult; + +public class TapiTopologyImplExceptionTest { + + @Test + public void getTopologyDetailsWithExceptionTest() throws InterruptedException, ExecutionException { + DataBroker dataBroker = Mockito.mock(DataBroker.class); + when(dataBroker.newReadOnlyTransaction()) + .thenReturn(new ReadTransactionMock()); + + GetTopologyDetailsInput input = TopologyDataUtils.buildGetTopologyDetailsInput(NetworkUtils.OTN_NETWORK_ID); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(dataBroker); + ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); + RpcResult rpcResult = result.get(); + Topology topology = rpcResult.getResult().getTopology(); + assertNull("Topology should be null", topology); + } + + private class ReadTransactionMock implements ReadTransaction { + + @Override + public @NonNull Object getIdentifier() { + // TODO Auto-generated method stub + return null; + } + + @Override + public @NonNull FluentFuture> read(@NonNull LogicalDatastoreType store, + @NonNull InstanceIdentifier path) { + return FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException())); + } + + @Override + public @NonNull FluentFuture exists(@NonNull LogicalDatastoreType store, + @NonNull InstanceIdentifier path) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void close() { + // TODO Auto-generated method stub + } + } + +} diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java index aeab921fe..2e9898cf8 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java @@ -12,7 +12,6 @@ import static org.hamcrest.CoreMatchers.either; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -64,7 +63,7 @@ public class TapiTopologyImplTest extends AbstractTest { TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(), TopologyDataUtils.OPENROADM_TOPOLOGY_FILE, InstanceIdentifiers.OVERLAY_NETWORK_II); TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(), - TopologyDataUtils.OTN_TOPOLOGY_WITH_OTN_LINKS_FILE, InstanceIdentifiers.OTN_NETWORK_II); + TopologyDataUtils.OTN_TOPOLOGY_FILE, InstanceIdentifiers.OTN_NETWORK_II); TopologyDataUtils.writePortmappingFromFileToDatastore(getDataStoreContextUtil()); LOG.info("setup done"); } @@ -95,10 +94,10 @@ public class TapiTopologyImplTest extends AbstractTest { Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes("TAPI Ethernet Node".getBytes()).toString()); assertEquals("incorrect topology uuid", topoUuid, topology.getUuid()); assertEquals("incorrect node uuid", nodeUuid, topologyNodeList.get(0).getUuid()); - assertNull("TAPI Ethernet Node should have no nep", topologyNodeList.get(0).getOwnedNodeEdgePoint()); + assertEquals("TAPI Ethernet Node should have 2 neps", + 2, topologyNodeList.get(0).getOwnedNodeEdgePoint().size()); } - @Test public void getTopologyDetailsForOtnTopologyWithOtnLinksWhenSuccessful() throws ExecutionException, InterruptedException { @@ -116,8 +115,43 @@ public class TapiTopologyImplTest extends AbstractTest { @Nullable Topology topology = rpcResult.getResult().getTopology(); assertNotNull("Topology should not be null", topology); - assertEquals("Node list size should be 9", 9, topology.getNode().size()); - assertEquals("Link list size should be 14", 14, topology.getLink().size()); + assertEquals("Node list size should be 13", 13, topology.getNode().size()); + long nb1 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().values().stream().findFirst().get().getValue().equals("XPDR-A1-XPDR1")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr")))) + .count(); + assertEquals("XPDR-A1-XPDR1 should only have one client nep", 1, nb1); + long nb2 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().values().stream().findFirst().get().getValue().equals("SPDR-SA1-XPDR1")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) + .count(); + assertEquals("SPDR-SA1-XPDR1 (mux) should have 4 client neps", 4, nb2); + long nb3 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().values().stream().findFirst().get().getValue().equals("SPDR-SA1-XPDR1")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_N")))) + .count(); + assertEquals("SPDR-SA1-XPDR1 (mux) should have a single network nep", 1, nb3); + long nb4 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().values().stream().findFirst().get().getValue().equals("SPDR-SA1-XPDR2")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) + .count(); + assertEquals("SPDR-SA1-XPDR2 (switch) should have 4 client neps", 4, nb4); + long nb5 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().values().stream().findFirst().get().getValue().equals("SPDR-SA1-XPDR2")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_N")))) + .count(); + assertEquals("SPDR-SA1-XPDR2 (switch) should have 2 network neps", 2, nb5); + assertEquals("Link list size should be 18", 18, topology.getLink().size()); Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Multi-layer topology".getBytes()).toString()); assertEquals("incorrect topology uuid", topoUuid, topology.getUuid()); assertEquals("topology name should be T0 - Multi-layer topology", @@ -128,16 +162,16 @@ public class TapiTopologyImplTest extends AbstractTest { .filter(n -> n.getName().containsKey(new NameKey("dsr/odu node name"))).count(); long nbPhotonicNodes = topology.nonnullNode().values().stream() .filter(n -> n.getName().containsKey(new NameKey("otsi node name"))).count(); - assertEquals("Node list should contain 4 DSR-ODU nodes", 4, nbDsrOduNodes); - assertEquals("Node list should contain 5 Photonics nodes", 5, nbPhotonicNodes); + assertEquals("Node list should contain 6 DSR-ODU nodes", 6, nbDsrOduNodes); + assertEquals("Node list should contain 7 Photonics nodes", 7, nbPhotonicNodes); long nbTransititionalLinks = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("transitional link name"))).count(); long nbOmsLinks = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("OMS link name"))).count(); long nbOtnLinks = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("otn link name"))).count(); - assertEquals("Link list should contain 6 transitional links", 6, nbTransititionalLinks); - assertEquals("Link list should contain 6 transitional links", 6, nbOmsLinks); + assertEquals("Link list should contain 8 transitional links", 8, nbTransititionalLinks); + assertEquals("Link list should contain 8 transitional links", 8, nbOmsLinks); assertEquals("Link list should contain 2 OTN links", 2, nbOtnLinks); Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) @@ -164,11 +198,12 @@ public class TapiTopologyImplTest extends AbstractTest { .getBytes(Charset.forName("UTF-8"))).toString()); List links = topology.nonnullLink().values().stream() + .filter(l -> l.getName().containsKey(new NameKey("otn link name"))) .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - checkOtnLink(links.get(4), topoUuid, node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid, + checkOtnLink(links.get(0), topoUuid, node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid, "ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"); - checkOtnLink(links.get(11), topoUuid, node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid, + checkOtnLink(links.get(1), topoUuid, node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid, "OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"); } diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TopologyDataUtils.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TopologyDataUtils.java index 80b393ddb..39868077f 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TopologyDataUtils.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TopologyDataUtils.java @@ -33,9 +33,9 @@ import org.slf4j.LoggerFactory; public final class TopologyDataUtils { private static final Logger LOG = LoggerFactory.getLogger(TopologyDataUtils.class); - public static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/get_openroadm-topology2.xml"; - public static final String OTN_TOPOLOGY_WITH_OTN_LINKS_FILE = "src/test/resources/otn-topology-with-otn-links.xml"; - public static final String PORTMAPPING_FILE = "src/test/resources/get_portmapping.xml"; + public static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/openroadm-topology.xml"; + public static final String OTN_TOPOLOGY_FILE = "src/test/resources/otn-topology.xml"; + public static final String PORTMAPPING_FILE = "src/test/resources/portmapping.xml"; public static GetTopologyDetailsInput buildGetTopologyDetailsInput(String topoName) { GetTopologyDetailsInputBuilder builtInput = new GetTopologyDetailsInputBuilder(); diff --git a/tapi/src/test/resources/get_openroadm-topology2.xml b/tapi/src/test/resources/openroadm-topology.xml similarity index 85% rename from tapi/src/test/resources/get_openroadm-topology2.xml rename to tapi/src/test/resources/openroadm-topology.xml index 2a9c9b24a..053f56d7c 100644 --- a/tapi/src/test/resources/get_openroadm-topology2.xml +++ b/tapi/src/test/resources/openroadm-topology.xml @@ -3,11 +3,38 @@ openroadm-topology - + ROADM-A1-SRG3 - + + SRG3-PP3-TXRX + SRG-TXRX-PP + + + SRG3-PP2-TXRX + SRG-TXRX-PP + + + SRG3-CP-TXRX + SRG-TXRX-CP + + + SRG3-PP1-TXRX + SRG-TXRX-PP + + + SRG3-PP4-TXRX + SRG-TXRX-PP + + 95 @@ -297,39 +324,90 @@ 16 - - SRG3-PP3-TXRX - SRG-TXRX-PP - - - SRG3-PP2-TXRX - SRG-TXRX-PP + + clli-network + NodeA + + + openroadm-network + ROADM-A1 + + SRG + + + XPDR-C1-XPDR1 + + XPDR1-CLIENT1 + XPDR1-NETWORK1 + XPONDER-CLIENT - - SRG3-CP-TXRX - SRG-TXRX-CP + + XPDR1-CLIENT2 + XPDR1-NETWORK2 + XPONDER-CLIENT - - SRG3-PP1-TXRX - SRG-TXRX-PP + + XPDR1-NETWORK2 + XPDR1-CLIENT2 + XPONDER-NETWORK - - SRG3-PP4-TXRX - SRG-TXRX-PP + + XPDR1-NETWORK1 + XPDR1-CLIENT1 + + ROADM-C1-SRG1--SRG1-PP1-TXRX + + + XPONDER-NETWORK clli-network - NodeA + NodeC openroadm-network - ROADM-A1 + XPDR-C1 - SRG + XPONDER - ROADM-C1-SRG1 - + ROADM-A1-SRG1 + + SRG1-PP4-TXRX + SRG-TXRX-PP + + + SRG1-PP1-TXRX + SRG-TXRX-PP + + + SRG1-PP2-TXRX + SRG-TXRX-PP + + + SRG1-PP3-TXRX + SRG-TXRX-PP + + + SRG1-CP-TXRX + SRG-TXRX-CP + + 95 @@ -619,39 +697,31 @@ 16 - - SRG1-PP4-TXRX - SRG-TXRX-PP - - - SRG1-PP1-TXRX - SRG-TXRX-PP - - - SRG1-PP2-TXRX - SRG-TXRX-PP - - - SRG1-PP3-TXRX - SRG-TXRX-PP - - - SRG1-CP-TXRX - SRG-TXRX-CP - clli-network - NodeC + NodeA openroadm-network - ROADM-C1 + ROADM-A1 SRG - ROADM-A1-SRG1 - + ROADM-A1-DEG1 + + DEG1-CTP-TXRX + DEGREE-TXRX-CTP + + + DEG1-TTP-TXRX + DEGREE-TXRX-TTP + + + 1 95 @@ -940,27 +1010,7 @@ 16 - - - SRG1-PP4-TXRX - SRG-TXRX-PP - - - SRG1-PP1-TXRX - SRG-TXRX-PP - - - SRG1-PP2-TXRX - SRG-TXRX-PP - - - SRG1-PP3-TXRX - SRG-TXRX-PP - - - SRG1-CP-TXRX - SRG-TXRX-CP - + clli-network NodeA @@ -969,33 +1019,68 @@ openroadm-network ROADM-A1 - SRG + DEGREE - SPDR-SA1-XPDR1 - - XPDR1-NETWORK1 + XPDR-A1-XPDR1 + + XPDR1-CLIENT1 + XPDR1-NETWORK1 + XPONDER-CLIENT + + + XPDR1-CLIENT2 + XPDR1-NETWORK2 + XPONDER-CLIENT + + + XPDR1-NETWORK2 + XPDR1-CLIENT2 XPONDER-NETWORK + + + XPDR1-NETWORK1 + XPDR1-CLIENT1 - ROADM-A1-SRG1--SRG1-PP2-TXRX + ROADM-A1-SRG1--SRG1-PP1-TXRX + XPONDER-NETWORK openroadm-network - SPDR-SA1 + XPDR-A1 clli-network - NodeSA + NodeA XPONDER - ROADM-A1-DEG1 - - 1 + ROADM-A1-DEG2 + + DEG2-TTP-TXRX + DEGREE-TXRX-TTP + + + DEG2-CTP-TXRX + DEGREE-TXRX-CTP + + + 2 95 @@ -1285,14 +1370,6 @@ 16 - - DEG1-CTP-TXRX - DEGREE-TXRX-CTP - - - DEG1-TTP-TXRX - DEGREE-TXRX-TTP - clli-network NodeA @@ -1304,9 +1381,34 @@ DEGREE - ROADM-A1-DEG2 - - 2 + ROADM-C1-SRG1 + + SRG1-PP4-TXRX + SRG-TXRX-PP + + + SRG1-PP1-TXRX + SRG-TXRX-PP + + + SRG1-PP2-TXRX + SRG-TXRX-PP + + + SRG1-PP3-TXRX + SRG-TXRX-PP + + + SRG1-CP-TXRX + SRG-TXRX-CP + + 95 @@ -1595,49 +1697,53 @@ 16 - - - DEG2-TTP-TXRX - DEGREE-TXRX-TTP - - - DEG2-CTP-TXRX - DEGREE-TXRX-CTP - + clli-network - NodeA + NodeC openroadm-network - ROADM-A1 + ROADM-C1 - DEGREE + SRG - SPDR-SC1-XPDR1 - + SPDR-SA1-XPDR1 + XPDR1-NETWORK1 XPONDER-NETWORK - ROADM-C1-SRG1--SRG1-PP2-TXRX + ROADM-A1-SRG1--SRG1-PP2-TXRX openroadm-network - SPDR-SC1 + SPDR-SA1 clli-network - NodeSC + NodeSA XPONDER ROADM-C1-DEG1 - + + DEG1-CTP-TXRX + DEGREE-TXRX-CTP + + + DEG1-TTP-TXRX + DEGREE-TXRX-TTP + + 1 95 @@ -1928,14 +2034,6 @@ 16 - - DEG1-CTP-TXRX - DEGREE-TXRX-CTP - - - DEG1-TTP-TXRX - DEGREE-TXRX-TTP - clli-network NodeC @@ -1946,9 +2044,42 @@ DEGREE + + SPDR-SC1-XPDR1 + + XPDR1-NETWORK1 + XPONDER-NETWORK + + ROADM-C1-SRG1--SRG1-PP2-TXRX + + + + + openroadm-network + SPDR-SC1 + + + clli-network + NodeSC + + XPONDER + ROADM-C1-DEG2 - + + DEG2-TTP-TXRX + DEGREE-TXRX-TTP + + + DEG2-CTP-TXRX + DEGREE-TXRX-CTP + + 2 95 @@ -2239,14 +2370,6 @@ 16 - - DEG2-TTP-TXRX - DEGREE-TXRX-TTP - - - DEG2-CTP-TXRX - DEGREE-TXRX-CTP - clli-network NodeC @@ -2259,11 +2382,13 @@ SPDR-SA1-XPDR2 - + XPDR2-NETWORK1 XPONDER-NETWORK - + XPDR2-NETWORK3 XPONDER-NETWORK - + XPDR2-NETWORK2 XPONDER-NETWORK - + XPDR2-NETWORK4 XPONDER-NETWORK @@ -2297,11 +2424,13 @@ SPDR-SC1-XPDR2 - + XPDR2-NETWORK1 XPONDER-NETWORK - + XPDR2-NETWORK3 XPONDER-NETWORK - + XPDR2-NETWORK2 XPONDER-NETWORK - + XPDR2-NETWORK4 XPONDER-NETWORK @@ -2344,7 +2475,8 @@ XPDR1-NETWORK1 SPDR-SC1-XPDR1 - SPDR-SC1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP2-TXRX + SPDR-SC1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP2-TXRX XPONDER-INPUT @@ -2355,7 +2487,8 @@ ROADM-A1-DEG2 DEG2-TTP-TXRX - + ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX @@ -2363,10 +2496,27 @@ DEG1-TTP-TXRX ROADM-C1-DEG1 - ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX + ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX ROADM-TO-ROADM + + XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX + + + XPDR-C1-XPDR1 + XPDR1-NETWORK1 + + + SRG1-PP1-TXRX + ROADM-C1-SRG1 + + ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1 + + XPONDER-OUTPUT + ROADM-C1-SRG1-SRG1-PP3-TXRXtoSPDR-SC1-XPDR2-XPDR2-NETWORK2 @@ -2378,7 +2528,8 @@ XPDR2-NETWORK2 SPDR-SC1-XPDR2 - SPDR-SC1-XPDR2-XPDR2-NETWORK2toROADM-C1-SRG1-SRG1-PP3-TXRX + SPDR-SC1-XPDR2-XPDR2-NETWORK2toROADM-C1-SRG1-SRG1-PP3-TXRX XPONDER-INPUT @@ -2393,7 +2544,8 @@ XPDR2-NETWORK3 SPDR-SA1-XPDR2 - SPDR-SA1-XPDR2-XPDR2-NETWORK3toROADM-A1-SRG1-SRG1-PP4-TXRX + SPDR-SA1-XPDR2-XPDR2-NETWORK3toROADM-A1-SRG1-SRG1-PP4-TXRX XPONDER-INPUT @@ -2408,7 +2560,8 @@ SRG1-CP-TXRX ROADM-C1-SRG1 - ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX + ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX DROP-LINK @@ -2423,7 +2576,8 @@ SRG1-PP4-TXRX ROADM-A1-SRG1 - ROADM-A1-SRG1-SRG1-PP4-TXRXtoSPDR-SA1-XPDR2-XPDR2-NETWORK3 + ROADM-A1-SRG1-SRG1-PP4-TXRXtoSPDR-SA1-XPDR2-XPDR2-NETWORK3 XPONDER-OUTPUT @@ -2438,7 +2592,8 @@ SRG1-PP2-TXRX ROADM-C1-SRG1 - ROADM-C1-SRG1-SRG1-PP2-TXRXtoSPDR-SC1-XPDR1-XPDR1-NETWORK1 + ROADM-C1-SRG1-SRG1-PP2-TXRXtoSPDR-SC1-XPDR1-XPDR1-NETWORK1 XPONDER-OUTPUT @@ -2453,7 +2608,8 @@ DEG1-CTP-TXRX ROADM-A1-DEG1 - ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX + ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX ADD-LINK @@ -2468,7 +2624,8 @@ SRG1-PP3-TXRX ROADM-C1-SRG1 - ROADM-C1-SRG1-SRG1-PP3-TXRXtoSPDR-SC1-XPDR2-XPDR2-NETWORK2 + ROADM-C1-SRG1-SRG1-PP3-TXRXtoSPDR-SC1-XPDR2-XPDR2-NETWORK2 XPONDER-OUTPUT @@ -2483,7 +2640,8 @@ DEG2-CTP-TXRX ROADM-A1-DEG2 - ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX + ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX ADD-LINK @@ -2498,7 +2656,8 @@ XPDR2-NETWORK3 SPDR-SC1-XPDR2 - SPDR-SC1-XPDR2-XPDR2-NETWORK3toROADM-C1-SRG1-SRG1-PP4-TXRX + SPDR-SC1-XPDR2-XPDR2-NETWORK3toROADM-C1-SRG1-SRG1-PP4-TXRX XPONDER-INPUT @@ -2513,39 +2672,42 @@ SRG3-CP-TXRX ROADM-A1-SRG3 - ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX + ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX DROP-LINK - SPDR-SA1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX + ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1 - SPDR-SA1-XPDR1 - XPDR1-NETWORK1 + ROADM-A1-SRG1 + SRG1-PP1-TXRX - SRG1-PP2-TXRX - ROADM-A1-SRG1 + XPDR1-NETWORK1 + XPDR-A1-XPDR1 - ROADM-A1-SRG1-SRG1-PP2-TXRXtoSPDR-SA1-XPDR1-XPDR1-NETWORK1 + XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX - XPONDER-OUTPUT + XPONDER-INPUT - ROADM-A1-SRG1-SRG1-PP2-TXRXtoSPDR-SA1-XPDR1-XPDR1-NETWORK1 + SPDR-SA1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX - ROADM-A1-SRG1 - SRG1-PP2-TXRX + SPDR-SA1-XPDR1 + XPDR1-NETWORK1 - XPDR1-NETWORK1 - SPDR-SA1-XPDR1 + SRG1-PP2-TXRX + ROADM-A1-SRG1 - SPDR-SA1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX + ROADM-A1-SRG1-SRG1-PP2-TXRXtoSPDR-SA1-XPDR1-XPDR1-NETWORK1 - XPONDER-INPUT + XPONDER-OUTPUT ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX @@ -2554,7 +2716,8 @@ ROADM-C1-DEG1 DEG1-TTP-TXRX - + ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX @@ -2562,10 +2725,27 @@ DEG2-TTP-TXRX ROADM-A1-DEG2 - ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX + ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX ROADM-TO-ROADM + + ROADM-A1-SRG1-SRG1-PP2-TXRXtoSPDR-SA1-XPDR1-XPDR1-NETWORK1 + + + ROADM-A1-SRG1 + SRG1-PP2-TXRX + + + XPDR1-NETWORK1 + SPDR-SA1-XPDR1 + + SPDR-SA1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX + + XPONDER-INPUT + ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX @@ -2577,7 +2757,8 @@ DEG1-CTP-TXRX ROADM-C1-DEG1 - ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX + ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX EXPRESS-LINK @@ -2592,7 +2773,8 @@ SRG1-CP-TXRX ROADM-C1-SRG1 - ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX + ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX DROP-LINK @@ -2607,7 +2789,8 @@ SRG1-CP-TXRX ROADM-A1-SRG1 - ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX + ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX DROP-LINK @@ -2622,7 +2805,8 @@ DEG2-CTP-TXRX ROADM-C1-DEG2 - ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX + ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX EXPRESS-LINK @@ -2637,7 +2821,24 @@ SRG1-PP4-TXRX ROADM-C1-SRG1 - ROADM-C1-SRG1-SRG1-PP4-TXRXtoSPDR-SC1-XPDR2-XPDR2-NETWORK3 + ROADM-C1-SRG1-SRG1-PP4-TXRXtoSPDR-SC1-XPDR2-XPDR2-NETWORK3 + + XPONDER-OUTPUT + + + XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX + + + XPDR-A1-XPDR1 + XPDR1-NETWORK1 + + + SRG1-PP1-TXRX + ROADM-A1-SRG1 + + ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1 XPONDER-OUTPUT @@ -2652,7 +2853,8 @@ DEG1-CTP-TXRX ROADM-A1-DEG1 - ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX + ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX EXPRESS-LINK @@ -2667,10 +2869,27 @@ DEG1-CTP-TXRX ROADM-A1-DEG1 - ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX + ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX ADD-LINK + + ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1 + + + ROADM-C1-SRG1 + SRG1-PP1-TXRX + + + XPDR1-NETWORK1 + XPDR-C1-XPDR1 + + XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX + + XPONDER-INPUT + ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX @@ -2682,7 +2901,8 @@ SRG3-CP-TXRX ROADM-A1-SRG3 - ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX + ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX DROP-LINK @@ -2697,7 +2917,8 @@ DEG2-CTP-TXRX ROADM-A1-DEG2 - ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX + ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX ADD-LINK @@ -2712,7 +2933,8 @@ SRG1-PP3-TXRX ROADM-A1-SRG1 - ROADM-A1-SRG1-SRG1-PP3-TXRXtoSPDR-SA1-XPDR2-XPDR2-NETWORK2 + ROADM-A1-SRG1-SRG1-PP3-TXRXtoSPDR-SA1-XPDR2-XPDR2-NETWORK2 XPONDER-OUTPUT @@ -2727,7 +2949,8 @@ XPDR2-NETWORK2 SPDR-SA1-XPDR2 - SPDR-SA1-XPDR2-XPDR2-NETWORK2toROADM-A1-SRG1-SRG1-PP3-TXRX + SPDR-SA1-XPDR2-XPDR2-NETWORK2toROADM-A1-SRG1-SRG1-PP3-TXRX XPONDER-INPUT @@ -2742,7 +2965,8 @@ DEG2-CTP-TXRX ROADM-C1-DEG2 - ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX + ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX ADD-LINK @@ -2757,7 +2981,8 @@ SRG1-CP-TXRX ROADM-A1-SRG1 - ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX + ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX DROP-LINK @@ -2772,7 +2997,8 @@ DEG1-CTP-TXRX ROADM-C1-DEG1 - ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX + ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX ADD-LINK @@ -2787,7 +3013,8 @@ DEG2-CTP-TXRX ROADM-A1-DEG2 - ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX + ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX EXPRESS-LINK diff --git a/tapi/src/test/resources/otn-topology-with-otn-links.xml b/tapi/src/test/resources/otn-topology.xml similarity index 59% rename from tapi/src/test/resources/otn-topology-with-otn-links.xml rename to tapi/src/test/resources/otn-topology.xml index 9005a8705..bf7e734ce 100644 --- a/tapi/src/test/resources/otn-topology-with-otn-links.xml +++ b/tapi/src/test/resources/otn-topology.xml @@ -3,56 +3,170 @@ otn-topology - + + + XPDR-C1-XPDR1 + + XPDR1-CLIENT1 + XPDR1-NETWORK1 + + + + x:if-100GE + + + XPONDER-CLIENT + + + XPDR1-CLIENT2 + XPDR1-NETWORK2 + + + + x:if-100GE + + + XPONDER-CLIENT + + + XPDR1-NETWORK2 + + openroadm-topology + XPDR-C1-XPDR1 + XPDR1-NETWORK2 + + XPDR1-CLIENT2 + + x:ODU4 + + + + x:if-OCH-OTU4-ODU4 + + + XPONDER-NETWORK + + + XPDR1-NETWORK1 + + openroadm-topology + XPDR-C1-XPDR1 + XPDR1-NETWORK1 + + XPDR1-CLIENT1 + + x:ODU4 + + + + x:if-OCH-OTU4-ODU4 + + + XPONDER-NETWORK + + + clli-network + NodeC + + + openroadm-network + XPDR-C1 + + + openroadm-topology + XPDR-C1-XPDR1 + + TPDR + + 1 + + SPDR-SA1-XPDR1 - + XPDR1-CLIENT1 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-CLIENT3 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-CLIENT2 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-NETWORK1 openroadm-topology SPDR-SA1-XPDR1 XPDR1-NETWORK1 - + - x:ODTU4.ts-Allocated + x:ODTU4.ts-Allocated 2 1 12 @@ -216,21 +330,27 @@ 26 27 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR1-CLIENT4 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT @@ -248,7 +368,8 @@ SPDR-SA1-XPDR1 MUXPDR - + 1 @@ -290,59 +411,174 @@ non-blocking - - + + + 1 + + + + XPDR-A1-XPDR1 + + XPDR1-CLIENT1 + XPDR1-NETWORK1 + + + + x:if-100GE + + + XPONDER-CLIENT + + + XPDR1-CLIENT2 + XPDR1-NETWORK2 + + + + x:if-100GE + + + XPONDER-CLIENT + + + XPDR1-NETWORK2 + + openroadm-topology + XPDR-A1-XPDR1 + XPDR1-NETWORK2 + + XPDR1-CLIENT2 + + x:ODU4 + + + + x:if-OCH-OTU4-ODU4 + + + XPONDER-NETWORK + + + XPDR1-NETWORK1 + + openroadm-topology + XPDR-A1-XPDR1 + XPDR1-NETWORK1 + + XPDR1-CLIENT1 + + x:ODU4 + + + + x:if-OCH-OTU4-ODU4 + + + XPONDER-NETWORK + + + openroadm-network + XPDR-A1 + + + clli-network + NodeA + + + openroadm-topology + XPDR-A1-XPDR1 + + TPDR + 1 SPDR-SC1-XPDR1 - + XPDR1-CLIENT1 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-CLIENT3 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-CLIENT2 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT - + XPDR1-NETWORK1 openroadm-topology SPDR-SC1-XPDR1 XPDR1-NETWORK1 - + - x:ODTU4.ts-Allocated + x:ODTU4.ts-Allocated 2 1 12 @@ -506,21 +742,27 @@ 26 27 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR1-CLIENT4 - + x:ODU2e - + - x:if-10GE-ODU2e + x:if-10GE-ODU2e XPONDER-CLIENT @@ -538,7 +780,8 @@ SPDR-SC1-XPDR1 MUXPDR - + 1 @@ -580,125 +823,159 @@ non-blocking - - + + 1 SPDR-SA1-XPDR2 - + XPDR2-NETWORK1 openroadm-topology SPDR-SA1-XPDR2 XPDR2-NETWORK1 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK3 openroadm-topology SPDR-SA1-XPDR2 XPDR2-NETWORK3 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK2 openroadm-topology SPDR-SA1-XPDR2 XPDR2-NETWORK2 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK4 openroadm-topology SPDR-SA1-XPDR2 XPDR2-NETWORK4 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-CLIENT3 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT4 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT1 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT2 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT @@ -716,7 +993,8 @@ SPDR-SA1-XPDR2 SWITCH - + 1 @@ -733,125 +1011,159 @@ non-blocking - - + + 2 SPDR-SC1-XPDR2 - + XPDR2-NETWORK1 openroadm-topology SPDR-SC1-XPDR2 XPDR2-NETWORK1 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK3 openroadm-topology SPDR-SC1-XPDR2 XPDR2-NETWORK3 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK2 openroadm-topology SPDR-SC1-XPDR2 XPDR2-NETWORK2 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-NETWORK4 openroadm-topology SPDR-SC1-XPDR2 XPDR2-NETWORK4 - + x:ODU4 - + - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 XPONDER-NETWORK - + XPDR2-CLIENT3 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT4 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT1 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT - + XPDR2-CLIENT2 - + x:ODU4 - + - x:if-100GE-ODU4 + x:if-100GE-ODU4 XPONDER-CLIENT @@ -869,7 +1181,8 @@ NodeSC SWITCH - + 1 @@ -886,80 +1199,94 @@ non-blocking - - + + 2 - OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 + OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 - SPDR-SA1-XPDR1 + SPDR-SC1-XPDR1 XPDR1-NETWORK1 OTU4 XPDR1-NETWORK1 - SPDR-SC1-XPDR1 + SPDR-SA1-XPDR1 - 0 - 100000 - OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 + 0 + 100000 + OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 OTN-LINK - OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 + OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 - SPDR-SC1-XPDR1 + SPDR-SA1-XPDR1 XPDR1-NETWORK1 OTU4 XPDR1-NETWORK1 - SPDR-SA1-XPDR1 + SPDR-SC1-XPDR1 - 0 - 100000 - OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 + 0 + 100000 + OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 OTN-LINK - ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 + ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 - SPDR-SA1-XPDR1 + SPDR-SC1-XPDR1 XPDR1-NETWORK1 ODTU4 XPDR1-NETWORK1 - SPDR-SC1-XPDR1 + SPDR-SA1-XPDR1 - 100000 - 0 - ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 + 100000 + 0 + ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 OTN-LINK - ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 + ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 - SPDR-SC1-XPDR1 + SPDR-SA1-XPDR1 XPDR1-NETWORK1 ODTU4 XPDR1-NETWORK1 - SPDR-SA1-XPDR1 + SPDR-SC1-XPDR1 - 100000 - 0 - ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1 + 100000 + 0 + ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1 OTN-LINK diff --git a/tapi/src/test/resources/get_portmapping.xml b/tapi/src/test/resources/portmapping.xml similarity index 79% rename from tapi/src/test/resources/get_portmapping.xml rename to tapi/src/test/resources/portmapping.xml index b5dea0ae4..d165489a1 100644 --- a/tapi/src/test/resources/get_portmapping.xml +++ b/tapi/src/test/resources/portmapping.xml @@ -7,7 +7,8 @@ xpdr-client C1 bidirectional - x:if-100GE + x:if-100GE XPDR1-NETWORK2 fHpE8JbDyn4= 1/0/2-PLUG-CLIENT @@ -19,7 +20,8 @@ xpdr-network 1 bidirectional - x:if-OCH + x:if-OCH XPDR1-CLIENT2 AJUlmCIYKpQh 1/0/2-PLUG-NET @@ -30,7 +32,8 @@ xpdr-client C1 bidirectional - x:if-100GE + x:if-100GE XPDR1-NETWORK1 fHpE8JbDyn0= 1/0/1-PLUG-CLIENT @@ -42,7 +45,8 @@ xpdr-network 1 bidirectional - x:if-OCH + x:if-OCH XPDR1-CLIENT1 AJUlmCIYKpQi 1/0/1-PLUG-NET @@ -126,8 +130,10 @@ switch-client CP2-QSFP3-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE BVSiXSSYUCI= CP2-QSFP3 @@ -137,8 +143,10 @@ switch-client CP2-QSFP4-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE BVSiXSSYUCU= CP2-QSFP4 @@ -148,8 +156,10 @@ switch-client CP2-QSFP1-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE BVSiXSSYUCA= CP2-QSFP1 @@ -159,8 +169,10 @@ switch-client CP2-QSFP2-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE BVSiXSSYUCM= CP2-QSFP2 @@ -170,9 +182,12 @@ xpdr-client CP1-SFP3-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e - x:if-10GE + x:if-10GE-ODU2 + x:if-10GE-ODU2e + x:if-10GE L0PHYLgz3+E= CP1-SFP3 @@ -182,8 +197,10 @@ xpdr-client CP1-SFP2-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e + x:if-10GE-ODU2 + x:if-10GE-ODU2e L0PHYLgz3+A= CP1-SFP2 @@ -193,9 +210,12 @@ xpdr-client CP1-SFP4-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e - x:if-10GE + x:if-10GE-ODU2 + x:if-10GE-ODU2e + x:if-10GE L0PHYLgz3+Y= CP1-SFP4 @@ -205,8 +225,10 @@ xpdr-client CP1-SFP1-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e + x:if-10GE-ODU2 + x:if-10GE-ODU2e L0PHYLgz3+M= CP1-SFP1 @@ -217,7 +239,8 @@ switch-network CP8-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 ALx70DYYfGTz switch CP8-CFP @@ -229,7 +252,8 @@ switch-network CP7-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 ALx70DYYfGTy switch CP7-CFP @@ -241,7 +265,8 @@ switch-network CP5-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 ALx70DYYfGT0 switch CP5-CFP @@ -253,7 +278,8 @@ switch-network CP6-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 ALx70DYYfGTx switch CP6-CFP @@ -265,7 +291,8 @@ xpdr-network CP1-CFP0-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 fuYZwEO660g= mpdr CP1-CFP0 @@ -341,8 +368,10 @@ switch-client CP2-QSFP3-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE AN/WSSRXne3s CP2-QSFP3 @@ -352,8 +381,10 @@ switch-client CP2-QSFP4-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE AN/WSSRXne3r CP2-QSFP4 @@ -363,8 +394,10 @@ switch-client CP2-QSFP1-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE AN/WSSRXne3u CP2-QSFP1 @@ -374,8 +407,10 @@ switch-client CP2-QSFP2-P1 bidirectional - x:if-100GE-ODU4 - x:if-100GE + x:if-100GE-ODU4 + x:if-100GE AN/WSSRXne3t CP2-QSFP2 @@ -385,9 +420,12 @@ xpdr-client CP1-SFP3-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e - x:if-10GE + x:if-10GE-ODU2 + x:if-10GE-ODU2e + x:if-10GE FqlcrxV7p38= CP1-SFP3 @@ -397,8 +435,10 @@ xpdr-client CP1-SFP2-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e + x:if-10GE-ODU2 + x:if-10GE-ODU2e FqlcrxV7p34= CP1-SFP2 @@ -408,9 +448,12 @@ xpdr-client CP1-SFP4-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e - x:if-10GE + x:if-10GE-ODU2 + x:if-10GE-ODU2e + x:if-10GE FqlcrxV7p3g= CP1-SFP4 @@ -420,8 +463,10 @@ xpdr-client CP1-SFP1-P1 bidirectional - x:if-10GE-ODU2 - x:if-10GE-ODU2e + x:if-10GE-ODU2 + x:if-10GE-ODU2e FqlcrxV7p30= CP1-SFP1 @@ -432,7 +477,8 @@ switch-network CP8-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 exT821pFtOU= switch CP8-CFP @@ -444,7 +490,8 @@ switch-network CP7-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 exT821pFtOQ= switch CP7-CFP @@ -456,7 +503,8 @@ switch-network CP5-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 exT821pFtOI= switch CP5-CFP @@ -468,7 +516,8 @@ switch-network CP6-CFP-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 exT821pFtOc= switch CP6-CFP @@ -480,7 +529,8 @@ xpdr-network CP1-CFP0-P1 bidirectional - x:if-OCH-OTU4-ODU4 + x:if-OCH-OTU4-ODU4 Swfw02qXGyI= mpdr CP1-CFP0 @@ -494,7 +544,8 @@ xpdr-client C1 bidirectional - x:if-100GE + x:if-100GE XPDR1-NETWORK2 AJUUr6I5fALg 1/0/2-PLUG-CLIENT @@ -506,7 +557,8 @@ xpdr-network 1 bidirectional - x:if-OCH + x:if-OCH XPDR1-CLIENT2 AMkDwQ7xTmRL 1/0/2-PLUG-NET @@ -517,7 +569,8 @@ xpdr-client C1 bidirectional - x:if-100GE + x:if-100GE XPDR1-NETWORK1 AJUUr6I5fALj 1/0/1-PLUG-CLIENT @@ -529,7 +582,8 @@ xpdr-network 1 bidirectional - x:if-OCH + x:if-OCH XPDR1-CLIENT1 AMkDwQ7xTmRI 1/0/1-PLUG-NET -- 2.36.6