PCE modification in order to prepare flexgrid 52/94552/7
authormanuedelf <emmanuelle.delfour@orange.com>
Tue, 1 Dec 2020 07:46:23 +0000 (08:46 +0100)
committermanuedelf <emmanuelle.delfour@orange.com>
Sat, 9 Jan 2021 14:41:35 +0000 (15:41 +0100)
- add version to PCeNode because spectrum assignment will depend on
node version
- add SpectrumAssignement class for result of spectrum assignment
- update functional pce and gnpy functional tests to manage version
through portmapping

JIRA: TRNSPRTPCE-230
Signed-off-by: manuedelf <emmanuelle.delfour@orange.com>
Change-Id: I02bd02742b25c4b2e2f5e0e710346e121a9dea47

16 files changed:
pce/src/main/java/org/opendaylight/transportpce/pce/model/SpectrumAssignment.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java
pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java
pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java
tests/sample_configs/gnpy/gnpy_portmapping_121.json [new file with mode: 0644]
tests/sample_configs/pce_portmapping_121.json [new file with mode: 0644]
tests/transportpce_tests/1.2.1/test_gnpy.py
tests/transportpce_tests/1.2.1/test_pce.py
tests/transportpce_tests/common/test_utils.py

diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/model/SpectrumAssignment.java b/pce/src/main/java/org/opendaylight/transportpce/pce/model/SpectrumAssignment.java
new file mode 100644 (file)
index 0000000..77f7f8c
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2020 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.model;
+
+public class SpectrumAssignment {
+    /**
+     * Begin index for available spectrum assignment.
+     */
+    int beginIndex;
+
+    /**
+     * End index for available spectrum assignment.
+     */
+    int stopIndex;
+
+    /**
+     * True if spectrum assignement is for flexible grid, false otherwise (1.2.1 device).
+     */
+    boolean flexGrid;
+
+    public SpectrumAssignment(int beginIndex, int stopIndex) {
+        super();
+        this.beginIndex = beginIndex;
+        this.stopIndex = stopIndex;
+    }
+
+    /**
+     * Return the begin index of spectrum assignment.
+     * @return the beginIndex
+     */
+    public int getBeginIndex() {
+        return beginIndex;
+    }
+
+    /**
+     * Set the begin index of spectrum assignment.
+     * @param beginIndex the beginIndex to set
+     */
+    public void setBeginIndex(int beginIndex) {
+        this.beginIndex = beginIndex;
+    }
+
+    /**
+     * Return the end index of spectrum assignment.
+     * @return the stopIndex
+     */
+    public int getStopIndex() {
+        return stopIndex;
+    }
+
+    /**
+     * Set the stop index of spectrum assignment.
+     * @param stopIndex the stopIndex to set
+     */
+    public void setStopIndex(int stopIndex) {
+        this.stopIndex = stopIndex;
+    }
+
+    /**
+     * True if flexgrid false otherwise.
+     * @return the flexGrid
+     */
+    public boolean isFlexGrid() {
+        return flexGrid;
+    }
+
+    /**
+     * Set it to true for flexgrid, false otherwise.
+     * @param flexGrid the flexGrid to set
+     */
+    public void setFlexGrid(boolean flexGrid) {
+        this.flexGrid = flexGrid;
+    }
+
+    /*
+    * (non-Javadoc)
+    *
+    * @see java.lang.Object#toString()
+    */
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("SpectrumAssignment [beginIndex=").append(beginIndex).append(", stopIndex=").append(stopIndex)
+                .append(", flexGrid=").append(flexGrid).append("]");
+        return builder.toString();
+    }
+}
index bfd2822a14cda27c001694ad12a648f088966dbb..49650f08dc68d4a29a18b2bed69cbbe871dcdcd8 100644 (file)
@@ -20,6 +20,8 @@ import java.util.stream.Collectors;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.common.mapping.MappingUtils;
+import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
@@ -79,6 +81,8 @@ public class PceCalculation {
         NONE, HARD_EXCLUDE, HARD_INCLUDE, HARD_DIVERSITY, SOFT_EXCLUDE, SOFT_INCLUDE, SOFT_DIVERSITY;
     }
 
