From e891adcb78e7985004bb7a8fecc3c1295bfa56ef Mon Sep 17 00:00:00 2001 From: orenais Date: Thu, 21 Dec 2023 16:35:42 +0100 Subject: [PATCH] Refactoring of Tapi Step2 Add createAvailable/SupportedPayloadStructure and photonic-owned -node-edge-point-spec attribute in convertORToTapiTopology class JIRA: TRNSPRTPCE-758 Signed-off-by: orenais Change-Id: I04821270cab8a1408032cea42e45292fdfe81ef1 --- .../transportpce/tapi/impl/TapiProvider.java | 2 +- .../topology/ConvertORToTapiTopology.java | 400 ++++++++++++++++-- .../tapi/topology/TapiTopologyImpl.java | 134 +++--- .../tapi/topology/TopologyUtils.java | 66 +-- .../TapiTopologyImplExceptionTest.java | 79 +--- .../tapi/topology/TapiTopologyImplTest.java | 27 +- .../tapi/test01_abstracted_topology.py | 10 +- 7 files changed, 502 insertions(+), 216 deletions(-) diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java index 34de9e3f0..2ee735438 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java @@ -117,7 +117,7 @@ public class TapiProvider { TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils, pceListenerImpl, rendererListenerImpl, networkTransactionService); rpcRegistrations.add(rpcProviderService.registerRpcImplementations(tapiConnectivity.registerRPCs())); - TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl topo = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, tapiLink); rpcRegistrations.add(rpcProviderService.registerRpcImplementations(topo.registerRPCs())); this.listeners = new ArrayList<>(); diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java index 134f892ea..6c97ba4de 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java @@ -7,6 +7,7 @@ */ package org.opendaylight.transportpce.tapi.topology; +import java.math.RoundingMode; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; @@ -17,10 +18,13 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import org.opendaylight.transportpce.common.fixedflex.GridConstant; import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributes; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList; @@ -30,10 +34,12 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.O import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState; @@ -45,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capa import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.payload.structure.CapacityBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey; @@ -52,11 +59,26 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODUCN; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.OTUTYPEOTUCN; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpec; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpecBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.photonic.media.node.edge.point.spec.SpectrumCapabilityPacBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrum; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrum; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrum; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup; @@ -67,11 +89,15 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructure; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructureBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructure; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructureBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey; @@ -85,6 +111,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.tr import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; @@ -252,8 +279,133 @@ public class ConvertORToTapiTopology { return msipl; } + public List createAvailablePayloadStructureForPhtncMedia(Boolean otsiProvisioned, + Collection sicList, List supportedOpModes) { + if (supportedOpModes == null || supportedOpModes.isEmpty()) { + return null; + } + Integer nepRate = 0; + Integer loopRate = 0; + for (OperationalModeKey operationalMode : supportedOpModes) { + if (operationalMode.toString().contains("800G")) { + loopRate = 8; + } else if (operationalMode.toString().contains("600G")) { + loopRate = 6; + } else if (operationalMode.toString().contains("400G")) { + loopRate = 4; + } else if (operationalMode.toString().contains("300G")) { + loopRate = 3; + } else if (operationalMode.toString().contains("200G")) { + loopRate = 2; + } else if (operationalMode.toString().contains("100G")) { + loopRate = 1; + } + if (loopRate >= nepRate) { + nepRate = loopRate; + } + } + CapacityBuilder capBd = new CapacityBuilder() + .setUnit(CAPACITYUNITGBPS.VALUE); + List aps = new ArrayList<>(); + Integer cepInstanceNber = 1; + if (otsiProvisioned) { + cepInstanceNber = 0; + } + for (SupportedInterfaceCapability sic : sicList) { + String ifCapType = sic.getIfCapType().toString().split("\\{")[0]; + switch (ifCapType) { + case "IfOCHOTU4ODU4": + case "IfOCHOTU4ODU4Regen": + case "IfOCHOTU4ODU4Uniregen": + aps.add(new AvailablePayloadStructureBuilder() + .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE)) + .setNumberOfCepInstances(Uint64.valueOf(cepInstanceNber)) + .setCapacity(capBd.setValue(Decimal64.valueOf(100.0 * cepInstanceNber, RoundingMode.DOWN)) + .build()) + .build()); + break; + case "IfOCHOTUCnODUCn": + case "IfOtsiOtucnOducn": + case "IfOCHOTUCnODUCnRegen": + case "IfOCHOTUCnODUCnUniregen": + aps.add(new AvailablePayloadStructureBuilder() + .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE, + ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE)) + .setNumberOfCepInstances(Uint64.valueOf(nepRate * cepInstanceNber)) + .setCapacity( + capBd.setValue(Decimal64.valueOf(nepRate * 100.0 * cepInstanceNber, RoundingMode.DOWN)) + .build()) + .build()); + break; + default: + break; + } + } + return aps.stream().distinct().toList(); + } + + public List createSupportedPayloadStructureForPhtncMedia( + Collection sicList, List supportedOpModes) { + if (supportedOpModes == null || supportedOpModes.isEmpty()) { + return null; + } + Integer nepRate = 0; + Integer loopRate = 0; + for (OperationalModeKey operationalMode : supportedOpModes) { + if (operationalMode.toString().contains("800G")) { + loopRate = 8; + } else if (operationalMode.toString().contains("600G")) { + loopRate = 6; + } else if (operationalMode.toString().contains("400G")) { + loopRate = 4; + } else if (operationalMode.toString().contains("300G")) { + loopRate = 3; + } else if (operationalMode.toString().contains("200G")) { + loopRate = 2; + } else if (operationalMode.toString().contains("100G")) { + loopRate = 1; + } + if (loopRate >= nepRate) { + nepRate = loopRate; + } + } + CapacityBuilder capBd = new CapacityBuilder() + .setUnit(CAPACITYUNITGBPS.VALUE); + List sps = new ArrayList<>(); + for (SupportedInterfaceCapability sic : sicList) { + String ifCapType = sic.getIfCapType().toString().split("\\{")[0]; + switch (ifCapType) { + case "IfOCHOTU4ODU4": + case "IfOCHOTU4ODU4Regen": + case "IfOCHOTU4ODU4Uniregen": + sps.add(new SupportedPayloadStructureBuilder() + .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE)) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .setCapacity(capBd.setValue(Decimal64.valueOf(100.0, RoundingMode.DOWN)).build()) + .build()); + break; + case "IfOCHOTUCnODUCn": + case "IfOtsiOtucnOducn": + case "IfOCHOTUCnODUCnRegen": + case "IfOCHOTUCnODUCnUniregen": + sps.add(new SupportedPayloadStructureBuilder() + .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE, + ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE)) + .setNumberOfCepInstances(Uint64.valueOf(nepRate)) + .setCapacity(capBd.setValue(Decimal64.valueOf(nepRate * 100.0, RoundingMode.DOWN)).build()) + .build()); + break; + default: + break; + } + } + return sps.stream().distinct().toList(); + } + + @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH", + justification = "Voluntarily No break in switchcase where comment is inserted in following method") public List createSupportedCepLayerProtocolQualifier( - Collection sicList, LayerProtocolName lpn) { + Collection sicList, LayerProtocolName lpn) { List sclpqiList = new ArrayList<>(); if (sicList == null) { sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() @@ -269,65 +421,63 @@ public class ConvertORToTapiTopology { case "ETH": case "DSR": switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file case "If1GEODU0": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU0.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPEGigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If10GEODU2e": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If10GEODU2": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU2.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If10GE": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPE10GigELAN.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If100GEODU4": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If100GE": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(DIGITALSIGNALTYPE100GigE.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "IfOCHOTU4ODU4": case "IfOCH": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; default: @@ -337,25 +487,23 @@ public class ConvertORToTapiTopology { break; case "ODU": switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file case "If1GEODU0": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU0.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If10GEODU2e": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU2E.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If10GEODU2": case "If10GE": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU2.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; case "If100GEODU4": @@ -364,7 +512,7 @@ public class ConvertORToTapiTopology { case "IfOCH": sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(ODUTYPEODU4.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) + .setNumberOfCepInstances(Uint64.valueOf(1)) .build()); break; default: @@ -373,15 +521,35 @@ public class ConvertORToTapiTopology { } break; case "PHOTONIC_MEDIA": - if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) { - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); + switch (ifCapType) { + case "IfOCHOTUCnODUCn": + case "IfOtsiOtucnOducn": + case "IfOCHOTUCnODUCnRegen": + case "IfOCHOTUCnODUCnUniregen": + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + //fallthrough + case "IfOCH": + case "IfOCHOTU4ODU4": + case "IfOCHOTU4ODU4Regen": + case "IfOCHOTU4ODU4Uniregen": + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + break; + default: + break; } break; default: @@ -392,6 +560,44 @@ public class ConvertORToTapiTopology { return sclpqiList.stream().distinct().toList(); } + public Map getXpdrUsedWavelength(TerminationPoint tp) { + if (tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526 + .TerminationPoint1.class) == null + || tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm + .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes() + == null) { + return null; + } + XpdrNetworkAttributes xnatt = tp.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class) + .getXpdrNetworkAttributes(); + Map freqWidthMap = new HashMap<>(); + if (xnatt.getWavelength() != null && xnatt.getWavelength().getFrequency() != null + && xnatt.getWavelength().getWidth() != null) { + freqWidthMap.put(xnatt.getWavelength().getFrequency().getValue().doubleValue(), + xnatt.getWavelength().getWidth().getValue().doubleValue()); + return freqWidthMap; + } + return null; + } + + public Map getPPUsedWavelength(TerminationPoint tp) { + PpAttributes ppAtt = tp.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class) + .getPpAttributes(); + if (ppAtt == null) { + return null; + } + Map freqWidthMap = new HashMap<>(); + if (ppAtt.getUsedWavelength() != null && ppAtt.getUsedWavelength().entrySet().iterator().next() != null) { + freqWidthMap.put(ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency().getValue() + .doubleValue(), ppAtt.getUsedWavelength().entrySet().iterator().next().getValue().getFrequency() + .getValue().doubleValue()); + return freqWidthMap; + } + return null; + } + private OduSwitchingPools createOduSwitchingPoolForTp100G() { Map nblMap = new HashMap<>(); int count = 1; @@ -567,8 +773,6 @@ public class ConvertORToTapiTopology { String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS)); onepl.put(onep.key(), onep); } - // NETWORK NEP OTSI_MC network nep creation - //TODO: add test to see if wavelength is provionned and condition this creation to this! for (int i = 0; i < oorNetworkPortList.size(); i++) { Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes( (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, @@ -606,7 +810,7 @@ public class ConvertORToTapiTopology { LOG.debug("UuidKey={}", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue())); if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR, - tp.getValue())) || this.uuidMap.containsKey(String.join( + tp.getValue())) || this.uuidMap.containsKey(String.join( "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) { String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR : TapiStringConstants.I_ODU; @@ -710,7 +914,6 @@ public class ConvertORToTapiTopology { LOG.warn("Tp supported interface doesnt exist on TP {}", oorTp.getTpId().getValue()); return null; } -// Collection sicList = tp1.getTpSupportedInterfaces() Collection sicColl = tp1.getTpSupportedInterfaces() .getSupportedInterfaceCapability().values(); OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder() @@ -728,6 +931,89 @@ public class ConvertORToTapiTopology { onepBldr.setMappedServiceInterfacePoint( createMSIP(1, nepProtocol, oorTp.getTpId().getValue(), keyword, sicColl, operState, adminState)); } + List opModeList = new ArrayList<>(); + if (oorTp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) { + if (oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526 + .TerminationPoint1.class) == null + || oorTp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm + .network.topology.rev230526.TerminationPoint1.class).getXpdrNetworkAttributes() + == null) { + for (SupportedInterfaceCapability sic : sicColl) { + String ifCapType = sic.getIfCapType().toString().split("\\{")[0]; + if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType) + || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) { + opModeList.add(new OperationalModeKey("400G")); + break; + } + } + opModeList.add(new OperationalModeKey("100G")); + } else { + opModeList = oorTp.augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class) + .getXpdrNetworkAttributes().getSupportedOperationalModes().getOperationalMode().keySet().stream() + .toList(); + } + Map freqWidthMap = getXpdrUsedWavelength(oorTp); + if (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC).equals(keyword) + || String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)) { + //Creating OTS & OTSI_MC NEP specific attributes + onepBldr.setSupportedPayloadStructure(createSupportedPayloadStructureForPhtncMedia( + sicColl,opModeList)); + SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder(); + OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder(); + if (freqWidthMap != null && !freqWidthMap.isEmpty()) { + onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia( + true, sicColl,opModeList)); + ospecBd + .setUpperFrequency(Uint64.valueOf(Math.round( + freqWidthMap.keySet().iterator().next().doubleValue() * 1E09 + + (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2))) + .setLowerFrequency(Uint64.valueOf(Math.round( + freqWidthMap.keySet().iterator().next().doubleValue() * 1E09 + - (freqWidthMap.entrySet().iterator().next().getValue().doubleValue() * 1E06) / 2))); + } else { + ospecBd + .setUpperFrequency(Uint64.valueOf(0)) + .setLowerFrequency(Uint64.valueOf(0)); + onepBldr.setAvailablePayloadStructure(createAvailablePayloadStructureForPhtncMedia( + false, sicColl,opModeList)); + double naz = 0.01; + AvailableSpectrum aspec = new AvailableSpectrumBuilder() + .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + naz))) + .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz))) + .build(); + Map aspecMap = new HashMap<>(); + aspecMap.put(new AvailableSpectrumKey(aspec.getLowerFrequency(), + aspec.getUpperFrequency()), aspec); + spectrumPac.setAvailableSpectrum(aspecMap); + } + OccupiedSpectrum ospec = ospecBd.build(); + Map ospecMap = new HashMap<>(); + ospecMap.put(new OccupiedSpectrumKey(ospec.getLowerFrequency(), + ospec.getUpperFrequency()), ospec); + spectrumPac.setOccupiedSpectrum(ospecMap); + double nazz = 0.01; + SupportableSpectrum sspec = new SupportableSpectrumBuilder() + .setUpperFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + nazz))) + .setLowerFrequency(Uint64.valueOf(Math.round(GridConstant.START_EDGE_FREQUENCY * 1E09 + + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + nazz))) + .build(); + Map sspecMap = new HashMap<>(); + sspecMap.put(new SupportableSpectrumKey(sspec.getLowerFrequency(), + sspec.getUpperFrequency()), sspec); + spectrumPac.setSupportableSpectrum(sspecMap); + PhotonicMediaNodeEdgePointSpec pnepSpec = new PhotonicMediaNodeEdgePointSpecBuilder() + .setSpectrumCapabilityPac(spectrumPac.build()) + .build(); + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.OwnedNodeEdgePoint1 onep1 = + new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121 + .OwnedNodeEdgePoint1Builder() + .setPhotonicMediaNodeEdgePointSpec(pnepSpec) + .build(); + onepBldr.addAugmentation(onep1); + } + } return onepBldr.build(); } @@ -755,6 +1041,8 @@ public class ConvertORToTapiTopology { .build(); } + @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "SF_SWITCH_FALLTHROUGH", + justification = "Voluntarily No break in switchcase where comment is inserted in following method") private List createSipSupportedLayerProtocolQualifier( @@ -776,8 +1064,6 @@ public class ConvertORToTapiTopology { case "ETH": case "DSR": switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file case "If1GEODU0": sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() @@ -855,8 +1141,6 @@ public class ConvertORToTapiTopology { break; case "ODU": switch (ifCapType) { - // TODO: it may be needed to add more cases clauses if the interface capabilities of a - // port are extended in the config file case "If1GEODU0": sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() @@ -895,17 +1179,39 @@ public class ConvertORToTapiTopology { } break; case "PHOTONIC_MEDIA": - if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) { - sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 - .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); - sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 - .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() + switch (ifCapType) { + case "IfOCHOTUCnODUCn": + case "IfOtsiOtucnOducn": + case "IfOCHOTUCnODUCnRegen": + case "IfOCHOTUCnODUCnUniregen": + sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 + .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(ODUTYPEODUCN.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 + .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(OTUTYPEOTUCN.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + //fallthrough + case "IfOCH": + case "IfOCHOTU4ODU4": + case "IfOCHOTU4ODU4Regen": + case "IfOCHOTU4ODU4Uniregen": + sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 + .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 + .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(0)) - .build()); + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + break; + default: + break; } break; default: diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java index bd5f6a1ee..4bee83b0a 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java @@ -8,7 +8,6 @@ package org.opendaylight.transportpce.tapi.topology; import com.google.common.collect.ImmutableClassToInstanceMap; -import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.ListenableFuture; import java.nio.charset.Charset; import java.util.ArrayList; @@ -26,10 +25,10 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.TapiContext; import org.opendaylight.transportpce.tapi.utils.TapiLink; @@ -101,8 +100,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Ru import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TapiTopologyService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.link.details.output.LinkBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.node.edge.point.details.output.NodeEdgePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.TopologyBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey; @@ -128,17 +125,20 @@ import org.slf4j.LoggerFactory; public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService { private static final Logger LOG = LoggerFactory.getLogger(TapiTopologyImpl.class); - private final DataBroker dataBroker; + private final NetworkTransactionService networkTransactionService; private final TapiContext tapiContext; private final TopologyUtils topologyUtils; private final TapiLink tapiLink; + private Map tapiSips; - public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils, - TapiLink tapiLink) { - this.dataBroker = dataBroker; + public TapiTopologyImpl(NetworkTransactionService networkTransactionService, TapiContext tapiContext, + TopologyUtils topologyUtils, TapiLink tapiLink) { + this.networkTransactionService = networkTransactionService; this.tapiContext = tapiContext; this.topologyUtils = topologyUtils; this.tapiLink = tapiLink; + this.tapiSips = new HashMap<>(); + } @Override @@ -164,43 +164,53 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService @Override public ListenableFuture> getTopologyDetails(GetTopologyDetailsInput input) { - // TODO -> Add check for Full T0 Multilayer - Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology; + Uuid topologyUuidAbs = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( + Charset.forName("UTF-8"))).toString()); + Uuid topologyUuidFull = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); - if (input.getTopologyId().equals(topologyUuid)) { + if (input.getTopologyId().equals(topologyUuidFull)) { Context context = this.tapiContext.getTapiContext(); Map topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology(); - if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuid))) { + if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuidFull))) { LOG.error("Topology {} not found in datastore", input.getTopologyId()); return RpcResultBuilder.failed() .withError(ErrorType.RPC, "Invalid Topology name") .buildFuture(); } - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology - topology = topologyMap.get(new TopologyKey(topologyUuid)); + topology = topologyMap.get(new TopologyKey(input.getTopologyId())); return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder() - .setTopology(this.topologyUtils.transformTopology(topology)) - .build()) + .setTopology(this.topologyUtils.transformTopology(topology)) + .build()) .buildFuture(); } - topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes( + Uuid topologyUuid100G = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes( Charset.forName("UTF-8"))).toString()); - try { - LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId()); - Topology topology = createAbstractedOtnTopology(); - if (topologyUuid.equals(input.getTopologyId())) { + if (topologyUuid100G.equals(input.getTopologyId()) || topologyUuidAbs.equals(input.getTopologyId())) { + try { + LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId()); + topology = createAbstractedOtnTopology(); + if (input.getTopologyId().equals(topologyUuidAbs)) { + return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder() + .setTopology(this.topologyUtils.transformTopology(topology)).build()) + .buildFuture(); + } topology = createAbstracted100GTpdrTopology(topology); + return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder() + .setTopology(this.topologyUtils.transformTopology(topology)).build()) + .buildFuture(); + } catch (TapiTopologyException e) { + LOG.error("error building TAPI topology"); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Error building topology") + .buildFuture(); } - return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build()) - .buildFuture(); - } catch (TapiTopologyException e) { - LOG.error("error building TAPI topology"); - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Error building topology") - .buildFuture(); } + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Invalid Topology name") + .buildFuture(); } @Override @@ -338,7 +348,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService .build(); } - private Topology createAbstracted100GTpdrTopology(Topology topology) { + public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology + createAbstracted100GTpdrTopology( + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology topology) { List dsrNodes = topology.nonnullNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) @@ -355,31 +367,17 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8"))).toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node = createTapiNode(nep100GTpdrList, topoUuid); - return new TopologyBuilder() + return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context + .TopologyBuilder() .setName(Map.of(topoName.key(), topoName)) .setUuid(topoUuid) .setNode(Map.of(node.key(), node)) + .setLayerProtocolName(Set.of(LayerProtocolName.DSR, LayerProtocolName.ETH)) .build(); } - private Network readTopology(InstanceIdentifier networkIID) throws TapiTopologyException { - Network topology = null; - FluentFuture> topologyFuture = dataBroker.newReadOnlyTransaction() - .read(LogicalDatastoreType.CONFIGURATION, networkIID); - try { - topology = topologyFuture.get().orElseThrow(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID - .firstKeyOf(Network.class).getNetworkId().getValue(), e); - } catch (ExecutionException e) { - throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID - .firstKeyOf(Network.class).getNetworkId().getValue(), e); - } - return topology; - } - - private Topology createAbstractedOtnTopology() throws TapiTopologyException { + public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology + createAbstractedOtnTopology() throws TapiTopologyException { // read openroadm-topology Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II); List linkList = new ArrayList<>(); @@ -457,11 +455,32 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService .setValue(TapiStringConstants.T0_MULTILAYER) .setValueName("TAPI Topology Name") .build(); - return new TopologyBuilder() - .setName(Map.of(name.key(), name)) - .setUuid(topoUuid) - .setNode(tapiNodeList) - .setLink(tapiLinkList).build(); + LOG.info("TOPOABSTRACTED : the list of node is as follows {}", tapiNodeList.toString()); + this.tapiSips.putAll(tapiAbstractFactory.getTapiSips()); + return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context + .TopologyBuilder() + .setName(Map.of(name.key(), name)) + .setUuid(topoUuid) + .setNode(tapiNodeList) + .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.DIGITALOTN)) + .setLink(tapiLinkList).build(); + } + + private Network readTopology(InstanceIdentifier networkIID) throws TapiTopologyException { + Network topology = null; + ListenableFuture> topologyFuture = networkTransactionService + .read(LogicalDatastoreType.CONFIGURATION, networkIID); + try { + topology = topologyFuture.get().orElseThrow(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID + .firstKeyOf(Network.class).getNetworkId().getValue(), e); + } catch (ExecutionException e) { + throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID + .firstKeyOf(Network.class).getNetworkId().getValue(), e); + } + return topology; } private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node @@ -498,9 +517,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService KeyedInstanceIdentifier pmIID = InstanceIdentifier.create( org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network.class) .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp)); - @NonNull - FluentFuture> mappingOpt = dataBroker.newReadOnlyTransaction().read( - LogicalDatastoreType.CONFIGURATION, pmIID); + ListenableFuture> mappingOpt = networkTransactionService + .read(LogicalDatastoreType.CONFIGURATION, pmIID); Mapping mapping = null; if (mappingOpt.isDone()) { try { @@ -582,4 +600,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService return nodeRuleGroupMap; } + public Map getSipMap() { + return tapiSips; + } + } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java index 726954ea2..8eba6c2cf 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java @@ -53,7 +53,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.glob import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1; +//import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; @@ -240,6 +240,14 @@ public final class TopologyUtils { // Retrieve created sips map in TapiFactory when mapping all the nodes this.tapiSips.putAll(tapiFullFactory.getTapiSips()); + var topo = new TopologyBuilder() + .setName(Map.of(name.key(), name)) + .setUuid(topoUuid) + .setNode(tapiNodeList) + .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU, + LayerProtocolName.DSR)) + .setLink(tapiLinkList).build(); + LOG.error("TOPOUTIL, Initial FullTopology Builder.build = {}", topo.toString()); return new TopologyBuilder() .setName(Map.of(name.key(), name)) .setUuid(topoUuid) @@ -256,10 +264,6 @@ public final class TopologyUtils { .build(); } - public Map getSipMap() { - return tapiSips; - } - public boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List xpdOut, List xpdIn) { LOG.info("Inside Checktp for node {}-{}", nodeIdTopo, nodeIdPortMap); @@ -320,23 +324,20 @@ public final class TopologyUtils { .setUuid(topology.getUuid()) .setName(topology.getName()) .setLayerProtocolName(topology.getLayerProtocolName()) - .setNode(topology.getNode()) .setLink(topology.getLink()); - if (topology.getNode() == null) { - topologyBuilder.setNode(topology.getNode()); + if (topology.nonnullNode().isEmpty()) { return topologyBuilder.build(); } - // TODO -> Need to remove CEPs from NEPs. If not error from get Topology details output Map mapNode = new HashMap<>(); - for (Node node: topology.getNode().values()) { + for (Node node: topology.nonnullNode().values()) { Map onepMap = new HashMap<>(); - for (OwnedNodeEdgePoint onep: node.getOwnedNodeEdgePoint().values()) { - OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class); - if (onep1 == null) { - onepMap.put(onep.key(), onep); - continue; - } - OwnedNodeEdgePointBuilder newOnepBuilder = new OwnedNodeEdgePointBuilder() + for (OwnedNodeEdgePoint onep: node.nonnullOwnedNodeEdgePoint().values()) { +// OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class); +// if (onep1 == null) { +// onepMap.put(onep.key(), onep); +// continue; +// } + OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder() .setUuid(onep.getUuid()) .setLayerProtocolName(onep.getLayerProtocolName()) .setName(onep.getName()) @@ -345,17 +346,25 @@ public final class TopologyUtils { .setAdministrativeState(onep.getAdministrativeState()) .setOperationalState(onep.getOperationalState()) .setLifecycleState(onep.getLifecycleState()) -// .setTerminationDirection(onep.getTerminationDirection()) -// .setTerminationState(onep.getTerminationState()) +// .setTerminationDirection(onep.getTerminationDirection()) +// .setTerminationState(onep.getTerminationState()) .setDirection(onep.getDirection()) - .setLinkPortRole(onep.getLinkPortRole()); - if (onep.getMappedServiceInterfacePoint() != null) { - newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint()); - } - OwnedNodeEdgePoint nep = newOnepBuilder.build(); - onepMap.put(nep.key(), nep); + .setSupportedPayloadStructure(onep.getSupportedPayloadStructure()) + .setAvailablePayloadStructure(onep.getAvailablePayloadStructure()) + .setLinkPortRole(onep.getLinkPortRole()) + .setMappedServiceInterfacePoint(onep.nonnullMappedServiceInterfacePoint()) + .build(); + onepMap.put(newOnep.key(), newOnep); } - Node newNode = new NodeBuilder(node) + Node newNode = new NodeBuilder() + .setUuid(node.getUuid()) + .setName(node.getName()) + .setOperationalState(node.getOperationalState()) + .setAdministrativeState(node.getAdministrativeState()) + .setLifecycleState(node.getLifecycleState()) + .setLayerProtocolName(node.getLayerProtocolName()) + .setNodeRuleGroup(node.getNodeRuleGroup()) + .setInterRuleGroup(node.getInterRuleGroup()) .setOwnedNodeEdgePoint(onepMap) .build(); mapNode.put(newNode.key(), newNode); @@ -363,4 +372,9 @@ public final class TopologyUtils { topologyBuilder.setNode(mapNode); return topologyBuilder.build(); } + + public Map getSipMap() { + return tapiSips; + } + } diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java index b0ff26ba9..960a41c93 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java @@ -7,26 +7,22 @@ */ package org.opendaylight.transportpce.tapi.topology; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.mockito.Mockito.mock; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.nio.charset.Charset; -import java.util.Optional; import java.util.UUID; import java.util.concurrent.ExecutionException; -import org.eclipse.jdt.annotation.NonNull; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.opendaylight.mdsal.binding.api.DataBroker; -import org.opendaylight.mdsal.binding.api.ReadTransaction; -import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.TapiContext; @@ -35,12 +31,13 @@ import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; +@ExtendWith(MockitoExtension.class) public class TapiTopologyImplExceptionTest { + @Mock + private NetworkTransactionService networkTransactionService; @Mock private TapiContext tapiContext; @Mock @@ -50,59 +47,17 @@ public class TapiTopologyImplExceptionTest { @Test void getTopologyDetailsWithExceptionTest() throws InterruptedException, ExecutionException { - DataBroker dataBroker = mock(DataBroker.class); - when(dataBroker.newReadOnlyTransaction()) - .thenReturn(new ReadTransactionMock()); - NetworkTransactionService networkTransactionService = mock(NetworkTransactionService.class); - Answer> answer = new Answer>() { - - @Override - public FluentFuture answer(InvocationOnMock invocation) throws Throwable { - return CommitInfo.emptyFluentFuture(); - } - - }; - when(networkTransactionService.commit()).then(answer); - tapiContext = new TapiContext(networkTransactionService); - + when(networkTransactionService.read(any(), any())) + .thenReturn(FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException()))); Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(dataBroker, tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); - RpcResult rpcResult = result.get(); - if (rpcResult.isSuccessful()) { - Topology topology = rpcResult.getResult().getTopology(); - assertNull(topology, "Topology should be null"); - } else { - assertNull(null, "Topology should be null"); - } - } - - private final class ReadTransactionMock implements ReadTransaction { - - @Override - public @NonNull Object getIdentifier() { - // TODO Auto-generated method stub - return null; - } - - @Override - public @NonNull FluentFuture> read(@NonNull LogicalDatastoreType store, - @NonNull InstanceIdentifier path) { - return FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException())); - } - - @Override - public @NonNull FluentFuture exists(@NonNull LogicalDatastoreType store, - @NonNull InstanceIdentifier path) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void close() { - // TODO Auto-generated method stub - } + assertFalse(result.get().isSuccessful(), "RpcResult is not successful"); + assertNull(result.get().getResult(), "RpcResult result should be null"); + assertEquals(ErrorType.RPC, result.get().getErrors().get(0).getErrorType()); + assertEquals("Error building topology", result.get().getErrors().get(0).getMessage()); } } \ No newline at end of file diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java index 71a6aaf55..3f7b76487 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java @@ -129,7 +129,8 @@ public class TapiTopologyImplTest extends AbstractTest { Charset.forName("UTF-8"))).toString()); LOG.info("TPDR100GUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); LOG.info("RESULT of getTopoDetailsTopo/name = {}", result.get().getResult().getTopology().getName().toString()); result.addListener(new Runnable() { @@ -179,7 +180,8 @@ public class TapiTopologyImplTest extends AbstractTest { Charset.forName("UTF-8"))).toString()); LOG.info("T0MultilayerUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); result.addListener(new Runnable() { @Override @@ -329,7 +331,8 @@ public class TapiTopologyImplTest extends AbstractTest { Charset.forName("UTF-8"))).toString()); LOG.info("T0FullMultilayerUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); result.addListener(new Runnable() { @Override @@ -460,12 +463,6 @@ public class TapiTopologyImplTest extends AbstractTest { .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) .count(); assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps"); - Node nodeRoadm = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) - && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue() - .equals("ROADM-A1+PHOTONIC_MEDIA")) - .findAny().orElseThrow(); long inb6 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) @@ -523,7 +520,8 @@ public class TapiTopologyImplTest extends AbstractTest { Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); result.addListener(new Runnable() { @Override @@ -536,7 +534,6 @@ public class TapiTopologyImplTest extends AbstractTest { @Nullable Topology topology = rpcResult.getResult().getTopology(); for (Node node:topology.getNode().values()) { - //String nodeName = node.getName().values().stream().findFirst().orElseThrow().getValue(); Uuid nodeUuid = node.getUuid(); GetNodeDetailsInput input1 = TapiTopologyDataUtils.buildGetNodeDetailsInput(topologyUuid, nodeUuid); ListenableFuture> result1 = tapiTopoImpl.getNodeDetails(input1); @@ -552,7 +549,6 @@ public class TapiTopologyImplTest extends AbstractTest { Node node1 = rpcResult1.getResult().getNode(); assertNotNull(node1, "Node should not be null"); for (OwnedNodeEdgePoint onep:node1.getOwnedNodeEdgePoint().values()) { - //String onepName = onep.getName().values().stream().findFirst().orElseThrow().getValue(); Uuid onepUuid = onep.getUuid(); GetNodeEdgePointDetailsInput input2 = TapiTopologyDataUtils.buildGetNodeEdgePointDetailsInput( topologyUuid, nodeUuid, onepUuid); @@ -580,7 +576,8 @@ public class TapiTopologyImplTest extends AbstractTest { Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); result.addListener(new Runnable() { @Override @@ -593,7 +590,6 @@ public class TapiTopologyImplTest extends AbstractTest { @Nullable Topology topology = rpcResult.getResult().getTopology(); for (Link link:topology.getLink().values()) { - //String linkName = link.getName().values().stream().findFirst().orElseThrow().getValue(); Uuid linkUuid = link.getUuid(); GetLinkDetailsInput input1 = TapiTopologyDataUtils.buildGetLinkDetailsInput( topologyUuid, linkUuid); @@ -616,7 +612,8 @@ public class TapiTopologyImplTest extends AbstractTest { void getSipDetailsWhenSuccessful() throws ExecutionException, InterruptedException { GetServiceInterfacePointListInput input = TapiTopologyDataUtils.buildServiceInterfacePointListInput(); - TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); + TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils, + tapiLink); ListenableFuture> result = tapiTopoImpl .getServiceInterfacePointList(input); result.addListener(new Runnable() { diff --git a/tests/transportpce_tests/tapi/test01_abstracted_topology.py b/tests/transportpce_tests/tapi/test01_abstracted_topology.py index 8f44a16b2..69800bab3 100644 --- a/tests/transportpce_tests/tapi/test01_abstracted_topology.py +++ b/tests/transportpce_tests/tapi/test01_abstracted_topology.py @@ -646,7 +646,7 @@ class TransportTapitesting(unittest.TestCase): 'node name should be: ROADM-infra') def test_43_get_tapi_topology_T100G(self): - self.tapi_topo["topology-id"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -684,14 +684,6 @@ class TransportTapitesting(unittest.TestCase): self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content)) -# def count_object_with_double_key(list_dicts, key1, key2, value): -# nb = 0 -# for dictio in list_dicts: -# print(dictio) -# if dictio[key1][0][key2] == value: -# nb += 1 -# return nb - def count_object_with_double_key(list_dicts, key1, key2, value): nb = 0 for dictio in list_dicts: -- 2.36.6