From: Jonas MÃ¥rtensson Date: Mon, 9 May 2022 18:57:08 +0000 (+0200) Subject: Fix bug when creating SRG termination points X-Git-Tag: 4.3.0~11 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=9700db9bead54006440f970489171181c3902427 Fix bug when creating SRG termination points When a ROADM node includes multiple SRGs such as SRG1, SRG10, SRG11, etc., the termination points (tp-id) created under SRG1 in the openroadm topology included erroneous entries such as SRG10-PPn-TXRX under SRG1. This was caused by the createTopologyShard method filtering and selecting all logical connection points in the port mapping list containing SRG1 as a substring which is also true for SRG10, SRG11, etc. With this patch, the whole string before the first "-" is used for comparison instead. Also, add a specific UT to check this use case. JIRA: TRNSPRTPCE-664 Signed-off-by: Jonas MÃ¥rtensson Change-Id: Iab2802e1bac4e48aafeb4518d876c32b990742c3 (cherry picked from commit 142c5ad74a464cb02a64efeeedaaf9d35eeb21ff) --- diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java index 81e5ed563..180ac0862 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java @@ -102,8 +102,8 @@ public final class OpenRoadmTopology { } } for (String str : nodeShardList) { - List interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint().contains(str)) - .collect(Collectors.toList()); + List interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint() + .split("-")[0].equals(str)).collect(Collectors.toList()); if (str.contains("DEG")) { mapDeg.put(str, interList); } else if (str.contains("SRG")) { diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java index 832ea8eb1..d0ac4d628 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java @@ -79,7 +79,7 @@ public class OpenRoadmTopologyTest { @Test public void createTopologyShardForDegreeTest() { - Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, 0); + Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, List.of()); TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode); assertNotNull(topologyShard); assertEquals("Should contain 2 Degree nodes only", 2, topologyShard.getNodes().size()); @@ -110,7 +110,8 @@ public class OpenRoadmTopologyTest { @Test public void createTopologyShardForSrgTest() { - Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, 1); + Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, + List.of(Integer.valueOf(1))); TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode); assertNotNull(topologyShard); List nodes = topologyShard.getNodes(); @@ -119,9 +120,28 @@ public class OpenRoadmTopologyTest { checkSrgNode("1", nodes.get(0)); } + @Test + public void createTopologyShardForMultipleSrgTest() { + List srgNbs = List.of(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(10), + Integer.valueOf(11)); + Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 0, srgNbs); + TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode); + assertNotNull(topologyShard); + List nodes = topologyShard.getNodes().stream() + .sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue())) + .collect(Collectors.toList()); + assertEquals("Should contain 4 SRG nodes", 4, nodes.size()); + assertEquals("Should contain 0 link", 0, topologyShard.getLinks().size()); + checkSrgNode("1", nodes.get(0)); + checkSrgNode("10", nodes.get(1)); + checkSrgNode("11", nodes.get(2)); + checkSrgNode("2", nodes.get(3)); + } + @Test public void createTopologyShardForCompleteRdmNodeTest() { - Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, 2); + Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", "nodeA", 2, + List.of(Integer.valueOf(1), Integer.valueOf(2))); TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode); assertNotNull(topologyShard); assertEquals("Should contain 2 Deg and 2 SRG nodes", 4, topologyShard.getNodes().size()); @@ -182,7 +202,7 @@ public class OpenRoadmTopologyTest { @Ignore @Test public void createTopologyShardForRdmWithoutClliTest() { - Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", null, 2, 0); + Nodes mappingNode = NetworkmodelTestUtil.createMappingForRdm("ROADMA01", null, 2, List.of()); TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(mappingNode); assertNull("clli must not be null", topologyShard); } diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java index 75ee3fcfa..9ba08663d 100644 --- a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java +++ b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java @@ -61,10 +61,12 @@ public final class NetworkmodelTestUtil { private static final Logger LOG = LoggerFactory.getLogger(NetworkmodelTestUtil.class); - public static Nodes createMappingForRdm(String nodeId, String clli, int degNb, int srgNb) { + public static Nodes createMappingForRdm(String nodeId, String clli, int degNb, List srgNbs) { Map mappingList = new HashMap<>(); createDegreeMappings(mappingList, 1, degNb); - createSrgMappings(mappingList, 1, srgNb); + for (Integer integer : srgNbs) { + createSrgMappings(mappingList, integer.intValue()); + } return new NodesBuilder() .setNodeId(nodeId) .setNodeInfo(new NodeInfoBuilder().setNodeType(NodeTypes.Rdm).setNodeClli(clli).build()) @@ -225,18 +227,15 @@ public final class NetworkmodelTestUtil { return mappingMap; } - private static Map createSrgMappings(Map mappingMap, - int srgNbStart, int srgNbStop) { - for (int i = srgNbStart; i <= srgNbStop; i++) { - for (int j = 1; j <= 4; j++) { - Mapping mapping = new MappingBuilder() - .setLogicalConnectionPoint("SRG" + i + "-PP" + j + "-TXRX") - .setPortDirection("bidirectional") - .setSupportingPort("C" + j) - .setSupportingCircuitPackName(3 + i + "/0") - .build(); - mappingMap.put(mapping.key(),mapping); - } + private static Map createSrgMappings(Map mappingMap, int srgNb) { + for (int j = 1; j <= 4; j++) { + Mapping mapping = new MappingBuilder() + .setLogicalConnectionPoint("SRG" + srgNb + "-PP" + j + "-TXRX") + .setPortDirection("bidirectional") + .setSupportingPort("C" + j) + .setSupportingCircuitPackName(3 + srgNb + "/0") + .build(); + mappingMap.put(mapping.key(),mapping); } return mappingMap; }