From f331326fb6a7bdb93e857d772694c23b09fb8ab5 Mon Sep 17 00:00:00 2001 From: errea Date: Sat, 27 Nov 2021 01:06:47 +0100 Subject: [PATCH] Openroadm Xpdr link TAPI listener Automatic creation of TAPI XPDR link when a new OpenROADM XPDR-RDM link is created using the NetworkUtils RPCs JIRA: TRNSPRTPCE-549 Signed-off-by: errea Change-Id: I603d9ea435acfa9ddc17ef05ceec4f8a7444a45e --- .../tpce/module/TransportPCEImpl.java | 15 +- .../transportpce/tapi/impl/TapiProvider.java | 22 ++- .../tapi/topology/TapiOrLinkListener.java | 152 ++++++++++++++++++ .../OSGI-INF/blueprint/tapi-blueprint.xml | 6 + .../tapi/provider/TapiProviderTest.java | 6 +- .../2.2.1/test13_tapi_full_multi_layer.py | 66 +++----- 6 files changed, 217 insertions(+), 50 deletions(-) create mode 100644 tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java index 579bcebc1..f0542376a 100644 --- a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java @@ -87,6 +87,7 @@ import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener; import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService; import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl; import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl; +import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener; import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener; import org.opendaylight.transportpce.tapi.utils.TapiLink; import org.opendaylight.transportpce.tapi.utils.TapiListener; @@ -222,17 +223,19 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP tapilinkDiscoveryImpl, networkTransaction, tapiLink); TapiNetconfTopologyListener tapiNetConfTopologyListener = new TapiNetconfTopologyListener(tapiNetworkModelService); + TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction); TapiPortMappingListener tapiPortMappingListener = new TapiPortMappingListener(tapiNetworkModelService); tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations, - tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl, - tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService()); + tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl, + tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(), + orLinkListener); if (activateNbiNotification) { LOG.info("Creating nbi-notifications beans ..."); nbiNotificationsProvider = new NbiNotificationsProvider( - publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(), - lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer()); + publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(), + lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer()); } } @@ -288,11 +291,11 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl, TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl, TapiServiceHandlerListenerImpl serviceHandlerListenerImpl, - NotificationService notificationService) { + NotificationService notificationService, TapiOrLinkListener orLinkListener) { return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(), servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService, tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl, - rendererListenerImpl, serviceHandlerListenerImpl, notificationService); + rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener); } private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc, diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java index 149d7ded4..95a7e9824 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java @@ -15,6 +15,7 @@ import org.opendaylight.mdsal.binding.api.NotificationService; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; +import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations; import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils; @@ -23,6 +24,7 @@ import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl; import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl; import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl; import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener; +import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener; import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener; import org.opendaylight.transportpce.tapi.topology.TapiTopologyImpl; import org.opendaylight.transportpce.tapi.topology.TopologyUtils; @@ -37,6 +39,11 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer. import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService; @@ -61,11 +68,16 @@ public class TapiProvider { private static final InstanceIdentifier MAPPING_II = InstanceIdentifier.create(Network.class) .child(org.opendaylight.yang.gen.v1.http .org.opendaylight.transportpce.portmapping.rev210927.network.Nodes.class); + private static final InstanceIdentifier LINK_II = 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(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class) + .child(Link.class); private final DataBroker dataBroker; private final RpcProviderService rpcProviderService; private ObjectRegistration rpcRegistration; private ObjectRegistration tapiNetworkutilsServiceRpcRegistration; private ListenerRegistration dataTreeChangeListenerRegistration; + private ListenerRegistration dataTreeChangeListenerRegistration1; private ListenerRegistration mappingListenerListenerRegistration; private ListenerRegistration pcelistenerRegistration; private ListenerRegistration rendererlistenerRegistration; @@ -74,6 +86,7 @@ public class TapiProvider { private final ServiceDataStoreOperations serviceDataStoreOperations; private final TapiListener tapiListener; private final TapiNetconfTopologyListener topologyListener; + private final TapiOrLinkListener orLinkListener; private TapiPortMappingListener tapiPortMappingListener; private final NetworkTransactionService networkTransactionService; private final TransportpceTapinetworkutilsService tapiNetworkUtils; @@ -88,7 +101,7 @@ public class TapiProvider { TapiNetconfTopologyListener topologyListener, TapiPortMappingListener tapiPortMappingListener, TransportpceTapinetworkutilsService tapiNetworkUtils, TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl, TapiServiceHandlerListenerImpl serviceHandlerListenerImpl, - NotificationService notificationService) { + NotificationService notificationService, TapiOrLinkListener orLinkListener) { this.dataBroker = dataBroker; this.rpcProviderService = rpcProviderService; this.serviceHandler = serviceHandler; @@ -102,6 +115,7 @@ public class TapiProvider { this.rendererListenerImpl = rendererListenerImpl; this.serviceHandlerListenerImpl = serviceHandlerListenerImpl; this.notificationService = notificationService; + this.orLinkListener = orLinkListener; } /** @@ -126,6 +140,9 @@ public class TapiProvider { rpcRegistration = rpcProviderService.registerRpcImplementation(TapiConnectivityService.class, tapi); rpcProviderService.registerRpcImplementation(TapiTopologyService.class, topo); rpcProviderService.registerRpcImplementation(TapiCommonService.class, topo); + dataTreeChangeListenerRegistration1 = + dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, + LINK_II), orLinkListener); dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener); @@ -157,6 +174,9 @@ public class TapiProvider { if (mappingListenerListenerRegistration != null) { mappingListenerListenerRegistration.close(); } + if (dataTreeChangeListenerRegistration1 != null) { + dataTreeChangeListenerRegistration1.close(); + } if (tapiNetworkutilsServiceRpcRegistration != null) { tapiNetworkutilsServiceRpcRegistration.close(); } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java new file mode 100644 index 000000000..e49bc7787 --- /dev/null +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java @@ -0,0 +1,152 @@ +/* + * Copyright © 2021 Nokia. 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 java.nio.charset.Charset; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; +import org.opendaylight.mdsal.binding.api.DataTreeModification; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.transportpce.tapi.TapiStringConstants; +import org.opendaylight.transportpce.tapi.utils.TapiLink; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TapiOrLinkListener implements DataTreeChangeListener { + + private static final Logger LOG = LoggerFactory.getLogger(TapiOrLinkListener.class); + private final TapiLink tapiLink; + private final NetworkTransactionService networkTransactionService; + private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + + public TapiOrLinkListener(final TapiLink tapiLink, final NetworkTransactionService networkTransactionService) { + this.tapiLink = tapiLink; + this.networkTransactionService = networkTransactionService; + } + + @Override + public void onDataTreeChanged(@NonNull Collection> changes) { + LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName()); + for (DataTreeModification change : changes) { + if (change.getRootNode().getDataBefore() == null && change.getRootNode().getDataAfter() != null) { + LOG.info("New link in openroadm topology"); + Link link = change.getRootNode().getDataAfter(); + // Todo: XPDR links are unidirectional, therefore we need to check for the current one and + // the opposite one. But first check the type + Link1 link1 = link.augmentation(Link1.class); + if (link1 == null) { + LOG.error("No type in link. We cannot trigger the TAPI link creation"); + return; + } + if (!(link1.getLinkType().equals(OpenroadmLinkType.XPONDERINPUT) + || link1.getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))) { + LOG.warn("Not triggering creation of link for type = {}", link1.getLinkType().getName()); + return; + } + if (!oppositeLinkExists(link1.getOppositeLink())) { + LOG.warn("Opposite link doest exist. Not creating TAPI link"); + return; + } + LOG.info("Opposite link already in datastore. Creatin TAPI bidirectional link"); + String srcNode = getRoadmOrXpdr(link.getSource().getSourceNode().getValue()); + String srcTp = link.getSource().getSourceTp().getValue(); + String destNode = getRoadmOrXpdr(link.getDestination().getDestNode().getValue()); + String destTp = link.getDestination().getDestTp().getValue(); + putTapiLinkInTopology(this.tapiLink.createTapiLink(srcNode, srcTp, destNode, destTp, + TapiStringConstants.OMS_XPDR_RDM_LINK, getQual(srcNode), getQual(destNode), + TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + link1.getAdministrativeState().getName(), link1.getOperationalState().getName(), + List.of(LayerProtocolName.PHOTONICMEDIA), List.of(LayerProtocolName.PHOTONICMEDIA.getName()), + tapiTopoUuid)); + } + } + } + + private void putTapiLinkInTopology( + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link tapiXpdrLink) { + LOG.info("Creating tapi link in TAPI topology context"); + InstanceIdentifier topoIID = InstanceIdentifier.builder(Context.class) + .augmentation(Context1.class).child(TopologyContext.class) + .child(Topology.class, new TopologyKey(this.tapiTopoUuid)) + .build(); + + Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid) + .setLink(Map.of(tapiXpdrLink.key(), tapiXpdrLink)).build(); + + // merge in datastore + this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID, + topology); + try { + this.networkTransactionService.commit().get(); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Error populating TAPI topology: ", e); + } + LOG.info("TAPI Link added succesfully."); + } + + private String getQual(String node) { + if (node.contains("ROADM")) { + return TapiStringConstants.PHTNC_MEDIA; + } + return TapiStringConstants.OTSI; + } + + private boolean oppositeLinkExists(LinkId oppositeLink) { + try { + InstanceIdentifier linkIID = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .augmentation(Network1.class).child(Link.class, new LinkKey(oppositeLink)).build(); + + Optional optLink = + this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID).get(); + if (!optLink.isPresent()) { + LOG.error("Opposite link not found in datastore {}", oppositeLink.getValue()); + return false; + } + return true; + } catch (InterruptedException | ExecutionException e) { + LOG.error("Failed to read opposite link", e); + return false; + } + } + + private String getRoadmOrXpdr(String node) { + if (node.contains("ROADM")) { + return String.join("-", node.split("-")[0], node.split("-")[1]); + } + return node; + } +} diff --git a/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml b/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml index 758d66f77..add5b43c3 100644 --- a/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml +++ b/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml @@ -65,6 +65,11 @@ Author: Gilles Thouenon + + + + + @@ -86,6 +91,7 @@ Author: Gilles Thouenon + diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java index 878c7633e..69ce85ceb 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java @@ -27,6 +27,7 @@ import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl; import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl; import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl; import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener; +import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener; import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener; import org.opendaylight.transportpce.tapi.utils.TapiListener; import org.opendaylight.transportpce.test.AbstractTest; @@ -60,6 +61,9 @@ public class TapiProviderTest extends AbstractTest { @Mock TapiNetconfTopologyListener topologyListener; + @Mock + TapiOrLinkListener orLinkListener; + @Mock TapiPceListenerImpl pceListenerImpl; @@ -87,7 +91,7 @@ public class TapiProviderTest extends AbstractTest { TapiProvider provider = new TapiProvider(getDataBroker(), rpcProviderRegistry, serviceHandler, serviceDataStoreOperations, tapiListener, networkTransactionService, topologyListener, tapiPortMappingListener, tapiNetworkUtils, pceListenerImpl, rendererListenerImpl, - serviceHandlerListenerImpl, getNotificationService()); + serviceHandlerListenerImpl, getNotificationService(), orLinkListener); provider.init(); diff --git a/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py b/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py index 4c8d3c9b0..2baf41cbd 100644 --- a/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py +++ b/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py @@ -174,16 +174,7 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_07_connect_roadmA_PP1_to_spdrA_1_N1_tapi(self): - response = test_utils.connect_xpdr_to_rdm_tapi_request("SPDR-SA1-XPDR1", "XPDR1-NETWORK1", - "ROADM-A1", "SRG1-PP1-TXRX") - self.assertEqual(response.status_code, requests.codes.ok) - res = response.json() - self.assertIn('Link created in tapi topology', - res["output"]["result"]) - time.sleep(2) - - def test_08_connect_sprdC_1_N1_to_roadmC_PP1(self): + def test_07_connect_sprdC_1_N1_to_roadmC_PP1(self): response = test_utils.connect_xpdr_to_rdm_request("SPDR-SC1", "1", "1", "ROADM-C1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) @@ -192,7 +183,7 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_09_connect_roadmC_PP1_to_spdrC_1_N1(self): + def test_08_connect_roadmC_PP1_to_spdrC_1_N1(self): response = test_utils.connect_rdm_to_xpdr_request("SPDR-SC1", "1", "1", "ROADM-C1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) @@ -201,16 +192,7 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_10_connect_roadmC_PP1_to_spdrC_1_N1_tapi(self): - response = test_utils.connect_xpdr_to_rdm_tapi_request("SPDR-SC1-XPDR1", "XPDR1-NETWORK1", - "ROADM-C1", "SRG1-PP1-TXRX") - self.assertEqual(response.status_code, requests.codes.ok) - res = response.json() - self.assertIn('Link created in tapi topology', - res["output"]["result"]) - time.sleep(2) - - def test_11_add_omsAttributes_ROADMA_ROADMC(self): + def test_09_add_omsAttributes_ROADMA_ROADMC(self): # Config ROADMA-ROADMC oms-attributes data = {"span": { "auto-spanloss": "true", @@ -227,7 +209,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) time.sleep(2) - def test_12_add_omsAttributes_ROADMC_ROADMA(self): + def test_10_add_omsAttributes_ROADMC_ROADMA(self): # Config ROADMC-ROADMA oms-attributes data = {"span": { "auto-spanloss": "true", @@ -244,7 +226,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) time.sleep(2) - def test_13_check_otn_topology(self): + def test_11_check_otn_topology(self): response = test_utils.get_otn_topo_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -253,7 +235,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertNotIn('ietf-network-topology:link', res['network'][0]) time.sleep(2) - def test_14_check_openroadm_topology(self): + def test_12_check_openroadm_topology(self): response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -263,7 +245,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nbLink, 22, 'There should be 22 openroadm links') time.sleep(2) - def test_15_get_tapi_topology_details(self): + def test_13_get_tapi_topology_details(self): response = test_utils.tapi_get_topology_details_request( "T0 - Full Multi-layer topology") time.sleep(2) @@ -275,7 +257,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nbLink, 15, 'There should be 15 TAPI links') time.sleep(2) - def test_16_check_sip_details(self): + def test_14_check_sip_details(self): response = test_utils.tapi_get_sip_details_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -284,7 +266,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for Photonic_media - def test_17_create_connectivity_service_PhotonicMedia(self): + def test_15_create_connectivity_service_PhotonicMedia(self): response = test_utils.tapi_create_connectivity_request(self.cr_serv_sample_data) time.sleep(self.WAITING) self.assertEqual(response.status_code, requests.codes.ok) @@ -314,7 +296,7 @@ class TransportPCEtesting(unittest.TestCase): # If the gate fails is because of the waiting time not being enough time.sleep(self.WAITING) - def test_18_get_service_PhotonicMedia(self): + def test_16_get_service_PhotonicMedia(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.pm)) self.assertEqual(response.status_code, requests.codes.ok) @@ -330,7 +312,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for odu - def test_19_create_connectivity_service_ODU(self): + def test_17_create_connectivity_service_ODU(self): # pylint: disable=line-too-long self.cr_serv_sample_data["input"]["end-point"][0]["layer-protocol-name"] = "ODU" self.cr_serv_sample_data["input"]["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "5efda776-f8de-3e0b-9bbd-2c702e210946" @@ -367,7 +349,7 @@ class TransportPCEtesting(unittest.TestCase): # If the gate fails is because of the waiting time not being enough time.sleep(self.WAITING) - def test_20_get_service_ODU(self): + def test_18_get_service_ODU(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.odu)) self.assertEqual(response.status_code, requests.codes.ok) @@ -383,7 +365,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for dsr - def test_21_create_connectivity_service_DSR(self): + def test_19_create_connectivity_service_DSR(self): # pylint: disable=line-too-long self.cr_serv_sample_data["input"]["end-point"][0]["layer-protocol-name"] = "DSR" self.cr_serv_sample_data["input"]["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "c14797a0-adcc-3875-a1fe-df8949d1a2d7" @@ -424,7 +406,7 @@ class TransportPCEtesting(unittest.TestCase): # The sleep here is okey as the DSR service creation is very fast time.sleep(self.WAITING) - def test_22_get_service_DSR(self): + def test_20_get_service_DSR(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.dsr)) self.assertEqual(response.status_code, requests.codes.ok) @@ -439,7 +421,7 @@ class TransportPCEtesting(unittest.TestCase): res['services'][0]['lifecycle-state'], 'planned') time.sleep(2) - def test_23_get_connectivity_service_list(self): + def test_21_get_connectivity_service_list(self): response = test_utils.tapi_get_service_list_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -464,22 +446,22 @@ class TransportPCEtesting(unittest.TestCase): self.fail("get connectivity service failed") time.sleep(2) - def test_24_delete_connectivity_service_DSR(self): + def test_22_delete_connectivity_service_DSR(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.dsr) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_25_delete_connectivity_service_ODU(self): + def test_23_delete_connectivity_service_ODU(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.odu) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_26_delete_connectivity_service_PhotonicMedia(self): + def test_24_delete_connectivity_service_PhotonicMedia(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.pm) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_27_get_no_tapi_services(self): + def test_25_get_no_tapi_services(self): response = test_utils.tapi_get_service_list_request() res = response.json() self.assertIn( @@ -489,7 +471,7 @@ class TransportPCEtesting(unittest.TestCase): res['errors']['error']) time.sleep(2) - def test_28_get_no_openroadm_services(self): + def test_26_get_no_openroadm_services(self): response = test_utils.get_service_list_request("") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() @@ -499,22 +481,22 @@ class TransportPCEtesting(unittest.TestCase): res['errors']['error']) time.sleep(2) - def test_29_disconnect_spdrA(self): + def test_27_disconnect_spdrA(self): response = test_utils.unmount_device("SPDR-SA1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_30_disconnect_spdrC(self): + def test_28_disconnect_spdrC(self): response = test_utils.unmount_device("SPDR-SC1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_31_disconnect_roadmA(self): + def test_29_disconnect_roadmA(self): response = test_utils.unmount_device("ROADM-A1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_32_disconnect_roadmC(self): + def test_30_disconnect_roadmC(self): response = test_utils.unmount_device("ROADM-C1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) -- 2.36.6