From 3cb0866be6bc8b477849b6ad61e152e565254058 Mon Sep 17 00:00:00 2001 From: manuedelf Date: Fri, 18 Dec 2020 18:26:27 +0100 Subject: [PATCH] Update connection and interface name As now we allocate frequencies instead of wavelength, change connection and interface format name by replacing wavelength reference by lower spectral slot number and higher spectral slot number. For example: SRG1-PP1-TXRX-DEG1-TTP-TXRX-1 becomes SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768 XPDR1-NETWORK1-1 becomes XPDR1-NETWORK1-761:768 - add lower and higher spectral slot number in signature methods of crossconnect, olm, ModelMappinUtils, openroadminterface, openroadmfactory - add some log info - update ServicePathInput and ServicePowerSetup in MappingUtils with frequencies, spectral slot number and modulation format - add new map to get slot width from service rate and modulation format in GridConstant - add methods in GridUtils to get lower and higher spectal slot number from frequency - update unit tests to take into account the new format name - update functional tests to take into account the new format name JIRA: TRNSPRTPCE-230 Signed-off-by: manuedelf Change-Id: I98f62491f2720a84d4fdc8bd189b0a123ab5f0cf --- .../common/crossconnect/CrossConnect.java | 11 +- .../common/crossconnect/CrossConnectImpl.java | 18 ++- .../crossconnect/CrossConnectImpl121.java | 31 +++-- .../crossconnect/CrossConnectImpl221.java | 39 ++++-- .../common/fixedflex/GridConstant.java | 19 +++ .../common/fixedflex/GridUtils.java | 25 +++- .../crossconnect/CrossConnectImpl121Test.java | 4 +- .../crossconnect/CrossConnectImpl221Test.java | 4 +- .../crossconnect/CrossConnectImplTest.java | 7 +- .../common/fixedflex/GridUtilsTest.java | 7 +- .../transportpce/olm/power/PowerMgmtImpl.java | 30 +++-- .../olm/util/OlmPowerServiceRpcImplUtil.java | 33 +++-- .../renderer/ModelMappingUtils.java | 106 ++++++++++++++-- .../OpenRoadmInterface121.java | 26 ++-- .../OpenRoadmInterface221.java | 113 +++++++++++------- .../OpenRoadmInterfaceFactory.java | 43 ++++--- .../DeviceRendererServiceImpl.java | 83 ++++++++++--- .../OpenRoadMInterface221Test.java | 27 ++--- .../transportpce_tests/1.2.1/test_end2end.py | 48 ++++---- tests/transportpce_tests/1.2.1/test_olm.py | 65 +++++++--- .../test_renderer_service_path_nominal.py | 40 ++++--- .../transportpce_tests/2.2.1/test_end2end.py | 48 ++++---- .../2.2.1/test_flex_grid.py | 36 +++--- tests/transportpce_tests/2.2.1/test_olm.py | 52 +++++--- .../2.2.1/test_otn_end2end.py | 12 +- .../2.2.1/test_otn_renderer.py | 16 ++- .../2.2.1/test_otn_sh_renderer.py | 15 ++- .../test_renderer_service_path_nominal.py | 44 +++---- tests/transportpce_tests/common/test_utils.py | 15 ++- 29 files changed, 692 insertions(+), 325 deletions(-) diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java index 1618b2a71..71181a0e6 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnect.java @@ -41,9 +41,12 @@ public interface CrossConnect { * Name of source termination point. * @param destTp * Name of destination termination point. + * @param lowerSpectralSlotNumber Value of lower spectral slot number. + * @param higherSpectralSlotNumber Value of higher spectral slot number. * @return optional of connection number */ - Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp); + Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber); /** * This method does a delete(edit-config) on roadm connection subtree for a @@ -73,13 +76,15 @@ public interface CrossConnect { * Source logical connection point. * @param destTp * Destination logical connection point. - * + * @param lowerSpectralSlotNumber Value of lower spectral slot number. + * @param higherSpectralSlotNumber Value of higher spectral slot number. * @return list of Ports object type. * * @throws OpenRoadmInterfaceException * an exception at OpenRoadm interface. */ - List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp) + List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException; /** diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java index 5c3d905dc..b8dccd858 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java @@ -52,16 +52,19 @@ public class CrossConnectImpl implements CrossConnect { } - public Optional postCrossConnect(String nodeId, Long waveNumber, String srcTp, String destTp) { + public Optional postCrossConnect(String nodeId, Long waveNumber, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); LOG.info("Cross Connect post request received for node {} with version {}",nodeId,openRoadmVersion); if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { LOG.info("Device Version is 1.2.1"); - return crossConnectImpl121.postCrossConnect(nodeId, waveNumber, srcTp, destTp); + return crossConnectImpl121.postCrossConnect(nodeId, waveNumber, srcTp, destTp, + lowerSpectralSlotNumber, higherSpectralSlotNumber); } else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { LOG.info("Device Version is 2.2"); - return crossConnectImpl221.postCrossConnect(nodeId, waveNumber, srcTp, destTp); + return crossConnectImpl221.postCrossConnect(nodeId, srcTp, destTp, + lowerSpectralSlotNumber, higherSpectralSlotNumber); } LOG.info("Device Version not found"); return Optional.empty(); @@ -81,14 +84,17 @@ public class CrossConnectImpl implements CrossConnect { return null; } - public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp) + public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { String openRoadmVersion = mappingUtils.getOpenRoadmVersion(nodeId); if (OPENROADM_DEVICE_VERSION_1_2_1.equals(openRoadmVersion)) { - return crossConnectImpl121.getConnectionPortTrail(nodeId, waveNumber, srcTp, destTp); + return crossConnectImpl121.getConnectionPortTrail(nodeId, srcTp, destTp, + lowerSpectralSlotNumber, higherSpectralSlotNumber); } else if (OPENROADM_DEVICE_VERSION_2_2_1.equals(openRoadmVersion)) { - return crossConnectImpl221.getConnectionPortTrail(nodeId, waveNumber, srcTp, destTp); + return crossConnectImpl221 + .getConnectionPortTrail(nodeId, srcTp, destTp, lowerSpectralSlotNumber, higherSpectralSlotNumber); } return null; } diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java index 96b94f5c0..c84b75aad 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java @@ -23,6 +23,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm; @@ -57,14 +58,21 @@ public class CrossConnectImpl121 { Timeouts.DEVICE_READ_TIMEOUT_UNIT); } - public Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp) { + public Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(); - String connectionNumber = generateConnectionNumber(srcTp, destTp, waveNumber); + String connectionNumber = generateConnectionNumber(srcTp, destTp, spectralSlotName); rdmConnBldr.setConnectionNumber(connectionNumber); rdmConnBldr.setWavelengthNumber(Uint32.valueOf(waveNumber)); rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off); - rdmConnBldr.setSource(new SourceBuilder().setSrcIf(srcTp + "-" + waveNumber.toString()).build()); - rdmConnBldr.setDestination(new DestinationBuilder().setDstIf(destTp + "-" + waveNumber.toString()).build()); + rdmConnBldr.setSource(new SourceBuilder().setSrcIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + srcTp, spectralSlotName)).build()); + rdmConnBldr.setDestination(new DestinationBuilder() + .setDstIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, destTp, spectralSlotName)) + .build()); InstanceIdentifier rdmConnectionIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) .child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr.getConnectionNumber())); @@ -89,7 +97,8 @@ public class CrossConnectImpl121 { deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); try { commit.get(); - LOG.info("Roadm-connection successfully created: {}-{}-{}", srcTp, destTp, waveNumber); + LOG.info("Roadm-connection successfully created: {}-{}-{}-{}", srcTp, destTp, + lowerSpectralSlotNumber, higherSpectralSlotNumber); return Optional.of(connectionNumber); } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e); @@ -138,9 +147,11 @@ public class CrossConnectImpl121 { } - public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp) - throws OpenRoadmInterfaceException { - String connectionName = generateConnectionNumber(srcTp, destTp, waveNumber); + public List getConnectionPortTrail(String nodeId, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), String.valueOf(higherSpectralSlotNumber)); + String connectionName = generateConnectionNumber(srcTp, destTp, spectralSlotName); Optional mountPointOpt = deviceTransactionManager.getDeviceMountPoint(nodeId); List ports = null; MountPoint mountPoint; @@ -186,8 +197,8 @@ public class CrossConnectImpl121 { .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber)); } - private String generateConnectionNumber(String srcTp, String destTp, Long waveNumber) { - return srcTp + "-" + destTp + "-" + waveNumber; + private String generateConnectionNumber(String srcTp, String destTp, String spectralSlotName) { + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, srcTp, destTp, spectralSlotName); } public boolean setPowerLevel(String deviceId, OpticalControlMode mode, BigDecimal powerValue, String ctNumber) { diff --git a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java index 8b49e71c8..681b1f080 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java @@ -23,6 +23,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PowerDBm; @@ -69,14 +70,27 @@ public class CrossConnectImpl221 { Timeouts.DEVICE_READ_TIMEOUT_UNIT); } - public Optional postCrossConnect(String deviceId, Long waveNumber, String srcTp, String destTp) { - String connectionNumber = generateConnectionName(srcTp, destTp, waveNumber); + public Optional postCrossConnect(String deviceId, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); + String connectionNumber = generateConnectionName(srcTp, destTp, spectralSlotName); RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder() .setConnectionName(connectionNumber) .setOpticalControlMode(OpticalControlMode.Off) - .setSource(new SourceBuilder().setSrcIf(srcTp + "-nmc-" + waveNumber).build()) - .setDestination(new DestinationBuilder().setDstIf(destTp + "-nmc-" + waveNumber) - .build()); + .setSource(new SourceBuilder() + .setSrcIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + srcTp, + "nmc", + spectralSlotName)) + .build()) + .setDestination(new DestinationBuilder() + .setDstIf(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + destTp, + "nmc", + spectralSlotName)) + .build()); InstanceIdentifier rdmConnectionIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) @@ -103,7 +117,8 @@ public class CrossConnectImpl221 { deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); try { commit.get(); - LOG.info("Roadm-connection successfully created: {}-{}-{}", srcTp, destTp, waveNumber); + LOG.info("Roadm-connection successfully created: {}-{}-{}-{}", srcTp, destTp, lowerSpectralSlotNumber, + higherSpectralSlotNumber); return Optional.of(connectionNumber); } catch (InterruptedException | ExecutionException e) { LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e); @@ -164,9 +179,13 @@ public class CrossConnectImpl221 { } - public List getConnectionPortTrail(String nodeId, Long waveNumber, String srcTp, String destTp) + public List getConnectionPortTrail(String nodeId, String srcTp, String destTp, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { - String connectionName = generateConnectionName(srcTp, destTp, waveNumber); + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); + String connectionName = generateConnectionName(srcTp, destTp, spectralSlotName); Optional mountPointOpt = deviceTransactionManager.getDeviceMountPoint(nodeId); List ports = null; MountPoint mountPoint; @@ -266,8 +285,8 @@ public class CrossConnectImpl221 { new OduConnectionKey(connectionNumber)); } - private String generateConnectionName(String srcTp, String destTp, Long waveNumber) { - return srcTp + "-" + destTp + "-" + waveNumber; + private String generateConnectionName(String srcTp, String destTp, String spectralSlotName) { + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,srcTp, destTp, spectralSlotName); } public Optional postOtnCrossConnect(List createdOduInterfaces, Nodes node) { diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java index edf1d9808..677b09e68 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridConstant.java @@ -67,6 +67,16 @@ public final class GridConstant { WIDTH_40, SLOT_WIDTH_50, WIDTH_80, SLOT_WIDTH_87_5); + public static final int FREQUENCY_PRECISION = 4; + + /** + * Map to associate service rate and modulation format to frequency slot width. + */ + public static final Table FREQUENCY_SLOT_WIDTH_TABLE = + initFrequencySlotWidthTable(); + public static final String SPECTRAL_SLOT_SEPARATOR = ":"; + public static final String NAME_PARAMETERS_SEPARATOR = "-"; + private GridConstant() { } @@ -78,4 +88,13 @@ public final class GridConstant { frequencyWidthTable.put(ServiceRateConstant.RATE_400, ModulationFormat.DpQam16, String.valueOf(WIDTH_80)); return frequencyWidthTable; } + + private static Table initFrequencySlotWidthTable() { + Table frequencyWidthTable = HashBasedTable.create(); + frequencyWidthTable.put(ServiceRateConstant.RATE_100, ModulationFormat.DpQpsk, SLOT_WIDTH_50); + frequencyWidthTable.put(ServiceRateConstant.RATE_200, ModulationFormat.DpQpsk, SLOT_WIDTH_87_5); + frequencyWidthTable.put(ServiceRateConstant.RATE_300, ModulationFormat.DpQam8, SLOT_WIDTH_87_5); + frequencyWidthTable.put(ServiceRateConstant.RATE_400, ModulationFormat.DpQam16, SLOT_WIDTH_87_5); + return frequencyWidthTable; + } } diff --git a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java index 3e8bdafae..34695056e 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java @@ -131,10 +131,11 @@ public final class GridUtils { * @param precision int * @return central frequency in THz with precision */ - public static FrequencyTHz getCentralFrequencyWithPrecision(BigDecimal minFrequency, + public static org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz + getCentralFrequencyWithPrecision(BigDecimal minFrequency, BigDecimal maxFrequency, int precision) { - return new FrequencyTHz(computeCentralFrequency(minFrequency, maxFrequency) - .setScale(precision, RoundingMode.HALF_EVEN)); + return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz( + computeCentralFrequency(minFrequency, maxFrequency).setScale(precision, RoundingMode.HALF_EVEN)); } @@ -148,4 +149,22 @@ public final class GridUtils { return minFrequency.add(maxFrequency).divide(BigDecimal.valueOf(2)); } + /** + * Get the lower spectral index for the frequency. + * @param frequency BigDecimal + * @return the lower spectral index + */ + public static int getLowerSpectralIndexFromFrequency(BigDecimal frequency) { + return getIndexFromFrequency(frequency) + 1; + } + + /** + * Get the higher spectral index for the frequency. + * @param frequency BigDecimal + * @return the lower spectral index + */ + public static int getHigherSpectralIndexFromFrequency(BigDecimal frequency) { + return getIndexFromFrequency(frequency); + } + } diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java index ceed11266..62bef7301 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121Test.java @@ -76,8 +76,8 @@ public class CrossConnectImpl121Test { Mockito.when(rwTransactionMock.commit()).thenReturn(FluentFutures.immediateNullFluentFuture()); deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointServiceMock, 3000); crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager); - Optional res = crossConnectImpl121.postCrossConnect("deviceId", 100L, "srcTp", "destTp"); - Assert.assertEquals(res.get(), "srcTp-destTp-100"); + Optional res = crossConnectImpl121.postCrossConnect("deviceId", 100L, "srcTp", "destTp", 1, 8); + Assert.assertEquals(res.get(), "srcTp-destTp-1:8"); } // TODO : fix commit diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java index 4a462d2ab..8068be601 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221Test.java @@ -81,8 +81,8 @@ public class CrossConnectImpl221Test { Mockito.when(rwTransactionMock.commit()).thenReturn(FluentFutures.immediateNullFluentFuture()); deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointServiceMock, 3000); crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager); - Optional res = crossConnectImpl221.postCrossConnect("deviceId", 100L, "srcTp", "destTp"); - Assert.assertEquals(res.get(), "srcTp-destTp-100"); + Optional res = crossConnectImpl221.postCrossConnect("deviceId", "srcTp", "destTp", 1, 8); + Assert.assertEquals(res.get(), "srcTp-destTp-1:8"); } @Test(expected = NullPointerException.class) diff --git a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java index d9ce5feb0..f6ba7039b 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImplTest.java @@ -9,6 +9,7 @@ package org.opendaylight.transportpce.common.crossconnect; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -60,14 +61,14 @@ public class CrossConnectImplTest { @Test public void postCrossConnect() { - Optional res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp"); + Optional res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp", 1, 8); Assert.assertFalse("Optional object should be empty",res.isPresent()); String devV121 = "(http://org/openroadm/device?revision=2017-02-06)org-openroadm-device"; when(mappingUtils.getOpenRoadmVersion(any())).thenReturn(devV121); - when(crossConnectImpl121.postCrossConnect(any(), any(), any(), any())) + when(crossConnectImpl121.postCrossConnect(any(), any(), any(), any(), eq(1), eq(8))) .thenReturn(Optional.of("Value")); - res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp"); + res = crossConnectImpl.postCrossConnect("100", 100L, "srcTp", "destTp", 1, 8); Assert.assertTrue("Optional object should have a value",res.isPresent()); } diff --git a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java b/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java index 8f9f5f9ad..709ea040f 100644 --- a/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java +++ b/common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java @@ -63,6 +63,7 @@ public class GridUtilsTest { assertEquals("Index should be 767", 767, GridUtils.getIndexFromFrequency(BigDecimal.valueOf(196.11875))); assertEquals("Index should be 8", 8, GridUtils.getIndexFromFrequency(BigDecimal.valueOf(191.375))); assertEquals("Index should be 15", 15, GridUtils.getIndexFromFrequency(BigDecimal.valueOf(191.41875))); + assertEquals("Index should be 768", 768, GridUtils.getIndexFromFrequency(BigDecimal.valueOf(196.125))); } @Test(expected = IllegalArgumentException.class) @@ -99,7 +100,8 @@ public class GridUtilsTest { @Test public void getCentralFrequencyWithPrecisionTest() { assertEquals("Central frequency should be 191.3500", - new FrequencyTHz(BigDecimal.valueOf(191.35).setScale(4)), + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz( + BigDecimal.valueOf(191.35).setScale(4)), GridUtils.getCentralFrequencyWithPrecision(BigDecimal.valueOf(191.325), BigDecimal.valueOf(191.375), 4)); } @@ -107,7 +109,8 @@ public class GridUtilsTest { @Test public void getCentralFrequencyWithPrecisionAndRoundTest() { assertEquals("Central frequency should be 191.3499", - new FrequencyTHz(BigDecimal.valueOf(191.3499)), + new org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz( + BigDecimal.valueOf(191.3499)), GridUtils.getCentralFrequencyWithPrecision(BigDecimal.valueOf(191.3244445), BigDecimal.valueOf(191.3754457788), 4)); } diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtImpl.java index b80ce889b..d324bb067 100644 --- a/olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtImpl.java +++ b/olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtImpl.java @@ -62,7 +62,12 @@ public class PowerMgmtImpl implements PowerMgmt { //TODO Need to Case Optical Power mode/NodeType in case of 2.2 devices //@SuppressFBwarnings("DM_CONVERT_CASE") public Boolean setPower(ServicePowerSetupInput input) { - LOG.info("Olm-setPower initiated"); + LOG.info("Olm-setPower initiated for input {}", input); + int lowerSpectralSlotNumber = input.getLowerSpectralSlotNumber().intValue(); + int higherSpectralSlotNumber = input.getHigherSpectralSlotNumber().intValue(); + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); for (int i = 0; i < input.getNodes().size(); i++) { String nodeId = input.getNodes().get(i).getNodeId(); String srcTpId = input.getNodes().get(i).getSrcTp(); @@ -130,7 +135,8 @@ public class PowerMgmtImpl implements PowerMgmt { powerValue = rxSRGPowerRangeMap.get("MaxRx"); } LOG.info("Calculated Transponder Power value is {}" , powerValue); - String interfaceName = destTpId + "-" + input.getWaveNumber(); + String interfaceName = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + destTpId, spectralSlotName); if (callSetTransponderPower(nodeId, interfaceName, new BigDecimal(powerValue), openroadmVersion)) { LOG.info("Transponder OCH connection: {} power updated ", interfaceName); @@ -145,7 +151,8 @@ public class PowerMgmtImpl implements PowerMgmt { } } else { LOG.info("SRG Power Range not found, setting the Transponder range to default"); - String interfaceName = destTpId + "-" + input.getWaveNumber(); + String interfaceName = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + destTpId, spectralSlotName); if (callSetTransponderPower(nodeId, interfaceName, new BigDecimal(-5), openroadmVersion)) { LOG.info("Transponder OCH connection: {} power updated ", interfaceName); @@ -161,7 +168,8 @@ public class PowerMgmtImpl implements PowerMgmt { } } else { LOG.info("Tranponder range not available setting to default power for nodeId: {}", nodeId); - String interfaceName = destTpId + "-" + input.getWaveNumber(); + String interfaceName = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + destTpId, spectralSlotName); if (callSetTransponderPower(nodeId, interfaceName, new BigDecimal(-5),openroadmVersion)) { LOG.info("Transponder OCH connection: {} power updated ", interfaceName); try { @@ -188,7 +196,8 @@ public class PowerMgmtImpl implements PowerMgmt { Nodes inputNode = inputNodeOptional.get(); OpenroadmVersion openroadmVersion = inputNode.getNodeInfo().getOpenroadmVersion(); LOG.info("This is a roadm {} device", openroadmVersion.getName()); - String connectionNumber = srcTpId + "-" + destTpId + "-" + input.getWaveNumber(); + String connectionNumber = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,srcTpId, destTpId, + spectralSlotName); LOG.info("Connection number is {}", connectionNumber); if (destTpId.toLowerCase().contains("deg")) { Optional mappingObjectOptional = inputNode.nonnullMapping() @@ -328,15 +337,20 @@ public class PowerMgmtImpl implements PowerMgmt { * @return true/false based on status of operation */ public Boolean powerTurnDown(ServicePowerTurndownInput input) { - LOG.info("Olm-powerTurnDown initiated"); + LOG.info("Olm-powerTurnDown initiated for input {}", input); /*Starting with last element into the list Z -> A for turning down A -> Z */ + int lowerSpectralSlotNumber = input.getLowerSpectralSlotNumber().intValue(); + int higherSpectralSlotNumber = input.getHigherSpectralSlotNumber().intValue(); + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); for (int i = input.getNodes().size() - 1; i >= 0; i--) { String nodeId = input.getNodes().get(i).getNodeId(); String srcTpId = input.getNodes().get(i).getSrcTp(); String destTpId = input.getNodes().get(i).getDestTp(); - Long wlNumber = input.getWaveNumber().toJava(); - String connectionNumber = srcTpId + "-" + destTpId + "-" + wlNumber; + String connectionNumber = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,srcTpId, destTpId, + spectralSlotName); if (destTpId.toLowerCase().contains("srg")) { crossConnect.setPowerLevel(nodeId, OpticalControlMode.Off.getName(), null, connectionNumber); } else if (destTpId.toLowerCase().contains("deg")) { diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmPowerServiceRpcImplUtil.java b/olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmPowerServiceRpcImplUtil.java index 1ba97d186..091181e1c 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmPowerServiceRpcImplUtil.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmPowerServiceRpcImplUtil.java @@ -52,7 +52,10 @@ public final class OlmPowerServiceRpcImplUtil { nodes.add(node2); ServicePowerSetupInput input = new ServicePowerSetupInputBuilder().setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)) + .build(); return input; } @@ -64,7 +67,9 @@ public final class OlmPowerServiceRpcImplUtil { nodes.add(node2); ServicePowerSetupInput input = new ServicePowerSetupInputBuilder().setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -76,7 +81,9 @@ public final class OlmPowerServiceRpcImplUtil { nodes.add(node2); ServicePowerSetupInput input = new ServicePowerSetupInputBuilder().setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -88,7 +95,9 @@ public final class OlmPowerServiceRpcImplUtil { nodes.add(node2); ServicePowerSetupInput input = new ServicePowerSetupInputBuilder().setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -101,7 +110,9 @@ public final class OlmPowerServiceRpcImplUtil { ServicePowerTurndownInput input = new ServicePowerTurndownInputBuilder() .setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -115,7 +126,9 @@ public final class OlmPowerServiceRpcImplUtil { ServicePowerTurndownInput input = new ServicePowerTurndownInputBuilder() .setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -129,7 +142,9 @@ public final class OlmPowerServiceRpcImplUtil { ServicePowerTurndownInput input = new ServicePowerTurndownInputBuilder() .setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } @@ -143,7 +158,9 @@ public final class OlmPowerServiceRpcImplUtil { ServicePowerTurndownInput input = new ServicePowerTurndownInputBuilder() .setNodes(nodes) .setServiceName("service 1") - .setWaveNumber(Uint32.valueOf("1234")).build(); + .setWaveNumber(Uint32.valueOf("1")) + .setLowerSpectralSlotNumber(Uint32.valueOf(761)) + .setHigherSpectralSlotNumber(Uint32.valueOf(768)).build(); return input; } diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java index cb4fdcec9..7e98e42fb 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java @@ -12,9 +12,12 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.TreeMap; import org.opendaylight.transportpce.common.NodeIdPair; import org.opendaylight.transportpce.common.StringConstants; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; +import org.opendaylight.transportpce.common.fixedflex.GridUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.OtnServicePathInputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev200128.ServicePathInput; @@ -28,8 +31,13 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer. import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev201125.ServiceImplementationRequestOutputBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommon; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommonBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceDeleteInput; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.PathDescription; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.AToZDirection; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ZToADirection; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.atoz.direction.AToZ; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.path.description.ztoa.direction.ZToA; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev201126.pce.resource.resource.resource.TerminationPoint; @@ -53,13 +61,22 @@ public final class ModelMappingUtils { } public static ServicePowerSetupInput createServicePowerSetupInput(List olmList, - ServiceImplementationRequestInput input) { - ServicePowerSetupInputBuilder olmSetupBldr = new ServicePowerSetupInputBuilder() - .setNodes(olmList); + ServiceImplementationRequestInput input) { + ServicePowerSetupInputBuilder olmSetupBldr = new ServicePowerSetupInputBuilder().setNodes(olmList); if (input != null && input.getPathDescription() != null && input.getPathDescription().getAToZDirection() != null) { - olmSetupBldr.setWaveNumber( - input.getPathDescription().getAToZDirection().getAToZWavelengthNumber()); + AToZDirection atoZDirection = input.getPathDescription().getAToZDirection(); + olmSetupBldr.setWaveNumber(atoZDirection.getAToZWavelengthNumber()); + if (atoZDirection.getAToZMinFrequency() != null) { + olmSetupBldr.setLowerSpectralSlotNumber(Uint32 + .valueOf(GridUtils + .getLowerSpectralIndexFromFrequency(atoZDirection.getAToZMinFrequency().getValue()))); + } + if (atoZDirection.getAToZMaxFrequency() != null) { + olmSetupBldr.setHigherSpectralSlotNumber(Uint32 + .valueOf(GridUtils + .getHigherSpectralIndexFromFrequency(atoZDirection.getAToZMaxFrequency().getValue()))); + } } return olmSetupBldr.build(); } @@ -95,29 +112,94 @@ public final class ModelMappingUtils { public static ServicePathInputData rendererCreateServiceInputAToZ(String serviceName, PathDescription pathDescription) { - NodeLists nodeLists = getNodesListAToZ(pathDescription.getAToZDirection().nonnullAToZ().values().iterator()); + AToZDirection atoZDirection = pathDescription.getAToZDirection(); + LOG.info("Building ServicePathInputData for a to z direction {}", atoZDirection); + NodeLists nodeLists = getNodesListAToZ(atoZDirection.nonnullAToZ().values().iterator()); ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder() .setServiceName(serviceName) .setOperation(ServicePathInput.Operation.Create) - .setNodes(nodeLists.getList()); - if (pathDescription.getAToZDirection().getAToZWavelengthNumber() != null) { + .setNodes(nodeLists.getList()) + .setWidth(new FrequencyGHz(GridConstant.WIDTH_40)); + if (atoZDirection.getAToZWavelengthNumber() != null) { servicePathInputBuilder - .setWaveNumber(Uint32.valueOf(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava())); + .setWaveNumber(atoZDirection.getAToZWavelengthNumber()); + } + if (atoZDirection.getAToZMinFrequency() != null) { + servicePathInputBuilder.setMinFreq(new FrequencyTHz(atoZDirection.getAToZMinFrequency().getValue())); + servicePathInputBuilder.setLowerSpectralSlotNumber(Uint32 + .valueOf(GridUtils + .getLowerSpectralIndexFromFrequency(atoZDirection.getAToZMinFrequency().getValue()))); } + if (atoZDirection.getAToZMaxFrequency() != null) { + servicePathInputBuilder.setMaxFreq(new FrequencyTHz(atoZDirection.getAToZMaxFrequency().getValue())); + servicePathInputBuilder.setHigherSpectralSlotNumber( + Uint32.valueOf(GridUtils + .getHigherSpectralIndexFromFrequency(atoZDirection.getAToZMaxFrequency().getValue()))); + } + if (atoZDirection.getAToZMinFrequency() != null && atoZDirection.getAToZMaxFrequency() != null) { + servicePathInputBuilder.setCenterFreq( + GridUtils.getCentralFrequencyWithPrecision(atoZDirection.getAToZMinFrequency().getValue(), + atoZDirection.getAToZMaxFrequency().getValue(), GridConstant.FREQUENCY_PRECISION)); + } + if (atoZDirection.getRate() != null && atoZDirection.getModulationFormat() != null) { + Optional optionalModulationFormat = ModulationFormat + .forName(atoZDirection.getModulationFormat()); + if (optionalModulationFormat.isPresent() + && GridConstant.FREQUENCY_WIDTH_TABLE + .contains(atoZDirection.getRate(), optionalModulationFormat.get())) { + servicePathInputBuilder + .setWidth(FrequencyGHz + .getDefaultInstance(GridConstant.FREQUENCY_WIDTH_TABLE.get(atoZDirection.getRate(), + optionalModulationFormat.get()))); + } + } + servicePathInputBuilder.setModulationFormat(atoZDirection.getModulationFormat()); return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists); } public static ServicePathInputData rendererCreateServiceInputZToA(String serviceName, PathDescription pathDescription) { + ZToADirection ztoADirection = pathDescription.getZToADirection(); + LOG.info("Building ServicePathInputData for z to a direction {}", ztoADirection); NodeLists nodeLists = getNodesListZtoA(pathDescription.getZToADirection().nonnullZToA().values().iterator()); ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder() .setOperation(ServicePathInput.Operation.Create) .setServiceName(serviceName) - .setNodes(nodeLists.getList()); - if (pathDescription.getAToZDirection().getAToZWavelengthNumber() != null) { + .setNodes(nodeLists.getList()) + .setWidth(new FrequencyGHz(GridConstant.WIDTH_40)); + if (ztoADirection.getZToAWavelengthNumber() != null) { servicePathInputBuilder - .setWaveNumber(Uint32.valueOf(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava())); + .setWaveNumber(ztoADirection.getZToAWavelengthNumber()); + } + if (ztoADirection.getZToAMinFrequency() != null) { + servicePathInputBuilder.setMinFreq(new FrequencyTHz(ztoADirection.getZToAMinFrequency().getValue())); + servicePathInputBuilder.setLowerSpectralSlotNumber(Uint32 + .valueOf(GridUtils + .getLowerSpectralIndexFromFrequency(ztoADirection.getZToAMinFrequency().getValue()))); + } + if (ztoADirection.getZToAMaxFrequency() != null) { + servicePathInputBuilder.setMaxFreq(new FrequencyTHz(ztoADirection.getZToAMaxFrequency().getValue())); + servicePathInputBuilder.setHigherSpectralSlotNumber( + Uint32.valueOf(GridUtils + .getHigherSpectralIndexFromFrequency(ztoADirection.getZToAMaxFrequency().getValue()))); + } + if (ztoADirection.getZToAMinFrequency() != null && ztoADirection.getZToAMaxFrequency() != null) { + servicePathInputBuilder.setCenterFreq( + GridUtils.getCentralFrequencyWithPrecision(ztoADirection.getZToAMinFrequency().getValue(), + ztoADirection.getZToAMaxFrequency().getValue(), GridConstant.FREQUENCY_PRECISION)); + } + if (ztoADirection.getRate() != null && ztoADirection.getModulationFormat() != null) { + Optional optionalModulationFormat = ModulationFormat + .forName(ztoADirection.getModulationFormat()); + if (optionalModulationFormat.isPresent() + && GridConstant.FREQUENCY_WIDTH_TABLE + .contains(ztoADirection.getRate(), optionalModulationFormat.get())) { + servicePathInputBuilder.setWidth(FrequencyGHz + .getDefaultInstance(GridConstant.FREQUENCY_WIDTH_TABLE.get(ztoADirection.getRate(), + optionalModulationFormat.get()))); + } } + servicePathInputBuilder.setModulationFormat(ztoADirection.getModulationFormat()); return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists); } diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java index 0eb61f7b6..805fa64d8 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java @@ -16,6 +16,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; @@ -196,24 +197,28 @@ public class OpenRoadmInterface121 { * @param nodeId node ID * @param logicalConnPoint logical connection point * @param waveNumber wavelength number of the OCH interface. - * + * @param lowerSpectralSlotNumber int + * @param higherSpectralSlotNumber int * @return Name of the interface if successful, otherwise return null. * * @throws OpenRoadmInterfaceException OpenRoadm interface exception */ - public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber) + public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { - Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException(String.format( "Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber)); + createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); // OCH interface specific data OchBuilder ocIfBuilder = new OchBuilder().setWavelengthNumber(Uint32.valueOf(waveNumber)); @@ -237,14 +242,17 @@ public class OpenRoadmInterface121 { } public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format) throws OpenRoadmInterfaceException { + OchAttributes.ModulationFormat format, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) + throws OpenRoadmInterfaceException { Mapping portMap = this.portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException(String.format( "Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); // OCH interface specific data OchBuilder ocIfBuilder = new OchBuilder() .setWavelengthNumber(Uint32.valueOf(waveNumber)) @@ -259,7 +267,7 @@ public class OpenRoadmInterface121 { .interfaces.rev161014.Interface1Builder(); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber)); + createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); ochInterfaceBldr.addAugmentation(ochIf1Builder.setOch(ocIfBuilder.build()).build()); // Post interface on the device @@ -272,8 +280,8 @@ public class OpenRoadmInterface121 { return ochInterfaceBldr.getName(); } - public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, Long waveNumber) { - return logicalConnectionPoint + "-" + waveNumber; + public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotName) { + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName); } public String createOpenRoadmOmsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException { diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java index f86d2c556..3a712f9ca 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java @@ -67,6 +67,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + public class OpenRoadmInterface221 { private static final String MAPPING_ERROR_EXCEPTION_MESSAGE = "Unable to get mapping from PortMapping for node % and logical connection port %s"; @@ -113,8 +114,8 @@ public class OpenRoadmInterface221 { return ethInterfaceBldr.getName(); } - public List createFlexOCH(String nodeId, String logicalConnPoint, Long bitmapIndex, - BigDecimal centerFreq, BigDecimal width) + public List createFlexOCH(String nodeId, String logicalConnPoint, BigDecimal centerFreq, + BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { @@ -125,10 +126,12 @@ public class OpenRoadmInterface221 { List interfacesCreated = new ArrayList<>(); if (logicalConnPoint.contains("DEG")) { - String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, centerFreq, width, bitmapIndex); + String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, centerFreq, width, + lowerSpectralSlotNumber, higherSpectralSlotNumber); interfacesCreated.add(mcInterfaceCreated); } - String mcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, centerFreq, width, bitmapIndex); + String mcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, centerFreq, width, + lowerSpectralSlotNumber, higherSpectralSlotNumber); interfacesCreated.add(mcInterfaceCreated); return interfacesCreated; } @@ -140,13 +143,15 @@ public class OpenRoadmInterface221 { * @param nodeId node ID * @param logicalConnPoint logical connection point * @param waveNumber wavelength number of the OCH interface. - * + * @param lowerSpectralSlotNumber int + * @param higherSpectralSlotNumber int * @return Name of the interface if successful, otherwise return null. * * @throws OpenRoadmInterfaceException OpenRoadm interface exception */ - public List createFlexOCH(String nodeId, String logicalConnPoint, Long waveNumber) + public List createFlexOCH(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { @@ -157,16 +162,19 @@ public class OpenRoadmInterface221 { List interfacesCreated = new ArrayList<>(); if (logicalConnPoint.contains("DEG")) { - String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, waveNumber); + String mcInterfaceCreated = createMCInterface(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); interfacesCreated.add(mcInterfaceCreated); } - String nmcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, waveNumber); + String nmcInterfaceCreated = createNMCInterface(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); interfacesCreated.add(nmcInterfaceCreated); return interfacesCreated; } - public String createMCInterface(String nodeId, String logicalConnPoint, Long waveNumber) + public String createMCInterface(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { // TODO : Check this method @@ -180,9 +188,13 @@ public class OpenRoadmInterface221 { } // TODO : Check this method - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap, - MediaChannelTrailTerminationPoint.class, logicalConnPoint + "-mc" + "-" + waveNumber) + MediaChannelTrailTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + logicalConnPoint,"mc", + spectralSlotName)) .setSupportingInterface(portMap.getSupportingOms()); McTtpBuilder mcTtpBuilder = new McTtpBuilder() @@ -203,7 +215,7 @@ public class OpenRoadmInterface221 { } public String createMCInterface(String nodeId, String logicalConnPoint, - BigDecimal centerFrequency, BigDecimal width, Long bitmapIndex) + BigDecimal centerFrequency, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { // TODO : Check this method @@ -215,12 +227,15 @@ public class OpenRoadmInterface221 { throw new OpenRoadmInterfaceException( String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); } - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); // TODO : Check this method LOG.info("MC interface Freq Start {} and Freq End {} and center-Freq {}", flexGrid.getStart(), flexGrid.getStop(), centerFrequency); InterfaceBuilder mcInterfaceBldr = createGenericInterfaceBuilder(portMap, - MediaChannelTrailTerminationPoint.class, logicalConnPoint + "-mc" + "-" + bitmapIndex) + MediaChannelTrailTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + logicalConnPoint, "mc", spectralSlotName)) .setSupportingInterface(portMap.getSupportingOms()); McTtpBuilder mcTtpBuilder = new McTtpBuilder() @@ -240,7 +255,8 @@ public class OpenRoadmInterface221 { return mcInterfaceBldr.getName(); } - public String createNMCInterface(String nodeId, String logicalConnPoint, Long waveNumber) + public String createNMCInterface(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { // TODO : Check this method @@ -251,13 +267,18 @@ public class OpenRoadmInterface221 { throw new OpenRoadmInterfaceException( String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); } + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); LOG.info("Freq Start {} and Freq End {} and center-Freq {}", fixedFlex.getStart(), fixedFlex.getStop(), fixedFlex.getCenterFrequency()); //TODO : Check this method InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap, - NetworkMediaChannelConnectionTerminationPoint.class, logicalConnPoint + "-nmc" + "-" + waveNumber); + NetworkMediaChannelConnectionTerminationPoint.class, String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + logicalConnPoint, "nmc", spectralSlotName)); if (logicalConnPoint.contains("DEG")) { - nmcInterfaceBldr.setSupportingInterface(logicalConnPoint + "-mc" + "-" + waveNumber); + nmcInterfaceBldr.setSupportingInterface(String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, + logicalConnPoint, "mc", spectralSlotName)); } NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder() @@ -277,7 +298,7 @@ public class OpenRoadmInterface221 { } public String createNMCInterface(String nodeId, String logicalConnPoint, - BigDecimal centerFrequency, BigDecimal width, Long bitmapIndex) + BigDecimal centerFrequency, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { LOG.info("This is the central frequency {}", centerFrequency.floatValue()); LOG.info("This is the nmc width {}", width.floatValue()); @@ -287,12 +308,16 @@ public class OpenRoadmInterface221 { throw new OpenRoadmInterfaceException( String.format(MAPPING_ERROR_EXCEPTION_MESSAGE, nodeId, logicalConnPoint)); } - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); //TODO : Check this method + String nmcName = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnPoint, "nmc", + spectralSlotName); InterfaceBuilder nmcInterfaceBldr = createGenericInterfaceBuilder(portMap, - NetworkMediaChannelConnectionTerminationPoint.class, logicalConnPoint + "-nmc" + "-" + bitmapIndex); + NetworkMediaChannelConnectionTerminationPoint.class, nmcName); if (logicalConnPoint.contains("DEG")) { - nmcInterfaceBldr.setSupportingInterface(logicalConnPoint + "-mc" + "-" + bitmapIndex); + nmcInterfaceBldr.setSupportingInterface(nmcName); } NmcCtpBuilder nmcCtpIfBuilder = new NmcCtpBuilder() @@ -310,7 +335,8 @@ public class OpenRoadmInterface221 { return nmcInterfaceBldr.getName(); } - public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber) + public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { // TODO : Check this method @@ -329,10 +355,12 @@ public class OpenRoadmInterface221 { // TODO: Check if this the correct way to set modulation format here .setModulationFormat(ModulationFormat.DpQpsk) .setTransmitPower(new PowerDBm(new BigDecimal("-5"))); - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber)); + createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); // Create Interface1 type object required for adding as augmentation // TODO look at imports of different versions of class org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder @@ -352,39 +380,36 @@ public class OpenRoadmInterface221 { } public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, - Long waveNumber, BigDecimal centerFrequency, BigDecimal slotWidth) + BigDecimal centerFrequency, int lowerSpectralSlotNumber, int higherSpectralSlotNumber, String format) throws OpenRoadmInterfaceException { // TODO : Check this method - + if (centerFrequency == null) { + LOG.error("Center frequency cannot be null"); + throw new OpenRoadmInterfaceException("Center frequency cannot be null"); + } + ModulationFormat modulationFormat = ModulationFormat.DpQpsk; + Optional optionalModulationFormat = ModulationFormat.forName(format); + if (optionalModulationFormat.isPresent()) { + modulationFormat = optionalModulationFormat.get(); + } // OCH interface specific data OchBuilder ocIfBuilder = new OchBuilder() .setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency))) .setRate(R100G.class) .setTransmitPower(new PowerDBm(new BigDecimal("-5"))) - .setModulationFormat(ModulationFormat.DpQpsk); - - // In Flex-grid, slot-width could be other than 50 GHz - if ((centerFrequency != null) && (slotWidth != null)) { - ocIfBuilder.setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(centerFrequency))); - ocIfBuilder.setWidth(FrequencyGHz.getDefaultInstance(String.valueOf(slotWidth))); - } - else { - // Use fixed grid to find the - fixedFlex = fixedFlex.getFixedFlexWaveMapping(waveNumber.shortValue()); - ocIfBuilder.setFrequency(FrequencyTHz.getDefaultInstance(String.valueOf(fixedFlex.getCenterFrequency()))); - } + .setModulationFormat(modulationFormat); Mapping portMap = portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { throw new OpenRoadmInterfaceException( String.format("Unable to get mapping from PortMapping for node %s and logical connection port %s", nodeId, logicalConnPoint)); } - - - + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); // Create generic interface InterfaceBuilder ochInterfaceBldr = createGenericInterfaceBuilder(portMap, OpticalChannel.class, - createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber)); + createOpenRoadmOchInterfaceName(logicalConnPoint, spectralSlotName)); // Create Interface1 type object required for adding as augmentation // TODO look at imports of different versions of class org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.Interface1Builder @@ -553,8 +578,8 @@ public class OpenRoadmInterface221 { } - public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, Long waveNumber) { - return logicalConnectionPoint + "-" + waveNumber; + public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotName) { + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotName); } private InterfaceBuilder createGenericInterfaceBuilder(Mapping portMap, Class type, diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java index 6a69d90ea..8d3c3f606 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java @@ -12,6 +12,7 @@ import java.math.BigDecimal; import java.util.List; import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping; @@ -51,14 +52,15 @@ public class OpenRoadmInterfaceFactory { } public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - BigDecimal centerFreq, BigDecimal width) + BigDecimal centerFreq, BigDecimal width, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber); + return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, - centerFreq, width); + return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, centerFreq, + width, lowerSpectralSlotNumber, higherSpectralSlotNumber); default: return null; } @@ -71,43 +73,52 @@ public class OpenRoadmInterfaceFactory { * @param nodeId node ID * @param logicalConnPoint logical connection point * @param waveNumber wavelength number of the OCH interface. + * @param lowerSpectralSlotNumber int + * @param higherSpectralSlotNumber int * @return Name of the interface if successful, otherwise return null. * @throws OpenRoadmInterfaceException OpenRoadm interface exception */ - public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber) + public List createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber); + return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber); + return openRoadmInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); default: return null; } } public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format, BigDecimal centerFreq, BigDecimal width) + OchAttributes.ModulationFormat format, BigDecimal centerFreq, int lowerSpectralSlotNumber, + int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format); + return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format, + lowerSpectralSlotNumber, higherSpectralSlotNumber); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, - centerFreq, width); + return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, centerFreq, + lowerSpectralSlotNumber, higherSpectralSlotNumber, format.getName()); default: return null; } } public String createOpenRoadmOchInterface(String nodeId, String logicalConnPoint, Long waveNumber, - OchAttributes.ModulationFormat format) + OchAttributes.ModulationFormat format, int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format); + return openRoadmInterface121.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, format, + lowerSpectralSlotNumber, higherSpectralSlotNumber); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: - return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber); + return openRoadmInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, + lowerSpectralSlotNumber, higherSpectralSlotNumber); default: return null; } @@ -216,8 +227,8 @@ public class OpenRoadmInterfaceFactory { } } - public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, Long waveNumber) { - return logicalConnectionPoint + "-" + waveNumber; + public String createOpenRoadmOchInterfaceName(String logicalConnectionPoint, String spectralSlotNumber) { + return String.join(GridConstant.NAME_PARAMETERS_SEPARATOR,logicalConnectionPoint, spectralSlotNumber); } public String createOpenRoadmOmsInterface(String nodeId, Mapping mapping) throws OpenRoadmInterfaceException { diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java index d008e9260..87d59b34c 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java @@ -37,6 +37,7 @@ import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.crossconnect.CrossConnect; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; @@ -102,6 +103,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { @Override public ServicePathOutput setupServicePath(ServicePathInput input, ServicePathDirection direction) { + LOG.info("setup service path for input {} and direction {}", input, direction); List nodes = new ArrayList<>(); if (input.getNodes() != null) { nodes.addAll(input.getNodes()); @@ -131,8 +133,13 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { try { // if the node is currently mounted then proceed if (this.deviceTransactionManager.isDeviceMounted(nodeId)) { - // TODO: In the case of flex-grid, the wave-number becomes bitmap index - // TODO: need to update transportpce-common-types accordingly, to a more, generic-term + int lowerSpectralSlotNumber = input.getLowerSpectralSlotNumber().intValue(); + int higherSpectralSlotNumber = input.getHigherSpectralSlotNumber().intValue(); + ModulationFormat modulationFormat = ModulationFormat.DpQpsk; + if (input.getModulationFormat() != null + && ModulationFormat.forName(input.getModulationFormat()).isPresent()) { + modulationFormat = ModulationFormat.forName(input.getModulationFormat()).get(); + } Long waveNumber = input.getWaveNumber().toJava(); BigDecimal centerFreq = null; BigDecimal width = null; @@ -145,15 +152,22 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { String srcTp = node.getSrcTp(); String destTp = node.getDestTp(); if ((destTp != null) && destTp.contains(StringConstants.NETWORK_TOKEN)) { + LOG.info("Adding supporting OCH interface for node {}, dest tp {}, wave number {}," + + "center freq {}, slot width {}, lower spectral number {}," + + "higher spectral number {}", + nodeId, destTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, + higherSpectralSlotNumber); crossConnectFlag++; String supportingOchInterface; if ((centerFreq != null) && (width != null)) { supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, destTp, waveNumber, ModulationFormat.DpQpsk, centerFreq, width); + nodeId, destTp, waveNumber, modulationFormat, centerFreq, lowerSpectralSlotNumber, + higherSpectralSlotNumber); } else { supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, destTp, waveNumber, ModulationFormat.DpQpsk); + nodeId, destTp, waveNumber, modulationFormat, lowerSpectralSlotNumber, + higherSpectralSlotNumber); } createdOchInterfaces.add(supportingOchInterface); // Here we pass logical connection-point of z-end to set SAPI and DAPI @@ -177,22 +191,30 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } } if ((srcTp != null) && srcTp.contains(StringConstants.CLIENT_TOKEN)) { + LOG.info("Adding supporting EThernet interface for node {}, src tp {}", nodeId, srcTp); crossConnectFlag++; // create OpenRoadm Xponder Client Interfaces createdEthInterfaces.add( this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(nodeId, srcTp)); } if ((srcTp != null) && srcTp.contains(StringConstants.NETWORK_TOKEN)) { + LOG.info("Adding supporting OCH interface for node {}, src tp {}, wave number {}," + + "center freq {}, slot width {}, lower spectral number {}," + + "higher spectral number {}", + nodeId, srcTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, + higherSpectralSlotNumber); crossConnectFlag++; // create OpenRoadm Xponder Line Interfaces String supportingOchInterface; if ((centerFreq != null) && (width != null)) { supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, srcTp, waveNumber, ModulationFormat.DpQpsk, centerFreq, width); + nodeId, srcTp, waveNumber, modulationFormat, centerFreq, lowerSpectralSlotNumber, + higherSpectralSlotNumber); } else { supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface( - nodeId, srcTp, waveNumber, ModulationFormat.DpQpsk); + nodeId, srcTp, waveNumber,modulationFormat, lowerSpectralSlotNumber, + higherSpectralSlotNumber); } createdOchInterfaces.add(supportingOchInterface); String supportingOtuInterface = this.openRoadmInterfaceFactory @@ -212,6 +234,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } } if ((destTp != null) && destTp.contains(StringConstants.CLIENT_TOKEN)) { + LOG.info("Adding supporting EThernet interface for node {}, dest tp {}", nodeId, destTp); crossConnectFlag++; // create OpenRoadm Xponder Client Interfaces createdEthInterfaces.add( @@ -219,29 +242,42 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } if ((srcTp != null) && (srcTp.contains(StringConstants.TTP_TOKEN) || srcTp.contains(StringConstants.PP_TOKEN))) { + LOG.info("Adding supporting OCH interface for node {}, src tp {}, wave number {}," + + "center freq {}, slot width {}, lower spectral number {}," + + "higher spectral number {}", + nodeId, srcTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, + higherSpectralSlotNumber); if ((centerFreq != null) && (width != null)) { createdOchInterfaces.addAll( this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber, centerFreq, width)); + .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber, centerFreq, width, + lowerSpectralSlotNumber, higherSpectralSlotNumber)); } else { createdOchInterfaces.addAll( this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber)); + .createOpenRoadmOchInterface(nodeId, srcTp, waveNumber, lowerSpectralSlotNumber, + higherSpectralSlotNumber)); } } if ((destTp != null) && (destTp.contains(StringConstants.TTP_TOKEN) || destTp.contains(StringConstants.PP_TOKEN))) { - + LOG.info("Adding supporting OCH interface for node {}, dest tp {}, wave number {}," + + "center freq {}, slot width {}, lower spectral number {}," + + "higher spectral number {}", + nodeId, destTp, waveNumber, centerFreq, width, lowerSpectralSlotNumber, + higherSpectralSlotNumber); if ((centerFreq != null) && (width != null)) { createdOchInterfaces.addAll( this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, destTp, waveNumber, centerFreq, width)); + .createOpenRoadmOchInterface(nodeId, destTp, waveNumber, centerFreq, width, + lowerSpectralSlotNumber, higherSpectralSlotNumber)); } else { createdOchInterfaces.addAll( this.openRoadmInterfaceFactory - .createOpenRoadmOchInterface(nodeId, destTp, waveNumber)); + .createOpenRoadmOchInterface(nodeId, destTp, waveNumber, lowerSpectralSlotNumber, + higherSpectralSlotNumber)); } } @@ -249,7 +285,9 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { LOG.info("Creating cross connect between source {} and destination {} for node {}", srcTp, destTp, nodeId); Optional connectionNameOpt = - this.crossConnect.postCrossConnect(nodeId, waveNumber, srcTp, destTp); + this.crossConnect.postCrossConnect(nodeId, waveNumber, srcTp, destTp, + lowerSpectralSlotNumber, + higherSpectralSlotNumber); if (connectionNameOpt.isPresent()) { nodesProvisioned.add(nodeId); createdConnections.add(connectionNameOpt.get()); @@ -344,7 +382,9 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } // if the node is currently mounted then proceed. if (this.deviceTransactionManager.isDeviceMounted(nodeId)) { - interfacesToDelete.addAll(getInterfaces2delete(nodeId, srcTp, destTp, waveNumber)); + interfacesToDelete.addAll(getInterfaces2delete(nodeId, srcTp, destTp, waveNumber, + input.getLowerSpectralSlotNumber().intValue(), + input.getHigherSpectralSlotNumber().intValue())); } else { String result = nodeId + IS_NOT_MOUNTED_ON_THE_CONTROLLER; results.add(result); @@ -385,7 +425,11 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } private List getInterfaces2delete( - String nodeId, String srcTp, String destTp, Long waveNumber) { + String nodeId, String srcTp, String destTp, Long waveNumber, + int lowerSpectralSlotNumber, int higherSpectralSlotNumber) { + String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR, + String.valueOf(lowerSpectralSlotNumber), + String.valueOf(higherSpectralSlotNumber)); List interfacesToDelete = new LinkedList<>(); if (destTp.contains(StringConstants.NETWORK_TOKEN) || srcTp.contains(StringConstants.CLIENT_TOKEN) @@ -405,13 +449,15 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { } interfacesToDelete.add(destTp + "-OTU"); interfacesToDelete.add( - this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaceName(destTp, waveNumber)); + this.openRoadmInterfaceFactory + .createOpenRoadmOchInterfaceName(destTp,spectralSlotName)); } if (srcTp.contains(StringConstants.NETWORK_TOKEN)) { interfacesToDelete.add(srcTp + "-ODU"); interfacesToDelete.add(srcTp + "-OTU"); interfacesToDelete - .add(this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaceName(srcTp, waveNumber)); + .add(this.openRoadmInterfaceFactory + .createOpenRoadmOchInterfaceName(srcTp,spectralSlotName)); } if (srcTp.contains(StringConstants.CLIENT_TOKEN)) { interfacesToDelete.add(srcTp + "-ETHERNET"); @@ -420,9 +466,10 @@ public class DeviceRendererServiceImpl implements DeviceRendererService { interfacesToDelete.add(destTp + "-ETHERNET"); } } else { - String connectionNumber = srcTp + "-" + destTp + "-" + waveNumber; + String connectionNumber = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, srcTp, destTp, + spectralSlotName); List intToDelete = this.crossConnect.deleteCrossConnect(nodeId, connectionNumber, false); - connectionNumber = destTp + "-" + srcTp + "-" + waveNumber; + connectionNumber = String.join(GridConstant.NAME_PARAMETERS_SEPARATOR, destTp, srcTp, spectralSlotName); if (intToDelete != null) { for (String interf : intToDelete) { if (!this.openRoadmInterfaceFactory.isUsedByXc(nodeId, interf, connectionNumber, diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java index 7627857ce..bedee6307 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java @@ -64,10 +64,10 @@ public class OpenRoadMInterface221Test extends AbstractTest { Mockito.when(fixedFlex.getStart()).thenReturn(12d); Mockito.when(fixedFlex.getStop()).thenReturn(12d); Mockito.when(fixedFlex.getCenterFrequency()).thenReturn(12d); - Long waveNumber = 1000L; - Assert.assertNotNull(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber)); - Assert.assertEquals(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber), - Arrays.asList(logicalConnPoint + "-nmc-" + waveNumber)); + Long waveNumber = 1L; + Assert.assertNotNull(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, 761, 768)); + Assert.assertEquals(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, 761, 768), + Arrays.asList(logicalConnPoint + "-nmc-761:768")); } @Test @@ -79,10 +79,10 @@ public class OpenRoadMInterface221Test extends AbstractTest { Mockito.when(fixedFlex.getStart()).thenReturn(12d); Mockito.when(fixedFlex.getStop()).thenReturn(12d); Mockito.when(fixedFlex.getCenterFrequency()).thenReturn(12d); - Long waveNumber = 1000L; - Assert.assertNotNull(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber)); - Assert.assertEquals(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber), - Arrays.asList(logicalConnPoint + "-mc-" + waveNumber, logicalConnPoint + "-nmc-" + waveNumber)); + Long waveNumber = 1L; + Assert.assertNotNull(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, 761, 768)); + Assert.assertEquals(openRoadMInterface221.createFlexOCH(nodeId, logicalConnPoint, waveNumber, 761, 768), + Arrays.asList(logicalConnPoint + "-mc-" + waveNumber, logicalConnPoint + "-nmc-761:768")); } @Test @@ -93,9 +93,9 @@ public class OpenRoadMInterface221Test extends AbstractTest { .thenReturn(new MappingBuilder().setLogicalConnectionPoint(logicalConnPoint).build()); Mockito.when(fixedFlex.getCenterFrequency()).thenReturn(12d); Mockito.when(fixedFlex.getFixedFlexWaveMapping(Mockito.anyLong())).thenReturn(new FixedFlexImpl()); - Long waveNumber = 1000L; - Assert.assertEquals(openRoadMInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber), - logicalConnPoint + "-" + waveNumber); + Long waveNumber = 1L; + Assert.assertEquals(openRoadMInterface221.createOpenRoadmOchInterface(nodeId, logicalConnPoint, waveNumber, + 761, 768), logicalConnPoint + "-761:768"); } @Test @@ -115,9 +115,8 @@ public class OpenRoadMInterface221Test extends AbstractTest { public void testCreateOpenRoadmOchInterfaceName() { String logicalConnPoint = "logicalConnPoint"; - Long waveNumber = 1000L; - Assert.assertEquals(openRoadMInterface221.createOpenRoadmOchInterfaceName(logicalConnPoint, waveNumber), - logicalConnPoint + "-" + waveNumber); + Assert.assertEquals(openRoadMInterface221.createOpenRoadmOchInterfaceName(logicalConnPoint, "761:768"), + logicalConnPoint + "-761:768"); } diff --git a/tests/transportpce_tests/1.2.1/test_end2end.py b/tests/transportpce_tests/1.2.1/test_end2end.py index ce1191068..77f2eeac5 100644 --- a/tests/transportpce_tests/1.2.1/test_end2end.py +++ b/tests/transportpce_tests/1.2.1/test_end2end.py @@ -244,13 +244,13 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(2) def test_13_check_xc1_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1', + 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768', 'wavelength-number': 1, 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 @@ -258,21 +258,21 @@ class TransportPCEFulltesting(unittest.TestCase): res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-1'}, + {'src-if': 'SRG1-PP1-TXRX-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-1'}, + {'dst-if': 'DEG1-TTP-TXRX-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(5) def test_14_check_xc1_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1', + 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768', 'wavelength-number': 1, 'opticalControlMode': 'gainLoss', 'target-output-power': 2.0 @@ -280,10 +280,10 @@ class TransportPCEFulltesting(unittest.TestCase): res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-1'}, + {'src-if': 'SRG1-PP1-TXRX-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG2-TTP-TXRX-1'}, + {'dst-if': 'DEG2-TTP-TXRX-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(5) @@ -406,23 +406,23 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_24_check_xc2_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-2") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP2-TXRX-753:760") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-2', + 'connection-number': 'DEG1-TTP-TXRX-SRG1-PP2-TXRX-753:760', 'wavelength-number': 2, 'opticalControlMode': 'power' }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'DEG1-TTP-TXRX-2'}, + {'src-if': 'DEG1-TTP-TXRX-753:760'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'SRG1-PP2-TXRX-2'}, + {'dst-if': 'SRG1-PP2-TXRX-753:760'}, res['roadm-connections'][0]['destination']) def test_25_check_topo_XPDRA(self): @@ -655,13 +655,13 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_38_check_xc1_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1', + 'connection-number': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768', 'wavelength-number': 1, 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 @@ -669,21 +669,21 @@ class TransportPCEFulltesting(unittest.TestCase): res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-1'}, + {'src-if': 'SRG1-PP1-TXRX-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-1'}, + {'dst-if': 'DEG1-TTP-TXRX-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(7) def test_39_check_xc1_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1', + 'connection-number': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768', 'wavelength-number': 1, 'opticalControlMode': 'gainLoss', 'target-output-power': 2.0 @@ -691,10 +691,10 @@ class TransportPCEFulltesting(unittest.TestCase): res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-1'}, + {'src-if': 'SRG1-PP1-TXRX-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG2-TTP-TXRX-1'}, + {'dst-if': 'DEG2-TTP-TXRX-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(7) @@ -729,13 +729,13 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(2) def test_42_check_xc2_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-2") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP2-TXRX-DEG1-TTP-TXRX-753:760") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-2', + 'connection-number': 'SRG1-PP2-TXRX-DEG1-TTP-TXRX-753:760', 'wavelength-number': 2, 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 @@ -743,10 +743,10 @@ class TransportPCEFulltesting(unittest.TestCase): res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP2-TXRX-2'}, + {'src-if': 'SRG1-PP2-TXRX-753:760'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-2'}, + {'dst-if': 'DEG1-TTP-TXRX-753:760'}, res['roadm-connections'][0]['destination']) time.sleep(2) diff --git a/tests/transportpce_tests/1.2.1/test_olm.py b/tests/transportpce_tests/1.2.1/test_olm.py index f7155e8bc..b42c488f3 100644 --- a/tests/transportpce_tests/1.2.1/test_olm.py +++ b/tests/transportpce_tests/1.2.1/test_olm.py @@ -220,7 +220,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADMC01", "dest-tp": "SRG1-PP1-TXRX", "src-tp": "DEG2-TTP-TXRX"}, {"node-id": "XPDRC01", - "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}]) + "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -236,7 +238,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADMA01", "src-tp": "DEG1-TTP-TXRX", "dest-tp": "SRG1-PP1-TXRX"}, {"node-id": "XPDRA01", - "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}]) + "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -270,7 +274,13 @@ class TransportOlmTesting(unittest.TestCase): "src-tp": "XPDR1-NETWORK1", "node-id": "XPDRC01" } - ] + ], + "center-freq": 196.1, + "width": 40, + "min-freq": 196.075, + "max-freq": 196.125, + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) @@ -281,21 +291,21 @@ class TransportOlmTesting(unittest.TestCase): def test_20_get_interface_XPDRA_XPDR1_NETWORK1(self): response = test_utils.check_netconf_node_request( "XPDRA01", - "interface/XPDR1-NETWORK1-1/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK1-761:768/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(0, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) self.assertEqual(1, res['org-openroadm-optical-channel-interfaces:och']['wavelength-number']) def test_21_get_roadmconnection_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode']) self.assertEqual(-3.3, res['roadm-connections'][0]['target-output-power']) def test_22_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP1-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP1-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("power", res['roadm-connections'][0]['opticalControlMode']) @@ -327,7 +337,13 @@ class TransportOlmTesting(unittest.TestCase): "dest-tp": "XPDR1-CLIENT1", "node-id": "XPDRA01" } - ] + ], + "center-freq": 196.1, + "width": 40, + "min-freq": 196.075, + "max-freq": 196.125, + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) @@ -338,14 +354,14 @@ class TransportOlmTesting(unittest.TestCase): def test_24_get_interface_XPDRC_XPDR1_NETWORK1(self): response = test_utils.check_netconf_node_request( "XPDRC01", - "interface/XPDR1-NETWORK1-1/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK1-761:768/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(0, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) self.assertEqual(1, res['org-openroadm-optical-channel-interfaces:och']['wavelength-number']) def test_25_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode']) @@ -378,23 +394,30 @@ class TransportOlmTesting(unittest.TestCase): "src-tp": "XPDR1-NETWORK1", "node-id": "XPDRC01" } - ] + ], + "center-freq": 196.1, + "width": 40, + "min-freq": 196.075, + "max-freq": 196.125, + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) + print(response.json()) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Success', res["output"]["result"]) def test_27_get_roadmconnection_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode']) self.assertEqual(-60, res['roadm-connections'][0]['target-output-power']) def test_28_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP1-TXRX-1") + response = test_utils.check_netconf_node_request("ROADMC01", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP1-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode']) @@ -408,7 +431,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADMC01", "dest-tp": "SRG1-PP1-TXRX", "src-tp": "DEG2-TTP-TXRX"}, {"node-id": "XPDRC01", - "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}]) + "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) @@ -423,7 +448,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADMA01", "src-tp": "DEG1-TTP-TXRX", "dest-tp": "SRG1-PP1-TXRX"}, {"node-id": "XPDRA01", - "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}]) + "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) @@ -450,7 +477,9 @@ class TransportOlmTesting(unittest.TestCase): [{"node-id": "XPDRA01", "dest-tp": "XPDR1-NETWORK2", "src-tp": "XPDR1-CLIENT2"}, {"node-id": "ROADMA01", - "dest-tp": "DEG1-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}]) + "dest-tp": "DEG1-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}], + 196.05, 40, 196.025, 196.075, 753, + 760) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -460,7 +489,7 @@ class TransportOlmTesting(unittest.TestCase): def test_34_get_interface_XPDRA_XPDR1_NETWORK2(self): response = test_utils.check_netconf_node_request( "XPDRA01", - "interface/XPDR1-NETWORK2-2/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK2-753:760/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(-5, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) @@ -471,7 +500,9 @@ class TransportOlmTesting(unittest.TestCase): [{"node-id": "XPDRA01", "dest-tp": "XPDR1-NETWORK2", "src-tp": "XPDR1-CLIENT2"}, {"node-id": "ROADMA01", - "dest-tp": "DEG1-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}]) + "dest-tp": "DEG1-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) 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 24b24230d..b57f57874 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 @@ -84,19 +84,22 @@ class TransportPCERendererTesting(unittest.TestCase): "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDRA01", "renderer:src-tp": "XPDR1-CLIENT1", - "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:dest-tp": "XPDR1-NETWORK1"}], + 195.8, 40, 195.775, 195.825, 713, + 720) + print(response.json()) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes: ROADMA01', res["output"]["result"]) def test_06_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'DEG1-TTP-TXRX-7', + 'name': 'DEG1-TTP-TXRX-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '2/0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -109,13 +112,13 @@ class TransportPCERendererTesting(unittest.TestCase): res['interface'][0]['org-openroadm-optical-channel-interfaces:och']) def test_07_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7") + response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'SRG1-PP7-TXRX-7', + 'name': 'SRG1-PP7-TXRX-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '4/0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -128,33 +131,34 @@ class TransportPCERendererTesting(unittest.TestCase): res['interface'][0]['org-openroadm-optical-channel-interfaces:och']) def test_08_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request( + "ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-number': 'SRG1-PP7-TXRX-DEG1-TTP-TXRX-7', + 'connection-number': 'SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720', 'wavelength-number': 7, 'opticalControlMode': 'off' }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP7-TXRX-7'}, + {'src-if': 'SRG1-PP7-TXRX-713:720'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-7'}, + {'dst-if': 'DEG1-TTP-TXRX-713:720'}, res['roadm-connections'][0]['destination']) def test_09_service_path_create_xpdr_check(self): - response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7") + response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'XPDR1-NETWORK1-7', + 'name': 'XPDR1-NETWORK1-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -181,7 +185,7 @@ class TransportPCERendererTesting(unittest.TestCase): 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': '1', - 'supporting-interface': 'XPDR1-NETWORK1-7' + 'supporting-interface': 'XPDR1-NETWORK1-713:720' }, **res['interface'][0]), res['interface'][0] ) @@ -252,13 +256,15 @@ class TransportPCERendererTesting(unittest.TestCase): "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDRA01", "renderer:src-tp": "XPDR1-CLIENT1", - "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:dest-tp": "XPDR1-NETWORK1"}], + 195.8, 40, 195.775, 195.825, 713, + 720) self.assertEqual(response.status_code, requests.codes.ok) self.assertEqual(response.json(), { 'output': {'result': 'Request processed', 'success': True}}) def test_15_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request("ROADMA01", "interface/DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -267,7 +273,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_16_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-7") + response = test_utils.check_netconf_node_request("ROADMA01", "interface/SRG1-PP7-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -277,7 +283,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_17_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request("ROADMA01", "roadm-connections/SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -287,7 +293,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_18_service_path_delete_xpdr_check(self): - response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-7") + response = test_utils.check_netconf_node_request("XPDRA01", "interface/XPDR1-NETWORK1-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( diff --git a/tests/transportpce_tests/2.2.1/test_end2end.py b/tests/transportpce_tests/2.2.1/test_end2end.py index 859d3e92a..66a75089b 100644 --- a/tests/transportpce_tests/2.2.1/test_end2end.py +++ b/tests/transportpce_tests/2.2.1/test_end2end.py @@ -229,44 +229,44 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(2) def test_13_check_xc1_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1', + 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768', 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-nmc-1'}, + {'src-if': 'SRG1-PP1-TXRX-nmc-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG2-TTP-TXRX-nmc-1'}, + {'dst-if': 'DEG2-TTP-TXRX-nmc-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(5) def test_14_check_xc1_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1', + 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768', 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-nmc-1'}, + {'src-if': 'SRG1-PP1-TXRX-nmc-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-nmc-1'}, + {'dst-if': 'DEG1-TTP-TXRX-nmc-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(5) @@ -384,22 +384,22 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_24_check_xc2_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP2-TXRX-2") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/DEG2-TTP-TXRX-SRG1-PP2-TXRX-753:760") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'DEG2-TTP-TXRX-SRG1-PP2-TXRX-2', + 'connection-name': 'DEG2-TTP-TXRX-SRG1-PP2-TXRX-753:760', 'opticalControlMode': 'power' }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'DEG2-TTP-TXRX-nmc-2'}, + {'src-if': 'DEG2-TTP-TXRX-nmc-753:760'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'SRG1-PP2-TXRX-nmc-2'}, + {'dst-if': 'SRG1-PP2-TXRX-nmc-753:760'}, res['roadm-connections'][0]['destination']) def test_25_check_topo_XPDRA(self): @@ -614,44 +614,44 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_38_check_xc1_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-1', + 'connection-name': 'SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768', 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-nmc-1'}, + {'src-if': 'SRG1-PP1-TXRX-nmc-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG2-TTP-TXRX-nmc-1'}, + {'dst-if': 'DEG2-TTP-TXRX-nmc-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(7) def test_39_check_xc1_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-1', + 'connection-name': 'SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768', 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP1-TXRX-nmc-1'}, + {'src-if': 'SRG1-PP1-TXRX-nmc-761:768'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-nmc-1'}, + {'dst-if': 'DEG1-TTP-TXRX-nmc-761:768'}, res['roadm-connections'][0]['destination']) time.sleep(7) @@ -685,23 +685,23 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(2) def test_42_check_xc2_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP2-TXRX-DEG2-TTP-TXRX-2") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP2-TXRX-DEG2-TTP-TXRX-753:760") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP2-TXRX-DEG2-TTP-TXRX-2', + 'connection-name': 'SRG1-PP2-TXRX-DEG2-TTP-TXRX-753:760', 'opticalControlMode': 'gainLoss', 'target-output-power': -3.0 }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP2-TXRX-nmc-2'}, + {'src-if': 'SRG1-PP2-TXRX-nmc-753:760'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG2-TTP-TXRX-nmc-2'}, + {'dst-if': 'DEG2-TTP-TXRX-nmc-753:760'}, res['roadm-connections'][0]['destination']) time.sleep(2) diff --git a/tests/transportpce_tests/2.2.1/test_flex_grid.py b/tests/transportpce_tests/2.2.1/test_flex_grid.py index e0c5872bd..e112663b6 100644 --- a/tests/transportpce_tests/2.2.1/test_flex_grid.py +++ b/tests/transportpce_tests/2.2.1/test_flex_grid.py @@ -126,7 +126,11 @@ class TransportPCEPortMappingTesting(unittest.TestCase): "transportpce-device-renderer:src-tp": "SRG1-PP1-TXRX", "transportpce-device-renderer:dest-tp": "DEG1-TTP-TXRX" } - ] + ], + "transportpce-device-renderer:min-freq": 196.95625, + "transportpce-device-renderer:max-freq": 196.04375, + "transportpce-device-renderer:lower-spectral-slot-number": 741, + "transportpce-device-renderer:higher-spectral-slot-number": 754 } } url = test_utils.RESTCONF_BASE_URL + \ @@ -141,11 +145,11 @@ class TransportPCEPortMappingTesting(unittest.TestCase): # Get Degree MC interface and check def test_08_degree_mc_interface(self): response = test_utils.check_netconf_node_request("ROADM-D1", - "interface/DEG1-TTP-TXRX-mc-2") + "interface/DEG1-TTP-TXRX-mc-741:754") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertDictEqual( - dict({"name": "DEG1-TTP-TXRX-mc-2", + dict({"name": "DEG1-TTP-TXRX-mc-741:754", "supporting-interface": "OMS-DEG1-TTP-TXRX", "supporting-circuit-pack-name": "1/0", "circuit-id": "TBD", @@ -166,12 +170,12 @@ class TransportPCEPortMappingTesting(unittest.TestCase): # get DEG-NMC interface and check def test_09_degree_nmc_interface(self): response = test_utils.check_netconf_node_request("ROADM-D1", - "interface/DEG1-TTP-TXRX-nmc-2") + "interface/DEG1-TTP-TXRX-nmc-741:754") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertDictEqual( - dict({"name": "DEG1-TTP-TXRX-nmc-2", - "supporting-interface": "DEG1-TTP-TXRX-mc-2", + dict({"name": "DEG1-TTP-TXRX-nmc-741:754", + "supporting-interface": "DEG1-TTP-TXRX-mc-741:754", "supporting-circuit-pack-name": "1/0", "circuit-id": "TBD", "description": "TBD", @@ -191,11 +195,11 @@ class TransportPCEPortMappingTesting(unittest.TestCase): # get SRG-NMC interface def test_10_srg_nmc_interface(self): response = test_utils.check_netconf_node_request("ROADM-D1", - "interface/SRG1-PP1-TXRX-nmc-2") + "interface/SRG1-PP1-TXRX-nmc-741:754") res = response.json() self.assertEqual(response.status_code, requests.codes.ok) self.assertEqual( - dict({"name": "SRG1-PP1-TXRX-nmc-2", + dict({"name": "SRG1-PP1-TXRX-nmc-741:754", "supporting-circuit-pack-name": "3/0", "circuit-id": "TBD", "description": "TBD", @@ -209,14 +213,14 @@ class TransportPCEPortMappingTesting(unittest.TestCase): # Create ROADM-connection def test_11_roadm_connection(self): response = test_utils.check_netconf_node_request("ROADM-D1", - "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-2") + "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-741:754") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() - self.assertEqual("SRG1-PP1-TXRX-DEG1-TTP-TXRX-2", + self.assertEqual("SRG1-PP1-TXRX-DEG1-TTP-TXRX-741:754", res['roadm-connections'][0]['connection-name']) - self.assertEqual("SRG1-PP1-TXRX-nmc-2", + self.assertEqual("SRG1-PP1-TXRX-nmc-741:754", res['roadm-connections'][0]['source']['src-if']) - self.assertEqual("DEG1-TTP-TXRX-nmc-2", + self.assertEqual("DEG1-TTP-TXRX-nmc-741:754", res['roadm-connections'][0]['destination']['dst-if']) time.sleep(3) @@ -227,7 +231,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO + "node/ROADM-D1/yang-ext:mount/" + "org-openroadm-device:org-openroadm-device/" + - "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-2") + "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-741:754") self.assertEqual(response.status_code, requests.codes.ok) time.sleep(3) @@ -236,7 +240,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO + "node/ROADM-D1/yang-ext:mount/" + "org-openroadm-device:org-openroadm-device/" + - "interface/SRG1-PP1-TXRX-nmc-2") + "interface/SRG1-PP1-TXRX-nmc-741:754") self.assertEqual(response.status_code, requests.codes.ok) time.sleep(3) @@ -245,7 +249,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO + "node/ROADM-D1/yang-ext:mount/" + "org-openroadm-device:org-openroadm-device/" + - "interface/DEG1-TTP-TXRX-nmc-2") + "interface/DEG1-TTP-TXRX-nmc-741:754") self.assertEqual(response.status_code, requests.codes.ok) time.sleep(3) @@ -254,7 +258,7 @@ class TransportPCEPortMappingTesting(unittest.TestCase): response = test_utils.delete_request(test_utils.URL_CONFIG_NETCONF_TOPO + "node/ROADM-D1/yang-ext:mount/" + "org-openroadm-device:org-openroadm-device/" + - "interface/DEG1-TTP-TXRX-mc-2") + "interface/DEG1-TTP-TXRX-mc-741:754") self.assertEqual(response.status_code, requests.codes.ok) time.sleep(3) diff --git a/tests/transportpce_tests/2.2.1/test_olm.py b/tests/transportpce_tests/2.2.1/test_olm.py index 4a5e97b48..53823dd75 100644 --- a/tests/transportpce_tests/2.2.1/test_olm.py +++ b/tests/transportpce_tests/2.2.1/test_olm.py @@ -221,7 +221,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADM-C1", "dest-tp": "SRG1-PP1-TXRX", "src-tp": "DEG1-TTP-TXRX"}, {"node-id": "XPDR-C1", - "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}]) + "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -237,7 +239,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADM-A1", "src-tp": "DEG2-TTP-TXRX", "dest-tp": "SRG1-PP1-TXRX"}, {"node-id": "XPDR-A1", - "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}]) + "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -271,7 +275,9 @@ class TransportOlmTesting(unittest.TestCase): "src-tp": "XPDR1-NETWORK1", "node-id": "XPDR-C1" } - ] + ], + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) @@ -282,21 +288,21 @@ class TransportOlmTesting(unittest.TestCase): def test_20_get_interface_XPDRA_XPDR1_NETWORK1(self): response = test_utils.check_netconf_node_request( "XPDR-A1", - "interface/XPDR1-NETWORK1-1/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK1-761:768/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(-5, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) self.assertEqual(196.1, res['org-openroadm-optical-channel-interfaces:och']['frequency']) def test_21_get_roadmconnection_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode']) self.assertEqual(2.0, res['roadm-connections'][0]['target-output-power']) def test_22_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP1-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP1-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("power", res['roadm-connections'][0]['opticalControlMode']) @@ -328,7 +334,9 @@ class TransportOlmTesting(unittest.TestCase): "dest-tp": "XPDR1-CLIENT1", "node-id": "XPDR-A1" } - ] + ], + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) @@ -339,14 +347,14 @@ class TransportOlmTesting(unittest.TestCase): def test_24_get_interface_XPDRC_XPDR1_NETWORK1(self): response = test_utils.check_netconf_node_request( "XPDR-C1", - "interface/XPDR1-NETWORK1-1/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK1-761:768/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(-5, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) self.assertEqual(196.1, res['org-openroadm-optical-channel-interfaces:och']['frequency']) def test_25_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/SRG1-PP1-TXRX-DEG1-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("gainLoss", res['roadm-connections'][0]['opticalControlMode']) @@ -379,7 +387,9 @@ class TransportOlmTesting(unittest.TestCase): "src-tp": "XPDR1-NETWORK1", "node-id": "XPDR-C1" } - ] + ], + "lower-spectral-slot-number": 761, + "higher-spectral-slot-number": 768 } } response = test_utils.post_request(url, data) @@ -388,14 +398,14 @@ class TransportOlmTesting(unittest.TestCase): self.assertIn('Success', res["output"]["result"]) def test_27_get_roadmconnection_ROADMA(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP1-TXRX-DEG2-TTP-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode']) self.assertEqual(-60, res['roadm-connections'][0]['target-output-power']) def test_28_get_roadmconnection_ROADMC(self): - response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP1-TXRX-1") + response = test_utils.check_netconf_node_request("ROADM-C1", "roadm-connections/DEG1-TTP-TXRX-SRG1-PP1-TXRX-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual("off", res['roadm-connections'][0]['opticalControlMode']) @@ -409,7 +419,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADM-C1", "dest-tp": "SRG1-PP1-TXRX", "src-tp": "DEG1-TTP-TXRX"}, {"node-id": "XPDR-C1", - "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}]) + "dest-tp": "XPDR1-CLIENT1", "src-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) @@ -424,7 +436,9 @@ class TransportOlmTesting(unittest.TestCase): {"node-id": "ROADM-A1", "src-tp": "DEG2-TTP-TXRX", "dest-tp": "SRG1-PP1-TXRX"}, {"node-id": "XPDR-A1", - "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}]) + "src-tp": "XPDR1-NETWORK1", "dest-tp": "XPDR1-CLIENT1"}], + 196.053125, 40, 196.025, 196.08125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) @@ -451,7 +465,9 @@ class TransportOlmTesting(unittest.TestCase): [{"node-id": "XPDR-A1", "dest-tp": "XPDR1-NETWORK2", "src-tp": "XPDR1-CLIENT2"}, {"node-id": "ROADM-A1", - "dest-tp": "DEG2-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}]) + "dest-tp": "DEG2-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}], + 196.1, 40, 196.075, 196.125, 753, + 760) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes', res["output"]["result"]) @@ -461,7 +477,7 @@ class TransportOlmTesting(unittest.TestCase): def test_34_get_interface_XPDRA_XPDR1_NETWORK2(self): response = test_utils.check_netconf_node_request( "XPDR-A1", - "interface/XPDR1-NETWORK2-2/org-openroadm-optical-channel-interfaces:och") + "interface/XPDR1-NETWORK2-753:760/org-openroadm-optical-channel-interfaces:och") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertEqual(-5, res['org-openroadm-optical-channel-interfaces:och']['transmit-power']) @@ -472,7 +488,9 @@ class TransportOlmTesting(unittest.TestCase): [{"node-id": "XPDR-A1", "dest-tp": "XPDR1-NETWORK2", "src-tp": "XPDR1-CLIENT2"}, {"node-id": "ROADM-A1", - "dest-tp": "DEG2-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}]) + "dest-tp": "DEG2-TTP-TXRX", "src-tp": "SRG1-PP2-TXRX"}], + 196.053125, 40, 196.025, 196.08125, 761, + 768) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Request processed', res["output"]["result"]) 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 7b0a5db01..1803908f9 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_end2end.py +++ b/tests/transportpce_tests/2.2.1/test_otn_end2end.py @@ -265,10 +265,10 @@ class TransportPCEtesting(unittest.TestCase): # Check correct configuration of devices def test_14_check_interface_och_spdra(self): response = test_utils.check_netconf_node_request( - "SPDR-SA1", "interface/XPDR1-NETWORK1-1") + "SPDR-SA1", "interface/XPDR1-NETWORK1-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() - self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-1', + self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-761:768', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -289,7 +289,7 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'name': 'XPDR1-NETWORK1-OTU', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', - 'supporting-interface': 'XPDR1-NETWORK1-1', + 'supporting-interface': 'XPDR1-NETWORK1-761:768', 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': 'CP1-CFP0-P1' } @@ -307,10 +307,10 @@ class TransportPCEtesting(unittest.TestCase): def test_16_check_interface_och_spdrc(self): response = test_utils.check_netconf_node_request( - "SPDR-SC1", "interface/XPDR1-NETWORK1-1") + "SPDR-SC1", "interface/XPDR1-NETWORK1-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() - self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-1', + self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-761:768', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -331,7 +331,7 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'name': 'XPDR1-NETWORK1-OTU', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', - 'supporting-interface': 'XPDR1-NETWORK1-1', + 'supporting-interface': 'XPDR1-NETWORK1-761:768', 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': 'CP1-CFP0-P1' } 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 b8fd458ac..20356b297 100644 --- a/tests/transportpce_tests/2.2.1/test_otn_renderer.py +++ b/tests/transportpce_tests/2.2.1/test_otn_renderer.py @@ -82,7 +82,9 @@ class TransportPCEtesting(unittest.TestCase): def test_04_service_path_create_OCH_OTU4(self): response = test_utils.service_path_request("create", "service_OCH_OTU4", "1", - [{"node-id": "SPDR-SA1", "dest-tp": "XPDR1-NETWORK1"}]) + [{"node-id": "SPDR-SA1", "dest-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) time.sleep(3) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -91,7 +93,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertIn( {'node-id': 'SPDR-SA1', 'otu-interface-id': ['XPDR1-NETWORK1-OTU'], - 'och-interface-id': ['XPDR1-NETWORK1-1']}, res["output"]['node-interface']) + 'och-interface-id': ['XPDR1-NETWORK1-761:768']}, res["output"]['node-interface']) def test_05_get_portmapping_NETWORK1(self): response = test_utils.portmapping_request("SPDR-SA1/mapping/XPDR1-NETWORK1") @@ -111,11 +113,11 @@ class TransportPCEtesting(unittest.TestCase): res['mapping']) def test_06_check_interface_och(self): - response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-1") + response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() - self.assertDictEqual(dict(res['interface'][0], **{'name': 'XPDR1-NETWORK1-1', + self.assertDictEqual(dict(res['interface'][0], **{'name': 'XPDR1-NETWORK1-761:768', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -135,7 +137,7 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'name': 'XPDR1-NETWORK1-OTU', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', - 'supporting-interface': 'XPDR1-NETWORK1-1', + 'supporting-interface': 'XPDR1-NETWORK1-761:768', 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': 'CP1-CFP0-P1' } @@ -365,7 +367,9 @@ class TransportPCEtesting(unittest.TestCase): def test_23_service_path_delete_OCH_OTU4(self): response = test_utils.service_path_request("delete", "service_OCH_OTU4", "1", - [{"node-id": "SPDR-SA1", "dest-tp": "XPDR1-NETWORK1"}]) + [{"node-id": "SPDR-SA1", "dest-tp": "XPDR1-NETWORK1"}], + 196.1, 40, 196.075, 196.125, 761, + 768) 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 26054626b..4b047e2da 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 @@ -119,7 +119,9 @@ class TransportPCEtesting(unittest.TestCase): "tp-id": "" } } - ] + ], + "transportpce-renderer:aToZ-min-frequency": 196.075, + "transportpce-renderer:aToZ-max-frequency": 196.125 }, "transportpce-renderer:zToA-direction": { "transportpce-renderer:zToA-wavelength-number": "1", @@ -154,13 +156,16 @@ class TransportPCEtesting(unittest.TestCase): "tp-id": "" } } - ] + ], + "transportpce-renderer:zToA-min-frequency": 196.075, + "transportpce-renderer:zToA-max-frequency": 196.125 } } } } response = test_utils.post_request(url, data) time.sleep(3) + print(response.json()) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Operation Successful', @@ -168,10 +173,10 @@ class TransportPCEtesting(unittest.TestCase): # Test OCH-OTU interfaces on SPDR-A1 def test_04_check_interface_och(self): - response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-1") + response = test_utils.check_netconf_node_request("SPDR-SA1", "interface/XPDR1-NETWORK1-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() - self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-1', + self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-761:768', 'administrative-state': 'inService', 'supporting-circuit-pack-name': 'CP1-CFP0', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -211,7 +216,7 @@ class TransportPCEtesting(unittest.TestCase): # Test OCH-OTU interfaces on SPDR-C1 def test_06_check_interface_och(self): - response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-1") + response = test_utils.check_netconf_node_request("SPDR-SC1", "interface/XPDR1-NETWORK1-761:768") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertDictEqual(dict({'name': 'XPDR1-NETWORK1-1', 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 83fb14822..e1dfb0df6 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 @@ -82,19 +82,21 @@ class TransportPCERendererTesting(unittest.TestCase): "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDR-A1", "renderer:src-tp": "XPDR1-CLIENT1", - "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:dest-tp": "XPDR1-NETWORK1"}], + 195.8, 40, 195.775, 195.825, 713, + 720) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() self.assertIn('Roadm-connection successfully created for nodes: ROADM-A1', res["output"]["result"]) def test_06_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-nmc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-nmc-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'DEG1-TTP-TXRX-nmc-7', + 'name': 'DEG1-TTP-TXRX-nmc-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '1/0', 'type': 'org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint', @@ -107,7 +109,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['interface'][0]['org-openroadm-network-media-channel-interfaces:nmc-ctp']) def test_07_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-mc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-mc-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 @@ -126,13 +128,13 @@ class TransportPCERendererTesting(unittest.TestCase): res['interface'][0]['org-openroadm-media-channel-interfaces:mc-ttp']) def test_08_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-nmc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-nmc-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'SRG1-PP3-TXRX-nmc-7', + 'name': 'SRG1-PP3-TXRX-nmc-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '3/0', 'type': 'org-openroadm-interfaces:networkMediaChannelConnectionTerminationPoint', @@ -146,7 +148,7 @@ class TransportPCERendererTesting(unittest.TestCase): # -mc supporting interfaces must not be created for SRG, only degrees def test_09_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-mc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-mc-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -155,32 +157,32 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_10_service_path_create_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP3-TXRX-DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "roadm-connections/SRG1-PP3-TXRX-DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'connection-name': 'SRG1-PP3-TXRX-DEG1-TTP-TXRX-7', + 'connection-name': 'SRG1-PP3-TXRX-DEG1-TTP-TXRX-713:720', 'opticalControlMode': 'off' }, **res['roadm-connections'][0]), res['roadm-connections'][0] ) self.assertDictEqual( - {'src-if': 'SRG1-PP3-TXRX-nmc-7'}, + {'src-if': 'SRG1-PP3-TXRX-nmc-713:720'}, res['roadm-connections'][0]['source']) self.assertDictEqual( - {'dst-if': 'DEG1-TTP-TXRX-nmc-7'}, + {'dst-if': 'DEG1-TTP-TXRX-nmc-713:720'}, res['roadm-connections'][0]['destination']) def test_11_service_path_create_xpdr_check(self): - response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-7") + response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-713:720") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() # the following statement replaces self.assertDictContainsSubset deprecated in python 3.2 self.assertDictEqual( dict({ - 'name': 'XPDR1-NETWORK1-7', + 'name': 'XPDR1-NETWORK1-713:720', 'administrative-state': 'inService', 'supporting-circuit-pack-name': '1/0/1-PLUG-NET', 'type': 'org-openroadm-interfaces:opticalChannel', @@ -282,13 +284,15 @@ class TransportPCERendererTesting(unittest.TestCase): "renderer:dest-tp": "DEG1-TTP-TXRX"}, {"renderer:node-id": "XPDR-A1", "renderer:src-tp": "XPDR1-CLIENT1", - "renderer:dest-tp": "XPDR1-NETWORK1"}]) + "renderer:dest-tp": "XPDR1-NETWORK1"}], + 195.8, 40, 195.775, 195.825, 713, + 720) self.assertEqual(response.status_code, requests.codes.ok) self.assertEqual(response.json(), { 'output': {'result': 'Request processed', 'success': True}}) def test_18_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-mc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-mc-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -297,7 +301,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_19_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-nmc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/DEG1-TTP-TXRX-nmc-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn( @@ -306,7 +310,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_20_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-mc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-mc-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn({ @@ -316,7 +320,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_21_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-nmc-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-nmc-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn({ @@ -326,7 +330,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_22_service_path_delete_rdm_check(self): - response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-DEG1-TTP-TXRX-7") + response = test_utils.check_netconf_node_request("ROADM-A1", "interface/SRG1-PP3-TXRX-DEG1-TTP-TXRX-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn({ @@ -336,7 +340,7 @@ class TransportPCERendererTesting(unittest.TestCase): res['errors']['error']) def test_23_service_path_delete_xpdr_check(self): - response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-7") + response = test_utils.check_netconf_node_request("XPDR-A1", "interface/XPDR1-NETWORK1-713:720") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() self.assertIn({ diff --git a/tests/transportpce_tests/common/test_utils.py b/tests/transportpce_tests/common/test_utils.py index fc8a4f69c..d9b9ee09a 100644 --- a/tests/transportpce_tests/common/test_utils.py +++ b/tests/transportpce_tests/common/test_utils.py @@ -150,6 +150,7 @@ def get_request(url): def post_request(url, data): if data: + print(json.dumps(data)) return requests.request( "POST", url.format(RESTCONF_BASE_URL), data=json.dumps(data), @@ -359,13 +360,21 @@ def service_delete_request(servicename: str, return post_request(URL_SERV_DELETE, attr) -def service_path_request(operation: str, servicename: str, wavenumber: str, nodes): +def service_path_request(operation: str, servicename: str, wavenumber: str, nodes, centerfreq: str, + slotwidth: int, minfreq: float, maxfreq: float, lowerslotnumber: int, + higherslotnumber: int): attr = {"renderer:input": { "renderer:service-name": servicename, "renderer:wave-number": wavenumber, - "renderer:modulation-format": "qpsk", + "renderer:modulation-format": "dp-qpsk", "renderer:operation": operation, - "renderer:nodes": nodes}} + "renderer:nodes": nodes, + "renderer:center-freq": centerfreq, + "renderer:width": slotwidth, + "renderer:min-freq": minfreq, + "renderer:max-freq": maxfreq, + "renderer:lower-spectral-slot-number": lowerslotnumber, + "renderer:higher-spectral-slot-number": higherslotnumber}} return post_request(URL_SERVICE_PATH, attr) -- 2.36.6