Update link status of service-path-list 75/102575/5
authorGilles Thouenon <gilles.thouenon@orange.com>
Wed, 5 Oct 2022 18:03:53 +0000 (20:03 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Mon, 10 Oct 2022 07:36:01 +0000 (09:36 +0200)
- Update status of link resources terminated on a tp when its status
changes.
- Test it in hybrid functional test

JIRA: TRNSPRTPCE-695
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: I8ab606abd3053924fe9d411c97eef0337827dc83

servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java
tests/transportpce_tests/hybrid/test03_autonomous_reroute.py

index 960a00c3fadccc1ec12cce34c5039e83818caf55..c2e83a7607022127d71b3bf843f2edd38f2840fe 100644 (file)
@@ -36,6 +36,7 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdes
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.Resource;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
@@ -147,6 +148,9 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
         List<ZToA> tpResources = pathDescription.getZToADirection().getZToA().values().stream()
                 .filter(ele -> ele.getResource().getResource() instanceof TerminationPoint)
                 .collect(Collectors.toList());
+        List<ZToA> linkResources = pathDescription.getZToADirection().getZToA().values().stream()
+            .filter(ele -> ele.getResource().getResource() instanceof Link)
+            .collect(Collectors.toList());
         for (ZToA ztoA : tpResources) {
             String ztoAid = ztoA.getId();
             State ztoAState = ztoA.getResource().getState();
@@ -166,6 +170,21 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
                     .setResource(updatedResource)
                     .build();
                 newztoaMap.put(updatedZToA.key(), updatedZToA);
+                for (ZToA ztoALink : linkResources) {
+                    Link link = (Link)ztoALink.getResource().getResource();
+                    if (link.getLinkId().contains(tp.getTpNodeId())
+                            && link.getLinkId().contains(tp.getTpId())
+                            && ztoALink.getResource().getState() != updatedState) {
+                        ZToA updatedZToAlink = new ZToABuilder(ztoALink)
+                            .setId(ztoAid)
+                            .setResource(new ResourceBuilder()
+                                .setResource(link)
+                                .setState(updatedState)
+                                .build())
+                            .build();
+                        newztoaMap.put(updatedZToAlink.key(), updatedZToAlink);
+                    }
+                }
             }
         }
         return newztoaMap;
@@ -178,6 +197,9 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
         List<AToZ> tpResources = pathDescription.getAToZDirection().getAToZ().values().stream()
             .filter(ele -> ele.getResource().getResource() instanceof TerminationPoint)
             .collect(Collectors.toList());
+        List<AToZ> linkResources = pathDescription.getAToZDirection().getAToZ().values().stream()
+            .filter(ele -> ele.getResource().getResource() instanceof Link)
+            .collect(Collectors.toList());
         for (AToZ atoZ : tpResources) {
             String atoZid = atoZ.getId();
             State atoZState = atoZ.getResource().getState();
@@ -197,6 +219,21 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
                     .setResource(updatedResource)
                     .build();
                 newatozMap.put(updatedAToZ.key(), updatedAToZ);
+                for (AToZ atozLink : linkResources) {
+                    Link link = (Link)atozLink.getResource().getResource();
+                    if (link.getLinkId().contains(tp.getTpNodeId())
+                            && link.getLinkId().contains(tp.getTpId())
+                            && atozLink.getResource().getState() != updatedState) {
+                        AToZ updatedAToZlink = new AToZBuilder(atozLink)
+                            .setId(atoZid)
+                            .setResource(new ResourceBuilder()
+                                .setResource(link)
+                                .setState(updatedState)
+                                .build())
+                            .build();
+                        newatozMap.put(updatedAToZlink.key(), updatedAToZlink);
+                    }
+                }
             }
         }
         return newatozMap;
index 5053ae23911733c6e1eb1f04068dd5cf6825edac..b3ee1a3bb49dc201849014a7067e386d7cb543b0 100644 (file)
@@ -1206,7 +1206,7 @@ class TransportPCEtesting(unittest.TestCase):
     def test_40_get_service_path_service_2(self):
         response = test_utils.get_serv_path_list_attr("service-paths", "service2")
         self.assertEqual(response['status_code'], requests.codes.ok)
-        index = self.service_path_service_2_AtoZ.index(
+        index1 = self.service_path_service_2_AtoZ.index(
             {
                 'id': '10',
                 'resource': {
@@ -1216,14 +1216,29 @@ class TransportPCEtesting(unittest.TestCase):
                 }
             }
         )
-        service_path_expected = self.service_path_service_2_AtoZ[:index] + [{
+        index2 = self.service_path_service_2_AtoZ.index(
+            {
+                'id': '11',
+                'resource': {
+                    'state': 'inService',
+                    'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
+                }
+            }
+        )
+        service_path_expected = self.service_path_service_2_AtoZ[:index1] + [{
             'id': '10',
             'resource': {
                 'state': 'outOfService',
                 'tp-id': 'DEG2-TTP-TXRX',
                 'tp-node-id': 'ROADM-A1-DEG2'
             }
-        }] + self.service_path_service_2_AtoZ[index + 1:]
+        }] + self.service_path_service_2_AtoZ[index1 + 1:index2] + [{
+            'id': '11',
+            'resource': {
+                'state': 'outOfService',
+                'link-id': 'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX'
+            }
+        }] + self.service_path_service_2_AtoZ[index2 + 1:]
         self.assertCountEqual(service_path_expected,
                               response['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])