Fix bug when creating SRG termination points 17/101017/2
authorJonas Mårtensson <jonas.martensson@ri.se>
Mon, 9 May 2022 18:57:08 +0000 (20:57 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Tue, 10 May 2022 13:49:43 +0000 (15:49 +0200)
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

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 35f247d893dfd463f5368946186cef674a86d8c7..a101315121a1abba0baf215d6b757ebf35197b88 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 8b316195adacb17bc7475d5b55f285d28e9946b2..b8c3c62e13b252a1e3a36e1205586be4d6a633a4 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 80fef3e34e1d52964527d008ebcd142cc254088e..315bc2433735202fc1778121699532f28da86eec 100644 (file)
@@ -64,10 +64,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())
@@ -228,18 +230,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;
     }