+    private MappingUtils mappingUtils;
+
     public PceCalculation(PathComputationRequestInput input, NetworkTransactionService networkTransactionService,
             PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc) {
         this.input = input;
@@ -86,6 +90,7 @@ public class PceCalculation {
         this.returnStructure = rc;
 
         this.pceHardConstraints = pceHardConstraints;
+        this.mappingUtils = new MappingUtilsImpl(networkTransactionService.getDataBroker());
         parseInput();
     }
 
@@ -465,7 +470,6 @@ public class PceCalculation {
 
     private boolean validateNode(Node node) {
         LOG.debug("validateNode: node {} ", node);
-
         // PceNode will be used in Graph algorithm
         Node1 node1 = node.augmentation(Node1.class);
         if (node1 == null) {
@@ -473,8 +477,14 @@ public class PceCalculation {
             return false;
         }
         OpenroadmNodeType nodeType = node1.getNodeType();
-
-        PceOpticalNode pceNode = new PceOpticalNode(node, nodeType);
+        String deviceNodeId = MapUtils.getSupNetworkNode(node);
+        // Should never happen but because of existing topology test files
+        // we have to manage this case
+        if (deviceNodeId == null || deviceNodeId.isBlank()) {
+            deviceNodeId = node.getNodeId().getValue();
+        }
+        LOG.info("Device node id {} for {}", deviceNodeId, node);
+        PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, mappingUtils.getOpenRoadmVersion(deviceNodeId));
         pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
         pceNode.initWLlist();
 
index c95e4115abb5dc14ac06f48e959b5612ab64f439..127fa26d81cc5ac57ed88aed70fc75b6db5b5a99 100644 (file)
@@ -37,4 +37,10 @@ public interface PceNode {
     Map<String, List<Uint16>> getAvailableTribPorts();
 
     Map<String, List<Uint16>> getAvailableTribSlots();
+
+    /**
+     * Get the version of node.
+     * @return the OpenROADM yang release supported by the node.
+     */
+    String getVersion();
 }
index ebb8767481499bc45ff11dfc5468ca099a60ce43..4afbf70f69ff3b9abb696427bc89815ac38aea1e 100644 (file)
@@ -45,14 +45,16 @@ public class PceOpticalNode implements PceNode {
     private List<PceLink> outgoingLinks = new ArrayList<>();
     private Map<String, String> clientPerNwTp = new HashMap<>();
     private final AvailFreqMapsKey freqMapKey = new AvailFreqMapsKey(GridConstant.C_BAND);
+    private String version;
 
-    public PceOpticalNode(Node node, OpenroadmNodeType nodeType) {
-        if (node != null && node.getNodeId() != null && nodeType != null) {
+    public PceOpticalNode(Node node, OpenroadmNodeType nodeType, String version) {
+        if (node != null && node.getNodeId() != null && nodeType != null && version != null) {
             this.node = node;
             this.nodeId = node.getNodeId();
             this.nodeType = nodeType;
+            this.version = version;
         } else {
-            LOG.error("PceNode: one of parameters is not populated : nodeId, node type");
+            LOG.error("PceNode: one of parameters is not populated : nodeId, node type, version");
             this.valid = false;
         }
     }
@@ -368,4 +370,14 @@ public class PceOpticalNode implements PceNode {
             wlIndex++;
         }
     }
+
+    /*
+    * (non-Javadoc)
+    *
+    * @see org.opendaylight.transportpce.pce.networkanalyzer.PceNode#getVersion()
+    */
+    @Override
+    public String getVersion() {
+        return this.version;
+    }
 }
index 0d5bb481a69d4b1698a7c243f16a139a3a9b45e8..8f9c4940b7fd92105c5b61a2970b89bb9bf670a2 100644 (file)
@@ -522,4 +522,15 @@ public class PceOtnNode implements PceNode {
     public boolean checkWL(long index) {
         return false;
     }
+
+    /*
+    * (non-Javadoc)
+    *
+    * @see org.opendaylight.transportpce.pce.networkanalyzer.PceNode#getVersion()
+    */
+    @Override
+    public String getVersion() {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
index 52a56a8335c474e06c349160a93384d492d2470c..dcc9dcb79d61bdce070f22a37d492e04837e842f 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Map;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.RequestProcessor;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
@@ -51,9 +52,9 @@ public class PcePathDescriptionTests extends AbstractTest {
         NodeBuilder node1Builder = NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes());
         node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
 
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
         pceLink.setClient("XPONDER-CLIENT");
index 1ad4a2bf5c41c8cfad479b9e94c62ee2b6703c24..ad6b006bf45d02bb78eba973380eedd828620201 100644 (file)
@@ -107,7 +107,7 @@ public class PceConstraintsTest extends AbstractTest {
     @Test
     public void getIncludePceNodesTest() {
         Assert.assertTrue(pceConstraints.getIncludePceNodes().size() == 0);
-        pceConstraints.setIncludePceNode(new PceOpticalNode(null, null));
+        pceConstraints.setIncludePceNode(new PceOpticalNode(null, null, null));
         Assert.assertTrue(pceConstraints.getIncludePceNodes().size() == 1);
 
     }
index 6a40ff16f468d8d4f2389cd2b345b2c36eecaf9f..fc32c64064c903dae2c5a159e62fa7e9bda838df 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.transportpce.pce.graph;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode;
 import org.opendaylight.transportpce.pce.utils.NodeUtils;
@@ -36,8 +37,10 @@ public class PceGraphEdgeTest {
         //  Link link=genereateLinkBuilder();
         node =  NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes()).build();
 
-        PceOpticalNode pceOpticalNode = new PceOpticalNode(node, OpenroadmNodeType.SRG);
-        PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node, OpenroadmNodeType.SRG);
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
+        PceOpticalNode pceOpticalNode2 = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
 
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
         pceLink.setClient("XPONDER-CLIENT");
index e8fbbc1c1ef74503211bb5c7f7b6c536899174fd..89ef62efcecf1fe93d4c1e6d90c95470f726cd03 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Optional;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceNode;
@@ -55,13 +56,15 @@ public class PceGraphTest {
         node = NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes())
                 .setNodeId(nodeId).withKey(new NodeKey(nodeId))
                 .build();
-        pceOpticalNode = new PceOpticalNode(node, OpenroadmNodeType.DEGREE);
+        pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.checkWL(1);
         pceOpticalNode.checkWL(2);
         NodeId nodeId2 = new NodeId("OpenROADM-3-1-DEG1");
         Node node2 = NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes())
                 .setNodeId(nodeId2).withKey(new NodeKey(nodeId2)).build();
-        pceOpticalNode2 = new PceOpticalNode(node2, OpenroadmNodeType.DEGREE);
+        pceOpticalNode2 = new PceOpticalNode(node2,
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode2.checkWL(1);
         pceOpticalNode2.checkWL(2);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
index 2b483a9f5a555b2734faf8e71d4c9d5093a69244..8e1dabc6a334c7d5a11f4aa8811182db5c26db0e 100644 (file)
@@ -15,6 +15,7 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder;
@@ -67,7 +68,8 @@ public class PceLinkTest extends AbstractTest {
                 "srcTp", "destTp").build();
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
-        PceOpticalNode pceOpticalNode = new PceOpticalNode(node, OpenroadmNodeType.SRG);
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -79,7 +81,8 @@ public class PceLinkTest extends AbstractTest {
 
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
-        PceOpticalNode pceOpticalNode = new PceOpticalNode(node, OpenroadmNodeType.SRG);
+        PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -92,7 +95,7 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
 
     }
@@ -106,7 +109,7 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -119,7 +122,7 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
         Assert.assertNotNull(MapUtils.getOmsAttributesSpan(link));
         Assert.assertNotNull(pceLink.calcSpanOSNR());
index a9b7d007eed05ac72ce64456f5c811c6763007da..af6018e023db3b0bbe953cb3743ac119ac05dc93 100644 (file)
@@ -16,6 +16,7 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
@@ -68,7 +69,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void isValidTest() {
         OpenroadmNodeType nodeType = OpenroadmNodeType.ROADM;
-        pceOpticalNode = new PceOpticalNode(node, nodeType);
+        pceOpticalNode = new PceOpticalNode(node, nodeType, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         Assert.assertTrue(pceOpticalNode.isValid());
     }
 
@@ -76,7 +77,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     public void testInitSrgTps() {
 
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         pceOpticalNode.initWLlist();
@@ -93,7 +94,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERNETWORK);
         Node specificNode = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(specificNode,
-                OpenroadmNodeType.SRG);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initWLlist();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertTrue(pceOpticalNode.checkWL(12));
@@ -103,7 +104,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testInitXndrTpDegTypes() {
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.DEGREE);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initWLlist();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertFalse(pceOpticalNode.checkWL(12));
@@ -113,7 +114,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testInitXndrTpXpondrTypes() {
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.XPONDER);
+                OpenroadmNodeType.XPONDER, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initWLlist();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertTrue(pceOpticalNode.checkWL(12));
@@ -123,7 +124,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testInitWLlist() {
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         pceOpticalNode.initWLlist();
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -134,7 +135,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testGetRdmSrgClient() {
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("7"));
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -147,7 +148,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilderEmpty(geSupportingNodes(), OpenroadmTpType.SRGTXRXPP);
         Node specificNode = node1Builder.setNodeId(new NodeId("test")).build();
         pceOpticalNode = new PceOpticalNode(specificNode,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         pceOpticalNode.initWLlist();
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
@@ -160,7 +161,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testGetRdmSrgClientDeg() {
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.DEGREE);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("7"));
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -173,7 +174,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.SRGTXCP);
         Node specificNode = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(specificNode,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         Assert.assertFalse(pceOpticalNode.isValid());
         Assert.assertFalse(pceOpticalNode.checkWL(12));
@@ -186,7 +187,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.DEGREERXTTP);
         node = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(node,
-                OpenroadmNodeType.ROADM);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("2"));
         Assert.assertFalse(pceOpticalNode.isValid());
diff --git a/tests/sample_configs/gnpy/gnpy_portmapping_121.json b/tests/sample_configs/gnpy/gnpy_portmapping_121.json
new file mode 100644 (file)
index 0000000..aa064bc
--- /dev/null
@@ -0,0 +1,169 @@
+{
+  "nodes": [
+    {
+      "node-id": "XPONDER-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-5",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "OpenROADM-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "OpenROADM-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "OpenROADM-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "OpenROADM-5",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/sample_configs/pce_portmapping_121.json b/tests/sample_configs/pce_portmapping_121.json
new file mode 100644 (file)
index 0000000..a2e9c3b
--- /dev/null
@@ -0,0 +1,679 @@
+{
+  "nodes": [
+    {
+      "node-id": "OpenROADM-1-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-1-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-1-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-1-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-1-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-1-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-1-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-1-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-2-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-2-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-2-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-2-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-2-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-2-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-2-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-2-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-3-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-3-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-3-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-3-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-3-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-3-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-3-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-3-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-4-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-4-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-4-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-4-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-4-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-4-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-4-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-4-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-5-1",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-5-1",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-5-2",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-5-2",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "OpenROADM-5-3",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+        {
+      "node-id": "XPONDER-5-3",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "OpenROADM-5-4",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER-5-4",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPDRC01",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "ROADMA01",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "ROADMC01",
+      "node-info": {
+        "node-type": "rdm",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPDRA01",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    },
+    {
+      "node-id": "XPONDER",
+      "node-info": {
+        "node-type": "xpdr",
+        "openroadm-version": "1.2.1",
+        "node-clli": "NodeX",
+        "node-vendor": "vendorA",
+        "node-model": "model1",
+        "node-ip-address": "1.2.3.4"
+      },
+      "mapping": [],
+      "mc-capabilities": [],
+      "cp-to-degree": [],
+      "switching-pool-lcp": []
+    }
+  ]
+}
\ No newline at end of file
index 09812bd8d2fc2e2d8f72012fc08ad703bd6c8aae..c0752cb7ff9a8ff27902011a27a4b2f2e5cb2454 100644 (file)
@@ -25,6 +25,7 @@ class TransportGNPYtesting(unittest.TestCase):
     topo_cllinet_data = None
     topo_ordnet_data = None
     topo_ordtopo_data = None
+    port_mapping_data = None
     processes = None
 
     @classmethod
@@ -46,6 +47,10 @@ class TransportGNPYtesting(unittest.TestCase):
                                              "..", "..", "sample_configs", "gnpy", "openroadmTopology.json")
             with open(TOPO_ORDTOPO_FILE, 'r') as topo_ordtopo:
                 cls.topo_ordtopo_data = topo_ordtopo.read()
+            PORT_MAPPING_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                                     "..", "..", "sample_configs", "gnpy", "gnpy_portmapping_121.json")
+            with open(PORT_MAPPING_FILE, 'r') as port_mapping:
+                cls.port_mapping_data = port_mapping.read()
             sample_files_parsed = True
         except PermissionError as err:
             print("Permission Error when trying to read sample files\n", err)
@@ -72,6 +77,12 @@ class TransportGNPYtesting(unittest.TestCase):
     def setUp(self):
         time.sleep(2)
 
+     # Load port mapping
+    def test_00_load_port_mapping(self):
+        response = test_utils.rawpost_request(test_utils.URL_FULL_PORTMAPPING, self.port_mapping_data)
+        self.assertEqual(response.status_code, requests.codes.no_content)
+        time.sleep(2)
+
     # Mount the different topologies
     def test_01_connect_clliNetwork(self):
         response = test_utils.rawput_request(test_utils.URL_CONFIG_CLLI_NET, self.topo_cllinet_data)
@@ -204,6 +215,11 @@ class TransportGNPYtesting(unittest.TestCase):
         self.assertEqual(response.status_code, requests.codes.ok)
         time.sleep(3)
 
+    # Delete portmapping
+    def test_11_delete_port_mapping(self):
+        response = test_utils.delete_request(test_utils.URL_FULL_PORTMAPPING)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
 
 if __name__ == "__main__":
     # logging.basicConfig(filename='./transportpce_tests/log/response.log',filemode='w',level=logging.DEBUG)
index e7e255f9134ecd311beb997f59dae9ab4c646ef8..60b0be41780350dd3b5c4294cbcf0648882b5d9d 100644 (file)
@@ -24,6 +24,7 @@ class TransportPCEtesting(unittest.TestCase):
     simple_topo_bi_dir_data = None
     simple_topo_uni_dir_data = None
     complex_topo_uni_dir_data = None
+    port_mapping_data = None
     processes = None
 
     @classmethod
@@ -46,6 +47,10 @@ class TransportPCEtesting(unittest.TestCase):
                                                      "..", "..", "sample_configs", "NW-for-test-5-4.xml")
             with open(TOPO_UNI_DIR_COMPLEX_FILE, 'r') as topo_uni_dir_complex:
                 cls.complex_topo_uni_dir_data = topo_uni_dir_complex.read()
+            PORT_MAPPING_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                                     "..", "..", "sample_configs", "pce_portmapping_121.json")
+            with open(PORT_MAPPING_FILE, 'r') as port_mapping:
+                cls.port_mapping_data = port_mapping.read()
             sample_files_parsed = True
         except PermissionError as err:
             print("Permission Error when trying to read sample files\n", err)
@@ -72,6 +77,12 @@ class TransportPCEtesting(unittest.TestCase):
     def setUp(self):  # instruction executed before each test method
         time.sleep(1)
 
+     # Load port mapping
+    def test_00_load_port_mapping(self):
+        response = test_utils.rawpost_request(test_utils.URL_FULL_PORTMAPPING, self.port_mapping_data)
+        self.assertEqual(response.status_code, requests.codes.no_content)
+        time.sleep(2)
+
      # Load simple bidirectional topology
     def test_01_load_simple_topology_bi(self):
         response = test_utils.put_xmlrequest(test_utils.URL_CONFIG_ORDM_TOPO, self.simple_topo_bi_dir_data)
@@ -394,6 +405,12 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response.status_code, requests.codes.conflict)
         time.sleep(1)
 
+    # Delete portmapping
+    def test_26_delete_port_mapping(self):
+        response = test_utils.delete_request(test_utils.URL_FULL_PORTMAPPING)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
 
 if __name__ == "__main__":
     unittest.main(verbosity=2)
index 34238bcc52a3edcc3927d80061d1841fd487a6c7..fc8a4f69cec71e514d4df31e7d3ae6ceb9438bcf 100644 (file)
@@ -51,6 +51,7 @@ URL_SERVICE_PATH = "{}/operations/transportpce-device-renderer:service-path"
 URL_OTN_SERVICE_PATH = "{}/operations/transportpce-device-renderer:otn-service-path"
 URL_CREATE_OTS_OMS = "{}/operations/transportpce-device-renderer:create-ots-oms"
 URL_PATH_COMPUTATION_REQUEST = "{}/operations/transportpce-pce:path-computation-request"
+URL_FULL_PORTMAPPING = "{}/config/transportpce-portmapping:network"
 
 TYPE_APPLICATION_JSON = {'Content-Type': 'application/json', 'Accept': 'application/json'}
 TYPE_APPLICATION_XML = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}
@@ -194,6 +195,13 @@ def rawput_request(url, data):
         headers=TYPE_APPLICATION_JSON,
         auth=(ODL_LOGIN, ODL_PWD))
 
+def rawpost_request(url, data):
+    return requests.request(
+        "POST", url.format(RESTCONF_BASE_URL),
+        data=data,
+        headers=TYPE_APPLICATION_JSON,
+        auth=(ODL_LOGIN, ODL_PWD))
+
 
 def delete_request(url):
     return requests.request(