From 6d45c0088668901df1e3089c221e4248207138c9 Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Wed, 5 Oct 2022 20:03:53 +0200 Subject: [PATCH] Update link status of service-path-list - 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 Change-Id: I8ab606abd3053924fe9d411c97eef0337827dc83 --- .../listeners/NetworkModelListenerImpl.java | 37 +++++++++++++++++++ .../hybrid/test03_autonomous_reroute.py | 21 +++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java index 960a00c3f..c2e83a760 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java @@ -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 tpResources = pathDescription.getZToADirection().getZToA().values().stream() .filter(ele -> ele.getResource().getResource() instanceof TerminationPoint) .collect(Collectors.toList()); + List 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 tpResources = pathDescription.getAToZDirection().getAToZ().values().stream() .filter(ele -> ele.getResource().getResource() instanceof TerminationPoint) .collect(Collectors.toList()); + List 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; diff --git a/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py b/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py index 5053ae239..b3ee1a3bb 100644 --- a/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py +++ b/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py @@ -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']) -- 2.36.6