Fix bug when creating SRG termination points 82/100982/1
authorJonas Mårtensson <jonas.martensson@ri.se>
Mon, 9 May 2022 18:57:08 +0000 (20:57 +0200)
committerGuillaume Lambert <guillaume.lambert@orange.com>
Wed, 11 May 2022 07:03:00 +0000 (07:03 +0000)
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 <jonas.martensson@ri.se>
Change-Id: Iab2802e1bac4e48aafeb4518d876c32b990742c3
(cherry picked from commit 142c5ad74a464cb02a64efeeedaaf9d35eeb21ff)

networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java

index 81e5ed563d4b3629801770b409bd4600f83f2b23..180ac0862c22fe33ce3f874b41d2307832b5a8b1 100644 (file)
@@ -102,8 +102,8 @@ public final class OpenRoadmTopology {
                 }
             }
             for (String str : nodeShardList) {
-                List<Mapping> interList = mappingList.stream().filter(x -> x.getLogicalConnectionPoint().contains(str))
-                    .collect(Collectors.toList());
+                List<Mapping> 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")) {
index 832ea8eb10c99956999e102cf96be9174ac81ee3..d0ac4d62869d68949190071b244f6cc6b9a972ba 100644 (file)
@@ -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<Node> nodes = topologyShard.getNodes();
@@ -119,9 +120,28 @@ public class OpenRoadmTopologyTest {
         checkSrgNode("1", nodes.get(0));
     }
 
+    @Test
+    public void createTopologyShardForMultipleSrgTest() {
+        List<Integer> 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<Node> 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);
     }
index 75ee3fcfa68cc1a1bb5ae6e1e2384e007e502edc..9ba08663da5309fadfdf6963544c084855de479c 100644 (file)
@@ -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<Integer> srgNbs) {
         Map<MappingKey,Mapping> 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<MappingKey,Mapping> createSrgMappings(Map<MappingKey,Mapping> 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<MappingKey,Mapping> createSrgMappings(Map<MappingKey,Mapping> 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;
     }