From: Guillaume Lambert Date: Fri, 25 Sep 2020 09:34:53 +0000 (+0000) Subject: Merge "Test suite for flex-grid support" into stable/aluminium X-Git-Tag: 2.1.0~27 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=c516387596ec98e38049e00b70880c4bdf17ce3f;hp=082d4416c00cbbd74888be9d7e13cfc8a0f069e5;p=transportpce.git Merge "Test suite for flex-grid support" into stable/aluminium --- diff --git a/common/src/test/java/org/opendaylight/transportpce/common/device/DeviceTransactionManagerTest.java b/common/src/test/java/org/opendaylight/transportpce/common/device/DeviceTransactionManagerTest.java index f08e6f498..c54646eae 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/device/DeviceTransactionManagerTest.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/device/DeviceTransactionManagerTest.java @@ -10,18 +10,13 @@ package org.opendaylight.transportpce.common.device; import static org.mockito.ArgumentMatchers.any; -import com.google.common.util.concurrent.FluentFuture; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.eclipse.jdt.annotation.NonNull; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -35,7 +30,6 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.MountPoint; import org.opendaylight.mdsal.binding.api.MountPointService; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; -import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; 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.NetworkBuilder; @@ -47,10 +41,15 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @RunWith(MockitoJUnitRunner.class) public class DeviceTransactionManagerTest { - @Mock private MountPointService mountPointServiceMock; - @Mock private MountPoint mountPointMock; - @Mock private DataBroker dataBrokerMock; - @Mock private ReadWriteTransaction rwTransactionMock; + @Mock + private MountPointService mountPointServiceMock; + @Mock + private MountPoint mountPointMock; + @Mock + private DataBroker dataBrokerMock; + @Mock + private ReadWriteTransaction rwTransactionMock; + private DeviceTransactionManagerImpl transactionManager; private String defaultDeviceId = "device-id"; @@ -296,55 +295,6 @@ public class DeviceTransactionManagerTest { Mockito.verify(rwTransactionMock, Mockito.times(1)).commit(); } - @Test - @Ignore - public void submitTxTimeoutTransactionTest() { - Future> deviceTxFuture = - transactionManager.getDeviceTransaction(defaultDeviceId); - DeviceTransaction deviceTx; - try { - deviceTx = deviceTxFuture.get().get(); - } catch (InterruptedException | ExecutionException e) { - Assert.fail("Exception catched! " + e); - return; - } - - deviceTx.put(defaultDatastore, defaultIid, defaultData); - - Exception throwedException = null; - - FluentFuture submitFuture = deviceTx.commit(200, defaultTimeUnit); - try { - submitFuture.get(); - } catch (InterruptedException e) { - Assert.fail("Exception catched! " + e); - } catch (ExecutionException e) { - throwedException = e; - } - - if (throwedException == null - || !throwedException.getMessage().contains(TimeoutException.class.getName())) { - Assert.fail("TimeoutException inside of should be thrown!"); - return; - } - - - Mockito.doReturn(FluentFutures.immediateNullFluentFuture()).when(rwTransactionMock.commit()); - - try { - putAndSubmit(transactionManager, defaultDeviceId, defaultDatastore, defaultIid, defaultData); - } catch (InterruptedException | ExecutionException e) { - Assert.fail("Exception catched! " + e); - return; - } - - Mockito.verify(rwTransactionMock, Mockito.times(2)).put(defaultDatastore, defaultIid, defaultData); - Mockito.verify(rwTransactionMock, Mockito.times(2)).commit(); - ListeningExecutorService executor = MoreExecutors - .listeningDecorator(Executors.newSingleThreadExecutor()); - executor.shutdown(); - } - private void putAndSubmit(DeviceTransactionManagerImpl deviceTxManager, String deviceId, LogicalDatastoreType store, InstanceIdentifier path, T data) throws ExecutionException, InterruptedException { diff --git a/docs/developer-guide.rst b/docs/developer-guide.rst index 9ee1f6226..7ea61b67d 100644 --- a/docs/developer-guide.rst +++ b/docs/developer-guide.rst @@ -47,13 +47,18 @@ Initial design of TransportPCE leverages OpenROADM Multi-Source-Agreement (MSA) which defines interoperability specifications, consisting of both Optical interoperability and Yang data models. -Experimental support of OTN layer is introduced in Magnesium release of -OpenDaylight. By experimental, we mean not all features can be accessed through -northbound API based on RESTCONF encoded OpenROADM Service model. In the meanwhile, -"east/west" APIs shall be used to trigger a path computation in the PCE (using -path-computation-request RPC) and to create services (using otn-service-path RPC). -OTN support will be improved in the following magnesium releases. +End to end OTN services such as OCH-OTU4, structured ODU4 or 10GE-ODU2e +services are supported since Magnesium SR2. OTN support will continue to be +improved in the following releases of Magnesium and Aluminium. +An experimental support of Flexgrid is introduced in Aluminium. Depending on +OpenROADM device models, optical interfaces can be created according to the +initial fixed grid (for R1.2.1, 96 channels regularly spaced of 50 GHz), or to +a flexgrid (for R2.2.1 use of specific number of subsequent frequency slots of +6.25 GHz depending on one side of ROADMs and transponders capabilities and on +the other side of the rate of the channel. The full support of Flexgrid, +including path computation and the creation of B100G (Beyond 100 Gbps) higher +rate interfaces will be added in the following releases of Aluminium. Module description @@ -74,8 +79,12 @@ Renderer and the OLM to delete connections and reset power levels associated wit service. The service-list is updated following a successful service deletion. In Neon SR0 is added the support for service from ROADM to ROADM, which brings additional flexibility and notably allows reserving resources when transponders are not in place at day one. -The full support of OTN services, including OTU, HO-ODU and LO-ODU will be introduced -in next release of Magnesium. +Magnesium SR2 fully supports end-to-end OTN services which are part of the OTN infrastructure. +It concerns the management of OCH-OTU4 (also part of the optical infrastructure) and structured +HO-ODU4 services. Moreover, once these two kinds of OTN infrastructure service created, it is +possible to manage some LO-ODU services (for the time being, only 10GE-ODU2e services). +The full support of OTN services, including 1GE-ODU0 or 100GE, will be introduced along next +releases (Mg/Al). PCE ^^^ @@ -91,10 +100,14 @@ allows keeping PCE aligned with the latest changes in the topology. Information about current and planned services is available in the MD-SAL data store. Current implementation of PCE allows finding the shortest path, minimizing either the hop -count (default) or the propagation delay. Wavelength is assigned considering a fixed grid of -96 wavelengths. In Neon SR0, the PCE calculates the OSNR, on the base of incremental -noise specifications provided in Open ROADM MSA. The support of unidirectional ports is -also added. PCE handles the following constraints as hard constraints: +count (default) or the propagation delay. Central wavelength is assigned considering a fixed +grid of 96 wavelengths 50 GHz spaced. The assignment of wavelengths according to a flexible +grid considering 768 subsequent slots of 6,25 GHz (total spectrum of 4.8 Thz), and their +occupation by existing services is planned for later releases. +In Neon SR0, the PCE calculates the OSNR, on the base of incremental noise specifications +provided in Open ROADM MSA. The support of unidirectional ports is also added. + +PCE handles the following constraints as hard constraints: - **Node exclusion** - **SRLG exclusion** @@ -133,11 +146,11 @@ It includes several network layers: Add/Drop modules ("SRGs") are separated from the degrees which includes line amplifiers and WSS that switch wavelengths from one to another degree** - **OTN layer introduced in Magnesium includes transponders as well as switch-ponders and - mux-ponders having the ability to switch OTN containers from client to line cards. SR0 release - includes creation of the switching pool (used to model cross-connect matrices), + mux-ponders having the ability to switch OTN containers from client to line cards. Mg SR0 + release includes creation of the switching pool (used to model cross-connect matrices), tributary-ports and tributary-slots at the initial connection of NETCONF devices. - However, the population of OTN links, and the adjustment of the tributary ports/slots - pull occupancy when OTN services are created will be handled in later Magnesium release.** + The population of OTN links (OTU4 and ODU4), and the adjustment of the tributary ports/slots + pool occupancy when OTN services are created is supported since Magnesium SR2.** Renderer @@ -169,8 +182,8 @@ rollback function is called to set the equipment on the path back to their initi Magnesium brings the support of OTN services. SR0 supports the creation of OTU4, ODU4, ODU2/ODU2e and ODU0 interfaces. The creation of these low-order otn interfaces must be triggered through -otn-service-path RPC. Full support (service-implementation-request /service delete rpc, topology -alignement after the service has been created) will be provided in later releases of Magnesium. +otn-service-path RPC. Magnesium SR2 fully supports end-to-end otn service implementation into devices +(service-implementation-request /service delete rpc, topology alignement after the service has been created). OLM @@ -580,40 +593,15 @@ OTN topology, use the following command on the REST API : **REST API** : *GET /restconf/config/ietf-network:network/otn-topology* -An optical connectivity service shall have been created in a first setp. In Magnesium SR0, the OTN -links are not automatically populated in the topology after the Och, OTU4 and ODU4 interfaces have -been created on the two network ports of the xpdr. Thus the otn link must be posted manually through -the REST API (as APIDoc for example). - -**REST API** : *POST /restconf/config/ietf-network:networks/network/otn-topology/ietf-network-topology:link/* - -**Sample JSON Data** - -.. code:: json - - { - "ietf-network-topology:link": [ - { - "link-id": "", - "source": { - "source-node": "", - "source-tp": "" - }, - "org-openroadm-common-network:link-type": "OTN-LINK", - "destination": { - "dest-node": "", - "dest-tp": "" - } - } - ] - } - +An optical connectivity service shall have been created in a first setp. Since Magnesium SR2, the OTN +links are automatically populated in the topology after the Och, OTU4 and ODU4 interfaces have +been created on the two network ports of the xpdr. Creating a service ~~~~~~~~~~~~~~~~~~ Use the *service handler* module to create any end-to-end connectivity service on an OpenROADM -network. Two kind of end-to-end services are managed by TransportPCE : +network. Two kind of end-to-end "optical" services are managed by TransportPCE: - 100GE service from client port to client port of two transponders (TPDR) - Optical Channel (OC) service from client add/drop port (PP port of SRG) to client add/drop port of two ROADMs. @@ -623,26 +611,18 @@ interfaces and cross-connection on each device supporting the service. As an example, the creation of a 100GE service implies among other things, the creation of OCH, OTU4 and ODU4 interfaces on the Network port of TPDR devices. -In Magnesium SR0, the *service handler* module does not manage directly the end-to-end aspect of otn -connectivity services. OTN services must be manualy created invoking directly the *renderer* module. +Since Magnesium SR2, the *service handler* module directly manages some end-to-end otn +connectivity services. +Before creating a low-order OTN service (1GE or 10GE services terminating on client port of MUXPDR +or SWITCH), the user must ensure that a high-order ODU4 container exists and has previously been +configured (it means structured to support low-order otn services) to support low-order OTN containers. +Thus, OTN service creation implies three steps: +1. OCH-OTU4 service from network port to network port of two OTN Xponders (MUXPDR or SWITCH) +2. HO-ODU4 service from network port to network port of two OTN Xponders (MUXPDR or SWITCH) +3. 10GE service creation from client port to client port of two OTN Xponders (MUXPDR or SWITCH) +The management of other OTN services (1GE-ODU0, 100GE...) is planned for future releases. -Before creating a low-order otn service (1GE or 10GE services terminating on client port of MUXPDR -or SWITCH), the user must ensure that a high-order ODU4 container exists and has previously been -configured (low-order structured) to support low-order OTN containers. Thus, otn service creation -implies two steps: -1. OCH, OTU-4 and ODU-4 service from network port to network port of two OTN Xponders -(MUXPDR or SWITCH) -2. 1GE or 10GE service creation from client port to client port of two OTN Xponders -(MUXPDR or SWITCH) - -Since in Magnesium SR0 otn service creation is not automatically done by TransportPCE, the user has -to check the connectivity between nodes using the internal API of the *PCE* module, through the -path-computation-request rpc. -Afterwards, for the first step otn service creation, the user has to use the internal service-path -rpc of the *renderer* module. -Finally, the 1GE and 10GE services creation is performed using internal otn-service-path rpc of the -*renderer* module. 100GE service creation ^^^^^^^^^^^^^^^^^^^^^^ @@ -857,81 +837,350 @@ As for the previous RPC, this RPC invokes the *PCE* module to compute a path ove *openroadm-topology* and then invokes *renderer* and *OLM* to implement the end-to-end path into the devices. -OTN OCH, OTU4 and ODU4 service creation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +OTN OCH-OTU4 service creation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Use the following REST RPC to invoke *renderer* module in order to create adequate interfaces on -otn device in order to support a bidirectional end-to-end Low-Order OTN connectivity service on -network port of a MUXPDR or SWITCH xpdr node. +Use the following REST RPC to invoke *service handler* module in order to create over the optical +infrastructure a bidirectional end-to-end OTU4 over an optical wavelength connectivity service +between two optical network ports of OTN Xponder (MUXPDR or SWITCH). Such service configure the +optical network infrastructure composed of rdm nodes. -**REST API** : *POST /restconf/operations/transportpce-device-renderer:service-path* +**REST API** : *POST /restconf/operations/org-openroadm-service:service-create* **Sample JSON Data** .. code:: json - { - "input": { - "nodes": [ - { - "node-id": "", - "dest-tp": "" - } - ], - "modulation-format": "qpsk", - "operation": "create", - "service-name": "", - "wave-number": "" - } - } + { + "input": { + "sdnc-request-header": { + "request-id": "request-1", + "rpc-action": "service-create", + "request-system-id": "appname" + }, + "service-name": "something", + "common-id": "commonId", + "connection-type": "infrastructure", + "service-a-end": { + "service-rate": "100", + "node-id": "", + "service-format": "OTU", + "otu-service-rate": "org-openroadm-otn-common-types:OTU4", + "clli": "", + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "service-z-end": { + "service-rate": "100", + "node-id": "", + "service-format": "OTU", + "otu-service-rate": "org-openroadm-otn-common-types:OTU4", + "clli": "", + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "due-date": "yyyy-mm-ddT00:00:01Z", + "operator-contact": "some-contact-info" + } + } -1GE/ODU0 and 10GE/ODU2e service creation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +As for the previous RPC, this RPC invokes the *PCE* module to compute a path over the +*openroadm-topology* and then invokes *renderer* and *OLM* to implement the end-to-end path into +the devices. + +OTN HO-ODU4 service creation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Use the following REST RPC to invoke *service handler* module in order to create over the optical +infrastructure a bidirectional end-to-end ODU4 OTN service over an OTU4 and structured to support +low-order OTN services (ODU2e, ODU0). As for OTU4, such a service must be created between two network +ports of OTN Xponder (MUXPDR or SWITCH). + +**REST API** : *POST /restconf/operations/org-openroadm-service:service-create* + +**Sample JSON Data** + +.. code:: json + + { + "input": { + "sdnc-request-header": { + "request-id": "request-1", + "rpc-action": "service-create", + "request-system-id": "appname" + }, + "service-name": "something", + "common-id": "commonId", + "connection-type": "infrastructure", + "service-a-end": { + "service-rate": "100", + "node-id": "", + "service-format": "ODU", + "otu-service-rate": "org-openroadm-otn-common-types:ODU4", + "clli": "", + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "service-z-end": { + "service-rate": "100", + "node-id": "", + "service-format": "ODU", + "otu-service-rate": "org-openroadm-otn-common-types:ODU4", + "clli": "", + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "due-date": "yyyy-mm-ddT00:00:01Z", + "operator-contact": "some-contact-info" + } + } -Use the following REST RPC to invoke *renderer* module and create adequate interfaces on otn xpdr -device (MUXPDR or SWITCH) in order to support a low-order otn service on its client port. +As for the previous RPC, this RPC invokes the *PCE* module to compute a path over the +*otn-topology* that must contains OTU4 links with valid bandwidth parameters, and then +invokes *renderer* and *OLM* to implement the end-to-end path into the devices. -- 1GE and ODU0 interfaces for 1GE services -- 10GE and ODU2e interfaces for 10GE services +OTN 10GE-ODU2e service creation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The following example corresponds to the creation of a 10GE service +Use the following REST RPC to invoke *service handler* module in order to create over the OTN +infrastructure a bidirectional end-to-end 10GE-ODU2e OTN service over an ODU4. +Such a service must be created between two client ports of OTN Xponder (MUXPDR or SWITCH) +configured to support 10GE interfaces. -*REST API** : *POST /restconf/operations/transportpce-device-renderer:otn-service-path* +**REST API** : *POST /restconf/operations/org-openroadm-service:service-create* **Sample JSON Data** .. code:: json - { - "input": { - "service-rate": "10G", - "service-type": "Ethernet", - "ethernet-encoding": "something", - "trib-slot": "", - "trib-port-number": "", - "operation": "create", - "service-name": "something", - "nodes": [ - { - "node-id": "", - "client-tp": "", - "network-tp": "" - } - ] - } - } + { + "input": { + "sdnc-request-header": { + "request-id": "request-1", + "rpc-action": "service-create", + "request-system-id": "appname" + }, + "service-name": "something", + "common-id": "commonId", + "connection-type": "service", + "service-a-end": { + "service-rate": "10", + "node-id": "", + "service-format": "Ethernet", + "clli": "", + "subrate-eth-sla": { + "subrate-eth-sla": { + "committed-info-rate": "10000", + "committed-burst-size": "64" + } + }, + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "service-z-end": { + "service-rate": "10", + "node-id": "", + "service-format": "Ethernet", + "clli": "", + "subrate-eth-sla": { + "subrate-eth-sla": { + "committed-info-rate": "10000", + "committed-burst-size": "64" + } + }, + "tx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "rx-direction": { + "port": { + "port-device-name": "", + "port-type": "fixed", + "port-name": "", + "port-rack": "000000.00", + "port-shelf": "Chassis#1" + }, + "lgx": { + "lgx-device-name": "Some lgx-device-name", + "lgx-port-name": "Some lgx-port-name", + "lgx-port-rack": "000000.00", + "lgx-port-shelf": "00" + } + }, + "optic-type": "gray" + }, + "due-date": "yyyy-mm-ddT00:00:01Z", + "operator-contact": "some-contact-info" + } + } + +As for the previous RPC, this RPC invokes the *PCE* module to compute a path over the +*otn-topology* that must contains ODU4 links with valid bandwidth parameters, and then +invokes *renderer* and *OLM* to implement the end-to-end path into the devices. -.. note:: - OTN links are not automatically populated in the topology after the ODU2e interfaces have - been created on the two client ports of the xpdr. The otn link can be posted manually through - the REST API (APIDoc). .. note:: - With Magnesium SR0, the service-list corresponding to 1GE/10GE and OTU4/ODU4 services is not - updated in the datastore after the interfaces have been created in the device. + Since Magnesium SR2, the service-list corresponding to OCH-OTU4, ODU4 or again 10GE-ODU2e services is + updated in the service-list datastore. .. note:: - trib-slot is used when the equipment supports contiguous trib-slot allocation (supported in + trib-slot is used when the equipment supports contiguous trib-slot allocation (supported from Magnesium SR0). The trib-slot provided corresponds to the first of the used trib-slots. complex-trib-slots will be used when the equipment does not support contiguous trib-slot allocation. In this case a list of the different trib-slots to be used shall be provided. @@ -940,8 +1189,8 @@ The following example corresponds to the creation of a 10GE service Deleting a service ~~~~~~~~~~~~~~~~~~ -Deleting a 100GE and OC service -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Deleting any kind of service +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use the following REST RPC to invoke *service handler* module in order to delete a given optical connectivity service. @@ -969,68 +1218,13 @@ connectivity service. Most important parameters for this REST RPC is the *service-name*. -Deleting 1GE/ODU0 or 10GE/ODU2e -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the following REST RPC to invoke *renderer* module and delete adequate interfaces on otn node. -The following example corresponds to the deletion of a 10GE service - -*REST API** : *POST /restconf/operations/transportpce-device-renderer:otn-service-path* - -**Sample JSON Data** - -.. code:: json - - { - "input": { - "service-rate": "10G", - "service-type": "Ethernet", - "ethernet-encoding": "something", - "trib-slot": "", - "trib-port-number": "", - "operation": "delete", - "service-name": "something", - "nodes": [ - { - "node-id": "", - "client-tp": "", - "network-tp": "" - } - ] - } - } - - -Deleting OTN OCH, OTU4 and ODU4 service -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the following REST RPC to invoke *renderer* module in order to delete adequate interfaces on -otn node. - -**REST API** : *POST /restconf/operations/transportpce-device-renderer:service-path* - -**Sample JSON Data** - -.. code:: json - - { - "input": { - "nodes": [ - { - "node-id": "", - "dest-tp": "" - } - ], - "modulation-format": "qpsk", - "operation": "delete", - "service-name": "", - "wave-number": "", - } - } .. note:: - Be sure to have deleted all low-order otn services before deleting high-order OTN container - + Deleting OTN services implies proceeding in the reverse way to their creation. Thus, OTN + service deletion must respect the three following steps: + 1. delete first all 10GE services supported over any ODU4 to be deleted + 2. delete ODU4 + 3. delete OCH-OTU4 supporting the just deleted ODU4 Invoking PCE module ~~~~~~~~~~~~~~~~~~~ diff --git a/docs/user-guide.rst b/docs/user-guide.rst index 6cb4eac7e..a68f749a4 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -63,6 +63,8 @@ Preparing for Installation 1. Devices must support the standard OpenROADM Models more precisely versions 1.2.1 and 2.2.1. Since Magnesium SR0, an OTN experimental support is provided for OpenROADM devices 2.2.1. + Magnesium SR2 is the first release managing end-to-end OTN services, as OCH-OTU4, + structured ODU4 or again 10GE-ODU2e services. 2. Devices must support configuration through NETCONF protocol/API. @@ -79,6 +81,13 @@ if you need TAPI limited support, then run:: feature:install odl-transportpce-tapi +When installing the TAPI feature, you might encounter a heap memory size problem in Karaf. +In that case, consider increasing Karaf heap memory size. +For example by modifying the environment variables JAVA_MIN_MEM and JAVA_MAX_MEM before starting Karaf:: + + export JAVA_MIN_MEM=1024M + export JAVA_MAX_MEM=4069M + if you need the inventory external connector support limited to 1.2.1 OpenROADM devices, then run:: feature:install odl-transportpce-inventory diff --git a/olm/pom.xml b/olm/pom.xml index ed80430c8..9ed31e642 100644 --- a/olm/pom.xml +++ b/olm/pom.xml @@ -28,8 +28,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html ${project.groupId} test-common ${project.version} + test - org.mockito mockito-core @@ -62,6 +62,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html 3.0.2 true + + ${project.groupId} + transportpce-common + ${project.version} + - diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java index c44679926..c4b7c254a 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java @@ -195,57 +195,6 @@ public class OlmPowerServiceImplTest extends AbstractTest { Assert.assertEquals("Failed", output.getResult()); } - /* - @Test - public void testCalculateSpanlossBase() { - CalculateSpanlossBaseInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossBaseInput(); - //TODO - Mockito.when(this.olmPowerServiceMock.calculateSpanlossBase(Mockito.any())) - .thenReturn(new CalculateSpanlossBaseOutputBuilder().setResult("Failed").build()); - CalculateSpanlossBaseOutput output = this.olmPowerServiceMock.calculateSpanlossBase(input); - Assert.assertEquals("Failed", output.getResult()); - - } - */ - - /* - @Test - public void testCalculateSpanlossBase2() { - NetworkKey overlayTopologyKey = new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)); -<<<<<<< HEAD - InstanceIdentifier networkIID = InstanceIdentifier.builder(Networks.class) - .child(Network.class, overlayTopologyKey) -======= - InstanceIdentifier networkTopoIID = InstanceIdentifier.builder(Networks.class) - .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.rev180226.networks.Network.class, - overlayTopologyKey) ->>>>>>> 87d8bf0... Retrieve OLM modifs from change 80051 - .augmentation(Network1.class) - .build(); - InstanceIdentifier networkIID = InstanceIdentifier.builder(Networks.class) - .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang - .ietf.network.rev180226.networks.Network.class, - overlayTopologyKey) - .build(); - Network1 network = TransactionUtils.getNetwork(); - Network ietfNetwork = TransactionUtils.getOverLayNetwork(); - TransactionUtils.writeTransaction(this.getDataBroker(), networkIID, ietfNetwork); - TransactionUtils.writeTransaction(this.getDataBroker(), networkTopoIID, network); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - LOG.error("Write transaction failed !",e); - } - CalculateSpanlossBaseInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossBaseInput(); - //TODO - Mockito.when(this.olmPowerServiceMock.calculateSpanlossBase(Mockito.any())) - .thenReturn(new CalculateSpanlossBaseOutputBuilder().setResult("Failed").build()); - CalculateSpanlossBaseOutput output = this.olmPowerServiceMock.calculateSpanlossBase(input); - Assert.assertEquals("Failed", output.getResult()); - - } - */ @Ignore @Test public void testCalculateSpanlossBase3() { @@ -313,60 +262,6 @@ public class OlmPowerServiceImplTest extends AbstractTest { } -// @Test -// public void testCalculateSpanlossBase4() throws InterruptedException { -// NetworkKey overlayTopologyKey = new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)); -// InstanceIdentifier networkIID = InstanceIdentifier.builder(Network.class, overlayTopologyKey) -// .augmentation(Network1.class) -// .build(); -// Network1 network = TransactionUtils.getNetwork2(); -// TransactionUtils.writeTransaction(this.getDataBroker(), networkIID, network); -// -// Thread.sleep(500); -// -// List nodes = TransactionUtils.getNodes(); -// Node n; -// SupportingNode sn; -// -// List snl; -// NodeId n5 = new NodeId("node 5"); -// KeyedInstanceIdentifier mappedNodeII2 = -// InstanceIdentifiers.UNDERLAY_NETWORK_II.child(Node.class, new NodeKey(n5)); -// -// sn = new SupportingNodeBuilder().setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) -// .setNodeRef(n5).build(); -// snl = new ArrayList<>(); -// snl.add(sn); -// n = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608 -// .network.NodeBuilder().setNodeId(n5).build(); -// TransactionUtils.writeTransaction(this.getDataBroker(), mappedNodeII2, n); -// Thread.sleep(500); -// -// for(int i=0; i < nodes.size(); i++) { -// KeyedInstanceIdentifier mappedNodeII = -// InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(nodes.get(i))); -// if (i != 0){ -// sn = new SupportingNodeBuilder().setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)) -// .setNodeRef(nodes.get(i-1)).build(); -// }else { -// sn = new SupportingNodeBuilder().setNodeRef(n5).build(); -// } -// snl = new ArrayList<>(); -// snl.add(sn); -// n = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608 -// .network.NodeBuilder().setNodeId(nodes.get(i)).setSupportingNode(snl).build(); -// TransactionUtils.writeTransaction(this.getDataBroker(), mappedNodeII, n); -// Thread.sleep(500); -// } -// -// Thread.sleep(1000); -// -// CalculateSpanlossBaseInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossBaseInput2(); -// CalculateSpanlossBaseOutput output = this.olmPowerService.calculateSpanlossBase(input); -// Assert.assertEquals("Failed", output.getResult()); -// -// } - @Test public void testCalculateSpanlossCurrent1() { CalculateSpanlossCurrentInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossCurrentInput(); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImplTest.java index 9e785ad57..06251d40c 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImplTest.java @@ -27,7 +27,6 @@ import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.CancelResourceReserveInputBuilder; - @Ignore public class PceServiceRPCImplTest extends AbstractTest { diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java index f5ce3c6e0..5f5b45de9 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java @@ -49,7 +49,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yangtools.yang.common.Uint32; - @Ignore public class PceLinkTest extends AbstractTest { diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java index bae865b44..9553a741a 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImplTest.java @@ -36,7 +36,6 @@ import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.ResponseBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.NoPathCaseBuilder; import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.PathCaseBuilder; - @Ignore public class PathComputationServiceImplTest extends AbstractTest { diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java index 61da615cc..24b6c110b 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java @@ -93,7 +93,7 @@ public final class PceTestUtils { saveOpenRoadmNetwork(networkMap.get(0), NetworkUtils.UNDERLAY_NETWORK_ID, dataBroker); networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(topoReader, QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks")); - saveOpenRoadmNetwork(networkMap.get(0), NetworkUtils.OVERLAY_NETWORK_ID, dataBroker); + saveOpenRoadmNetwork(networkMap.get(0), NetworkUtils.UNDERLAY_NETWORK_ID, dataBroker); } catch (IOException | ExecutionException | InterruptedException e) { LOG.error("Cannot init test ", e); Assert.fail("Cannot init test "); diff --git a/tapi/pom.xml b/tapi/pom.xml index dc585670b..4132c43f6 100644 --- a/tapi/pom.xml +++ b/tapi/pom.xml @@ -100,6 +100,7 @@ Author: Martial Coulibaly on behalf of Orange ${project.groupId} test-common ${project.version} + test org.mockito diff --git a/tests/transportpce_tests/1.2.1/test_end2end.py b/tests/transportpce_tests/1.2.1/test_end2end.py index dd0c9bd17..43c034813 100644 --- a/tests/transportpce_tests/1.2.1/test_end2end.py +++ b/tests/transportpce_tests/1.2.1/test_end2end.py @@ -8,8 +8,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods -import json import time import unittest @@ -126,6 +127,7 @@ class TransportPCEFulltesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") diff --git a/tests/transportpce_tests/1.2.1/test_gnpy.py b/tests/transportpce_tests/1.2.1/test_gnpy.py index 3b8b69be2..80a92bf0d 100644 --- a/tests/transportpce_tests/1.2.1/test_gnpy.py +++ b/tests/transportpce_tests/1.2.1/test_gnpy.py @@ -9,8 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json import os import sys import time @@ -20,13 +22,6 @@ from common import test_utils class TransportGNPYtesting(unittest.TestCase): - @classmethod - def __init_logfile(cls): - GNPY_LOGFILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), - "..", "..", "transportpce_tests", "gnpy.log") - if os.path.isfile(GNPY_LOFGILE): - os.remove(GNPY_LOFGILE) - topo_cllinet_data = None topo_ordnet_data = None topo_ordtopo_data = None @@ -34,6 +29,7 @@ class TransportGNPYtesting(unittest.TestCase): @classmethod def setUpClass(cls): + # pylint: disable=bare-except try: sample_files_parsed = False TOPO_CLLINET_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), @@ -68,6 +64,7 @@ class TransportGNPYtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -94,8 +91,10 @@ class TransportGNPYtesting(unittest.TestCase): # Path computed by PCE is feasible according to Gnpy def test_04_path_computation_FeasibleWithPCE(self): response = test_utils.path_computation_request("request-1", "service-1", - {"node-id": "XPONDER-1", "service-rate": "100", "service-format": "Ethernet", "clli": "Node1"}, - {"node-id": "XPONDER-5", "service-rate": "100", "service-format": "Ethernet", "clli": "Node5"}) + {"node-id": "XPONDER-1", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node1"}, + {"node-id": "XPONDER-5", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node5"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(res['output']['configuration-response-common'][ @@ -115,12 +114,15 @@ class TransportGNPYtesting(unittest.TestCase): # another one (low SNR) def test_05_path_computation_FoundByPCE_NotFeasibleByGnpy(self): response = test_utils.path_computation_request("request-2", "service-2", - {"node-id": "XPONDER-1", "service-rate": "100", "service-format": "Ethernet", "clli": "Node1"}, - {"node-id": "XPONDER-5", "service-rate": "100", "service-format": "Ethernet", "clli": "Node5"}, - {"include_": { "ordered-hops": [ - {"hop-number": "0", "hop-type": {"node-id": "OpenROADM-2"}}, - {"hop-number": "1", "hop-type": {"node-id": "OpenROADM-3"}}, - {"hop-number": "2", "hop-type": {"node-id": "OpenROADM-4"}}]}}) + {"node-id": "XPONDER-1", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node1"}, + {"node-id": "XPONDER-5", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node5"}, + {"include_": {"ordered-hops": [ + {"hop-number": "0", "hop-type": {"node-id": "OpenROADM-2"}}, + {"hop-number": "1", "hop-type": {"node-id": "OpenROADM-3"}}, + {"hop-number": "2", "hop-type": {"node-id": "OpenROADM-4"}}]} + }) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(res['output']['configuration-response-common'][ @@ -141,11 +143,14 @@ class TransportGNPYtesting(unittest.TestCase): # #PCE cannot find a path while GNPy finds a feasible one def test_06_path_computation_NotFoundByPCE_FoundByGNPy(self): response = test_utils.path_computation_request("request-3", "service-3", - {"node-id": "XPONDER-1", "service-rate": "100", "service-format": "Ethernet", "clli": "Node1"}, - {"node-id": "XPONDER-4", "service-rate": "100", "service-format": "Ethernet", "clli": "Node5"}, - {"include_": {"ordered-hops": [ - {"hop-number": "0", "hop-type": {"node-id": "OpenROADM-2"}}, - {"hop-number": "1", "hop-type": {"node-id": "OpenROADM-3"}}]}}) + {"node-id": "XPONDER-1", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node1"}, + {"node-id": "XPONDER-4", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node5"}, + {"include_": {"ordered-hops": [ + {"hop-number": "0", "hop-type": {"node-id": "OpenROADM-2"}}, + {"hop-number": "1", "hop-type": {"node-id": "OpenROADM-3"}}]} + }) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(res['output']['configuration-response-common'][ @@ -164,13 +169,16 @@ class TransportGNPYtesting(unittest.TestCase): # Not found path by PCE and GNPy cannot find another one def test_07_path_computation_FoundByPCE_NotFeasibleByGnpy(self): response = test_utils.path_computation_request("request-4", "service-4", - {"node-id": "XPONDER-1", "service-rate": "100", "service-format": "Ethernet", "clli": "Node1"}, - {"node-id": "XPONDER-4", "service-rate": "100", "service-format": "Ethernet", "clli": "Node5"}, - {"include_": {"ordered-hops": [ - {"hop-number": "0","hop-type": {"node-id": "OpenROADM-2"}}, - {"hop-number": "1","hop-type": {"node-id": "OpenROADM-3"}}, - {"hop-number": "2","hop-type": {"node-id": "OpenROADM-4"}}, - {"hop-number": "3","hop-type": {"node-id": "OpenROADM-3"}}]}}) + {"node-id": "XPONDER-1", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node1"}, + {"node-id": "XPONDER-4", "service-rate": "100", + "service-format": "Ethernet", "clli": "Node5"}, + {"include_": {"ordered-hops": [ + {"hop-number": "0", "hop-type": {"node-id": "OpenROADM-2"}}, + {"hop-number": "1", "hop-type": {"node-id": "OpenROADM-3"}}, + {"hop-number": "2", "hop-type": {"node-id": "OpenROADM-4"}}, + {"hop-number": "3", "hop-type": {"node-id": "OpenROADM-3"}}]} + }) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(res['output']['configuration-response-common'][ diff --git a/tests/transportpce_tests/1.2.1/test_olm.py b/tests/transportpce_tests/1.2.1/test_olm.py index b0711ab1b..f7155e8bc 100644 --- a/tests/transportpce_tests/1.2.1/test_olm.py +++ b/tests/transportpce_tests/1.2.1/test_olm.py @@ -9,9 +9,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################# +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time -import json import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportOlmTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -426,7 +429,7 @@ class TransportOlmTesting(unittest.TestCase): self.assertIn('Request processed', res["output"]["result"]) time.sleep(10) - """to test case where SRG where the xpdr is connected to has no optical range data""" + #"""to test case where SRG where the xpdr is connected to has no optical range data""" def test_31_connect_xprdA_to_roadmA(self): response = test_utils.connect_xpdr_to_rdm_request("XPDRA01", "1", "2", diff --git a/tests/transportpce_tests/1.2.1/test_pce.py b/tests/transportpce_tests/1.2.1/test_pce.py index be417d8f9..e7e255f91 100644 --- a/tests/transportpce_tests/1.2.1/test_pce.py +++ b/tests/transportpce_tests/1.2.1/test_pce.py @@ -8,8 +8,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json import os import sys import time @@ -26,6 +28,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def setUpClass(cls): + # pylint: disable=bare-except try: sample_files_parsed = False TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)), @@ -61,6 +64,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -96,8 +100,10 @@ class TransportPCEtesting(unittest.TestCase): # Path Computation success def test_04_path_computation_xpdr_bi(self): response = test_utils.path_computation_request("request-1", "service-1", - {"node-id": "XPDRA01", "service-rate": "100", "service-format": "Ethernet", "clli": "nodeA"}, - {"node-id": "XPDRC01", "service-rate": "100", "service-format": "Ethernet", "clli": "nodeC"}) + {"node-id": "XPDRA01", "service-rate": "100", + "service-format": "Ethernet", "clli": "nodeA"}, + {"node-id": "XPDRC01", "service-rate": "100", + "service-format": "Ethernet", "clli": "nodeC"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -107,8 +113,10 @@ class TransportPCEtesting(unittest.TestCase): # Path Computation success def test_05_path_computation_rdm_bi(self): response = test_utils.path_computation_request("request-1", "service-1", - {"node-id": "ROADMA01", "service-rate": "100", "service-format": "Ethernet", "clli": "NodeA"}, - {"node-id": "ROADMC01", "service-rate": "100", "service-format": "Ethernet", "clli": "NodeC"}) + {"node-id": "ROADMA01", "service-rate": "100", + "service-format": "Ethernet", "clli": "NodeA"}, + {"node-id": "ROADMC01", "service-rate": "100", + "service-format": "Ethernet", "clli": "NodeC"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -156,8 +164,10 @@ class TransportPCEtesting(unittest.TestCase): # Path Computation success def test_11_path_computation_xpdr_uni(self): response = test_utils.path_computation_request("request-1", "service-1", - {"node-id": "XPONDER-1-2", "service-rate": "100", "service-format": "Ethernet", "clli": "ORANGE1"}, - {"node-id": "XPONDER-3-2", "service-rate": "100", "service-format": "Ethernet", "clli": "ORANGE3"}) + {"node-id": "XPONDER-1-2", "service-rate": "100", + "service-format": "Ethernet", "clli": "ORANGE1"}, + {"node-id": "XPONDER-3-2", "service-rate": "100", + "service-format": "Ethernet", "clli": "ORANGE3"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -167,8 +177,10 @@ class TransportPCEtesting(unittest.TestCase): # Path Computation success def test_12_path_computation_rdm_uni(self): response = test_utils.path_computation_request("request1", "service1", - {"service-rate": "100", "service-format": "Ethernet", "clli": "cll21", "node-id": "OpenROADM-2-1"}, - {"service-rate": "100", "service-format": "Ethernet", "clli": "ncli22", "node-id": "OpenROADM-2-2"}) + {"service-rate": "100", "service-format": "Ethernet", + "clli": "cll21", "node-id": "OpenROADM-2-1"}, + {"service-rate": "100", "service-format": "Ethernet", + "clli": "ncli22", "node-id": "OpenROADM-2-2"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -181,9 +193,9 @@ class TransportPCEtesting(unittest.TestCase): for i in range(0, 15): atoz = res['output']['response-parameters']['path-description']['aToZ-direction']['aToZ'][i] ztoa = res['output']['response-parameters']['path-description']['zToA-direction']['zToA'][i] - if (atoz['id'] == '14'): + if atoz['id'] == '14': self.assertEqual(atoz['resource']['tp-id'], 'SRG1-PP1-TX') - if (ztoa['id'] == '0'): + if ztoa['id'] == '0': self.assertEqual(ztoa['resource']['tp-id'], 'SRG1-PP1-RX') time.sleep(5) @@ -218,7 +230,7 @@ class TransportPCEtesting(unittest.TestCase): # Test failed path computation def test_17_fail_path_computation(self): response = test_utils.post_request(test_utils.URL_PATH_COMPUTATION_REQUEST, - {"input": { "service-handler-header": { "request-id": "request-1" }}}) + {"input": {"service-handler-header": {"request-id": "request-1"}}}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Service Name is not set', @@ -228,47 +240,53 @@ class TransportPCEtesting(unittest.TestCase): # Test1 success path computation def test_18_success1_path_computation(self): response = test_utils.path_computation_request("request1", "service1", - {"service-format": "Ethernet","service-rate": "100", "clli": "ORANGE2", "node-id": "XPONDER-2-2", - "tx-direction": {"port": { - "port-device-name": "Some port-device-name", - "port-type": "Some port-type", - "port-name": "Some port-name", - "port-rack": "Some port-rack", - "port-shelf": "Some port-shelf", - "port-slot": "Some port-slot", - "port-sub-slot": "Some port-sub-slot" - }}, - "rx-direction": {"port": { - "port-device-name": "Some port-device-name", - "port-type": "Some port-type", - "port-name": "Some port-name", - "port-rack": "Some port-rack", - "port-shelf": "Some port-shelf", - "port-slot": "Some port-slot", - "port-sub-slot": "Some port-sub-slot" - }}}, - {"service-format": "Ethernet", "service-rate": "100", "clli": "ORANGE1", "node-id": "XPONDER-1-2", - "tx-direction": {"port": { - "port-device-name": "Some port-device-name", - "port-type": "Some port-type", - "port-name": "Some port-name", - "port-rack": "Some port-rack", - "port-shelf": "Some port-shelf", - "port-slot": "Some port-slot", - "port-sub-slot": "Some port-sub-slot" - }}, - "rx-direction": {"port": { - "port-device-name": "Some port-device-name", - "port-type": "Some port-type", - "port-name": "Some port-name", - "port-rack": "Some port-rack", - "port-shelf": "Some port-shelf", - "port-slot": "Some port-slot", - "port-sub-slot": "Some port-sub-slot" - }}}, - {"customer-code": ["Some customer-code"], "co-routing": {"existing-service": ["Some existing-service"]}}, - {"customer-code": ["Some customer-code"], "co-routing": {"existing-service": ["Some existing-service"]}}, - "hop-count", {"locally-protected-links": "true"}) + {"service-format": "Ethernet", "service-rate": "100", + "clli": "ORANGE2", "node-id": "XPONDER-2-2", + "tx-direction": {"port": { + "port-device-name": "Some port-device-name", + "port-type": "Some port-type", + "port-name": "Some port-name", + "port-rack": "Some port-rack", + "port-shelf": "Some port-shelf", + "port-slot": "Some port-slot", + "port-sub-slot": "Some port-sub-slot" + }}, + "rx-direction": {"port": { + "port-device-name": "Some port-device-name", + "port-type": "Some port-type", + "port-name": "Some port-name", + "port-rack": "Some port-rack", + "port-shelf": "Some port-shelf", + "port-slot": "Some port-slot", + "port-sub-slot": "Some port-sub-slot" + }}}, + {"service-format": "Ethernet", "service-rate": "100", + "clli": "ORANGE1", "node-id": "XPONDER-1-2", + "tx-direction": {"port": { + "port-device-name": "Some port-device-name", + "port-type": "Some port-type", + "port-name": "Some port-name", + "port-rack": "Some port-rack", + "port-shelf": "Some port-shelf", + "port-slot": "Some port-slot", + "port-sub-slot": "Some port-sub-slot" + }}, + "rx-direction": {"port": { + "port-device-name": "Some port-device-name", + "port-type": "Some port-type", + "port-name": "Some port-name", + "port-rack": "Some port-rack", + "port-shelf": "Some port-shelf", + "port-slot": "Some port-slot", + "port-sub-slot": "Some port-sub-slot" + }}}, + {"customer-code": ["Some customer-code"], + "co-routing": {"existing-service": ["Some existing-service"]} + }, + {"customer-code": ["Some customer-code"], + "co-routing": {"existing-service": ["Some existing-service"]} + }, + "hop-count", {"locally-protected-links": "true"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -278,8 +296,10 @@ class TransportPCEtesting(unittest.TestCase): # Test2 success path computation with path description def test_19_success2_path_computation(self): response = test_utils.path_computation_request("request 1", "service 1", - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-1-2", "clli": "ORANGE1"}, - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-3-2", "clli": "ORANGE3"}) + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-1-2", "clli": "ORANGE1"}, + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-3-2", "clli": "ORANGE3"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -293,9 +313,11 @@ class TransportPCEtesting(unittest.TestCase): # Test3 success path computation with hard-constraints exclude def test_20_success3_path_computation(self): response = test_utils.path_computation_request("request 1", "service 1", - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-1-2", "clli": "ORANGE1"}, - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-3-2", "clli": "ORANGE3"}, - {"exclude_": { "node-id": ["OpenROADM-2-1", "OpenROADM-2-2"] }}) + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-1-2", "clli": "ORANGE1"}, + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-3-2", "clli": "ORANGE3"}, + {"exclude_": {"node-id": ["OpenROADM-2-1", "OpenROADM-2-2"]}}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -309,8 +331,10 @@ class TransportPCEtesting(unittest.TestCase): # Path computation before deleting oms-attribute of the link :openroadm1-3 to openroadm1-2 def test_21_path_computation_before_oms_attribute_deletion(self): response = test_utils.path_computation_request("request 1", "service 1", - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-2-2", "clli": "ORANGE2"}, - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-1-2", "clli": "ORANGE1"}) + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-2-2", "clli": "ORANGE2"}, + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-1-2", "clli": "ORANGE1"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -321,8 +345,9 @@ class TransportPCEtesting(unittest.TestCase): link = {"link-id": "OpenROADM-1-3-DEG2-to-OpenROADM-1-2-DEG2"} find = False for i in range(0, nbElmPath): - resource_i = res['output']['response-parameters']['path-description']['aToZ-direction']['aToZ'][i]['resource'] - if(resource_i == link): + resource_i = (res['output']['response-parameters']['path-description']['aToZ-direction']['aToZ'][i] + ['resource']) + if resource_i == link: find = True self.assertEqual(find, True) time.sleep(5) @@ -336,8 +361,10 @@ class TransportPCEtesting(unittest.TestCase): # Path computation after deleting oms-attribute of the link :openroadm1-3 to openroadm1-2 def test_23_path_computation_after_oms_attribute_deletion(self): response = test_utils.path_computation_request("request 1", "service 1", - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-2-2", "clli": "ORANGE2"}, - {"service-rate": "100", "service-format": "Ethernet", "node-id": "XPONDER-1-2", "clli": "ORANGE1"}) + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-2-2", "clli": "ORANGE2"}, + {"service-rate": "100", "service-format": "Ethernet", + "node-id": "XPONDER-1-2", "clli": "ORANGE1"}) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Path is calculated', @@ -348,8 +375,9 @@ class TransportPCEtesting(unittest.TestCase): link = {"link-id": "OpenROADM-1-3-DEG2-to-OpenROADM-1-2-DEG2"} find = False for i in range(0, nbElmPath): - resource_i = res['output']['response-parameters']['path-description']['aToZ-direction']['aToZ'][i]['resource'] - if (resource_i == link): + resource_i = (res['output']['response-parameters']['path-description']['aToZ-direction']['aToZ'][i] + ['resource']) + if resource_i == link: find = True self.assertNotEqual(find, True) time.sleep(5) diff --git a/tests/transportpce_tests/1.2.1/test_portmapping.py b/tests/transportpce_tests/1.2.1/test_portmapping.py index 861d88098..51694b568 100644 --- a/tests/transportpce_tests/1.2.1/test_portmapping.py +++ b/tests/transportpce_tests/1.2.1/test_portmapping.py @@ -9,6 +9,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time import requests @@ -26,6 +29,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") diff --git a/tests/transportpce_tests/1.2.1/test_renderer_service_path_nominal.py b/tests/transportpce_tests/1.2.1/test_renderer_service_path_nominal.py index dbf11a074..24b24230d 100644 --- a/tests/transportpce_tests/1.2.1/test_renderer_service_path_nominal.py +++ b/tests/transportpce_tests/1.2.1/test_renderer_service_path_nominal.py @@ -9,8 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################# +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json import time import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportPCERendererTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -77,9 +80,11 @@ class TransportPCERendererTesting(unittest.TestCase): def test_05_service_path_create(self): response = test_utils.service_path_request("create", "service_test", "7", [{"renderer:node-id": "ROADMA01", - "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"}, + "renderer:src-tp": "SRG1-PP7-TXRX", + "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDRA01", - "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:src-tp": "XPDR1-CLIENT1", + "renderer:dest-tp": "XPDR1-NETWORK1"}]) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"]) @@ -243,9 +248,11 @@ class TransportPCERendererTesting(unittest.TestCase): def test_14_service_path_delete(self): response = test_utils.service_path_request("delete", "service_test", "7", [{"renderer:node-id": "ROADMA01", - "renderer:src-tp": "SRG1-PP7-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"}, + "renderer:src-tp": "SRG1-PP7-TXRX", + "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDRA01", - "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:src-tp": "XPDR1-CLIENT1", + "renderer:dest-tp": "XPDR1-NETWORK1"}]) self.assertEqual(response.status_code, requests.codes.ok) self.assertEqual(response.json(), { 'output': {'result': 'Request processed', 'success': True}}) @@ -265,7 +272,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_17_service_path_delete_rdm_check(self): @@ -274,7 +282,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_18_service_path_delete_xpdr_check(self): @@ -283,7 +292,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_19_service_path_delete_xpdr_check(self): @@ -292,7 +302,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_20_service_path_delete_xpdr_check(self): @@ -301,7 +312,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_21_service_path_delete_xpdr_check(self): @@ -310,7 +322,8 @@ class TransportPCERendererTesting(unittest.TestCase): res = response.json() self.assertIn( {"error-type": "application", "error-tag": "data-missing", - "error-message": "Request could not be completed because the relevant data model content does not exist"}, + "error-message": + "Request could not be completed because the relevant data model content does not exist"}, res['errors']['error']) def test_22_service_path_delete_xpdr_check(self): diff --git a/tests/transportpce_tests/1.2.1/test_topoPortMapping.py b/tests/transportpce_tests/1.2.1/test_topo_portmapping.py similarity index 83% rename from tests/transportpce_tests/1.2.1/test_topoPortMapping.py rename to tests/transportpce_tests/1.2.1/test_topo_portmapping.py index 1c3ef934c..683b04a48 100644 --- a/tests/transportpce_tests/1.2.1/test_topoPortMapping.py +++ b/tests/transportpce_tests/1.2.1/test_topo_portmapping.py @@ -9,6 +9,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods +# a pylint false positive due to unittest +# pylint: disable=no-self-use + import time import unittest import requests @@ -26,6 +31,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -39,24 +45,19 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) # Verify the termination points of the ROADMA - def test_02_compareOpenroadmTopologyPortMapping_rdm(self): + def test_02_compare_Openroadm_topology_portmapping_rdm(self): responseTopo = test_utils.get_ordm_topo_request("") resTopo = responseTopo.json() nbNode = len(resTopo['network'][0]['node']) - nbMapCumul = 0 - nbMappings = 0 for i in range(0, nbNode): nodeId = resTopo['network'][0]['node'][i]['node-id'] nodeMapId = nodeId.split("-")[0] - responseMapList = test_utils.portmapping_request(nodeMapId) - resMapList = responseMapList.json() - nbMappings = len(resMapList['nodes'][0]['mapping']) - nbMapCumul + test_utils.portmapping_request(nodeMapId) nbTp = len(resTopo['network'][0]['node'][i]['ietf-network-topology:termination-point']) - nbMapCurrent = 0 for j in range(0, nbTp): tpId = resTopo['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] if((not "CP" in tpId) and (not "CTP" in tpId)): - responseMap = test_utils.portmapping_request(nodeMapId+"/mapping/"+tpId) + test_utils.portmapping_request(nodeMapId+"/mapping/"+tpId) # Disconnect the ROADMA def test_03_disconnect_rdm(self): @@ -69,8 +70,8 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) # #Verify the termination points related to XPDR - def test_05_compareOpenroadmTopologyPortMapping_xpdr(self): - self.test_02_compareOpenroadmTopologyPortMapping_rdm() + def test_05_compare_Openroadm_topology_portmapping_xpdr(self): + self.test_02_compare_Openroadm_topology_portmapping_rdm() # Disconnect the XPDRA def test_06_disconnect_device(self): diff --git a/tests/transportpce_tests/1.2.1/test_topology.py b/tests/transportpce_tests/1.2.1/test_topology.py index ab9419def..c079fcd13 100644 --- a/tests/transportpce_tests/1.2.1/test_topology.py +++ b/tests/transportpce_tests/1.2.1/test_topology.py @@ -9,7 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import json +# pylint: disable=no-member +# pylint: disable=too-many-public-methods +# pylint: disable=too-many-lines + import time import unittest import requests @@ -19,6 +22,45 @@ from common import test_utils class TransportPCETopologyTesting(unittest.TestCase): processes = None + CHECK_DICT1 = { + 'ROADMA01-SRG1': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADMA01-SRG3': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADMA01-DEG1': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + }, + 'ROADMA01-DEG2': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + } + } + CHECK_DICT2 = { + 'ROADMC01-SRG1': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADMC01-DEG1': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + }, + 'ROADMC01-DEG2': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + } + } @classmethod def setUpClass(cls): @@ -27,6 +69,7 @@ class TransportPCETopologyTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -56,39 +99,38 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], '2') def test_04_getLinks_OpenroadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 10) - expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'] + } for i in range(0, nbLink): linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK': - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK': - find = linkId in addLink - self.assertEqual(find, True) - addLink.remove(linkId) - elif res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK': - find = linkId in dropLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_05_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -101,51 +143,12 @@ class TransportPCETopologyTesting(unittest.TestCase): res['network'][0]['node'][i]['supporting-node']) nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if nodeId == 'ROADMA01-SRG1': - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif nodeId == 'ROADMA01-SRG3': - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif nodeId == 'ROADMA01-DEG1': - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - elif nodeId == 'ROADMA01-DEG2': - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + if nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, @@ -153,6 +156,7 @@ class TransportPCETopologyTesting(unittest.TestCase): listNode.remove(nodeId) else: self.assertFalse(True) + self.assertEqual(len(listNode), 0) def test_06_connect_XPDRA(self): @@ -167,6 +171,7 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA') def test_08_getOpenRoadmNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -176,16 +181,17 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network') self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDRA01'): + if nodeId == 'XPDRA01': self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER') self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1') - elif(nodeId == 'ROADMA01'): + elif nodeId == 'ROADMA01': self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2') else: self.assertFalse(True) def test_09_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -197,7 +203,7 @@ class TransportPCETopologyTesting(unittest.TestCase): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] # Tests related to XPDRA nodes - if(nodeId == 'XPDRA01-XPDR1'): + if nodeId == 'XPDRA01-XPDR1': self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, @@ -207,60 +213,31 @@ class TransportPCETopologyTesting(unittest.TestCase): client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j][ + 'org-openroadm-common-network:tp-type'] tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): + if tpType == 'XPONDER-CLIENT': client += 1 - elif (tpType == 'XPONDER-NETWORK'): + elif tpType == 'XPONDER-NETWORK': network += 1 - if (tpId == 'XPDR1-NETWORK2'): + if tpId == 'XPDR1-NETWORK2': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT3') - if (tpId == 'XPDR1-CLIENT3'): + if tpId == 'XPDR1-CLIENT3': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] [j]['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2') self.assertTrue(client == 4) self.assertTrue(network == 2) listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) @@ -282,50 +259,37 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) def test_12_getLinks_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 12) - expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'] - XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1'] - XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'], + 'XPONDER-INPUT': ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1'], + 'XPONDER-OUTPUT': ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX'] + } for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(nodeType == 'EXPRESS-LINK'): - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif(nodeType == 'ADD-LINK'): - find = linkId in addLink - self.assertEqual(find, True) - addLink.remove(linkId) - elif(nodeType == 'DROP-LINK'): - find = linkId in dropLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(linkId) - elif(nodeType == 'XPONDER-INPUT'): - find = linkId in XPDR_IN - self.assertEqual(find, True) - XPDR_IN.remove(linkId) - elif(nodeType == 'XPONDER-OUTPUT'): - find = linkId in XPDR_OUT - self.assertEqual(find, True) - XPDR_OUT.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) - self.assertEqual(len(XPDR_IN), 0) - self.assertEqual(len(XPDR_OUT), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_13_connect_ROADMC(self): response = test_utils.mount_device("ROADMC01", 'roadmc') @@ -358,6 +322,7 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) def test_16_getClliNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_clli_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -365,99 +330,80 @@ class TransportPCETopologyTesting(unittest.TestCase): listNode = ['NodeA', 'NodeC'] for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] - find = nodeId in listNode - self.assertEqual(find, True) - if(nodeId == 'NodeA'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA') + if nodeId in listNode: + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], nodeId) + listNode.remove(nodeId) else: - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') - listNode.remove(nodeId) - + self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_17_getOpenRoadmNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 3) listNode = ['XPDRA01', 'ROADMA01', 'ROADMC01'] + CHECK_LIST = {'XPDRA01': {'node-ref': 'NodeA', 'node-type': 'XPONDER', 'model': '1'}, + 'ROADMA01': {'node-ref': 'NodeA', 'node-type': 'ROADM', 'model': '2'}, + 'ROADMC01': {'node-ref': 'NodeC', 'node-type': 'ROADM', 'model': '2'} + } for i in range(0, nbNode): self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network') nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDRA01'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '1') - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2') - listNode.remove(nodeId) - elif(nodeId == 'ROADMC01'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeC') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], '2') + if nodeId in CHECK_LIST: + self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], + CHECK_LIST[nodeId]['node-ref']) + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + CHECK_LIST[nodeId]['node-type']) + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], + CHECK_LIST[nodeId]['model']) listNode.remove(nodeId) else: self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_18_getROADMLinkOpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 20) - expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', - 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX', 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX', 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', - 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX', 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX'] - R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', - 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX'] - XPDR_IN = ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1'] - XPDR_OUT = ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX', + 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG2-DEG2-CTP-TXRX', + 'ROADMC01-SRG1-SRG1-CP-TXRXtoROADMC01-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', + 'ROADMC01-DEG1-DEG1-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX', + 'ROADMC01-DEG2-DEG2-CTP-TXRXtoROADMC01-SRG1-SRG1-CP-TXRX'], + 'ROADM-TO-ROADM': ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', + 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX'], + 'XPONDER-INPUT': ['ROADMA01-SRG1-SRG1-PP1-TXRXtoXPDRA01-XPDR1-XPDR1-NETWORK1'], + 'XPONDER-OUTPUT': ['XPDRA01-XPDR1-XPDR1-NETWORK1toROADMA01-SRG1-SRG1-PP1-TXRX'] + } for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(nodeType == 'EXPRESS-LINK'): - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif(nodeType == 'ADD-LINK'): - find = linkId in addLink - self.assertEqual(find, True) - addLink.remove(linkId) - elif(nodeType == 'DROP-LINK'): - find = linkId in dropLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(linkId) - elif(nodeType == 'ROADM-TO-ROADM'): - find = linkId in R2RLink - self.assertEqual(find, True) - R2RLink.remove(linkId) - elif(nodeType == 'XPONDER-INPUT'): - find = linkId in XPDR_IN - self.assertEqual(find, True) - XPDR_IN.remove(linkId) - elif(nodeType == 'XPONDER-OUTPUT'): - find = linkId in XPDR_OUT - self.assertEqual(find, True) - XPDR_OUT.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) - self.assertEqual(len(R2RLink), 0) - self.assertEqual(len(XPDR_IN), 0) - self.assertEqual(len(XPDR_OUT), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_19_getLinkOmsAttributesOpenRoadmTopology(self): response = test_utils.get_ordm_topo_request("") @@ -469,21 +415,22 @@ class TransportPCETopologyTesting(unittest.TestCase): R2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX'] for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(link_id in R2RLink): + if link_id in R2RLink: find = False - spanLoss = res['network'][0]['ietf-network-topology:link'][i][ - 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"] - length = res['network'][0]['ietf-network-topology:link'][i][ - 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length'] - if((spanLoss != None) & (length != None)): + spanLoss = (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"]) + length = (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0] + ['SRLG-length']) + if (spanLoss is not None) & (length is not None): find = True self.assertTrue(find) R2RLink.remove(link_id) self.assertEqual(len(R2RLink), 0) def test_20_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -493,11 +440,11 @@ class TransportPCETopologyTesting(unittest.TestCase): listNode = ['XPDRA01-XPDR1', 'ROADMA01-SRG1', 'ROADMA01-SRG3', 'ROADMA01-DEG1', 'ROADMA01-DEG2', 'ROADMC01-SRG1', 'ROADMC01-DEG1', 'ROADMC01-DEG2'] - # ************************Tests related to XPDRA nodes for i in range(0, nbNode): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDRA01-XPDR1'): + # Tests related to XPDRA nodes + if nodeId == 'XPDRA01-XPDR1': self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'}, res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType, 'XPONDER') @@ -506,86 +453,42 @@ class TransportPCETopologyTesting(unittest.TestCase): client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] - if (tpType == 'XPONDER-CLIENT'): + tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j][ + 'org-openroadm-common-network:tp-type'] + if tpType == 'XPONDER-CLIENT': client += 1 - elif (tpType == 'XPONDER-NETWORK'): + elif tpType == 'XPONDER-NETWORK': network += 1 self.assertTrue(client == 4) self.assertTrue(network == 2) listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG1'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG3'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG1'): - # Test related to DEG1 - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG2'): - # Test related to DEG2 - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + self.CHECK_DICT1[nodeId]['node_type']) listNode.remove(nodeId) - elif(nodeId == 'ROADMC01-SRG1'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADMC01-DEG1'): - # Test related to DEG1 - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'}, + # Tests related to ROADMC nodes + elif nodeId in self.CHECK_DICT2: + self.assertEqual(nodeType, self.CHECK_DICT2[nodeId]['node_type']) + if self.CHECK_DICT2[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT2[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeC'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') - listNode.remove(nodeId) - elif(nodeId == 'ROADMC01-DEG2'): - # Test related to DEG2 - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMC01'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + self.CHECK_DICT2[nodeId]['node_type']) listNode.remove(nodeId) else: self.assertFalse(True) @@ -648,6 +551,7 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) def test_26_getClliNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_clli_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -655,15 +559,11 @@ class TransportPCETopologyTesting(unittest.TestCase): listNode = ['NodeA', 'NodeB', 'NodeC'] for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] - find = nodeId in listNode - self.assertEqual(find, True) - if(nodeId == 'NodeA'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA') - elif(nodeId == 'NodeB'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeB') + if nodeId in listNode: + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], nodeId) + listNode.remove(nodeId) else: - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') - listNode.remove(nodeId) + self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_27_verifyDegree(self): @@ -672,11 +572,15 @@ class TransportPCETopologyTesting(unittest.TestCase): res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) - listR2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX', - 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX', 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX', - 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX', 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX'] + listR2RLink = ['ROADMA01-DEG1-DEG1-TTP-TXRXtoROADMC01-DEG2-DEG2-TTP-TXRX', + 'ROADMC01-DEG2-DEG2-TTP-TXRXtoROADMA01-DEG1-DEG1-TTP-TXRX', + 'ROADMA01-DEG2-DEG2-TTP-TXRXtoROADMB01-DEG1-DEG1-TTP-TXRX', + 'ROADMC01-DEG1-DEG1-TTP-TXRXtoROADMB01-DEG2-DEG2-TTP-TXRX', + 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX', + 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX'] for i in range(0, nbLink): - if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM': + if (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM'): link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] find = link_id in listR2RLink self.assertEqual(find, True) @@ -695,7 +599,8 @@ class TransportPCETopologyTesting(unittest.TestCase): link_type = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_src = res['network'][0]['ietf-network-topology:link'][i]['source']['source-node'] link_dest = res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node'] - oppLink_id = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link'] + oppLink_id = (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-common-network:opposite-link']) # Find the opposite link response_oppLink = test_utils.get_ordm_topo_request("ietf-network-topology:link/"+oppLink_id) self.assertEqual(response_oppLink.status_code, requests.codes.ok) @@ -705,18 +610,11 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'], link_dest) self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'], link_src) oppLink_type = res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type'] - if link_type == 'ADD-LINK': - self.assertEqual(oppLink_type, 'DROP-LINK') - elif link_type == 'DROP-LINK': - self.assertEqual(oppLink_type, 'ADD-LINK') - elif link_type == 'EXPRESS-LINK': - self.assertEqual(oppLink_type, 'EXPRESS-LINK') - elif link_type == 'ROADM-TO-ROADM': - self.assertEqual(oppLink_type, 'ROADM-TO-ROADM') - elif link_type == 'XPONDER-INPUT': - self.assertEqual(oppLink_type, 'XPONDER-OUTPUT') - elif link_type == 'XPONDER-OUTPUT': - self.assertEqual(oppLink_type, 'XPONDER-INPUT') + CHECK_DICT = {'ADD-LINK': 'DROP-LINK', 'DROP-LINK': 'ADD-LINK', + 'EXPRESS-LINK': 'EXPRESS-LINK', 'ROADM-TO-ROADM': 'ROADM-TO-ROADM', + 'XPONDER-INPUT': 'XPONDER-OUTPUT', 'XPONDER-OUTUT': 'XPONDER-INPUT'} + if link_type in CHECK_DICT: + self.assertEqual(oppLink_type, CHECK_DICT[link_type]) def test_29_getLinkOmsAttributesOpenRoadmTopology(self): response = test_utils.get_ordm_topo_request("") @@ -730,15 +628,14 @@ class TransportPCETopologyTesting(unittest.TestCase): 'ROADMB01-DEG1-DEG1-TTP-TXRXtoROADMA01-DEG2-DEG2-TTP-TXRX', 'ROADMB01-DEG2-DEG2-TTP-TXRXtoROADMC01-DEG1-DEG1-TTP-TXRX'] for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(link_id in R2RLink): + if link_id in R2RLink: find = False spanLoss = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"] length = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length'] - if((spanLoss != None) & (length != None)): + if (spanLoss is not None) & (length is not None): find = True self.assertTrue(find) R2RLink.remove(link_id) @@ -760,6 +657,7 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.ok) def test_32_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -771,61 +669,32 @@ class TransportPCETopologyTesting(unittest.TestCase): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] # Tests related to XPDRA nodes - if(nodeId == 'XPDRA01-XPDR1'): + if nodeId == 'XPDRA01-XPDR1': nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) for j in range(0, nbTp): tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpid == 'XPDR1-CLIENT1'): + if tpid == 'XPDR1-CLIENT1': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT') - if (tpid == 'XPDR1-NETWORK1'): + if tpid == 'XPDR1-NETWORK1': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK') self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'], + ['org-openroadm-network-topology:xpdr-network-attributes'] + ['tail-equipment-id'], 'ROADMA01-SRG1--SRG1-PP1-TXRX') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDRA01'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) @@ -855,7 +724,7 @@ class TransportPCETopologyTesting(unittest.TestCase): nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 1) for i in range(0, nbNode-1): - self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'], 'NodeC') + self.assertNotEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') def test_35_disconnect_XPDRA(self): response = test_utils.unmount_device("XPDRA01") @@ -879,6 +748,7 @@ class TransportPCETopologyTesting(unittest.TestCase): self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'XPDRA01') def test_38_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -891,39 +761,16 @@ class TransportPCETopologyTesting(unittest.TestCase): res['network'][0]['node'][i]['supporting-node']) nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'ROADMA01-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADMA01-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + if nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 17) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADMA01'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) else: self.assertFalse(True) @@ -943,34 +790,29 @@ class TransportPCETopologyTesting(unittest.TestCase): res = response.json() nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 16) - expressLink = ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', - 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', - 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG1-SRG1-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG2-DEG2-CTP-TXRX', + 'ROADMA01-SRG3-SRG3-CP-TXRXtoROADMA01-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG1-SRG1-CP-TXRX', + 'ROADMA01-DEG1-DEG1-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX', + 'ROADMA01-DEG2-DEG2-CTP-TXRXtoROADMA01-SRG3-SRG3-CP-TXRX'] + } roadmtoroadmLink = 0 for i in range(0, nbLink): - if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in expressLink - self.assertEqual(find, True) - expressLink.remove(link_id) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in addLink - self.assertEqual(find, True) - addLink.remove(link_id) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in dropLink + linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(link_id) + (check_list[linkType]).remove(linkId) else: roadmtoroadmLink += 1 - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) self.assertEqual(roadmtoroadmLink, 6) for i in range(0, nbLink): self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i] diff --git a/tests/transportpce_tests/2.2.1/test_end2end.py b/tests/transportpce_tests/2.2.1/test_end2end.py index f5013e093..bc9b3a634 100644 --- a/tests/transportpce_tests/2.2.1/test_end2end.py +++ b/tests/transportpce_tests/2.2.1/test_end2end.py @@ -8,9 +8,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods import unittest -import json import time import requests from common import test_utils @@ -117,6 +118,7 @@ class TransportPCEFulltesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -514,7 +516,7 @@ class TransportPCEFulltesting(unittest.TestCase): for ele in liste_tp: if ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-CLIENT': self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele)) - elif (ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-NETWORK'): + elif ele[u'org-openroadm-common-network:tp-type'] == 'XPONDER-NETWORK': self.assertIn(u'tail-equipment-id', dict.keys(ele[u'org-openroadm-network-topology:xpdr-network-attributes'])) self.assertNotIn('wavelength', dict.keys( diff --git a/tests/transportpce_tests/2.2.1/test_olm.py b/tests/transportpce_tests/2.2.1/test_olm.py index c470283e2..4a5e97b48 100644 --- a/tests/transportpce_tests/2.2.1/test_olm.py +++ b/tests/transportpce_tests/2.2.1/test_olm.py @@ -9,9 +9,11 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################# +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time -import json import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportOlmTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -427,7 +430,7 @@ class TransportOlmTesting(unittest.TestCase): self.assertIn('Request processed', res["output"]["result"]) time.sleep(10) - """to test case where SRG where the xpdr is connected to has no optical range data""" + #"""to test case where SRG where the xpdr is connected to has no optical range data""" def test_31_connect_xprdA_to_roadmA(self): response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "2", diff --git a/tests/transportpce_tests/2.2.1/test_otn_end2end.py b/tests/transportpce_tests/2.2.1/test_otn_end2end.py index ffda6a582..d2208da6d 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_end2end.py +++ b/tests/transportpce_tests/2.2.1/test_otn_end2end.py @@ -9,6 +9,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time import requests @@ -129,6 +132,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -494,12 +498,12 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nb_links, 4) for link in res['network'][0]['ietf-network-topology:link']: linkId = link['link-id'] - if (linkId == 'OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1' or - linkId == 'OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1'): + if (linkId in ('OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1', + 'OTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1')): self.assertEqual(link['org-openroadm-otn-network-topology:available-bandwidth'], 0) self.assertEqual(link['org-openroadm-otn-network-topology:used-bandwidth'], 100000) - elif (linkId == 'ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1' or - linkId == 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1'): + elif (linkId in ('ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1', + 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1')): self.assertEqual(link['org-openroadm-otn-network-topology:available-bandwidth'], 100000) self.assertEqual(link['org-openroadm-otn-network-topology:used-bandwidth'], 0) self.assertEqual(link['transportpce-topology:otn-link-type'], 'ODTU4') @@ -514,10 +518,10 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.get_otn_topo_request() res = response.json() for node in res['network'][0]['node']: - if (node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1'): + if node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1': tpList = node['ietf-network-topology:termination-point'] for tp in tpList: - if (tp['tp-id'] == 'XPDR1-NETWORK1'): + if tp['tp-id'] == 'XPDR1-NETWORK1': xpdrTpPortConAt = tp['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] self.assertEqual(len(xpdrTpPortConAt['ts-pool']), 80) self.assertEqual(len(xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']), 80) @@ -745,8 +749,8 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nb_links, 4) for link in res['network'][0]['ietf-network-topology:link']: linkId = link['link-id'] - if (linkId == 'ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1' or - linkId == 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1'): + if (linkId in ('ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1', + 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1')): self.assertEqual(link['org-openroadm-otn-network-topology:available-bandwidth'], 90000) self.assertEqual(link['org-openroadm-otn-network-topology:used-bandwidth'], 10000) @@ -754,13 +758,13 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.get_otn_topo_request() res = response.json() for node in res['network'][0]['node']: - if (node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1'): + if node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1': tpList = node['ietf-network-topology:termination-point'] for tp in tpList: - if (tp['tp-id'] == 'XPDR1-NETWORK1'): + if tp['tp-id'] == 'XPDR1-NETWORK1': xpdrTpPortConAt = tp['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] self.assertEqual(len(xpdrTpPortConAt['ts-pool']), 72) - tsPoolList = [i for i in range(1, 9)] + tsPoolList = list(range(1, 9)) self.assertNotIn(tsPoolList, xpdrTpPortConAt['ts-pool']) self.assertEqual(len(xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']), 79) self.assertNotIn(1, xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']) @@ -807,8 +811,8 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nb_links, 4) for link in res['network'][0]['ietf-network-topology:link']: linkId = link['link-id'] - if (linkId == 'ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1' or - linkId == 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1'): + if (linkId in ('ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1', + 'ODU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1')): self.assertEqual(link['org-openroadm-otn-network-topology:available-bandwidth'], 100000) self.assertEqual(link['org-openroadm-otn-network-topology:used-bandwidth'], 0) @@ -819,7 +823,7 @@ class TransportPCEtesting(unittest.TestCase): if (node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1'): tpList = node['ietf-network-topology:termination-point'] for tp in tpList: - if (tp['tp-id'] == 'XPDR1-NETWORK1'): + if tp['tp-id'] == 'XPDR1-NETWORK1': xpdrTpPortConAt = tp['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] self.assertEqual(len(xpdrTpPortConAt['ts-pool']), 80) self.assertEqual(len(xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']), 80) @@ -850,10 +854,10 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.get_otn_topo_request() res = response.json() for node in res['network'][0]['node']: - if (node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1'): + if node['node-id'] == 'SPDR-SA1-XPDR1' or 'SPDR-SC1-XPDR1': tpList = node['ietf-network-topology:termination-point'] for tp in tpList: - if (tp['tp-id'] == 'XPDR1-NETWORK1'): + if tp['tp-id'] == 'XPDR1-NETWORK1': xpdrTpPortConAt = tp['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] self.assertNotIn('ts-pool', dict.keys(xpdrTpPortConAt)) self.assertNotIn('odtu-tpn-pool', dict.keys(xpdrTpPortConAt)) diff --git a/tests/transportpce_tests/2.2.1/test_otn_renderer.py b/tests/transportpce_tests/2.2.1/test_otn_renderer.py index e5a3816f7..b8fd458ac 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_renderer.py +++ b/tests/transportpce_tests/2.2.1/test_otn_renderer.py @@ -9,8 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json import time import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -49,16 +52,16 @@ class TransportPCEtesting(unittest.TestCase): def test_02_get_portmapping_CLIENT4(self): response = test_utils.portmapping_request("SPDR-SA1/mapping/XPDR1-CLIENT4") self.assertEqual(response.status_code, requests.codes.ok) - res = response.json() - self.assertEqual('CP1-SFP4-P1', res['mapping'][0]['supporting-port']) - self.assertEqual('CP1-SFP4', res['mapping'][0]['supporting-circuit-pack-name']) - self.assertEqual('XPDR1-CLIENT4', res['mapping'][0]['logical-connection-point']) - self.assertEqual('bidirectional', res['mapping'][0]['port-direction']) - self.assertEqual('xpdr-client', res['mapping'][0]['port-qual']) - self.assertEqual('FqlcrxV7p3g=', res['mapping'][0]['lcp-hash-val']) - self.assertIn('org-openroadm-port-types:if-10GE-ODU2e', res['mapping'][0]['supported-interface-capability']) - self.assertIn('org-openroadm-port-types:if-10GE-ODU2', res['mapping'][0]['supported-interface-capability']) - self.assertIn('org-openroadm-port-types:if-10GE', res['mapping'][0]['supported-interface-capability']) + res_mapping = (response.json())['mapping'][0] + self.assertEqual('CP1-SFP4-P1', res_mapping['supporting-port']) + self.assertEqual('CP1-SFP4', res_mapping['supporting-circuit-pack-name']) + self.assertEqual('XPDR1-CLIENT4', res_mapping['logical-connection-point']) + self.assertEqual('bidirectional', res_mapping['port-direction']) + self.assertEqual('xpdr-client', res_mapping['port-qual']) + self.assertEqual('FqlcrxV7p3g=', res_mapping['lcp-hash-val']) + self.assertIn('org-openroadm-port-types:if-10GE-ODU2e', res_mapping['supported-interface-capability']) + self.assertIn('org-openroadm-port-types:if-10GE-ODU2', res_mapping['supported-interface-capability']) + self.assertIn('org-openroadm-port-types:if-10GE', res_mapping['supported-interface-capability']) def test_03_get_portmapping_NETWORK1(self): response = test_utils.portmapping_request("SPDR-SA1/mapping/XPDR1-NETWORK1") @@ -212,7 +215,8 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.otn_service_path_request("create", "service1", "10G", "Ethernet", [{"node-id": "SPDR-SA1", "client-tp": "XPDR1-CLIENT4", "network-tp": "XPDR1-NETWORK1"}], - {"ethernet-encoding": "eth encode", "trib-slot": ["1"], "trib-port-number": "1"}) + {"ethernet-encoding": "eth encode", + "trib-slot": ["1"], "trib-port-number": "1"}) time.sleep(3) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -220,7 +224,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertTrue(res["output"]["success"]) self.assertEqual('SPDR-SA1', res["output"]['node-interface'][0]['node-id']) self.assertIn('XPDR1-CLIENT4-ODU2e-service1-x-XPDR1-NETWORK1-ODU2e-service1', - res["output"]['node-interface'][0]['connection-id']) + res["output"]['node-interface'][0]['connection-id']) self.assertIn('XPDR1-CLIENT4-ETHERNET10G', res["output"]['node-interface'][0]['eth-interface-id']) self.assertIn('XPDR1-NETWORK1-ODU2e-service1', res["output"]['node-interface'][0]['odu-interface-id']) self.assertIn('XPDR1-CLIENT4-ODU2e-service1', res["output"]['node-interface'][0]['odu-interface-id']) @@ -320,7 +324,8 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.otn_service_path_request("delete", "service1", "10G", "Ethernet", [{"node-id": "SPDR-SA1", "client-tp": "XPDR1-CLIENT4", "network-tp": "XPDR1-NETWORK1"}], - {"ethernet-encoding": "eth encode", "trib-slot": ["1"], "trib-port-number": "1"}) + {"ethernet-encoding": "eth encode", + "trib-slot": ["1"], "trib-port-number": "1"}) time.sleep(3) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() diff --git a/tests/transportpce_tests/2.2.1/test_otn_sh_renderer.py b/tests/transportpce_tests/2.2.1/test_otn_sh_renderer.py index 2ec03efa7..26054626b 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_sh_renderer.py +++ b/tests/transportpce_tests/2.2.1/test_otn_sh_renderer.py @@ -9,6 +9,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time import requests @@ -26,6 +29,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") diff --git a/tests/transportpce_tests/2.2.1/test_otn_topology.py b/tests/transportpce_tests/2.2.1/test_otn_topology.py index 91045e501..f80c12d51 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_topology.py +++ b/tests/transportpce_tests/2.2.1/test_otn_topology.py @@ -9,6 +9,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time import logging @@ -27,6 +30,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -74,58 +78,44 @@ class TransportPCEtesting(unittest.TestCase): self.assertNotIn('ietf-network-topology:link', res['network'][0]) def test_05_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes self.assertEqual(response.status_code, requests.codes.ok) self.assertIn('node', res['network'][0]) - if ('node' in res['network'][0]): + if 'node' in res['network'][0]: nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 2) listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2'] for i in range(0, nbNode): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if (nodeId == 'SPDR-SA1-XPDR1'): - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(nodeType, 'XPONDER') - nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - client = 0 - network = 0 - for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] - tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): - client += 1 - elif (tpType == 'XPONDER-NETWORK'): - network += 1 - self.assertTrue(client == 0) + if nodeId not in listNode: + self.assertFalse(True) + continue + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertEqual(nodeType, 'XPONDER') + nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + client = 0 + network = 0 + for j in range(0, nbTps): + tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']) + if tpType == 'XPONDER-CLIENT': + client += 1 + elif tpType == 'XPONDER-NETWORK': + network += 1 + self.assertTrue(client == 0) + if nodeId == 'SPDR-SA1-XPDR1': self.assertTrue(network == 1) - listNode.remove(nodeId) - elif (nodeId == 'SPDR-SA1-XPDR2'): - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(nodeType, 'XPONDER') - nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - client = 0 - network = 0 - for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] - tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): - client += 1 - elif (tpType == 'XPONDER-NETWORK'): - network += 1 - self.assertTrue(client == 0) - self.assertTrue(network == 4) - listNode.remove(nodeId) else: - self.assertFalse(True) + # elif nodeId == 'SPDR-SA1-XPDR2': + self.assertTrue(network == 4) + listNode.remove(nodeId) self.assertEqual(len(listNode), 0) def test_06_getLinks_OtnTopology(self): @@ -135,113 +125,100 @@ class TransportPCEtesting(unittest.TestCase): self.assertNotIn('ietf-network-topology:link', res['network'][0]) def test_07_getNodes_OtnTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_otn_topo_request() res = response.json() self.assertEqual(response.status_code, requests.codes.ok) nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 2) listNode = ['SPDR-SA1-XPDR1', 'SPDR-SA1-XPDR2'] + CHECK_LIST = { + 'SPDR-SA1-XPDR1': { + 'node-type': 'MUXPDR', + 'xpdr-number': 1, + 'port-types': 'org-openroadm-port-types:if-10GE-ODU2e', + 'otn-common-types': 'org-openroadm-otn-common-types:ODU2e', + 'network_nb': 1, + 'nbl_nb': 4, + 'tp-checklist': ['XPDR1-NETWORK1', 'XPDR1-CLIENT1'], + 'tp-unchecklist': ['XPDR1-CLIENT2'] + }, + 'SPDR-SA1-XPDR2': { + 'node-type': 'SWITCH', + 'xpdr-number': 2, + 'port-types': 'org-openroadm-port-types:if-100GE-ODU4', + 'otn-common-types': 'org-openroadm-otn-common-types:ODU4', + 'network_nb': 4, + 'nbl_nb': 1, + 'tp-checklist': ['XPDR2-NETWORK4', 'XPDR2-CLIENT1', 'XPDR2-NETWORK3', 'XPDR2-CLIENT4', + 'XPDR2-CLIENT2', 'XPDR2-NETWORK2', 'XPDR2-CLIENT3', 'XPDR2-NETWORK1'], + 'tp-unchecklist': [] + } + } for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'SPDR-SA1-XPDR1'): + if nodeId in CHECK_LIST: nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] - self.assertEqual(nodeType, 'MUXPDR') + self.assertEqual(nodeType, CHECK_LIST[nodeId]['node-type']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR1'}, + self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': nodeId}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, res['network'][0]['node'][i]['supporting-node']) self.assertEqual(res['network'][0]['node'][i] - ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 1) + ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], + CHECK_LIST[nodeId]['xpdr-number']) nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] + tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']) tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): + if tpType == 'XPONDER-CLIENT': client += 1 - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces'] - ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-10GE-ODU2e') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU2e') - elif (tpType == 'XPONDER-NETWORK'): + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-otn-network-topology:tp-supported-interfaces'] + ['supported-interface-capability'][0]['if-cap-type']), + CHECK_LIST[nodeId]['port-types']) + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] + ['rate']), + CHECK_LIST[nodeId]['otn-common-types']) + elif tpType == 'XPONDER-NETWORK': network += 1 - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces'] - ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR1') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['tp-ref'], 'XPDR1-NETWORK1') + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-otn-network-topology:tp-supported-interfaces'] + ['supported-interface-capability'][0]['if-cap-type']), + 'org-openroadm-port-types:if-OCH-OTU4-ODU4') + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes'] + ['rate']), + 'org-openroadm-otn-common-types:ODU4') + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['supporting-termination-point'][0]['network-ref']), 'openroadm-topology') + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['supporting-termination-point'][0]['node-ref']), nodeId) + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['supporting-termination-point'][0]['tp-ref']), tpId) self.assertTrue(client == 4) - self.assertTrue(network == 1) + self.assertTrue(network == CHECK_LIST[nodeId]['network_nb']) listNode.remove(nodeId) nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools'] ['odu-switching-pools'][0]['non-blocking-list']) - self.assertEqual(nbNbl, 4) + self.assertEqual(nbNbl, CHECK_LIST[nodeId]['nbl_nb']) for k in range(0, nbNbl): - nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][k] - if (nbl['nbl-number'] == 1): - self.assertEqual(nbl['available-interconnect-bandwidth'], 10) - self.assertEqual(nbl['interconnect-bandwidth-unit'], 1000000000) - self.assertIn('XPDR1-NETWORK1', nbl['tp-list']) - self.assertIn('XPDR1-CLIENT1', nbl['tp-list']) - self.assertNotIn('XPDR1-CLIENT2', nbl['tp-list']) - elif(nodeId == 'SPDR-SA1-XPDR2'): - nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] - self.assertEqual(nodeType, 'SWITCH') - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'SPDR-SA1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-topology', 'node-ref': 'SPDR-SA1-XPDR2'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeSA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i] - ['org-openroadm-otn-network-topology:xpdr-attributes']['xpdr-number'], 2) - nbTps = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - client = 0 - network = 0 - for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] - tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): - client += 1 - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces'] - ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-100GE-ODU4') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4') - elif (tpType == 'XPONDER-NETWORK'): - network += 1 - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-otn-network-topology:tp-supported-interfaces'] - ['supported-interface-capability'][0]['if-cap-type'], 'org-openroadm-port-types:if-OCH-OTU4-ODU4') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']['rate'], 'org-openroadm-otn-common-types:ODU4') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['network-ref'], 'openroadm-topology') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['node-ref'], 'SPDR-SA1-XPDR2') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'] - [j]['supporting-termination-point'][0]['tp-ref'], tpId) - self.assertTrue(client == 4) - self.assertTrue(network == 4) - listNode.remove(nodeId) - nbNbl = len(res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools'] - ['odu-switching-pools'][0]['non-blocking-list']) - self.assertEqual(nbNbl, 1) - nbl = res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools']['odu-switching-pools'][0]['non-blocking-list'][0] - self.assertIn('XPDR2-NETWORK1', nbl['tp-list']) - self.assertIn('XPDR2-CLIENT1', nbl['tp-list']) - self.assertIn('XPDR2-NETWORK2', nbl['tp-list']) - self.assertIn('XPDR2-CLIENT2', nbl['tp-list']) - self.assertIn('XPDR2-NETWORK3', nbl['tp-list']) - self.assertIn('XPDR2-CLIENT3', nbl['tp-list']) - self.assertIn('XPDR2-NETWORK4', nbl['tp-list']) - self.assertIn('XPDR2-CLIENT4', nbl['tp-list']) + nbl = (res['network'][0]['node'][i]['org-openroadm-otn-network-topology:switching-pools'] + ['odu-switching-pools'][0]['non-blocking-list'][k]) + if nbl['nbl-number'] == 1: + if nodeId == 'SPDR-SA1-XPDR1': + self.assertEqual(nbl['available-interconnect-bandwidth'], 10) + self.assertEqual(nbl['interconnect-bandwidth-unit'], 1000000000) + for tp in CHECK_LIST[nodeId]['tp-checklist']: + self.assertIn(tp, nbl['tp-list']) + for tp in CHECK_LIST[nodeId]['tp-unchecklist']: + self.assertNotIn(tp, nbl['tp-list']) else: self.assertFalse(True) self.assertEqual(len(listNode), 0) diff --git a/tests/transportpce_tests/2.2.1/test_portmapping.py b/tests/transportpce_tests/2.2.1/test_portmapping.py index ddc4d0b06..7692c3246 100644 --- a/tests/transportpce_tests/2.2.1/test_portmapping.py +++ b/tests/transportpce_tests/2.2.1/test_portmapping.py @@ -9,6 +9,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest import time import requests @@ -26,6 +29,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") diff --git a/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py b/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py index 29b0789da..83fb14822 100644 --- a/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py +++ b/tests/transportpce_tests/2.2.1/test_renderer_service_path_nominal.py @@ -9,8 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################# +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json #from unittest.result import failfast import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportPCERendererTesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -75,9 +78,11 @@ class TransportPCERendererTesting(unittest.TestCase): def test_05_service_path_create(self): response = test_utils.service_path_request("create", "service_test", "7", [{"renderer:node-id": "ROADM-A1", - "renderer:src-tp": "SRG1-PP3-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"}, + "renderer:src-tp": "SRG1-PP3-TXRX", + "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDR-A1", - "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:src-tp": "XPDR1-CLIENT1", + "renderer:dest-tp": "XPDR1-NETWORK1"}]) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes: ROADM-A1', res["output"]["result"]) @@ -273,9 +278,11 @@ class TransportPCERendererTesting(unittest.TestCase): def test_17_service_path_delete(self): response = test_utils.service_path_request("delete", "service_test", "7", [{"renderer:node-id": "ROADM-A1", - "renderer:src-tp": "SRG1-PP3-TXRX", "renderer:dest-tp": "DEG1-TTP-TXRX"}, + "renderer:src-tp": "SRG1-PP3-TXRX", + "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDR-A1", - "renderer:src-tp": "XPDR1-CLIENT1", "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:src-tp": "XPDR1-CLIENT1", + "renderer:dest-tp": "XPDR1-NETWORK1"}]) self.assertEqual(response.status_code, requests.codes.ok) self.assertEqual(response.json(), { 'output': {'result': 'Request processed', 'success': True}}) diff --git a/tests/transportpce_tests/2.2.1/test_tapi.py b/tests/transportpce_tests/2.2.1/test_tapi.py index 01c99fb88..496a33e65 100644 --- a/tests/transportpce_tests/2.2.1/test_tapi.py +++ b/tests/transportpce_tests/2.2.1/test_tapi.py @@ -7,6 +7,13 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## + +# pylint: disable=no-member +# pylint: disable=too-many-public-methods +# some pylint false positives specific to tapi test +# pylint: disable=unsubscriptable-object +# pylint: disable=unsupported-assignment-operation + import os import sys import time @@ -50,6 +57,7 @@ class TransportTapitesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") diff --git a/tests/transportpce_tests/2.2.1/test_topoPortMapping.py b/tests/transportpce_tests/2.2.1/test_topo_portmapping.py similarity index 93% rename from tests/transportpce_tests/2.2.1/test_topoPortMapping.py rename to tests/transportpce_tests/2.2.1/test_topo_portmapping.py index d60aac9b4..66c0c23d3 100644 --- a/tests/transportpce_tests/2.2.1/test_topoPortMapping.py +++ b/tests/transportpce_tests/2.2.1/test_topo_portmapping.py @@ -9,8 +9,10 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods + import unittest -import json import time import requests from common import test_utils @@ -27,6 +29,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -59,10 +62,10 @@ class TransportPCEtesting(unittest.TestCase): nbMapCurrent = 0 for j in range(0, nbTp): tpId = resTopo['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if((not "CP" in tpId) and (not "CTP" in tpId)): + if (not "CP" in tpId) and (not "CTP" in tpId): responseMap = test_utils.portmapping_request(nodeMapId+"/mapping/"+tpId) self.assertEqual(responseMap.status_code, requests.codes.ok) - if(responseMap.status_code == requests.codes.ok): + if responseMap.status_code == requests.codes.ok: nbMapCurrent += 1 nbMapCumul += nbMapCurrent nbMappings -= nbMapCurrent diff --git a/tests/transportpce_tests/2.2.1/test_topology.py b/tests/transportpce_tests/2.2.1/test_topology.py index 3d8cf50df..b9969c7b2 100644 --- a/tests/transportpce_tests/2.2.1/test_topology.py +++ b/tests/transportpce_tests/2.2.1/test_topology.py @@ -9,9 +9,12 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +# pylint: disable=no-member +# pylint: disable=too-many-public-methods +# pylint: disable=too-many-lines + import unittest import time -import json import logging import requests from common import test_utils @@ -20,6 +23,45 @@ from common import test_utils class TransportPCEtesting(unittest.TestCase): processes = None + CHECK_DICT1 = { + 'ROADM-A1-SRG1': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADM-A1-SRG3': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADM-A1-DEG1': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + }, + 'ROADM-A1-DEG2': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + } + } + CHECK_DICT2 = { + 'ROADM-C1-SRG1': { + 'node_type': 'SRG', + 'checks_tp': [({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}), + ({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'})] + }, + 'ROADM-C1-DEG1': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + }, + 'ROADM-C1-DEG2': { + 'node_type': 'DEGREE', + 'checks_tp': [({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}), + ({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'})] + } + } @classmethod def setUpClass(cls): @@ -28,6 +70,7 @@ class TransportPCEtesting(unittest.TestCase): @classmethod def tearDownClass(cls): + # pylint: disable=not-an-iterable for process in cls.processes: test_utils.shutdown_process(process) print("all processes killed") @@ -58,43 +101,38 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][0]['org-openroadm-network:model'], 'model2') def test_04_getLinks_OpenroadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 10) - expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', - 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', - 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', - 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', - 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'] + } for i in range(0, nbLink): linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'): - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'): - find = linkId in addLink - self.assertEqual(find, True) - addLink.remove(linkId) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'): - find = linkId in dropLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_05_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -107,51 +145,12 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['supporting-node']) nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'ROADM-A1-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + if nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, @@ -173,6 +172,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][0]['org-openroadm-clli-network:clli'], 'NodeA') def test_08_getOpenRoadmNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -182,16 +182,17 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network') self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDR-A1'): + if nodeId == 'XPDR-A1': self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') - elif(nodeId == 'ROADM-A1'): + elif nodeId == 'ROADM-A1': self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') else: self.assertFalse(True) + continue + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') def test_09_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -203,7 +204,7 @@ class TransportPCEtesting(unittest.TestCase): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] # Tests related to XPDRA nodes - if(nodeId == 'XPDR-A1-XPDR1'): + if nodeId == 'XPDR-A1-XPDR1': self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, res['network'][0]['node'][i]['supporting-node']) self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, @@ -213,61 +214,31 @@ class TransportPCEtesting(unittest.TestCase): client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] + tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']) tpId = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpType == 'XPONDER-CLIENT'): + if tpType == 'XPONDER-CLIENT': client += 1 - elif (tpType == 'XPONDER-NETWORK'): + elif tpType == 'XPONDER-NETWORK': network += 1 - if (tpId == 'XPDR1-NETWORK2'): + if tpId == 'XPDR1-NETWORK2': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT2') - if (tpId == 'XPDR1-CLIENT2'): + if tpId == 'XPDR1-CLIENT2': self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] ['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2') self.assertTrue(client == 2) self.assertTrue(network == 2) listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) @@ -279,59 +250,46 @@ class TransportPCEtesting(unittest.TestCase): def test_10_connect_tail_xpdr_rdm(self): # Connect the tail: XPDRA to ROADMA response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "1", - "ROADM-A1", "1", "SRG1-PP1-TXRX") + "ROADM-A1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) def test_11_connect_tail_rdm_xpdr(self): response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "1", - "ROADM-A1", "1", "SRG1-PP1-TXRX") + "ROADM-A1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) def test_12_getLinks_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 12) - expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'] - XPDR_IN = ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'] - XPDR_OUT = ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'], + 'XPONDER-INPUT': ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'], + 'XPONDER-OUTPUT': ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX'] + } for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(nodeType == 'EXPRESS-LINK'): - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif(nodeType == 'ADD-LINK'): - find = linkId in addLink - self.assertEqual(find, True) - addLink.remove(linkId) - elif(nodeType == 'DROP-LINK'): - find = linkId in dropLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(linkId) - elif(nodeType == 'XPONDER-INPUT'): - find = linkId in XPDR_IN - self.assertEqual(find, True) - XPDR_IN.remove(linkId) - elif(nodeType == 'XPONDER-OUTPUT'): - find = linkId in XPDR_OUT - self.assertEqual(find, True) - XPDR_OUT.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) - self.assertEqual(len(XPDR_IN), 0) - self.assertEqual(len(XPDR_OUT), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_13_connect_ROADMC(self): response = test_utils.mount_device("ROADM-C1", 'roadmc') @@ -365,6 +323,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) def test_16_getClliNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_clli_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -372,98 +331,80 @@ class TransportPCEtesting(unittest.TestCase): listNode = ['NodeA', 'NodeC'] for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] - find = nodeId in listNode - self.assertEqual(find, True) - if(nodeId == 'NodeA'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA') + if nodeId in listNode: + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], nodeId) + listNode.remove(nodeId) else: - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') - listNode.remove(nodeId) + self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_17_getOpenRoadmNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 3) listNode = ['XPDR-A1', 'ROADM-A1', 'ROADM-C1'] + CHECK_LIST = {'XPDR-A1': {'node-ref': 'NodeA', 'node-type': 'XPONDER'}, + 'ROADM-A1': {'node-ref': 'NodeA', 'node-type': 'ROADM'}, + 'ROADM-C1': {'node-ref': 'NodeC', 'node-type': 'ROADM'} + } for i in range(0, nbNode): self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['network-ref'], 'clli-network') nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDR-A1'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'XPONDER') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeA') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-C1'): - self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], 'NodeC') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'ROADM') - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') + if nodeId in CHECK_LIST: + self.assertEqual(res['network'][0]['node'][i]['supporting-node'][0]['node-ref'], + CHECK_LIST[nodeId]['node-ref']) + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + CHECK_LIST[nodeId]['node-type']) listNode.remove(nodeId) else: self.assertFalse(True) + continue + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-network:model'], 'model2') self.assertEqual(len(listNode), 0) def test_18_getROADMLinkOpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 20) - expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', - 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX', 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX', 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', - 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX', 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX'] - R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', - 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX'] - XPDR_IN = ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'] - XPDR_OUT = ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX', + 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX', + 'ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', + 'ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX', + 'ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX'], + 'ROADM-TO-ROADM': ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', + 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX'], + 'XPONDER-INPUT': ['ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1'], + 'XPONDER-OUTPUT': ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX'] + } for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(nodeType == 'EXPRESS-LINK'): - find = linkId in expressLink - self.assertEqual(find, True) - expressLink.remove(linkId) - elif(nodeType == 'ADD-LINK'): - find = linkId in addLink + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - addLink.remove(linkId) - elif(nodeType == 'DROP-LINK'): - find = linkId in dropLink - self.assertEqual(find, True) - dropLink.remove(linkId) - elif(nodeType == 'ROADM-TO-ROADM'): - find = linkId in R2RLink - self.assertEqual(find, True) - R2RLink.remove(linkId) - elif(nodeType == 'XPONDER-INPUT'): - find = linkId in XPDR_IN - self.assertEqual(find, True) - XPDR_IN.remove(linkId) - elif(nodeType == 'XPONDER-OUTPUT'): - find = linkId in XPDR_OUT - self.assertEqual(find, True) - XPDR_OUT.remove(linkId) + (check_list[linkType]).remove(linkId) else: self.assertFalse(True) - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) - self.assertEqual(len(R2RLink), 0) - self.assertEqual(len(XPDR_IN), 0) - self.assertEqual(len(XPDR_OUT), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) def test_19_getLinkOmsAttributesOpenRoadmTopology(self): response = test_utils.get_ordm_topo_request("") @@ -475,21 +416,21 @@ class TransportPCEtesting(unittest.TestCase): R2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX'] for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(link_id in R2RLink): + if link_id in R2RLink: find = False spanLoss = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"] length = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length'] - if((spanLoss != None) & (length != None)): + if (spanLoss is not None) & (length is not None): find = True self.assertTrue(find) R2RLink.remove(link_id) self.assertEqual(len(R2RLink), 0) def test_20_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -499,11 +440,11 @@ class TransportPCEtesting(unittest.TestCase): listNode = ['XPDR-A1-XPDR1', 'ROADM-A1-SRG1', 'ROADM-A1-SRG3', 'ROADM-A1-DEG1', 'ROADM-A1-DEG2', 'ROADM-C1-SRG1', 'ROADM-C1-DEG1', 'ROADM-C1-DEG2'] - # ************************Tests related to XPDRA nodes + # Tests related to XPDRA nodes for i in range(0, nbNode): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'XPDR-A1-XPDR1'): + if nodeId == 'XPDR-A1-XPDR1': self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, res['network'][0]['node'][i]['supporting-node']) self.assertEqual(nodeType, 'XPONDER') @@ -512,89 +453,43 @@ class TransportPCEtesting(unittest.TestCase): client = 0 network = 0 for j in range(0, nbTps): - tpType = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['org-openroadm-common-network:tp-type'] - if (tpType == 'XPONDER-CLIENT'): + tpType = (res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']) + if tpType == 'XPONDER-CLIENT': client += 1 - elif (tpType == 'XPONDER-NETWORK'): + elif tpType == 'XPONDER-NETWORK': network += 1 self.assertTrue(client == 2) self.assertTrue(network == 2) listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG1'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG3'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG1'): - # Test related to DEG1 - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG2'): - # Test related to DEG2 - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + self.CHECK_DICT1[nodeId]['node_type']) listNode.remove(nodeId) - elif(nodeId == 'ROADM-C1-SRG1'): - # Test related to SRG1 - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT2: + self.assertEqual(nodeType, self.CHECK_DICT2[nodeId]['node_type']) + if self.CHECK_DICT2[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT2[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeC'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'SRG') - listNode.remove(nodeId) - elif(nodeId == 'ROADM-C1-DEG1'): - # Test related to DEG1 - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'}, res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], + self.CHECK_DICT2[nodeId]['node_type']) listNode.remove(nodeId) - elif(nodeId == 'ROADM-C1-DEG2'): - # Test related to DEG1 - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-C1'}, - res['network'][0]['node'][i]['supporting-node']) - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-common-network:node-type'], 'DEGREE') - listNode.remove(nodeId) - else: - self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_21_connect_ROADMB(self): @@ -660,6 +555,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) def test_26_getClliNetwork(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_clli_net_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -667,15 +563,11 @@ class TransportPCEtesting(unittest.TestCase): listNode = ['NodeA', 'NodeB', 'NodeC'] for i in range(0, nbNode): nodeId = res['network'][0]['node'][i]['node-id'] - find = nodeId in listNode - self.assertEqual(find, True) - if(nodeId == 'NodeA'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeA') - elif(nodeId == 'NodeB'): - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeB') + if nodeId in listNode: + self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], nodeId) + listNode.remove(nodeId) else: - self.assertEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') - listNode.remove(nodeId) + self.assertFalse(True) self.assertEqual(len(listNode), 0) def test_27_verifyDegree(self): @@ -684,11 +576,15 @@ class TransportPCEtesting(unittest.TestCase): res = response.json() # Tests related to links nbLink = len(res['network'][0]['ietf-network-topology:link']) - listR2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX', - 'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX', 'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX', - 'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX', 'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX'] + listR2RLink = ['ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX', + 'ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX', + 'ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX', + 'ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX', + 'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX', + 'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX'] for i in range(0, nbLink): - if res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM': + if (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-common-network:link-type'] == 'ROADM-TO-ROADM'): link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] find = link_id in listR2RLink self.assertEqual(find, True) @@ -707,7 +603,8 @@ class TransportPCEtesting(unittest.TestCase): link_type = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_src = res['network'][0]['ietf-network-topology:link'][i]['source']['source-node'] link_dest = res['network'][0]['ietf-network-topology:link'][i]['destination']['dest-node'] - oppLink_id = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:opposite-link'] + oppLink_id = (res['network'][0]['ietf-network-topology:link'][i] + ['org-openroadm-common-network:opposite-link']) # Find the opposite link response_oppLink = test_utils.get_ordm_topo_request("ietf-network-topology:link/"+oppLink_id) self.assertEqual(response_oppLink.status_code, requests.codes.ok) @@ -717,18 +614,11 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['source']['source-node'], link_dest) self.assertEqual(res_oppLink['ietf-network-topology:link'][0]['destination']['dest-node'], link_src) oppLink_type = res_oppLink['ietf-network-topology:link'][0]['org-openroadm-common-network:link-type'] - if link_type == 'ADD-LINK': - self.assertEqual(oppLink_type, 'DROP-LINK') - elif link_type == 'DROP-LINK': - self.assertEqual(oppLink_type, 'ADD-LINK') - elif link_type == 'EXPRESS-LINK': - self.assertEqual(oppLink_type, 'EXPRESS-LINK') - elif link_type == 'ROADM-TO-ROADM': - self.assertEqual(oppLink_type, 'ROADM-TO-ROADM') - elif link_type == 'XPONDER-INPUT': - self.assertEqual(oppLink_type, 'XPONDER-OUTPUT') - elif link_type == 'XPONDER-OUTPUT': - self.assertEqual(oppLink_type, 'XPONDER-INPUT') + CHECK_DICT = {'ADD-LINK': 'DROP-LINK', 'DROP-LINK': 'ADD-LINK', + 'EXPRESS-LINK': 'EXPRESS-LINK', 'ROADM-TO-ROADM': 'ROADM-TO-ROADM', + 'XPONDER-INPUT': 'XPONDER-OUTPUT', 'XPONDER-OUTUT': 'XPONDER-INPUT'} + if link_type in CHECK_DICT: + self.assertEqual(oppLink_type, CHECK_DICT[link_type]) def test_29_getLinkOmsAttributesOpenRoadmTopology(self): response = test_utils.get_ordm_topo_request("") @@ -742,15 +632,14 @@ class TransportPCEtesting(unittest.TestCase): 'ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX', 'ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX'] for i in range(0, nbLink): - nodeType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - if(link_id in R2RLink): + if link_id in R2RLink: find = False spanLoss = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']["engineered-spanloss"] length = res['network'][0]['ietf-network-topology:link'][i][ 'org-openroadm-network-topology:OMS-attributes']['span']['link-concatenation'][0]['SRLG-length'] - if((spanLoss != None) & (length != None)): + if (spanLoss is not None) & (length is not None): find = True self.assertTrue(find) R2RLink.remove(link_id) @@ -771,62 +660,8 @@ class TransportPCEtesting(unittest.TestCase): response = test_utils.del_node_request("NodeC") self.assertEqual(response.status_code, requests.codes.ok) -# def test_24_check_roadm2roadm_links_deletion(self): -# response = test_utils.get_ordm_topo_request("") -# self.assertEqual(response.status_code, requests.codes.ok) -# res = response.json() -# #Write the response in the log -# with open('./transportpce_tests/log/response.log', 'a') as outfile1: -# outfile1.write(str(res)) -# #Tests related to links -# nbLink=len(res['network'][0]['ietf-network-topology:link']) -# self.assertEqual(nbLink,8) -# expressLink=['ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX','ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX'] -# addLink=['ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG2-DEG2-CTP-TXRX','ROADMA-SRG1-SRG1-CP-TXRXtoROADMA-DEG1-DEG1-CTP-TXRX',] -# dropLink=['ROADMA-DEG1-DEG1-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX','ROADMA-DEG2-DEG2-CTP-TXRXtoROADMA-SRG1-SRG1-CP-TXRX'] -# XPDR_IN=['ROADMA-SRG1-SRG1-PP1-TXRXtoXPDRA-XPDR1-XPDR1-NETWORK1'] -# XPDR_OUT=['XPDRA-XPDR1-XPDR1-NETWORK1toROADMA-SRG1-SRG1-PP1-TXRX'] -# for i in range(0,nbLink): -# nodeType=res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] -# linkId=res['network'][0]['ietf-network-topology:link'][i]['link-id'] -# if(nodeType=='EXPRESS-LINK'): -# find= linkId in expressLink -# self.assertEqual(find, True) -# expressLink.remove(linkId) -# elif(nodeType=='ADD-LINK'): -# find= linkId in addLink -# self.assertEqual(find, True) -# addLink.remove(linkId) -# elif(nodeType=='DROP-LINK'): -# find= linkId in dropLink -# self.assertEqual(find, True) -# dropLink.remove(linkId) -# elif(nodeType=='XPONDER-INPUT'): -# find= linkId in XPDR_IN -# self.assertEqual(find, True) -# XPDR_IN.remove(linkId) -# elif(nodeType=='XPONDER-OUTPUT'): -# find= linkId in XPDR_OUT -# self.assertEqual(find, True) -# XPDR_OUT.remove(linkId) -# else: -# self.assertFalse(True) -# self.assertEqual(len(expressLink),0) -# self.assertEqual(len(addLink),0) -# self.assertEqual(len(dropLink),0) -# self.assertEqual(len(XPDR_IN),0) -# self.assertEqual(len(XPDR_OUT),0) -# -# for i in range(0,nbLink): -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'],'ROADM-TO-ROADM') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-SRG1-SRG1-CP-TXRXtoROADMC-DEG2-DEG1-CTP-TXRX') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG2-CTP-TXRXtoROADMC-SRG1-SRG1-CP-TXRX') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG1-DEG1-CTP-TXRXtoROADMC-DEG2-DEG2-CTP-TXRX') -# self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i]['link-id'],'ROADMC-DEG2-DEG2-CTP-TXRXtoROADMC-DEG1-DEG1-CTP-TXRX') - def test_32_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -838,61 +673,32 @@ class TransportPCEtesting(unittest.TestCase): nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] # Tests related to XPDRA nodes - if(nodeId == 'XPDR-A1-XPDR1'): + if nodeId == 'XPDR-A1-XPDR1': nbTp = len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']) for j in range(0, nbTp): tpid = res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j]['tp-id'] - if (tpid == 'XPDR1-CLIENT1'): - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-common-network:tp-type'], 'XPONDER-CLIENT') - if (tpid == 'XPDR1-NETWORK1'): - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-common-network:tp-type'], 'XPONDER-NETWORK') - self.assertEqual(res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] - ['org-openroadm-network-topology:xpdr-network-attributes']['tail-equipment-id'], + if tpid == 'XPDR1-CLIENT1': + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']), 'XPONDER-CLIENT') + if tpid == 'XPDR1-NETWORK1': + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-common-network:tp-type']), 'XPONDER-NETWORK') + self.assertEqual((res['network'][0]['node'][i]['ietf-network-topology:termination-point'][j] + ['org-openroadm-network-topology:xpdr-network-attributes'] + ['tail-equipment-id']), 'ROADM-A1-SRG1--SRG1-PP1-TXRX') self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'XPDR-A1'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, - res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + # Tests related to ROADMA nodes + elif nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, res['network'][0]['node'][i]['supporting-node']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) @@ -922,7 +728,7 @@ class TransportPCEtesting(unittest.TestCase): nbNode = len(res['network'][0]['node']) self.assertEqual(nbNode, 1) for i in range(0, nbNode-1): - self.assertNotEqual(res['network'][0]['node'][1]['org-openroadm-clli-network:clli'], 'NodeC') + self.assertNotEqual(res['network'][0]['node'][i]['org-openroadm-clli-network:clli'], 'NodeC') def test_35_disconnect_XPDRA(self): response = test_utils.unmount_device("XPDR-A1") @@ -946,6 +752,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertNotEqual(res['network'][0]['node'][i]['node-id'], 'XPDR-A1') def test_38_getNodes_OpenRoadmTopology(self): + # pylint: disable=redundant-unittest-assert response = test_utils.get_ordm_topo_request("") res = response.json() # Tests related to nodes @@ -958,39 +765,16 @@ class TransportPCEtesting(unittest.TestCase): res['network'][0]['node'][i]['supporting-node']) nodeType = res['network'][0]['node'][i]['org-openroadm-common-network:node-type'] nodeId = res['network'][0]['node'][i]['node-id'] - if(nodeId == 'ROADM-A1-SRG1'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG1-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG1-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-SRG3'): - # Test related to SRG1 - self.assertEqual(nodeType, 'SRG') - self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) - self.assertIn({'tp-id': 'SRG3-CP-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-CP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'SRG3-PP1-TXRX', 'org-openroadm-common-network:tp-type': 'SRG-TXRX-PP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG1'): - # Test related to DEG1 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG1-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG1-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - listNode.remove(nodeId) - elif(nodeId == 'ROADM-A1-DEG2'): - # Test related to DEG2 - self.assertEqual(nodeType, 'DEGREE') - self.assertIn({'tp-id': 'DEG2-TTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-TTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) - self.assertIn({'tp-id': 'DEG2-CTP-TXRX', 'org-openroadm-common-network:tp-type': 'DEGREE-TXRX-CTP'}, - res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + if nodeId in self.CHECK_DICT1: + self.assertEqual(nodeType, self.CHECK_DICT1[nodeId]['node_type']) + if self.CHECK_DICT1[nodeId]['node_type'] == 'SRG': + self.assertEqual(len(res['network'][0]['node'][i]['ietf-network-topology:termination-point']), 5) + for item in self.CHECK_DICT1[nodeId]['checks_tp']: + self.assertIn(item, res['network'][0]['node'][i]['ietf-network-topology:termination-point']) + self.assertIn({'network-ref': 'clli-network', 'node-ref': 'NodeA'}, + res['network'][0]['node'][i]['supporting-node']) + self.assertIn({'network-ref': 'openroadm-network', 'node-ref': 'ROADM-A1'}, + res['network'][0]['node'][i]['supporting-node']) listNode.remove(nodeId) else: self.assertFalse(True) @@ -1010,34 +794,29 @@ class TransportPCEtesting(unittest.TestCase): res = response.json() nbLink = len(res['network'][0]['ietf-network-topology:link']) self.assertEqual(nbLink, 16) - expressLink = ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'] - addLink = ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', - 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'] - dropLink = ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', - 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'] + check_list = {'EXPRESS-LINK': ['ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX'], + 'ADD-LINK': ['ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX', + 'ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX'], + 'DROP-LINK': ['ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX', + 'ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX', + 'ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX'] + } roadmtoroadmLink = 0 for i in range(0, nbLink): - if (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'EXPRESS-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in expressLink - self.assertEqual(find, True) - expressLink.remove(link_id) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'ADD-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in addLink - self.assertEqual(find, True) - addLink.remove(link_id) - elif (res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] == 'DROP-LINK'): - link_id = res['network'][0]['ietf-network-topology:link'][i]['link-id'] - find = link_id in dropLink + linkId = res['network'][0]['ietf-network-topology:link'][i]['link-id'] + linkType = res['network'][0]['ietf-network-topology:link'][i]['org-openroadm-common-network:link-type'] + if linkType in check_list: + find = linkId in check_list[linkType] self.assertEqual(find, True) - dropLink.remove(link_id) + (check_list[linkType]).remove(linkId) else: roadmtoroadmLink += 1 - self.assertEqual(len(expressLink), 0) - self.assertEqual(len(addLink), 0) - self.assertEqual(len(dropLink), 0) + for link_type in check_list: + self.assertEqual(len(check_list[link_type]), 0) self.assertEqual(roadmtoroadmLink, 6) for i in range(0, nbLink): self.assertNotEqual(res['network'][0]['ietf-network-topology:link'][i] diff --git a/tests/transportpce_tests/common/__init__.py b/tests/transportpce_tests/common/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/transportpce_tests/common/test_utils.py b/tests/transportpce_tests/common/test_utils.py index 3a2d6e9ea..dd26aba79 100644 --- a/tests/transportpce_tests/common/test_utils.py +++ b/tests/transportpce_tests/common/test_utils.py @@ -1,4 +1,5 @@ #!/usr/bin/env python + ############################################################################## # Copyright (c) 2020 Orange, Inc. and others. All rights reserved. # @@ -7,6 +8,9 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## + +# pylint: disable=no-member + import json import os import sys @@ -132,7 +136,7 @@ def install_karaf_feature(feature_name: str): "..", "..", "..", "karaf", "target", "assembly", "bin", "client") return subprocess.run([executable], input='feature:install ' + feature_name + '\n feature:list | grep tapi \n logout \n', - universal_newlines=True) + universal_newlines=True, check=False) def get_request(url): @@ -149,11 +153,11 @@ def post_request(url, data): data=json.dumps(data), headers=TYPE_APPLICATION_JSON, auth=(ODL_LOGIN, ODL_PWD)) - else: - return requests.request( - "POST", url.format(RESTCONF_BASE_URL), - headers=TYPE_APPLICATION_JSON, - auth=(ODL_LOGIN, ODL_PWD)) + + return requests.request( + "POST", url.format(RESTCONF_BASE_URL), + headers=TYPE_APPLICATION_JSON, + auth=(ODL_LOGIN, ODL_PWD)) def post_xmlrequest(url, data): @@ -163,6 +167,7 @@ def post_xmlrequest(url, data): data=data, headers=TYPE_APPLICATION_XML, auth=(ODL_LOGIN, ODL_PWD)) + return None def put_request(url, data): @@ -329,32 +334,34 @@ def get_service_list_request(suffix: str): def service_create_request(attr): return post_request(URL_SERV_CREATE, attr) -def service_delete_request(servicename : str, - requestid = "e3028bae-a90f-4ddd-a83f-cf224eba0e58", + +def service_delete_request(servicename: str, + requestid="e3028bae-a90f-4ddd-a83f-cf224eba0e58", notificationurl="http://localhost:8585/NotificationServer/notify"): attr = {"input": { - "sdnc-request-header": { - "request-id": requestid, - "rpc-action": "service-delete", - "request-system-id": "appname", - "notification-url": notificationurl}, - "service-delete-req-info": { - "service-name": servicename, - "tail-retention": "no"}}} + "sdnc-request-header": { + "request-id": requestid, + "rpc-action": "service-delete", + "request-system-id": "appname", + "notification-url": notificationurl}, + "service-delete-req-info": { + "service-name": servicename, + "tail-retention": "no"}}} return post_request(URL_SERV_DELETE, attr) def service_path_request(operation: str, servicename: str, wavenumber: str, nodes): attr = {"renderer:input": { - "renderer:service-name": servicename, - "renderer:wave-number": wavenumber, - "renderer:modulation-format": "qpsk", - "renderer:operation": operation, - "renderer:nodes": nodes}} + "renderer:service-name": servicename, + "renderer:wave-number": wavenumber, + "renderer:modulation-format": "qpsk", + "renderer:operation": operation, + "renderer:nodes": nodes}} return post_request(URL_SERVICE_PATH, attr) -def otn_service_path_request(operation: str, servicename: str, servicerate: str, servicetype: str, nodes, eth_attr=None): +def otn_service_path_request(operation: str, servicename: str, servicerate: str, servicetype: str, nodes, + eth_attr=None): attr = {"service-name": servicename, "operation": operation, "service-rate": servicerate, @@ -367,25 +374,26 @@ def otn_service_path_request(operation: str, servicename: str, servicerate: str, def create_ots_oms_request(nodeid: str, lcp: str): attr = {"input": { - "node-id": nodeid, - "logical-connection-point": lcp}} + "node-id": nodeid, + "logical-connection-point": lcp}} return post_request(URL_CREATE_OTS_OMS, attr) + def path_computation_request(requestid: str, servicename: str, serviceaend, servicezend, hardconstraints=None, softconstraints=None, metric="hop-count", other_attr=None): - attr = {"service-name": servicename, - "resource-reserve": "true", - "service-handler-header": { "request-id": requestid }, - "service-a-end": serviceaend, - "service-z-end": servicezend, - "pce-metric": metric} + attr = {"service-name": servicename, + "resource-reserve": "true", + "service-handler-header": {"request-id": requestid}, + "service-a-end": serviceaend, + "service-z-end": servicezend, + "pce-metric": metric} if hardconstraints: - attr.update({ "hard-constraints": hardconstraints}) + attr.update({"hard-constraints": hardconstraints}) if softconstraints: - attr.update({ "soft-constraints": softconstraints}) + attr.update({"soft-constraints": softconstraints}) if other_attr: attr.update(other_attr) - return post_request(URL_PATH_COMPUTATION_REQUEST, {"input": attr }) + return post_request(URL_PATH_COMPUTATION_REQUEST, {"input": attr}) def shutdown_process(process): @@ -402,9 +410,11 @@ def start_honeynode(log_file: str, node_port: str, node_config_file_name: str): return subprocess.Popen( [HONEYNODE_EXECUTABLE, node_port, os.path.join(SAMPLES_DIRECTORY, node_config_file_name)], stdout=outfile, stderr=outfile) + return None def wait_until_log_contains(log_file, regexp, time_to_wait=20): + # pylint: disable=lost-exception stringfound = False filefound = False line = None @@ -450,4 +460,5 @@ class TimeOut: signal.alarm(self.seconds) def __exit__(self, type, value, traceback): + # pylint: disable=W0622 signal.alarm(0) diff --git a/tox.ini b/tox.ini index 5e6b31a23..6df0e2fc1 100644 --- a/tox.ini +++ b/tox.ini @@ -37,7 +37,7 @@ commands = {py3,portmapping,topoPortMapping,flexgrid,rspn,topology,pce,olm,end2end,portmapping221,rspn221,otnrenderer,otnshrenderer,topology221,otntopology,olm221,tapi221,otnend2end,end2end221,gnpy}: - sh -c 'if [ "$USE_LIGHTY" = "True" ]; then (cd ../lighty && ./build.sh); fi' #run 1.2.1 functional tests {py3,portmapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_portmapping.py - {py3,topoPortMapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_topoPortMapping.py + {py3,topoPortMapping}: nosetests --with-xunit transportpce_tests/1.2.1/test_topo_portmapping.py {py3,topology}: nosetests --with-xunit transportpce_tests/1.2.1/test_topology.py {py3,rspn}: nosetests --with-xunit transportpce_tests/1.2.1/test_renderer_service_path_nominal.py {py3,pce}: nosetests --with-xunit transportpce_tests/1.2.1/test_pce.py @@ -85,4 +85,4 @@ basepython = python3 deps = pylint whitelist_externals = find commands = - find transportpce_tests/ -name *.py -exec pylint --max-line-length=120 --disable=missing-docstring --reports=y --score=y --output-format=colorized \{\} + + find transportpce_tests/ -name *.py -exec pylint --max-line-length=120 --disable=missing-docstring --method-rgx="(([a-z_][a-zA-Z0-9_]{2,})|(_[a-z0-9_]*)|(__[a-zA-Z][a-zA-Z0-9_]+__))$" --variable-rgx="[a-zA-Z_][a-zA-Z0-9_]{1,30}$" --reports=y --score=y --output-format=colorized \{\} +