From a8d3b0cd1f14d5a12b8cb9a02ff882af4e86993c Mon Sep 17 00:00:00 2001 From: Balagangadhar Bathula Date: Mon, 10 May 2021 15:25:02 -0400 Subject: [PATCH] Distinguish flex vs fixed for PCE 400G - 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 --- .../transportpce-portmapping@2021-04-26.yang | 8 +-- .../common/mapping/PortMappingVersion710.java | 53 ++++++++++++++++--- .../pce/graph/PostAlgoPathValidator.java | 13 +++-- .../pce/networkanalyzer/PceCalculation.java | 39 ++++++++++++-- .../pce/networkanalyzer/PceNode.java | 6 +++ .../pce/networkanalyzer/PceOpticalNode.java | 16 +++++- .../pce/networkanalyzer/PceOtnNode.java | 10 ++++ .../pce/PcePathDescriptionTests.java | 6 ++- .../pce/constraints/PceConstraintsTest.java | 2 +- .../pce/graph/PceGraphEdgeTest.java | 6 ++- .../transportpce/pce/graph/PceGraphTest.java | 6 ++- .../pce/networkanalyzer/PceLinkTest.java | 15 ++++-- .../networkanalyzer/PceOpticalNodeTest.java | 32 +++++++---- .../openroadm/7.1/oper-XPDRC.xml | 53 ++++--------------- .../7.1/test_portmapping.py | 15 ++++-- 15 files changed, 191 insertions(+), 89 deletions(-) diff --git a/api/src/main/yang/transportpce-portmapping@2021-04-26.yang b/api/src/main/yang/transportpce-portmapping@2021-04-26.yang index e8b45d0e0..285c04974 100644 --- a/api/src/main/yang/transportpce-portmapping@2021-04-26.yang +++ b/api/src/main/yang/transportpce-portmapping@2021-04-26.yang @@ -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; diff --git a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java index 8e580ea3e..92af655eb 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java @@ -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 portMapList = new ArrayList<>(); Map mcCapabilities = new HashMap<>(); InstanceIdentifier 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 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 portMapList) { @@ -1209,9 +1222,33 @@ public class PortMappingVersion710 { private boolean createMcCapabilitiesList(String nodeId, Info deviceInfo, Map mcCapabilitiesMap) { - Map degrees = getDegreesMap(nodeId, deviceInfo); - List srgs = getSrgs(nodeId, deviceInfo); - mcCapabilitiesMap.putAll(getMcCapabilities(degrees, srgs, deviceInfo, nodeId)); + if (deviceInfo.getNodeType() == NodeTypes.Rdm) { + Map degrees = getDegreesMap(nodeId, deviceInfo); + List srgs = getSrgs(nodeId, deviceInfo); + mcCapabilitiesMap.putAll(getMcCapabilities(degrees, srgs, deviceInfo, nodeId)); + } else if ((deviceInfo.getNodeType() == NodeTypes.Xpdr)) { + Map 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 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; } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java index 3462effa2..be2d07e11 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java @@ -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(); diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index 5fad6c02c..8dd264be3 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -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 = 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 = 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; + } } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java index bc28e0b9a..5e89108ff 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java @@ -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(); } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java index 93c358727..c66af5952 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java @@ -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; + } + } diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java index 3f0daf537..7b9b5cb8c 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java @@ -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; + } } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java index 56dd1f14f..92e1d38ad 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java @@ -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"); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java index be90393f8..9142415f8 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsTest.java @@ -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); } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java index b7e38cbc9..ef8bfbb27 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java @@ -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"); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java index 8eda89c46..acc6465cc 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java @@ -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"); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java index 243a1bb17..101e940e1 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java @@ -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()); diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java index da0144307..b4dc96553 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java @@ -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()); diff --git a/tests/sample_configs/openroadm/7.1/oper-XPDRC.xml b/tests/sample_configs/openroadm/7.1/oper-XPDRC.xml index 5bf14635f..ae93ca30e 100644 --- a/tests/sample_configs/openroadm/7.1/oper-XPDRC.xml +++ b/tests/sample_configs/openroadm/7.1/oper-XPDRC.xml @@ -335,49 +335,14 @@ C1 + + mc-capa-profile1 + 3.125 + 191.325 + 196.125 + 6.25 + 1 + 14 + - - - /d:org-openroadm-device/d:interface[d:name='XPDR1-NETWORK1-OTU'] - interface - - 2018-06-07T13:22:58+00:00 - - opticalPowerOutput - - nearEnd - tx - - 15min - 2.5 - dBm - complete - - - 24Hour - 2.23 - dBm - complete - - - - opticalPowerInput - - nearEnd - rx - - 15min - -45.1 - dBm - complete - - - 24Hour - -49.3 - dBm - complete - - - - diff --git a/tests/transportpce_tests/7.1/test_portmapping.py b/tests/transportpce_tests/7.1/test_portmapping.py index e734f4bb5..d440821b6 100644 --- a/tests/transportpce_tests/7.1/test_portmapping.py +++ b/tests/transportpce_tests/7.1/test_portmapping.py @@ -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() -- 2.36.6