Distinguish flex vs fixed for PCE 400G 10/96110/24
authorBalagangadhar Bathula <bb4341@att.com>
Mon, 10 May 2021 19:25:02 +0000 (15:25 -0400)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 24 Jun 2021 14:47:48 +0000 (16:47 +0200)
- PCE is not picking the flex vs fixed grid correctly
- Enable mc-capabilities for XPDR node type
- In addition to slot-width add central-frequency-granularity to
  distinguish fixed/flex grid.
- Add functional test to check mc-capability-profile on 7.1 XPDR device
- Add mc-capability profile in the operational data for XPDR-C1

JIRA: TRNSPRTPCE-452
Change-Id: I2c7adf862ccaeec4829a62faad56d94ad2616f38
Signed-off-by: Balagangadhar Bathula <bb4341@att.com>
15 files changed:
api/src/main/yang/transportpce-portmapping@2021-04-26.yang
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java
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/openroadm/7.1/oper-XPDRC.xml
tests/transportpce_tests/7.1/test_portmapping.py

index e8b45d0e063519815dc1b4f1983ed753123750e4..285c049749d1af4ddd5d488a1b1cc2752c39b400 100644 (file)
@@ -271,15 +271,17 @@ module transportpce-portmapping {
 
   grouping mc-capabilities {
     list mc-capabilities {
-      when "../node-info/node-type = 'rdm'";
       key "mc-node-name";
       description
-        "Capabilities of the media channel associated with a degree or a SRG.";
+        "Capabilities of the media channel associated with a degree SRG, or
+        XPDR (7.1 and above). ";
       leaf mc-node-name {
         type string;
         description
           "Name of the node, it has the format of DEGi-TTP or SRGj-PP
-           Where i, and j are the degree and SRG numbers respectively";
+           Where i, and j are the degree and SRG numbers respectively.
+           For XPDR type it will have one element in the leaf-list,
+           with name XPDR-mcprofile";
       }
       leaf slot-width-granularity {
         type org-openroadm-common-optical-channel-types:frequency-GHz;
index 8e580ea3e7f595851654ad7cef7cd45cdd466c82..92af655eb24ca5e72a69c811684cb5e8fcebb92e 100644 (file)
@@ -84,6 +84,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.open
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.port.Interfaces;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.xponder.XpdrPort;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev191129.InterfaceType;
@@ -132,7 +133,7 @@ public class PortMappingVersion710 {
     }
 
     public boolean createMappingData(String nodeId) {
-        LOG.info("{} : OpenROADM version 7.1.0 node - Creating Mapping Data", nodeId);
+        LOG.info("{} : OpenROADM version 7.1 node - Creating Mapping Data", nodeId);
         List<Mapping> portMapList = new ArrayList<>();
         Map<McCapabilitiesKey, McCapabilities> mcCapabilities = new HashMap<>();
         InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
@@ -178,6 +179,14 @@ public class PortMappingVersion710 {
                     LOG.warn("{} : Unable to create mapping for the Xponder", nodeId);
                     return false;
                 }
+                // In the case of 7.1 models, even XPDR advertizes mc-capabilities,
+                // hence we need to populate this information into the port-mapping data
+                // Get MC capabilities
+                if (!createMcCapabilitiesList(nodeId, deviceInfo, mcCapabilities)) {
+                    // return false if MC capabilites failed
+                    LOG.warn("{} : Unable to create MC capabilities", nodeId);
+                    return false;
+                }
                 break;
             default:
                 LOG.error("{} : unknown nodetype - Unable to create mapping", nodeId);
@@ -277,13 +286,17 @@ public class PortMappingVersion710 {
         for (InstanceIdentifier<PortList> id : entry.getValue()) {
             PortList portList = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL,
                 id, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get();
-            String lcp = getLcpFromCpAndPort(mappings, portList.getCircuitPackName(), portList.getPortName());
-            if (lcp == null || lcpList.contains(lcp)) {
+            String circuitPackName = portList.getCircuitPackName();
+            String portName = portList.getPortName();
+            String lcp = getLcpFromCpAndPort(mappings, circuitPackName, portName);
+            if (lcp != null && !lcpList.contains(lcp)) {
+                lcpList.add(lcp);
+            } else {
                 return null;
             }
-            lcpList.add(lcp);
         }
-        return nblBldr.setLcpList(lcpList).build();
+        nblBldr.setLcpList(lcpList);
+        return nblBldr.build();
     }
 
     private boolean createXpdrPortMapping(String nodeId, List<Mapping> portMapList) {
@@ -1209,9 +1222,33 @@ public class PortMappingVersion710 {
 
     private boolean createMcCapabilitiesList(String nodeId, Info deviceInfo,
             Map<McCapabilitiesKey, McCapabilities> mcCapabilitiesMap) {
-        Map<Integer, Degree> degrees = getDegreesMap(nodeId, deviceInfo);
-        List<SharedRiskGroup> srgs = getSrgs(nodeId, deviceInfo);
-        mcCapabilitiesMap.putAll(getMcCapabilities(degrees, srgs, deviceInfo, nodeId));
+        if (deviceInfo.getNodeType() == NodeTypes.Rdm) {
+            Map<Integer, Degree> degrees = getDegreesMap(nodeId, deviceInfo);
+            List<SharedRiskGroup> srgs = getSrgs(nodeId, deviceInfo);
+            mcCapabilitiesMap.putAll(getMcCapabilities(degrees, srgs, deviceInfo, nodeId));
+        } else if ((deviceInfo.getNodeType() == NodeTypes.Xpdr)) {
+            Map<McCapabilityProfileKey, McCapabilityProfile> mcProfileXpdr = getMcCapabilityProfiles(nodeId,
+                deviceInfo);
+            if (mcProfileXpdr.size() > 1) {
+                LOG.warn("Re-check the mc-capability-profiles for XPDR port-mapping");
+            }
+            // Typically for a XPDR there will be only one mc-capability-profile
+            for (Map.Entry<McCapabilityProfileKey, McCapabilityProfile> mcCapProfile : mcProfileXpdr.entrySet()) {
+                String mcNodeName = "XPDR" + "-" + "mcprofile";
+                McCapabilitiesBuilder mcCapabilitiesBuilder = new McCapabilitiesBuilder()
+                    .withKey(new McCapabilitiesKey(mcNodeName))
+                    .setMcNodeName(mcNodeName);
+                mcCapabilitiesBuilder
+                    .setCenterFreqGranularity(mcCapProfile.getValue().getCenterFreqGranularity())
+                    .setSlotWidthGranularity(mcCapProfile.getValue().getSlotWidthGranularity());
+                // Build and add to the Map
+                mcCapabilitiesMap.put(mcCapabilitiesBuilder.key(), mcCapabilitiesBuilder.build());
+                LOG.info("Finished building mc-capability profile for XPDR {}", nodeId);
+                // Since we only have one mc-profile for XPDR, we can break the for-loop
+                break;
+            }
+
+        }
         return true;
     }
 
index 3462effa240ce8ba4173e6a9a53281d761b9eb21..be2d07e113c6ef7c17421c154007e7cf308ddde1 100644 (file)
@@ -406,10 +406,17 @@ public class PostAlgoPathValidator {
             if (allPceNodes.containsKey(edge.link().getSourceId())) {
                 PceNode pceNode = allPceNodes.get(edge.link().getSourceId());
                 LOG.info("Processing PCE node {}", pceNode);
-                if (StringConstants.OPENROADM_DEVICE_VERSION_1_2_1.equals(pceNode.getVersion())
-                        || pceNode.getSlotWidthGranularity().compareTo(GridConstant.SLOT_WIDTH_50) == 0) {
+                if (StringConstants.OPENROADM_DEVICE_VERSION_1_2_1.equals(pceNode.getVersion())) {
                     LOG.info("Node {}: version is {} and slot width granularity is {} -> fixed grid mode",
-                            pceNode.getNodeId(), pceNode.getVersion(), pceNode.getSlotWidthGranularity());
+                        pceNode.getNodeId(), pceNode.getVersion(), pceNode.getSlotWidthGranularity());
+                    isFlexGrid = false;
+                }
+                if ((pceNode.getSlotWidthGranularity().equals(GridConstant.SLOT_WIDTH_50))
+                    && (pceNode.getCentralFreqGranularity().equals(GridConstant.SLOT_WIDTH_50))) {
+                    LOG.info("Node {}: version is {} with slot width granularity  {} and central "
+                            + "frequency granularity is {} -> fixed grid mode",
+                        pceNode.getNodeId(), pceNode.getVersion(), pceNode.getSlotWidthGranularity(),
+                        pceNode.getCentralFreqGranularity());
                     isFlexGrid = false;
                 }
                 pceNodeFreqMap = pceNode.getBitSetData();
index 5fad6c02c604b5c5ef767b6bf7c696ce1c9c357e..8dd264be372cedd3f9531f4c38654535d7a85356 100644 (file)
@@ -469,7 +469,8 @@ public class PceCalculation {
 
         LOG.info("Device node id {} for {}", deviceNodeId, node);
         PceOpticalNode pceNode = new PceOpticalNode(deviceNodeId, this.serviceType, portMapping, node, nodeType,
-            mappingUtils.getOpenRoadmVersion(deviceNodeId), getSlotWidthGranularity(deviceNodeId, node.getNodeId()));
+            mappingUtils.getOpenRoadmVersion(deviceNodeId), getSlotWidthGranularity(deviceNodeId, node.getNodeId()),
+            getCentralFreqGranularity(deviceNodeId, node.getNodeId()));
         pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat());
         pceNode.initFrequenciesBitSet();
 
@@ -759,14 +760,44 @@ public class PceCalculation {
         // deviceNodeId: openroadm-network level node
         List<McCapabilities> mcCapabilities = mappingUtils.getMcCapabilitiesForNode(deviceNodeId);
         String[] params = nodeId.getValue().split("-");
-        // DEGX or SRGX
-        String rdmModuleName = params[params.length - 1];
+        // DEGx or SRGx or XPDRx
+        String moduleName = params[params.length - 1];
         for (McCapabilities mcCapabitility : mcCapabilities) {
-            if (mcCapabitility.getMcNodeName().contains(rdmModuleName)
+            if (mcCapabitility.getMcNodeName().contains("XPDR")
+                && mcCapabitility.getSlotWidthGranularity() != null) {
+                return mcCapabitility.getSlotWidthGranularity().getValue();
+            }
+            if (mcCapabitility.getMcNodeName().contains(moduleName)
                     && mcCapabitility.getSlotWidthGranularity() != null) {
                 return mcCapabitility.getSlotWidthGranularity().getValue();
             }
         }
         return GridConstant.SLOT_WIDTH_50;
     }
+
+    /**
+     * Get mc capability central-width granularity for device.
+     * @param deviceNodeId String
+     * @param nodeId NodeId
+     * @return center-freq granularity
+     */
+    private BigDecimal getCentralFreqGranularity(String deviceNodeId, NodeId nodeId) {
+        // nodeId: openroadm-topology level node
+        // deviceNodeId: openroadm-network level node
+        List<McCapabilities> mcCapabilities = mappingUtils.getMcCapabilitiesForNode(deviceNodeId);
+        String[] params = nodeId.getValue().split("-");
+        // DEGx or SRGx or XPDRx
+        String moduleName = params[params.length - 1];
+        for (McCapabilities mcCapabitility : mcCapabilities) {
+            if (mcCapabitility.getMcNodeName().contains("XPDR")
+                && mcCapabitility.getCenterFreqGranularity() != null) {
+                return mcCapabitility.getCenterFreqGranularity().getValue();
+            }
+            if (mcCapabitility.getMcNodeName().contains(moduleName)
+                && mcCapabitility.getCenterFreqGranularity() != null) {
+                return mcCapabitility.getCenterFreqGranularity().getValue();
+            }
+        }
+        return GridConstant.SLOT_WIDTH_50;
+    }
 }
index bc28e0b9a0d7dc0699d7de846a4a83dd162c5b74..5e89108ffd6dc163bd427b3316ff39c018219b6a 100644 (file)
@@ -61,4 +61,10 @@ public interface PceNode {
      * @return BigDecimal.
      */
     BigDecimal getSlotWidthGranularity();
+
+    /**
+     * For optical node the central-frequency granularity from mc capabilities.
+     * @return BigDecimal.
+     */
+    BigDecimal getCentralFreqGranularity();
 }
index 93c3587270244d1276966648f7312f064b174929..c66af5952ff99835939419b9fbe28ffd90b3878f 100644 (file)
@@ -60,9 +60,12 @@ public class PceOpticalNode implements PceNode {
     private BitSet frequenciesBitSet;
     private String version;
     private BigDecimal slotWidthGranularity;
+    private BigDecimal centralFreqGranularity;
 
     public PceOpticalNode(String deviceNodeId, String serviceType, PortMapping portMapping, Node node,
-        OpenroadmNodeType nodeType, String version, BigDecimal slotWidthGranularity) {
+        OpenroadmNodeType nodeType, String version, BigDecimal slotWidthGranularity,
+        BigDecimal centralFreqGranularity) {
+
         if (deviceNodeId != null
                 && serviceType != null
                 && portMapping != null
@@ -79,6 +82,7 @@ public class PceOpticalNode implements PceNode {
             this.nodeType = nodeType;
             this.version = version;
             this.slotWidthGranularity = slotWidthGranularity;
+            this.centralFreqGranularity = centralFreqGranularity;
             this.adminStates = node.augmentation(org.opendaylight.yang.gen.v1.http
                     .org.openroadm.common.network.rev200529.Node1.class).getAdministrativeState();
             this.state = node.augmentation(org.opendaylight.yang.gen.v1.http
@@ -475,4 +479,14 @@ public class PceOpticalNode implements PceNode {
         return slotWidthGranularity;
     }
 
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.opendaylight.transportpce.pce.networkanalyzer.PceNode#getCentralFreqGranularity()
+     */
+    @Override
+    public BigDecimal getCentralFreqGranularity() {
+        return centralFreqGranularity;
+    }
+
 }
index 3f0daf537fe10aa920f112de212eb2a6808b2964..7b9b5cb8cdfaf43ea4147d284a4c165e8e09bb08 100644 (file)
@@ -593,4 +593,14 @@ public class PceOtnNode implements PceNode {
     public BigDecimal getSlotWidthGranularity() {
         return null;
     }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.opendaylight.transportpce.pce.networkanalyzer.PceNode#getCentralFreqGranularity()
+     */
+    @Override
+    public BigDecimal getCentralFreqGranularity() {
+        return null;
+    }
 }
index 56dd1f14fce84a82a336677cfd420d3b81c40034..92e1d38ad959cecca30e893a5ecbec310f3df4f2 100644 (file)
@@ -61,9 +61,11 @@ public class PcePathDescriptionTests extends AbstractTest {
         NodeBuilder node1Builder = NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes());
         node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50,
+                GridConstant.SLOT_WIDTH_50);
         PceOpticalNode pceOpticalNode2 = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50,
+                GridConstant.SLOT_WIDTH_50);
 
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
         pceLink.setClient("XPONDER-CLIENT");
index be90393f870da0ada03609b22a512e553ce663e9..9142415f88a7c340ffe0c7896d99d1ad9483ee55 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, null, null, null, null, null));
+        pceConstraints.setIncludePceNode(new PceOpticalNode(null, null, null, null, null, null, null, null));
         Assert.assertTrue(pceConstraints.getIncludePceNodes().size() == 1);
 
     }
index b7e38cbc9e028a87f0b900add2484ad26851034e..ef8bfbb278cc622087c67122fd61e01a9b685f82 100644 (file)
@@ -47,9 +47,11 @@ public class PceGraphEdgeTest {
         node =  NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes()).build();
 
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         PceOpticalNode pceOpticalNode2 = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
 
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
         pceLink.setClient("XPONDER-CLIENT");
index 8eda89c462b6e6058dc172a2e5005e5702ebe140..acc6465cce86bd72254ac4d5c72176a08faeebf8 100644 (file)
@@ -66,12 +66,14 @@ public class PceGraphTest {
                 .setNodeId(nodeId).withKey(new NodeKey(nodeId))
                 .build();
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         NodeId nodeId2 = new NodeId("OpenROADM-3-1-DEG1");
         Node node2 = NodeUtils.getNodeBuilder(NodeUtils.geSupportingNodes())
                 .setNodeId(nodeId2).withKey(new NodeKey(nodeId2)).build();
         pceOpticalNode2 = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node2,
-                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
         pceLink.setClient("XPONDER-CLIENT");
 
index 243a1bb17d52b6936879e55eed12a706128d23d8..101e940e1d7f995cbb30897366e324521e4d7e0c 100644 (file)
@@ -79,7 +79,8 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -92,7 +93,8 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -105,7 +107,8 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
 
     }
@@ -119,7 +122,8 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
     }
 
@@ -132,7 +136,8 @@ public class PceLinkTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes());
         Node node = node1Builder.setNodeId(new NodeId("test")).build();
         PceOpticalNode pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode);
         Assert.assertNotNull(MapUtils.getOmsAttributesSpan(link));
         Assert.assertNotNull(pceLink.calcSpanOSNR());
index da0144307aeaf1a29820cc4f7a10f92eff4393f6..b4dc9655336d8264aa09cb33d3d8dc572f7acbc0 100644 (file)
@@ -85,7 +85,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     public void isValidTest() {
         OpenroadmNodeType nodeType = OpenroadmNodeType.ROADM;
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node, nodeType,
-            StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+            StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         Assert.assertTrue(pceOpticalNode.isValid());
     }
 
@@ -93,7 +93,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     public void testInitSrgTps() {
 
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         pceOpticalNode.initFrequenciesBitSet();
@@ -110,7 +111,8 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.XPONDERNETWORK);
         Node specificNode = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, specificNode,
-                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initFrequenciesBitSet();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertEquals(availableBitSet, pceOpticalNode.getBitSetData().get(88,96));
@@ -120,7 +122,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testInitXndrTpDegTypes() {
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initFrequenciesBitSet();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertEquals(usedBitSet,pceOpticalNode.getBitSetData().get(88,96));
@@ -130,7 +133,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testInitXndrTpXpondrTypes() {
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
-                OpenroadmNodeType.XPONDER, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.XPONDER, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initFrequenciesBitSet();
         Assert.assertTrue(pceOpticalNode.isValid());
         Assert.assertEquals(availableBitSet, pceOpticalNode.getBitSetData().get(88,96));
@@ -140,7 +144,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testinitFrequenciesBitSet() {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         pceOpticalNode.initFrequenciesBitSet();
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -151,7 +156,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testGetRdmSrgClient() {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("7"));
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -164,7 +170,8 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilderEmpty(geSupportingNodes(), OpenroadmTpType.SRGTXRXPP);
         Node specificNode = node1Builder.setNodeId(new NodeId("test")).build();
         pceOpticalNode = new PceOpticalNode(null, null, null, specificNode,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         pceOpticalNode.initFrequenciesBitSet();
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
@@ -177,7 +184,8 @@ public class PceOpticalNodeTest extends AbstractTest {
     @Test
     public void testGetRdmSrgClientDeg() {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
-                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("7"));
         Assert.assertFalse(pceOpticalNode.isValid());
@@ -190,7 +198,8 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.SRGTXCP);
         Node specificNode = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(null, null, null, specificNode,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         Assert.assertFalse(pceOpticalNode.isValid());
         Assert.assertNull(pceOpticalNode.getBitSetData());
@@ -203,7 +212,8 @@ public class PceOpticalNodeTest extends AbstractTest {
         NodeBuilder node1Builder = getNodeBuilder(geSupportingNodes(), OpenroadmTpType.DEGREERXTTP);
         node = node1Builder.build();
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
-                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1, GridConstant.SLOT_WIDTH_50);
+                OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
+                GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceOpticalNode.initSrgTps();
         Assert.assertNull(pceOpticalNode.getRdmSrgClient("2"));
         Assert.assertFalse(pceOpticalNode.isValid());
index 5bf14635fc5f4a72a85c05ccfceb7fbc27ee9a07..ae93ca30e09d4c4b15e32c6f79aaf0ab86abc73d 100644 (file)
         <port-name>C1</port-name>
       </destination>
     </connection-map>
+    <mc-capability-profile>
+      <profile-name>mc-capa-profile1</profile-name>
+      <center-freq-granularity>3.125</center-freq-granularity>
+      <min-edge-freq>191.325</min-edge-freq>
+      <max-edge-freq>196.125</max-edge-freq>
+      <slot-width-granularity>6.25</slot-width-granularity>
+      <min-slots>1</min-slots>
+      <max-slots>14</max-slots>
+    </mc-capability-profile>
   </org-openroadm-device>
-  <current-pm-list xmlns="http://org/openroadm/pm">
-  <current-pm-entry>
-    <pm-resource-instance xmlns:d="http://org/openroadm/device">/d:org-openroadm-device/d:interface[d:name='XPDR1-NETWORK1-OTU']</pm-resource-instance>
-    <pm-resource-type>interface</pm-resource-type>
-    <pm-resource-type-extension></pm-resource-type-extension>
-    <retrieval-time>2018-06-07T13:22:58+00:00</retrieval-time>
-    <current-pm>
-      <type>opticalPowerOutput</type>
-      <extension></extension>
-      <location>nearEnd</location>
-      <direction>tx</direction>
-      <measurement>
-        <granularity>15min</granularity>
-        <pmParameterValue>2.5</pmParameterValue>
-        <pmParameterUnit>dBm</pmParameterUnit>
-        <validity>complete</validity>
-      </measurement>
-      <measurement>
-        <granularity>24Hour</granularity>
-        <pmParameterValue>2.23</pmParameterValue>
-        <pmParameterUnit>dBm</pmParameterUnit>
-        <validity>complete</validity>
-      </measurement>
-    </current-pm>
-    <current-pm>
-      <type>opticalPowerInput</type>
-      <extension></extension>
-      <location>nearEnd</location>
-      <direction>rx</direction>
-      <measurement>
-        <granularity>15min</granularity>
-        <pmParameterValue>-45.1</pmParameterValue>
-        <pmParameterUnit>dBm</pmParameterUnit>
-        <validity>complete</validity>
-      </measurement>
-      <measurement>
-        <granularity>24Hour</granularity>
-        <pmParameterValue>-49.3</pmParameterValue>
-        <pmParameterUnit>dBm</pmParameterUnit>
-        <validity>complete</validity>
-      </measurement>
-    </current-pm>
-  </current-pm-entry>
-</current-pm-list>
 </data>
index e734f4bb5eb23c0fdaa4284f9861dec5af579ec6..d440821b64d5beb889034965f4f501e39645f347 100644 (file)
@@ -148,11 +148,20 @@ class TransportPCE400GPortMappingTesting(unittest.TestCase):
              }},
             res['mapping'])
 
-    def test_08_xpdr_device_disconnection(self):
+    # Added test to check mc-capability-profile for a transponder
+    def test_08_check_mccapprofile(self):
+        response = test_utils.portmapping_request("XPDR-A2/mc-capabilities/XPDR-mcprofile")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(res['mc-capabilities'][0]['mc-node-name'], 'XPDR-mcprofile')
+        self.assertEqual(res['mc-capabilities'][0]['center-freq-granularity'], 3.125)
+        self.assertEqual(res['mc-capabilities'][0]['slot-width-granularity'], 6.25)
+
+    def test_09_xpdr_device_disconnection(self):
         response = test_utils.unmount_device("XPDR-A2")
         self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
 
-    def test_09_xpdr_device_disconnected(self):
+    def test_10_xpdr_device_disconnected(self):
         response = test_utils.get_netconf_oper_request("XPDR-A2")
         self.assertEqual(response.status_code, requests.codes.conflict)
         res = response.json()
@@ -162,7 +171,7 @@ class TransportPCE400GPortMappingTesting(unittest.TestCase):
                               "relevant data model content does not exist"},
             res['errors']['error'])
 
-    def test_10_xpdr_device_not_connected(self):
+    def test_11_xpdr_device_not_connected(self):
         response = test_utils.portmapping_request("XPDR-A2")
         self.assertEqual(response.status_code, requests.codes.conflict)
         res = response.json()