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;
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());
}
}
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,
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;
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;
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;
private static final InstanceIdentifier<Nodes> 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> 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<TapiConnectivityService> rpcRegistration;
private ObjectRegistration<TransportpceTapinetworkutilsService> tapiNetworkutilsServiceRpcRegistration;
private ListenerRegistration<TapiNetconfTopologyListener> dataTreeChangeListenerRegistration;
+ private ListenerRegistration<TapiOrLinkListener> dataTreeChangeListenerRegistration1;
private ListenerRegistration<TapiPortMappingListener> mappingListenerListenerRegistration;
private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
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;
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;
this.rendererListenerImpl = rendererListenerImpl;
this.serviceHandlerListenerImpl = serviceHandlerListenerImpl;
this.notificationService = notificationService;
+ this.orLinkListener = orLinkListener;
}
/**
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);
if (mappingListenerListenerRegistration != null) {
mappingListenerListenerRegistration.close();
}
+ if (dataTreeChangeListenerRegistration1 != null) {
+ dataTreeChangeListenerRegistration1.close();
+ }
if (tapiNetworkutilsServiceRpcRegistration != null) {
tapiNetworkutilsServiceRpcRegistration.close();
}
--- /dev/null
+/*
+ * 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<Link> {
+
+ 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<DataTreeModification<Link>> changes) {
+ LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName());
+ for (DataTreeModification<Link> 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<Topology> 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<Link> 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<Link> 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;
+ }
+}
<argument ref="tapiNetworkModelService" />
</bean>
+ <bean id="tapiOrLinkListener" class="org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener">
+ <argument ref="tapiLink" />
+ <argument ref="networkTransactionImpl" />
+ </bean>
+
<bean id="tapiNetworkUtilsImpl" class="org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl">
<argument ref="networkTransactionImpl" />
<argument ref="tapiLink" />
<argument ref="tapiRendererListener" />
<argument ref="tapiServiceHandlerListener" />
<argument ref="notificationService" />
+ <argument ref="tapiOrLinkListener" />
</bean>
<bean id="tapiPortMappingListener" class="org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener">
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;
@Mock
TapiNetconfTopologyListener topologyListener;
+ @Mock
+ TapiOrLinkListener orLinkListener;
+
@Mock
TapiPceListenerImpl pceListenerImpl;
TapiProvider provider = new TapiProvider(getDataBroker(), rpcProviderRegistry, serviceHandler,
serviceDataStoreOperations, tapiListener, networkTransactionService, topologyListener,
tapiPortMappingListener, tapiNetworkUtils, pceListenerImpl, rendererListenerImpl,
- serviceHandlerListenerImpl, getNotificationService());
+ serviceHandlerListenerImpl, getNotificationService(), orLinkListener);
provider.init();
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)
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)
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",
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",
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()
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()
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)
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()
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)
# 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)
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"
# 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)
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"
# 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)
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()
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(
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()
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)