From 3860d202e14ae693d515cf40f4795fd086a5d75d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 23 Apr 2020 10:33:18 +0200 Subject: [PATCH] Update MRI projects for Aluminium This bumps versions to the following: - odlparent-7.0.1 - yangtools-5.0.1 - mdsal-6.0.0 - controller-2.0.0 Change-Id: I019a7cfcca9b986ee4562d787c823604a3d99ec4 Signed-off-by: Robert Varga --- algo/algo-artifacts/pom.xml | 2 +- algo/pom.xml | 2 +- artifacts/pom.xml | 2 +- bgp/benchmark-app/pom.xml | 5 + bgp/bgp-artifacts/pom.xml | 2 +- bgp/cli/pom.xml | 5 + .../cli/utils/BGPOperationalStateUtils.java | 4 +- .../bgp/cli/utils/GlobalStateCliUtils.java | 2 +- .../bgp/cli/utils/NeighborStateCliUtils.java | 5 +- .../bgp/cli/utils/PeerGroupStateCliUtils.java | 4 +- bgp/config-example/pom.xml | 2 +- .../bgp/evpn/impl/EvpnRibSupport.java | 3 +- .../bgp/evpn/impl/EvpnRibSupportTest.java | 2 +- .../bgp/evpn/impl/RIBActivatorTest.java | 2 +- .../bgp/flowspec/FlowspecIpv4RIBSupport.java | 4 +- .../bgp/flowspec/FlowspecIpv6RIBSupport.java | 4 +- .../ipv4/FlowspecL3vpnIpv4RIBSupport.java | 4 +- .../ipv6/FlowspecL3vpnIpv6RIBSupport.java | 4 +- .../flowspec/FlowspecIpv4RIBSupportTest.java | 2 +- .../flowspec/FlowspecIpv6RIBSupportTest.java | 2 +- .../FlowspecL3vpnIpv4RIBSupportTest.java | 2 +- .../FlowspecL3vpnIpv6RIBSupportTest.java | 2 +- .../protocol/bgp/inet/IPv4RIBSupport.java | 3 +- .../protocol/bgp/inet/IPv6RIBSupport.java | 3 +- .../protocol/bgp/inet/IPv4RIBSupportTest.java | 6 +- .../protocol/bgp/inet/IPv6RIBSupportTest.java | 2 +- .../l3vpn/mcast/L3VpnMcastIpv4RIBSupport.java | 5 +- .../l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java | 5 +- .../l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java | 4 +- .../l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java | 4 +- .../protocol/bgp/l3vpn/RIBActivatorTest.java | 3 +- .../mcast/L3vpnMcastIpv4RIBSupportTest.java | 2 +- .../mcast/L3vpnMcastIpv6RIBSupportTest.java | 2 +- .../unicast/ipv4/VpnIpv4RIBSupportTest.java | 2 +- .../unicast/ipv6/VpnIpv6RIBSupportTest.java | 3 +- .../unicast/LabeledUnicastIpv4RIBSupport.java | 5 +- .../unicast/LabeledUnicastIpv6RIBSupport.java | 5 +- .../LabeledUnicastIpv4RIBSupportTest.java | 2 +- .../LabeledUnicastIpv6RIBSupportTest.java | 2 +- .../linkstate/impl/LinkstateRIBSupport.java | 3 +- .../impl/attribute/LinkAttributesParser.java | 7 +- .../pojo/SimpleBindingSubTlvsRegistry.java | 19 ++-- .../protocol/bgp/linkstate/ActivatorTest.java | 2 +- .../linkstate/LinkstateRIBSupportTest.java | 2 +- .../bgp/mvpn/impl/MvpnIpv4RIBSupport.java | 4 +- .../bgp/mvpn/impl/MvpnIpv6RIBSupport.java | 4 +- .../bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java | 2 +- .../bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java | 2 +- .../bgp/mvpn/impl/RIBActivatorTest.java | 2 +- bgp/extensions/parent/pom.xml | 7 +- bgp/extensions/pom.xml | 2 +- .../impl/RouteTargetConstrainRIBSupport.java | 3 +- .../RouteTargetConstrainRIBSupportTest.java | 11 +- .../impl/activators/RIBActivatorTest.java | 2 +- bgp/openconfig-rp-spi/pom.xml | 5 + bgp/openconfig-rp-statement/pom.xml | 5 + .../NonTransitiveAttributesFilterHandler.java | 12 +- .../MatchBgpNeighborSetHandler.java | 2 +- bgp/openconfig-state/pom.xml | 5 + .../bgp/state/StateProviderImplTest.java | 4 +- .../protocol/bgp/parser/AsNumberUtil.java | 12 +- .../bgp/parser/BgpExtendedMessageUtil.java | 5 +- .../bgp/parser/GracefulRestartUtil.java | 18 ++- .../protocol/bgp/parser/APITest.java | 22 ++-- .../impl/message/BGPOpenMessageParser.java | 5 +- .../open/GracefulCapabilityHandler.java | 10 +- .../open/LlGracefulCapabilityHandler.java | 6 +- .../UnrecognizedAttributesSerializer.java | 8 +- .../bgp/parser/impl/ComplementaryTest.java | 3 +- .../protocol/bgp/parser/impl/ParserTest.java | 2 +- .../spi/pojo/UnrecognizedAttributesTest.java | 6 +- bgp/pom.xml | 2 +- bgp/rib-impl/pom.xml | 33 +++--- .../protocol/bgp/rib/impl/BGPPeer.java | 15 +-- .../protocol/bgp/rib/impl/BGPSessionImpl.java | 2 +- .../protocol/bgp/rib/impl/BgpPeerUtil.java | 16 +-- .../bgp/rib/impl/CodecsRegistryImpl.java | 82 -------------- .../bgp/rib/impl/ConstantCodecsRegistry.java | 41 +++++++ .../bgp/rib/impl/OSGiCodecsRegistry.java | 71 ++++++++++++ .../protocol/bgp/rib/impl/RIBImpl.java | 13 +-- .../bgp/rib/impl/config/BgpDeployerImpl.java | 2 +- .../protocol/bgp/rib/impl/config/BgpPeer.java | 25 +++-- .../rib/impl/config/GracefulRestartUtil.java | 29 +++-- .../impl/config/OpenConfigMappingUtil.java | 51 +++++---- .../protocol/bgp/rib/impl/config/RibImpl.java | 32 ++---- .../rib/impl/state/BGPSessionStateImpl.java | 4 +- .../bgp/rib/impl/AbstractAddPathTest.java | 17 ++- .../bgp/rib/impl/AbstractRIBTestSetup.java | 35 +----- .../bgp/rib/impl/AddPathAllPathsTest.java | 1 - .../bgp/rib/impl/AddPathBasePathsTest.java | 1 - .../bgp/rib/impl/AddPathNPathsTest.java | 2 - .../bgp/rib/impl/BGPSessionImplTest.java | 23 ++-- .../bgp/rib/impl/BgpPeerUtilTest.java | 16 ++- .../bgp/rib/impl/GracefulRestartTest.java | 1 - .../bgp/rib/impl/ParserToSalTest.java | 22 ++-- .../impl/SynchronizationAndExceptionTest.java | 27 ++--- .../rib/impl/config/BgpDeployerImplTest.java | 22 +--- .../bgp/rib/impl/config/BgpPeerTest.java | 5 +- .../impl/config/GracefulRestartUtilTest.java | 12 +- .../config/OpenConfigMappingUtilTest.java | 32 +++--- .../bgp/rib/impl/config/RibImplTest.java | 28 +---- bgp/rib-spi/pom.xml | 11 +- .../bgp/rib/spi/AbstractRIBSupport.java | 12 +- .../rib/spi/RIBExtensionConsumerContext.java | 10 -- .../protocol/bgp/rib/spi/RIBSupport.java | 3 +- .../SimpleRIBExtensionProviderContext.java | 39 +------ .../OSGI-INF/blueprint/bgp-rib-spi.xml | 6 +- .../bgp/rib/spi/AbstractRIBActivatorTest.java | 6 +- .../bgp/rib/spi/AbstractRIBSupportTest.java | 41 ++++--- .../protocol/bgp/rib/spi/RIBSupportTest.java | 8 +- .../bgp/rib/spi/RIBSupportTestImp.java | 4 +- ...ExtensionProviderContextActivatorTest.java | 2 +- .../bgp/rib/spi/SimpleRIBExtensionTest.java | 11 +- bgp/topology-provider/pom.xml | 5 + .../AbstractReachabilityTopologyBuilder.java | 6 +- .../Ipv4ReachabilityTopologyBuilder.java | 3 +- .../Ipv6ReachabilityTopologyBuilder.java | 3 +- .../provider/LinkstateGraphBuilder.java | 53 +++++---- .../provider/LinkstateTopologyBuilder.java | 47 ++++---- .../bgp/topology/provider/ProtocolUtil.java | 24 ++-- .../Ipv4ReachabilityTopologyBuilderTest.java | 14 +-- .../Ipv6ReachabilityTopologyBuilderTest.java | 16 +-- .../LinkstateTopologyBuilderTest.java | 64 ++++++----- binding-parent/pom.xml | 2 +- bmp/bmp-artifacts/pom.xml | 2 +- bmp/bmp-config-example/pom.xml | 2 +- bmp/bmp-impl/pom.xml | 11 +- .../impl/app/BmpMonitoringStationImpl.java | 6 +- .../bmp/impl/app/KeyConstructorUtil.java | 4 +- .../impl/config/BmpDeployerDependencies.java | 8 +- .../bmp/impl/config/BmpDeployerImpl.java | 2 +- .../resources/OSGI-INF/blueprint/bgp-bmp.xml | 8 +- .../bmp/impl/app/BmpMonitorImplTest.java | 65 +++++------ bmp/pom.xml | 2 +- .../bmp-monitors-config-loader/pom.xml | 7 +- config-loader/config-loader-artifacts/pom.xml | 2 +- config-loader/config-loader-impl/pom.xml | 7 +- .../config/loader/impl/ConfigLoaderImpl.java | 8 +- .../loader/impl/AbstractConfigLoader.java | 12 +- config-loader/config-loader-spi/pom.xml | 2 +- config-loader/pom.xml | 2 +- config-loader/protocols-config-loader/pom.xml | 7 +- .../routing-policy-config-loader/pom.xml | 7 +- config-loader/topology-config-loader/pom.xml | 7 +- data-change-counter/pom.xml | 5 + distribution-karaf/pom.xml | 6 +- feature-repo-parent/pom.xml | 2 +- features/algo/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- features/bgp/odl-bgpcep-bgp-rib-impl/pom.xml | 6 + .../src/main/feature/feature.xml | 3 +- features/bgp/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- features/bgpcep-extras/pom.xml | 2 +- features/bmp/pom.xml | 2 +- features/concepts/pom.xml | 2 +- features/config-loader/pom.xml | 2 +- features/graph/pom.xml | 2 +- features/pcep/odl-bgpcep-pcep-impl/pom.xml | 10 +- .../src/main/feature/feature.xml | 16 +++ .../src/main/feature/feature.xml | 2 +- .../pcep/odl-bgpcep-programming-impl/pom.xml | 6 + .../src/main/feature/feature.xml | 16 +++ features/pcep/pom.xml | 2 +- features/pom.xml | 2 +- features/rsvp/pom.xml | 2 +- features/topology/pom.xml | 2 +- .../opendaylight/graph/ConnectedGraph.java | 5 +- graph/graph-artifacts/pom.xml | 2 +- .../graph/impl/ConnectedGraphImpl.java | 69 +++++------- .../graph/impl/ConnectedGraphServer.java | 46 ++++---- graph/pom.xml | 2 +- parent/pom.xml | 10 +- pcep/auto-bandwidth-extension/pom.xml | 4 +- .../message/PCEPRequestMessageParser.java | 5 +- pcep/config-example/pom.xml | 2 +- .../pcep/impl/PCEPDispatcherImplTest.java | 2 +- .../pcep/impl/PCEPObjectParserTest.java | 2 +- pcep/pcep-artifacts/pom.xml | 2 +- pcep/pom.xml | 2 +- pcep/segment-routing/pom.xml | 5 + .../routing/PCEPSegmentRoutingCapability.java | 7 +- .../PcepOpenObjectWithSpcTlvParser.java | 2 +- .../PCEPSegmentRoutingCapabilityTest.java | 4 +- .../segment/routing/SrObjectParserTest.java | 14 +-- .../segment/routing/TopologyProviderTest.java | 27 +++-- pcep/server/pom.xml | 2 +- pcep/topology/cli/pom.xml | 5 + pcep/topology/pom.xml | 2 +- pcep/topology/topology-provider/pom.xml | 5 + .../AbstractTopologySessionListener.java | 27 ++--- .../Stateful07TopologySessionListener.java | 21 ++-- .../config/PCEPTopologyProviderUtil.java | 4 +- .../provider/AbstractPCEPSessionTest.java | 5 +- ...crementalSynchronizationProcedureTest.java | 36 +++--- ...iggeredReSynchronizationProcedureTest.java | 16 ++- .../PCETriggeredInitialSyncProcedureTest.java | 6 +- ...SynchronizationAvoidanceProcedureTest.java | 4 +- ...Stateful07TopologySessionListenerTest.java | 16 +-- pcep/topology/topology-stats/pom.xml | 5 + .../rpc/TopologyStatsRpcServiceImpl.java | 89 ++++++++------- .../rpc/TopologyStatsRpcServiceImplTest.java | 103 ++++++++++-------- pcep/tunnel/pom.xml | 2 +- pcep/tunnel/tunnel-provider/pom.xml | 5 + .../CreateTunnelInstructionExecutor.java | 3 +- .../DestroyTunnelInstructionExecutor.java | 2 +- .../tunnel/provider/NodeChangedListener.java | 84 ++++++-------- .../provider/PCEPTunnelTopologyProvider.java | 3 +- .../tunnel/provider/TunelProgrammingUtil.java | 10 +- .../UpdateTunnelInstructionExecutor.java | 3 +- .../provider/NodeChangedListenerTest.java | 51 +++++---- .../provider/TunnelProgrammingTest.java | 35 +++--- pom.xml | 2 +- programming/impl/pom.xml | 5 + programming/pom.xml | 2 +- programming/programming-artifacts/pom.xml | 2 +- rsvp/pom.xml | 2 +- rsvp/rsvp-artifacts/pom.xml | 2 +- .../subobjects/EROSubobjectListParser.java | 2 - single-feature-parent/pom.xml | 2 +- testtool-parent/pom.xml | 2 +- testtool-util/pom.xml | 5 + topology/pom.xml | 2 +- topology/topology-artifacts/pom.xml | 2 +- 224 files changed, 1244 insertions(+), 1189 deletions(-) delete mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/CodecsRegistryImpl.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ConstantCodecsRegistry.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/OSGiCodecsRegistry.java create mode 100644 features/pcep/odl-bgpcep-pcep-impl/src/main/feature/feature.xml create mode 100644 features/pcep/odl-bgpcep-programming-impl/src/main/feature/feature.xml diff --git a/algo/algo-artifacts/pom.xml b/algo/algo-artifacts/pom.xml index 51792aa96b..5baa399ec2 100644 --- a/algo/algo-artifacts/pom.xml +++ b/algo/algo-artifacts/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/algo/pom.xml b/algo/pom.xml index 1b09ec9657..5f8585fe5b 100644 --- a/algo/pom.xml +++ b/algo/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/artifacts/pom.xml b/artifacts/pom.xml index d512c6fb9e..f7533e8d22 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -14,7 +14,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/bgp/benchmark-app/pom.xml b/bgp/benchmark-app/pom.xml index 2719bfc56a..12ae3e9460 100644 --- a/bgp/benchmark-app/pom.xml +++ b/bgp/benchmark-app/pom.xml @@ -81,6 +81,11 @@ testtool-util test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/bgp-artifacts/pom.xml b/bgp/bgp-artifacts/pom.xml index 9609eb6df3..2758687709 100644 --- a/bgp/bgp-artifacts/pom.xml +++ b/bgp/bgp-artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/bgp/cli/pom.xml b/bgp/cli/pom.xml index 6e3aa923ae..fe9e9b7a22 100644 --- a/bgp/cli/pom.xml +++ b/bgp/cli/pom.xml @@ -68,6 +68,11 @@ guava + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/BGPOperationalStateUtils.java b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/BGPOperationalStateUtils.java index 3007201c4e..bc66cfe793 100644 --- a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/BGPOperationalStateUtils.java +++ b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/BGPOperationalStateUtils.java @@ -66,12 +66,12 @@ public final class BGPOperationalStateUtils { displayRibOperationalState(ribId, globalBgp.getGlobal(), stream); } else { if (neighbor != null) { - globalBgp.getNeighbors().getNeighbor().stream() + globalBgp.getNeighbors().nonnullNeighbor().values().stream() .filter(neig -> toString(neig.key().getNeighborAddress()).matches(neighbor)) .findFirst() .ifPresent(neighbor1 -> displayNeighborOperationalState(neighbor, neighbor1, stream)); } else { - displayPeerOperationalState(globalBgp.getPeerGroups().getPeerGroup(), stream); + displayPeerOperationalState(globalBgp.getPeerGroups().nonnullPeerGroup().values(), stream); } } } diff --git a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/GlobalStateCliUtils.java b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/GlobalStateCliUtils.java index f2c9cffab7..cf99bcea84 100644 --- a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/GlobalStateCliUtils.java +++ b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/GlobalStateCliUtils.java @@ -36,7 +36,7 @@ final class GlobalStateCliUtils { table.addRow().addContent("As", globalState.getAs()); table.addRow().addContent("Total Paths", globalState.getTotalPaths()); table.addRow().addContent("Total Prefixes", globalState.getTotalPrefixes()); - global.getAfiSafis().getAfiSafi().forEach(afiSafi -> displayAfiSafi(afiSafi, table)); + global.getAfiSafis().nonnullAfiSafi().values().forEach(afiSafi -> displayAfiSafi(afiSafi, table)); table.print(stream); } diff --git a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/NeighborStateCliUtils.java b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/NeighborStateCliUtils.java index a07f3e152e..1d9e8d34dd 100644 --- a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/NeighborStateCliUtils.java +++ b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/NeighborStateCliUtils.java @@ -8,6 +8,7 @@ package org.opendaylight.protocol.bgp.cli.utils; import java.io.PrintStream; +import java.util.Collection; import java.util.List; import org.apache.karaf.shell.support.table.ShellTable; import org.eclipse.jdt.annotation.NonNull; @@ -56,7 +57,7 @@ final class NeighborStateCliUtils { printTimerState(neighbor.getTimers(), table); printTransportState(neighbor.getTransport(), table); printMessagesState(neighborState, table); - printAfiSafisState(neighbor.getAfiSafis().getAfiSafi(), table); + printAfiSafisState(neighbor.getAfiSafis().nonnullAfiSafi().values(), table); table.print(stream); } @@ -76,7 +77,7 @@ final class NeighborStateCliUtils { table.addRow().addContent("======================", ""); } - private static void printAfiSafisState(final List afiSafis, final ShellTable table) { + private static void printAfiSafisState(final Collection afiSafis, final ShellTable table) { afiSafis.forEach(afiSafi -> printAfiSafiState(afiSafi, table)); } diff --git a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/PeerGroupStateCliUtils.java b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/PeerGroupStateCliUtils.java index e411c3bf6d..63ce5dd86c 100644 --- a/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/PeerGroupStateCliUtils.java +++ b/bgp/cli/src/main/java/org/opendaylight/protocol/bgp/cli/utils/PeerGroupStateCliUtils.java @@ -10,7 +10,7 @@ package org.opendaylight.protocol.bgp.cli.utils; import static org.opendaylight.protocol.bgp.cli.utils.NeighborStateCliUtils.addHeader; import java.io.PrintStream; -import java.util.List; +import java.util.Collection; import org.apache.karaf.shell.support.table.ShellTable; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.State; @@ -23,7 +23,7 @@ final class PeerGroupStateCliUtils { // Hidden on purpose } - static void displayPeerOperationalState(@NonNull final List peerGroupList, + static void displayPeerOperationalState(@NonNull final Collection peerGroupList, @NonNull final PrintStream stream) { final ShellTable table = new ShellTable(); table.column("Attribute").alignLeft(); diff --git a/bgp/config-example/pom.xml b/bgp/config-example/pom.xml index 5c7e0276bc..9bc596963d 100644 --- a/bgp/config-example/pom.xml +++ b/bgp/config-example/pom.xml @@ -15,7 +15,7 @@ org.opendaylight.odlparent odlparent - 6.0.4 + 7.0.1 diff --git a/bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java b/bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java index cdd390c0bd..2a6589cf4a 100644 --- a/bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java +++ b/bgp/extensions/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; @@ -166,7 +167,7 @@ final class EvpnRibSupport extends AbstractRIBSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.EvpnRoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120 diff --git a/bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupportTest.java b/bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupportTest.java index 741ef9f04d..084f72c240 100644 --- a/bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupportTest.java +++ b/bgp/extensions/evpn/src/test/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupportTest.java @@ -96,7 +96,7 @@ public final class EvpnRibSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.FlowspecRoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 diff --git a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv6RIBSupport.java b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv6RIBSupport.java index fc71b20a9e..78332eeced 100644 --- a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv6RIBSupport.java +++ b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv6RIBSupport.java @@ -10,7 +10,7 @@ package org.opendaylight.protocol.bgp.flowspec; import static com.google.common.base.Verify.verify; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120.FlowspecSubsequentAddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120.bgp.rib.rib.loc.rib.tables.routes.FlowspecIpv6RoutesCase; @@ -93,7 +93,7 @@ public final class FlowspecIpv6RIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.FlowspecIpv6RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 diff --git a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv4/FlowspecL3vpnIpv4RIBSupport.java b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv4/FlowspecL3vpnIpv4RIBSupport.java index 019523a14e..48d7ecc0a8 100644 --- a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv4/FlowspecL3vpnIpv4RIBSupport.java +++ b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv4/FlowspecL3vpnIpv4RIBSupport.java @@ -10,7 +10,7 @@ package org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv4; import static com.google.common.base.Verify.verify; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.flowspec.SimpleFlowspecExtensionProviderContext; import org.opendaylight.protocol.bgp.flowspec.l3vpn.AbstractFlowspecL3vpnRIBSupport; @@ -94,7 +94,7 @@ public final class FlowspecL3vpnIpv4RIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.FlowspecL3vpnIpv4RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 diff --git a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv6/FlowspecL3vpnIpv6RIBSupport.java b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv6/FlowspecL3vpnIpv6RIBSupport.java index 8422d9963d..87bb5eaf27 100644 --- a/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv6/FlowspecL3vpnIpv6RIBSupport.java +++ b/bgp/extensions/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/ipv6/FlowspecL3vpnIpv6RIBSupport.java @@ -10,7 +10,7 @@ package org.opendaylight.protocol.bgp.flowspec.l3vpn.ipv6; import static com.google.common.base.Verify.verify; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.flowspec.SimpleFlowspecExtensionProviderContext; import org.opendaylight.protocol.bgp.flowspec.l3vpn.AbstractFlowspecL3vpnRIBSupport; @@ -94,7 +94,7 @@ public final class FlowspecL3vpnIpv6RIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.FlowspecL3vpnIpv6RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev200120 diff --git a/bgp/extensions/flowspec/src/test/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv4RIBSupportTest.java b/bgp/extensions/flowspec/src/test/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv4RIBSupportTest.java index db90634d6a..b600b7174e 100644 --- a/bgp/extensions/flowspec/src/test/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv4RIBSupportTest.java +++ b/bgp/extensions/flowspec/src/test/java/org/opendaylight/protocol/bgp/flowspec/FlowspecIpv4RIBSupportTest.java @@ -81,7 +81,7 @@ public class FlowspecIpv4RIBSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329 .bgp.rib.rib.peer.adj.rib.in.tables.routes.Ipv4RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.bgp.rib.rib.peer diff --git a/bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupport.java b/bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupport.java index 01226332c1..e825ad6f92 100644 --- a/bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupport.java +++ b/bgp/extensions/inet/src/main/java/org/opendaylight/protocol/bgp/inet/IPv6RIBSupport.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix; @@ -118,7 +119,7 @@ final class IPv6RIBSupport extends AbstractIPRibSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329 .bgp.rib.rib.peer.adj.rib.in.tables.routes.Ipv6RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.bgp.rib.rib.peer diff --git a/bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupportTest.java b/bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupportTest.java index a39137b02b..e78d62285c 100644 --- a/bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupportTest.java +++ b/bgp/extensions/inet/src/test/java/org/opendaylight/protocol/bgp/inet/IPv4RIBSupportTest.java @@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.junit.Assert; import org.junit.Test; import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupportTest; @@ -71,12 +72,13 @@ public final class IPv4RIBSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast .rev180417.bgp.rib.rib.peer.adj.rib.in.tables.routes.L3vpnMcastRoutesIpv4Case, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java index d327ebddd6..61fc805c3c 100644 --- a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java +++ b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3VpnMcastIpv6RIBSupport.java @@ -13,7 +13,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.util.Collection; import java.util.Collections; -import java.util.List; +import java.util.Map; import java.util.Optional; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.l3vpn.mcast.nlri.L3vpnMcastNlriSerializer; @@ -24,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.bgp.rib.rib.loc.rib.tables.routes.L3vpnMcastRoutesIpv6Case; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.l3vpn.mcast.destination.L3vpnMcastDestination; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.l3vpn.mcast.routes.L3vpnMcastRoute; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.l3vpn.mcast.routes.L3vpnMcastRouteKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.l3vpn.mcast.routes.ipv6.L3vpnMcastRoutesIpv6; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.l3vpn.mcast.routes.ipv6.L3vpnMcastRoutesIpv6Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationL3vpnMcastIpv6AdvertizedCase; @@ -107,7 +108,7 @@ public final class L3VpnMcastIpv6RIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast .rev180417.bgp.rib.rib.peer.adj.rib.in.tables.routes.L3vpnMcastRoutesIpv6Case, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java index f3d96dbffe..46b1ca2caf 100644 --- a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java +++ b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv4/VpnIpv4RIBSupport.java @@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verify; import java.util.Collections; import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.l3vpn.unicast.AbstractVpnRIBSupport; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; @@ -25,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv4.rev180329.l3vpn.ipv4.routes.VpnIpv4RoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRouteKey; public final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport { private static final VpnIpv4Routes EMPTY_CONTAINER @@ -77,7 +79,7 @@ public final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv4.rev180329 .bgp.rib.rib.peer.adj.rib.in.tables.routes.VpnIpv4RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv4.rev180329 diff --git a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java index 7b277174e1..3e0767cc47 100644 --- a/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java +++ b/bgp/extensions/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/unicast/ipv6/VpnIpv6RIBSupport.java @@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verify; import java.util.Collections; import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.protocol.bgp.l3vpn.unicast.AbstractVpnRIBSupport; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; @@ -25,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv6.rev180329.l3vpn.ipv6.routes.VpnIpv6RoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRouteKey; public final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport { private static final VpnIpv6Routes EMPTY_CONTAINER @@ -77,7 +79,7 @@ public final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv6.rev180329 .bgp.rib.rib.peer.adj.rib.in.tables.routes.VpnIpv6RoutesCase, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv6.rev180329 diff --git a/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivatorTest.java b/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivatorTest.java index daa1008113..89341605a7 100644 --- a/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivatorTest.java +++ b/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/RIBActivatorTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.protocol.bgp.l3vpn; import static org.junit.Assert.assertNotNull; @@ -26,7 +25,7 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest { final RIBExtensionProviderContext context = new SimpleRIBExtensionProviderContext(); assertNull(context.getRIBSupport(Ipv4AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class)); assertNull(context.getRIBSupport(Ipv6AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class)); - ribAct.startRIBExtensionProvider(context, this.mappingService); + ribAct.startRIBExtensionProvider(context, this.context.currentSerializer()); assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class)); assertNotNull(context.getRIBSupport(Ipv6AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class)); ribAct.close(); diff --git a/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv4RIBSupportTest.java b/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv4RIBSupportTest.java index b4a53e46aa..6d8ab7003e 100644 --- a/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv4RIBSupportTest.java +++ b/bgp/extensions/l3vpn/src/test/java/org/opendaylight/protocol/bgp/l3vpn/mcast/L3vpnMcastIpv4RIBSupportTest.java @@ -89,7 +89,7 @@ public class L3vpnMcastIpv4RIBSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast .rev180329.bgp.rib.rib.peer.adj.rib.in.tables.routes.LabeledUnicastRoutesCase, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupport.java b/bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupport.java index 29d1fc4e02..2733c1bb1a 100644 --- a/bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupport.java +++ b/bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv6RIBSupport.java @@ -11,7 +11,7 @@ import static com.google.common.base.Verify.verify; import java.util.Collection; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix; @@ -19,6 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labe import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.labeled.unicast.ipv6.routes.LabeledUnicastIpv6Routes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.labeled.unicast.ipv6.routes.LabeledUnicastIpv6RoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.labeled.unicast.routes.list.LabeledUnicastRoute; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.labeled.unicast.routes.list.LabeledUnicastRouteKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv6LabeledUnicastCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.ipv6.labeled.unicast._case.DestinationIpv6LabeledUnicast; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev180329.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.ipv6.labeled.unicast._case.DestinationIpv6LabeledUnicastBuilder; @@ -85,7 +86,7 @@ final class LabeledUnicastIpv6RIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast .rev180329.bgp.rib.rib.peer.adj.rib.in.tables.routes.LabeledUnicastIpv6RoutesCase, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupportTest.java b/bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupportTest.java index 43013b6f23..707e458ff5 100644 --- a/bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupportTest.java +++ b/bgp/extensions/labeled-unicast/src/test/java/org/opendaylight/protocol/bgp/labeled/unicast/LabeledUnicastIpv4RIBSupportTest.java @@ -102,7 +102,7 @@ public class LabeledUnicastIpv4RIBSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify( routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120 .bgp.rib.rib.peer.adj.rib.in.tables.routes.LinkstateRoutesCase, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/LinkAttributesParser.java b/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/LinkAttributesParser.java index b16591954e..1516b73c39 100644 --- a/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/LinkAttributesParser.java +++ b/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/attribute/LinkAttributesParser.java @@ -15,6 +15,7 @@ import io.netty.buffer.Unpooled; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.SrLinkAttributesParser; import org.opendaylight.protocol.bgp.linkstate.spi.TlvUtil; @@ -44,6 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.attribute.SrLanAdjIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.attribute.UnreservedBandwidth; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.attribute.UnreservedBandwidthBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.attribute.UnreservedBandwidthKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.path.attribute.LinkStateAttribute; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.path.attribute.link.state.attribute.LinkAttributesCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.path.attribute.link.state.attribute.LinkAttributesCaseBuilder; @@ -343,11 +345,12 @@ public final class LinkAttributesParser { LOG.trace("Finished serializing Link Attributes"); } - private static void serializeUnreservedBw(final List ubList, final ByteBuf byteAggregator) { + private static void serializeUnreservedBw(final Map ubList, + final ByteBuf byteAggregator) { // this sub-TLV contains eight 32-bit IEEE floating point numbers if (ubList != null) { final ByteBuf unreservedBandwithBuf = Unpooled.buffer(); - for (final UnreservedBandwidth unreservedBandwidth : ubList) { + for (final UnreservedBandwidth unreservedBandwidth : ubList.values()) { unreservedBandwithBuf.writeBytes(unreservedBandwidth.getBandwidth().getValue()); } TlvUtil.writeTLV(UNRESERVED_BANDWIDTH, unreservedBandwithBuf, byteAggregator); diff --git a/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/spi/pojo/SimpleBindingSubTlvsRegistry.java b/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/spi/pojo/SimpleBindingSubTlvsRegistry.java index e0d3807330..29e6822c50 100644 --- a/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/spi/pojo/SimpleBindingSubTlvsRegistry.java +++ b/bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/spi/pojo/SimpleBindingSubTlvsRegistry.java @@ -31,7 +31,6 @@ public final class SimpleBindingSubTlvsRegistry { private SimpleBindingSubTlvsRegistry() { } - public static SimpleBindingSubTlvsRegistry getInstance() { return SINGLETON; } @@ -46,15 +45,17 @@ public final class SimpleBindingSubTlvsRegistry { } public void serializeBindingSubTlvs(final List bindingSubTlvs, final ByteBuf aggregator) { - for (final BindingSubTlvs subTlv : bindingSubTlvs) { - final BindingSubTlv bindingSubTlv = subTlv.getBindingSubTlv(); - final BindingSubTlvsSerializer serializer = this.handlers.getSerializer( - bindingSubTlv.implementedInterface()); - if (serializer == null) { - LOG.info("Unknown binding sub Tlv type {}", subTlv); - return; + if (bindingSubTlvs != null) { + for (final BindingSubTlvs subTlv : bindingSubTlvs) { + final BindingSubTlv bindingSubTlv = subTlv.getBindingSubTlv(); + final BindingSubTlvsSerializer serializer = this.handlers.getSerializer( + bindingSubTlv.implementedInterface()); + if (serializer == null) { + LOG.info("Unknown binding sub Tlv type {}", subTlv); + return; + } + serializer.serializeSubTlv(bindingSubTlv, aggregator); } - serializer.serializeSubTlv(bindingSubTlv, aggregator); } } diff --git a/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ActivatorTest.java b/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ActivatorTest.java index 19ce959941..55d623e9e6 100644 --- a/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ActivatorTest.java +++ b/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/ActivatorTest.java @@ -48,7 +48,7 @@ public class ActivatorTest extends AbstractRIBActivatorTest { assertNull(context.getRIBSupport(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class)); - ribAct.startRIBExtensionProvider(context, this.mappingService); + ribAct.startRIBExtensionProvider(context, this.context.currentSerializer()); assertNotNull(context.getRIBSupport(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class)); diff --git a/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java b/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java index 315a378801..5a97f23847 100644 --- a/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java +++ b/bgp/extensions/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java @@ -125,7 +125,7 @@ public final class LinkstateRIBSupportTest extends AbstractRIBSupportTest extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4 .rev180417.bgp.rib.rib.peer.adj.rib.in.tables.routes.MvpnRoutesIpv4Case, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417 diff --git a/bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java b/bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java index 52aecb9bf8..83e81b3a0a 100644 --- a/bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java +++ b/bgp/extensions/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java @@ -14,6 +14,7 @@ import io.netty.buffer.Unpooled; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; @@ -31,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv6.advertized._case.DestinationMvpnBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev200120.mvpn.routes.MvpnRoute; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev200120.mvpn.routes.MvpnRouteKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -112,7 +114,7 @@ final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6 .rev180417.bgp.rib.rib.peer.adj.rib.in.tables.routes.MvpnRoutesIpv6Case, "Unrecognized routes %s", routes); return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417 diff --git a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java index 072c467299..bfbc9b343c 100644 --- a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java +++ b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java @@ -89,7 +89,7 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest()); } diff --git a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java index 3b1001bce0..bec873a5b8 100644 --- a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java +++ b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java @@ -90,7 +90,7 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest()); } diff --git a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivatorTest.java b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivatorTest.java index 7a23581881..65fdad1b7c 100644 --- a/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivatorTest.java +++ b/bgp/extensions/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/RIBActivatorTest.java @@ -26,7 +26,7 @@ public class RIBActivatorTest extends AbstractRIBActivatorTest { final RIBExtensionProviderContext context = new SimpleRIBExtensionProviderContext(); assertNull(context.getRIBSupport(Ipv4AddressFamily.class, McastVpnSubsequentAddressFamily.class)); assertNull(context.getRIBSupport(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class)); - ribAct.startRIBExtensionProvider(context, this.mappingService); + ribAct.startRIBExtensionProvider(context, this.context.currentSerializer()); assertNotNull(context.getRIBSupport(Ipv4AddressFamily.class, McastVpnSubsequentAddressFamily.class)); assertNotNull(context.getRIBSupport(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class)); ribAct.close(); diff --git a/bgp/extensions/parent/pom.xml b/bgp/extensions/parent/pom.xml index 74ec320b2d..9f3cc71e7b 100644 --- a/bgp/extensions/parent/pom.xml +++ b/bgp/extensions/parent/pom.xml @@ -75,7 +75,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.mdsal.binding.model.ietf @@ -100,6 +100,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/extensions/pom.xml b/bgp/extensions/pom.xml index fb5708c7f4..b4a3aa10a2 100644 --- a/bgp/extensions/pom.xml +++ b/bgp/extensions/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupport.java b/bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupport.java index f0254e3c0b..e2dfd67497 100644 --- a/bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupport.java +++ b/bgp/extensions/route-target/src/main/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupport.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; @@ -224,7 +225,7 @@ public final class RouteTargetConstrainRIBSupport } @Override - public List extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { verify(routes instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.route.target .constrain.rev180618.bgp.rib.rib.peer.adj.rib.in.tables.routes.RouteTargetConstrainRoutesCase, "Unrecognized routes %s", routes); diff --git a/bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupportTest.java b/bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupportTest.java index a6050e07e2..7c4eff8d98 100644 --- a/bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupportTest.java +++ b/bgp/extensions/route-target/src/test/java/org/opendaylight/protocol/bgp/route/targetcontrain/impl/RouteTargetConstrainRIBSupportTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableSet; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Map; import org.junit.Test; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupportTest; @@ -78,9 +79,9 @@ public class RouteTargetConstrainRIBSupportTest extends AbstractRIBSupportTest()); - this.ribSupport = RouteTargetConstrainRIBSupport.getInstance(this.mappingService); + this.ribSupport = RouteTargetConstrainRIBSupport.getInstance(this.adapter.currentSerializer()); setUpTestCustomizer(this.ribSupport); } @@ -172,7 +173,7 @@ public class RouteTargetConstrainRIBSupportTest extends AbstractRIBSupportTesttest-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/openconfig-rp-statement/pom.xml b/bgp/openconfig-rp-statement/pom.xml index e01eb6e859..8dc0311e3c 100644 --- a/bgp/openconfig-rp-statement/pom.xml +++ b/bgp/openconfig-rp-statement/pom.xml @@ -106,6 +106,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/actions/NonTransitiveAttributesFilterHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/actions/NonTransitiveAttributesFilterHandler.java index 09781723f7..d25065da9a 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/actions/NonTransitiveAttributesFilterHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/actions/NonTransitiveAttributesFilterHandler.java @@ -8,7 +8,10 @@ package org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.actions; +import com.google.common.collect.ImmutableMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionAugPolicy; @@ -18,6 +21,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.ExtendedCommunities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.UnrecognizedAttributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.UnrecognizedAttributesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.ExtendedCommunity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev200120.NonTransitiveAttributesFilter; @@ -51,11 +55,13 @@ public final class NonTransitiveAttributesFilterHandler implements BgpActionAugP .setAsPath(attributes.getAsPath()) .setCommunities(attributes.getCommunities()); - final List oldAtt = attributes.getUnrecognizedAttributes(); + final Map oldAtt = attributes.getUnrecognizedAttributes(); if (oldAtt != null) { - builder.setUnrecognizedAttributes(attributes.getUnrecognizedAttributes().stream() + // TODO: consider using Maps.filterValues(attributes.getUnrecognizedAttributes(), + // UnrecognizedAttributes::isTransitive)) ? + builder.setUnrecognizedAttributes(attributes.getUnrecognizedAttributes().values().stream() .filter(UnrecognizedAttributes::isTransitive) - .collect(Collectors.toList())); + .collect(ImmutableMap.toImmutableMap(UnrecognizedAttributes::key, Function.identity()))); } final List oldExt = attributes.getExtendedCommunities(); if (oldExt != null) { diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchBgpNeighborSetHandler.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchBgpNeighborSetHandler.java index 19301b3a30..73c45e4aa1 100644 --- a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchBgpNeighborSetHandler.java +++ b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/conditions/MatchBgpNeighborSetHandler.java @@ -72,7 +72,7 @@ public final class MatchBgpNeighborSetHandler if (!result.isPresent()) { return Collections.emptyList(); } - return result.get().getNeighbor().stream() + return result.get().getNeighbor().values().stream() .map(nei -> RouterIds.createPeerId(nei.getAddress())) .collect(Collectors.toList()); } diff --git a/bgp/openconfig-state/pom.xml b/bgp/openconfig-state/pom.xml index c966710ee7..f6e28c47c7 100644 --- a/bgp/openconfig-state/pom.xml +++ b/bgp/openconfig-state/pom.xml @@ -117,6 +117,11 @@ mdsal-binding-dom-adapter test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/openconfig-state/src/test/java/org/opendaylight/protocol/bgp/state/StateProviderImplTest.java b/bgp/openconfig-state/src/test/java/org/opendaylight/protocol/bgp/state/StateProviderImplTest.java index 7f5e58802d..dcfd59d66d 100644 --- a/bgp/openconfig-state/src/test/java/org/opendaylight/protocol/bgp/state/StateProviderImplTest.java +++ b/bgp/openconfig-state/src/test/java/org/opendaylight/protocol/bgp/state/StateProviderImplTest.java @@ -361,8 +361,8 @@ public class StateProviderImplTest extends AbstractDataBrokerTest { readDataOperational(getDataBroker(), this.bgpInstanceIdentifier, bgpRib -> { final Neighbors neighbors = bgpRib.getNeighbors(); Assert.assertNotNull(neighbors); - assertEquals(peerGroupExpected, bgpRib.getPeerGroups().getPeerGroup().get(0)); - final Neighbor neighborResult = neighbors.getNeighbor().get(0); + assertEquals(peerGroupExpected, bgpRib.getPeerGroups().nonnullPeerGroup().values().iterator().next()); + final Neighbor neighborResult = neighbors.nonnullNeighbor().values().iterator().next(); assertEquals(new IpAddress(neighborAddress.getIpv4AddressNoZone()), neighborResult.getNeighborAddress()); assertEquals(expectedAfiSafis, neighborResult.getAfiSafis()); assertEquals(expectedErrorHandling, neighborResult.getErrorHandling()); diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java index bf5a64b405..3a856f8727 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/AsNumberUtil.java @@ -13,6 +13,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Open; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapability; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; @@ -35,9 +37,13 @@ public final class AsNumberUtil { final List params = open.getBgpParameters(); if (params != null) { for (final BgpParameters p : params) { - for (final OptionalCapabilities oc : p.getOptionalCapabilities()) { - if (oc.getCParameters() != null && oc.getCParameters().getAs4BytesCapability() != null) { - return oc.getCParameters().getAs4BytesCapability().getAsNumber(); + for (final OptionalCapabilities oc : p.nonnullOptionalCapabilities()) { + final CParameters cparams = oc.getCParameters(); + if (cparams != null) { + final As4BytesCapability as4 = cparams.getAs4BytesCapability(); + if (as4 != null) { + return as4.getAsNumber(); + } } } } diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BgpExtendedMessageUtil.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BgpExtendedMessageUtil.java index 8da9deecd0..47241e1535 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BgpExtendedMessageUtil.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/BgpExtendedMessageUtil.java @@ -35,8 +35,9 @@ public final class BgpExtendedMessageUtil { final List params = open.getBgpParameters(); if (params != null) { for (final BgpParameters p : params) { - for (final OptionalCapabilities oc : p.getOptionalCapabilities()) { - if (oc.getCParameters() != null && oc.getCParameters().getBgpExtendedMessageCapability() != null) { + for (final OptionalCapabilities oc : p.nonnullOptionalCapabilities()) { + final CParameters cparams = oc.getCParameters(); + if (cparams != null && cparams.getBgpExtendedMessageCapability() != null) { return true; } } diff --git a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/GracefulRestartUtil.java b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/GracefulRestartUtil.java index 25b3b05eb9..71f0870e31 100644 --- a/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/GracefulRestartUtil.java +++ b/bgp/parser-api/src/main/java/org/opendaylight/protocol/bgp/parser/GracefulRestartUtil.java @@ -8,12 +8,10 @@ package org.opendaylight.protocol.bgp.parser; import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import java.util.List; +import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability.RestartFlags; @@ -26,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily; +import org.opendaylight.yangtools.yang.common.Uint16; /** * Utility class for dealing with Graceful Restart. @@ -35,16 +34,15 @@ public final class GracefulRestartUtil { * GR capability advertizing inactive GR. */ public static final @NonNull GracefulRestartCapability EMPTY_GR_CAPABILITY = new GracefulRestartCapabilityBuilder() - .setTables(ImmutableList.of()) .setRestartFlags(new RestartFlags(Boolean.FALSE)) - .setRestartTime(0) + .setRestartTime(Uint16.ZERO) .build(); /** * LLGR capability advertizing no tables. */ public static final @NonNull LlGracefulRestartCapability EMPTY_LLGR_CAPABILITY = - new LlGracefulRestartCapabilityBuilder().setTables(ImmutableList.of()).build(); + new LlGracefulRestartCapabilityBuilder().build(); private GracefulRestartUtil() { @@ -62,12 +60,12 @@ public final class GracefulRestartUtil { } @Beta - public static @NonNull CParameters gracefulRestartCapability(final List tables, final int restartTime, - final boolean localRestarting) { - return new CParametersBuilder().addAugmentation(CParameters1.class, new CParameters1Builder() + public static @NonNull CParameters gracefulRestartCapability(final Map tables, + final int restartTime, final boolean localRestarting) { + return new CParametersBuilder().addAugmentation(new CParameters1Builder() .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder() .setRestartFlags(new RestartFlags(localRestarting)) - .setRestartTime(restartTime) + .setRestartTime(Uint16.valueOf(restartTime)) .setTables(tables) .build()) .build()).build(); diff --git a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java index 2d9f72e41a..90dab89fcf 100644 --- a/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java +++ b/bgp/parser-api/src/test/java/org/opendaylight/protocol/bgp/parser/APITest.java @@ -23,7 +23,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilitiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapabilityBuilder; import org.opendaylight.yangtools.yang.common.Uint16; @@ -61,9 +60,13 @@ public class APITest { public void testAsNumberUtil() { final List params = new ArrayList<>(); final List capas = new ArrayList<>(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( - CParameters1.class, new CParameters1Builder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().build()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder() + .setCParameters(new CParametersBuilder() + .addAugmentation(new CParameters1Builder() + .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().build()) + .build()) + .build()) + .build()); capas.add(new OptionalCapabilitiesBuilder().setCParameters( new CParametersBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber( new AsNumber(Uint32.valueOf(35))).build()).build()).build()); @@ -79,10 +82,13 @@ public class APITest { public void testBgpExtendedMessageUtil() { final List params = new ArrayList<>(); final List capas = new ArrayList<>(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( - CParameters1.class, new CParameters1Builder() - .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() - .build()).build()).build()).build()); + capas.add(new OptionalCapabilitiesBuilder() + .setCParameters(new CParametersBuilder() + .addAugmentation(new CParameters1Builder() + .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder().build()) + .build()) + .build()) + .build()); capas.add(new OptionalCapabilitiesBuilder().setCParameters( BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY).build()); params.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/BGPOpenMessageParser.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/BGPOpenMessageParser.java index be27558ae4..e87e7dbf89 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/BGPOpenMessageParser.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/BGPOpenMessageParser.java @@ -42,6 +42,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -189,8 +190,8 @@ public final class BGPOpenMessageParser implements MessageParser, MessageSeriali BGPError.VERSION_NOT_SUPPORTED); } final AsNumber as = new AsNumber(Uint32.valueOf(body.readUnsignedShort())); - final int holdTime = body.readUnsignedShort(); - if (holdTime == 1 || holdTime == 2) { + final Uint16 holdTime = ByteBufUtils.readUint16(body); + if (Uint16.ONE.equals(holdTime) || Uint16.TWO.equals(holdTime)) { throw new BGPDocumentedException("Hold time value not acceptable.", BGPError.HOLD_TIME_NOT_ACC); } final Ipv4AddressNoZone bgpId; diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java index 0832307364..d2c04694f8 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/GracefulCapabilityHandler.java @@ -14,6 +14,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPParsingException; import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry; @@ -31,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables.AfiFlags; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily; import org.opendaylight.yangtools.yang.common.Uint16; @@ -69,11 +71,11 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi this.safiReg = requireNonNull(safiReg); } - private void serializeTables(final List tables, final ByteBuf bytes) { + private void serializeTables(final Map tables, final ByteBuf bytes) { if (tables == null) { return; } - for (final Tables t : tables) { + for (final Tables t : tables.values()) { final Class afi = t.getAfi(); final Integer afival = this.afiReg.numberForClass(afi); Preconditions.checkArgument(afival != null, "Unhandled address family " + afi); @@ -91,7 +93,7 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi } private ByteBuf serializeCapability(final GracefulRestartCapability grace) { - final List tables = grace.getTables(); + final Map tables = grace.getTables(); final int tablesSize = tables != null ? tables.size() : 0; final ByteBuf bytes = Unpooled.buffer(HEADER_SIZE + PER_AFI_SAFI_SIZE * tablesSize); Uint16 time = grace.getRestartTime(); @@ -131,7 +133,7 @@ public final class GracefulCapabilityHandler implements CapabilityParser, Capabi cb.setRestartFlags(new RestartFlags((flagBits & Byte.SIZE) != 0)); final int timer = ((buffer.readUnsignedByte() & TIMER_TOPBITS_MASK) << Byte.SIZE) + buffer.readUnsignedByte(); - cb.setRestartTime(timer); + cb.setRestartTime(Uint16.valueOf(timer)); final List tables = new ArrayList<>(); while (buffer.readableBytes() != 0) { diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/LlGracefulCapabilityHandler.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/LlGracefulCapabilityHandler.java index a7898ad272..efbf6e6a9d 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/LlGracefulCapabilityHandler.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/open/LlGracefulCapabilityHandler.java @@ -14,6 +14,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry; import org.opendaylight.protocol.bgp.parser.spi.CapabilityParser; import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer; @@ -27,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24; @@ -111,13 +113,13 @@ public final class LlGracefulCapabilityHandler implements CapabilityParser, Capa } private ByteBuf serializeCapability(final LlGracefulRestartCapability cap) { - final List tables = cap.getTables(); + final Map tables = cap.getTables(); if (tables == null || tables.isEmpty()) { return Unpooled.EMPTY_BUFFER; } final ByteBuf buffer = Unpooled.buffer(PER_TABLE_SIZE * tables.size()); - for (Tables table : tables) { + for (Tables table : tables.values()) { final Class afi = table.getAfi(); final Class safi = table.getSafi(); final Integer afival = this.afiReg.numberForClass(afi); diff --git a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/UnrecognizedAttributesSerializer.java b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/UnrecognizedAttributesSerializer.java index 948e43b77c..40b0a6e05b 100644 --- a/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/UnrecognizedAttributesSerializer.java +++ b/bgp/parser-impl/src/main/java/org/opendaylight/protocol/bgp/parser/impl/message/update/UnrecognizedAttributesSerializer.java @@ -10,11 +10,12 @@ package org.opendaylight.protocol.bgp.parser.impl.message.update; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import java.util.List; +import java.util.Map; import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer; import org.opendaylight.protocol.bgp.parser.spi.AttributeUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.UnrecognizedAttributes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.UnrecognizedAttributesKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,11 +24,12 @@ public class UnrecognizedAttributesSerializer implements AttributeSerializer { @Override public void serializeAttribute(final Attributes attributes, final ByteBuf byteAggregator) { - final List unrecognizedAttrs = attributes.getUnrecognizedAttributes(); + final Map unrecognizedAttrs = + attributes.getUnrecognizedAttributes(); if (unrecognizedAttrs == null) { return; } - for (final UnrecognizedAttributes unrecognizedAttr : unrecognizedAttrs) { + for (final UnrecognizedAttributes unrecognizedAttr : unrecognizedAttrs.values()) { LOG.trace("Serializing unrecognized attribute of type {}", unrecognizedAttr.getType()); int flags = AttributeUtil.OPTIONAL; if (unrecognizedAttr.isPartial()) { diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java index cb53977248..09dea6870b 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ComplementaryTest.java @@ -12,6 +12,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotSame; +import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.List; import org.junit.Test; @@ -73,7 +74,7 @@ public class ComplementaryTest { assertNotSame(tlv2.toString(), tlv3.toString()); - assertEquals(tlv3.getTables(), tt); + assertEquals(Maps.uniqueIndex(tt, Tables::key), tlv3.getTables()); assertEquals(cap.getSafi(), cap1.getSafi()); diff --git a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ParserTest.java b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ParserTest.java index 75577bff2a..c23ac6e005 100644 --- a/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ParserTest.java +++ b/bgp/parser-impl/src/test/java/org/opendaylight/protocol/bgp/parser/impl/ParserTest.java @@ -215,7 +215,7 @@ public class ParserTest { assertEquals(100, mo.getMyAsNumber().intValue()); assertEquals(180, mo.getHoldTimer().intValue()); assertEquals(new Ipv4Address("20.20.20.20"), mo.getBgpIdentifier()); - assertTrue(mo.getBgpParameters().isEmpty()); + assertNull(mo.getBgpParameters()); } @Test diff --git a/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/UnrecognizedAttributesTest.java b/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/UnrecognizedAttributesTest.java index fd47479749..6ab7ae1ce2 100644 --- a/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/UnrecognizedAttributesTest.java +++ b/bgp/parser-spi/src/test/java/org/opendaylight/protocol/bgp/parser/spi/pojo/UnrecognizedAttributesTest.java @@ -12,7 +12,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import io.netty.buffer.Unpooled; -import java.util.List; +import java.util.Map; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -45,10 +45,10 @@ public class UnrecognizedAttributesTest { @Test public void testUnrecognizedAttributes() throws BGPDocumentedException, BGPParsingException { final byte[] attributeBytes = { (byte)0xe0, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05 }; - final List unrecogAttribs = SIMPLE_ATTR_REG.parseAttributes( + final Map unrecogAttribs = SIMPLE_ATTR_REG.parseAttributes( Unpooled.wrappedBuffer(attributeBytes), null).getAttributes().getUnrecognizedAttributes(); assertEquals(UNRECOGNIZED_ATTRIBUTE_COUNT, unrecogAttribs.size()); - final UnrecognizedAttributes unrecogAttrib = unrecogAttribs.get(FIRST_ATTRIBUTE); + final UnrecognizedAttributes unrecogAttrib = unrecogAttribs.values().iterator().next(); final UnrecognizedAttributesKey expectedAttribKey = new UnrecognizedAttributesKey(unrecogAttrib.getType()); diff --git a/bgp/pom.xml b/bgp/pom.xml index 083ea1a710..c759bd1fc3 100644 --- a/bgp/pom.xml +++ b/bgp/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/bgp/rib-impl/pom.xml b/bgp/rib-impl/pom.xml index d5f0344f1b..ca111507f6 100644 --- a/bgp/rib-impl/pom.xml +++ b/bgp/rib-impl/pom.xml @@ -105,18 +105,10 @@ org.opendaylight.yangtools yang-data-impl - - org.opendaylight.yangtools - yang-model-api - org.opendaylight.yangtools yang-common - - org.opendaylight.mdsal - mdsal-binding-generator-impl - org.opendaylight.mdsal.model odl-uint24 @@ -135,11 +127,7 @@ org.opendaylight.mdsal - mdsal-binding-spec-util - - - org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.yangtools @@ -179,17 +167,23 @@ netty-transport-native-epoll linux-x86_64 - - - org.osgi - org.osgi.core + javax.inject + javax.inject + provided + true org.osgi osgi.cmpn + + + org.osgi + org.osgi.core + + ${project.groupId} @@ -269,6 +263,11 @@ mdsal-dom-broker test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java index 937382a0f9..3bb2ffb3fb 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java @@ -361,12 +361,8 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { } final GracefulRestartCapability advertisedGracefulRestartCapability = session.getAdvertisedGracefulRestartCapability(); - final List advertisedTables = - advertisedGracefulRestartCapability.getTables(); - final List advertisedLLTables = - session.getAdvertisedLlGracefulRestartCapability().getTables(); + final var advertisedTables = advertisedGracefulRestartCapability.getTables(); + final var advertisedLLTables = session.getAdvertisedLlGracefulRestartCapability().getTables(); final List addPathTablesType = session.getAdvertisedAddPathTableTypes(); final Set advertizedTableTypes = session.getAdvertisedTableTypes(); @@ -405,7 +401,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { if (advertisedTables == null) { forwardingTables = Collections.emptySet(); } else { - forwardingTables = advertisedTables.stream() + forwardingTables = advertisedTables.values().stream() .filter(table -> table.getAfiFlags() != null) .filter(table -> table.getAfiFlags().isForwardingState()) .map(table -> new TablesKey(table.getAfi(), table.getSafi())) @@ -422,7 +418,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { if (advertisedTables == null || advertisedTables.isEmpty()) { setAdvertizedGracefulRestartTableTypes(Collections.emptyList()); } else { - setAdvertizedGracefulRestartTableTypes(advertisedTables.stream() + setAdvertizedGracefulRestartTableTypes(advertisedTables.values().stream() .map(t -> new TablesKey(t.getAfi(), t.getSafi())).collect(Collectors.toList())); } setAfiSafiGracefulRestartState(advertisedGracefulRestartCapability.getRestartTime().toJava(), false, @@ -431,8 +427,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener { final Map llTablesReceived; if (advertisedLLTables != null) { llTablesReceived = new HashMap<>(); - for (org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp - .capabilities.ll.graceful.restart.capability.Tables table : advertisedLLTables) { + for (var table : advertisedLLTables.values()) { llTablesReceived.put(new TablesKey(table.getAfi(), table.getSafi()), table.getLongLivedStaleTime().getValue().intValue()); } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java index 71f9aa9e99..9c685214fa 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java @@ -155,7 +155,7 @@ public class BGPSessionImpl extends SimpleChannelInboundHandler im final List bgpParameters = remoteOpen.getBgpParameters(); if (bgpParameters != null) { for (final BgpParameters param : bgpParameters) { - for (final OptionalCapabilities optCapa : param.getOptionalCapabilities()) { + for (final OptionalCapabilities optCapa : param.nonnullOptionalCapabilities()) { final CParameters cParam = optCapa.getCParameters(); final CParameters1 cParam1 = cParam.augmentation(CParameters1.class); if (cParam1 != null) { diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtil.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtil.java index a58818faa2..84ea228b6c 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtil.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtil.java @@ -34,14 +34,16 @@ public final class BgpPeerUtil { */ public static Update createEndOfRib(final TablesKey key) { return key.getAfi() == Ipv4AddressFamily.class && key.getSafi() == UnicastSubsequentAddressFamily.class - ? new UpdateBuilder().build() : - new UpdateBuilder() + ? new UpdateBuilder().build() : new UpdateBuilder() .setAttributes(new AttributesBuilder() - .addAugmentation(Attributes2.class, new Attributes2Builder() - .setMpUnreachNlri(new MpUnreachNlriBuilder() - .setAfi(key.getAfi()) - .setSafi(key.getSafi()) - .build()).build()).build()).build(); + .addAugmentation(new Attributes2Builder() + .setMpUnreachNlri(new MpUnreachNlriBuilder() + .setAfi(key.getAfi()) + .setSafi(key.getSafi()) + .build()) + .build()) + .build()) + .build(); } /** diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/CodecsRegistryImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/CodecsRegistryImpl.java deleted file mode 100644 index fefa55bfed..0000000000 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/CodecsRegistryImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.protocol.bgp.rib.impl; - -import static java.util.Objects.requireNonNull; - -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; -import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs; -import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; -import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public final class CodecsRegistryImpl implements CodecsRegistry { - - private static final Logger LOG = LoggerFactory.getLogger(CodecsRegistryImpl.class); - - private final LoadingCache, Codecs> contexts = CacheBuilder.newBuilder() - .build(new CacheLoader, Codecs>() { - @Override - public Codecs load(final RIBSupport key) { - return createContext(key); - } - }); - private final BindingCodecTreeFactory codecFactory; - private final GeneratedClassLoadingStrategy classContext; - private volatile BindingCodecTree latestCodecTree; - - private CodecsRegistryImpl(final BindingCodecTreeFactory codecFactory, - final GeneratedClassLoadingStrategy strategy) { - this.codecFactory = requireNonNull(codecFactory); - this.classContext = requireNonNull(strategy); - } - - public static CodecsRegistryImpl create(final BindingCodecTreeFactory codecFactory, - final GeneratedClassLoadingStrategy classStrategy) { - return new CodecsRegistryImpl(codecFactory, classStrategy); - } - - @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", - justification = "https://github.com/spotbugs/spotbugs/issues/811") - private Codecs createContext(final RIBSupport ribSupport) { - final Codecs codecs = new CodecsImpl(ribSupport); - if (this.latestCodecTree != null) { - // FIXME: Do we need to recalculate latestCodecTree? E.g. new rib support was added - // after bgp was started. - codecs.onCodecTreeUpdated(this.latestCodecTree); - } - return codecs; - } - - @SuppressWarnings("checkstyle:illegalCatch") - void onSchemaContextUpdated(final SchemaContext context) { - final BindingRuntimeContext runtimeContext = BindingRuntimeContext.create(this.classContext, context); - this.latestCodecTree = this.codecFactory.create(runtimeContext); - for (final Codecs codecs : this.contexts.asMap().values()) { - try { - codecs.onCodecTreeUpdated(this.latestCodecTree); - } catch (final Exception e) { - LOG.error("Failed to propagate SchemaContext to codec {}", codecs, e); - } - } - } - - @Override - public Codecs getCodecs(final RIBSupport ribSupport) { - return this.contexts.getUnchecked(ribSupport); - } -} diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ConstantCodecsRegistry.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ConstantCodecsRegistry.java new file mode 100644 index 0000000000..bc6ca134a8 --- /dev/null +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ConstantCodecsRegistry.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.protocol.bgp.rib.impl; + +import static java.util.Objects.requireNonNull; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; +import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs; +import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; +import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; + +@Singleton +public final class ConstantCodecsRegistry implements CodecsRegistry { + private final ConcurrentMap, Codecs> contexts = new ConcurrentHashMap<>(); + private final BindingCodecTree codecTree; + + @Inject + public ConstantCodecsRegistry(final BindingCodecTree codecTree) { + this.codecTree = requireNonNull(codecTree); + } + + @Override + public Codecs getCodecs(final RIBSupport ribSupport) { + return contexts.computeIfAbsent(ribSupport, this::createCodecs); + } + + private Codecs createCodecs(final RIBSupport key) { + final Codecs codecs = new CodecsImpl(key); + codecs.onCodecTreeUpdated(codecTree); + return codecs; + } +} diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/OSGiCodecsRegistry.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/OSGiCodecsRegistry.java new file mode 100644 index 0000000000..a72bac2cc0 --- /dev/null +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/OSGiCodecsRegistry.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.protocol.bgp.rib.impl; + +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; +import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs; +import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; +import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferencePolicy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Beta +@Component(immediate = true) +public final class OSGiCodecsRegistry implements CodecsRegistry { + private static final Logger LOG = LoggerFactory.getLogger(OSGiCodecsRegistry.class); + + private final ConcurrentMap, Codecs> contexts = new ConcurrentHashMap<>(); + private volatile BindingCodecTree codecTree; + + @Override + public Codecs getCodecs(final RIBSupport ribSupport) { + return contexts.computeIfAbsent(ribSupport, this::createCodecs); + } + + @Reference(policy = ReferencePolicy.DYNAMIC) + void bindCodecTree(final BindingCodecTree newCodecTree) { + this.codecTree = requireNonNull(newCodecTree); + } + + void unbindCodecTree(final BindingCodecTree unused) { + this.codecTree = null; + } + + void updatedCodecTree(final BindingCodecTree newCodecTree) { + this.codecTree = requireNonNull(newCodecTree); + contexts.values().forEach(codecs -> codecs.onCodecTreeUpdated(newCodecTree)); + } + + @Activate + @SuppressWarnings("static-method") + void activate() { + LOG.info("BGP codec registry started"); + } + + @Deactivate + void deactivate() { + contexts.clear(); + LOG.info("BGP codec registry stopped"); + } + + private Codecs createCodecs(final RIBSupport key) { + final Codecs codecs = new CodecsImpl(key); + codecs.onCodecTreeUpdated(codecTree); + return codecs; + } +} diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java index 43945412c8..41c45994b0 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java @@ -79,14 +79,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // This class is thread-safe public final class RIBImpl extends BGPRibStateImpl implements RIB, TransactionChainListener, - DOMTransactionChainListener, SchemaContextListener, AutoCloseable { + DOMTransactionChainListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(RIBImpl.class); private static final QName RIB_ID_QNAME = QName.create(Rib.QNAME, "id").intern(); @@ -100,7 +98,7 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, TransactionCh private final RIBExtensionConsumerContext extensions; private final YangInstanceIdentifier yangRibId; private final RIBSupportContextRegistryImpl ribContextRegistry; - private final CodecsRegistryImpl codecsRegistry; + private final CodecsRegistry codecsRegistry; private final BGPTableTypeRegistryConsumer tableTypeRegistry; private final DOMDataBrokerExtension domService; private final Map txChainToLocRibWriter = new HashMap<>(); @@ -123,7 +121,7 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, TransactionCh final BgpId localBgpId, final RIBExtensionConsumerContext extensions, final BGPDispatcher dispatcher, - final CodecsRegistryImpl codecsRegistry, + final CodecsRegistry codecsRegistry, final DOMDataBroker domDataBroker, final DataBroker dataBroker, final BGPRibRoutingPolicy ribPolicies, @@ -335,11 +333,6 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, TransactionCh return this.ribContextRegistry; } - @Override - public void onGlobalContextUpdated(final SchemaContext context) { - this.codecsRegistry.onSchemaContextUpdated(context); - } - @Override public CodecsRegistry getCodecsRegistry() { return this.codecsRegistry; diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java index 22a9daadd6..47b9848b88 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImpl.java @@ -209,7 +209,7 @@ public final class BgpDeployerImpl implements ClusteredDataTreeChangeListener css.restartNeighbors(peerGroup.getPeerGroupName())); } } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java index 95e4ed1c9c..5bf5a1cc12 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java @@ -16,6 +16,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import io.netty.util.concurrent.Future; import java.net.InetSocketAddress; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -99,9 +100,9 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { caps.add(new OptionalCapabilitiesBuilder() .setCParameters(MultiprotocolCapabilitiesUtil.RR_CAPABILITY).build()); - final List afiSafi = OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafis, false); - final List addPathCapability = OpenConfigMappingUtil - .toAddPathCapability(afiSafi, tableTypeRegistry); + final Collection afiSafi = OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafis, false).values(); + final List addPathCapability = OpenConfigMappingUtil.toAddPathCapability(afiSafi, + tableTypeRegistry); if (!addPathCapability.isEmpty()) { caps.add(new OptionalCapabilitiesBuilder() .setCParameters(new CParametersBuilder().addAugmentation(CParameters1.class, @@ -189,8 +190,10 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { } final AfiSafis actAfiSafi = this.currentConfiguration.getAfiSafis(); final AfiSafis extAfiSafi = neighbor.getAfiSafis(); - final List actualSafi = actAfiSafi != null ? actAfiSafi.getAfiSafi() : Collections.emptyList(); - final List extSafi = extAfiSafi != null ? extAfiSafi.getAfiSafi() : Collections.emptyList(); + final Collection actualSafi = actAfiSafi != null ? actAfiSafi.nonnullAfiSafi().values() + : Collections.emptyList(); + final Collection extSafi = extAfiSafi != null ? extAfiSafi.nonnullAfiSafi().values() + : Collections.emptyList(); return actualSafi.containsAll(extSafi) && extSafi.containsAll(actualSafi) && Objects.equals(this.currentConfiguration.getConfig(), neighbor.getConfig()) && Objects.equals(this.currentConfiguration.getNeighborAddress(), neighbor.getNeighborAddress()) @@ -264,8 +267,8 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { afisSafis = requireNonNull(neighbor.getAfiSafis(), "Missing mandatory AFIs/SAFIs"); } - final Set afiSafisAdvertized = OpenConfigMappingUtil - .toTableKey(afisSafis.getAfiSafi(), tableTypeRegistry); + final Set afiSafisAdvertized = OpenConfigMappingUtil.toTableKey(afisSafis.getAfiSafi(), + tableTypeRegistry); final PeerRole role = OpenConfigMappingUtil.toPeerRole(neighbor, peerGroup); final ClusterIdentifier clusterId = OpenConfigMappingUtil @@ -273,10 +276,10 @@ public class BgpPeer implements PeerBean, BGPPeerStateConsumer { final int hold = OpenConfigMappingUtil.getHoldTimer(neighbor, peerGroup); this.gracefulRestartTimer = OpenConfigMappingUtil.getGracefulRestartTimer(neighbor, peerGroup, hold); - final Set gracefulTables = GracefulRestartUtil.getGracefulTables(afisSafis.getAfiSafi(), - tableTypeRegistry); - final Map llGracefulTimers = GracefulRestartUtil - .getLlGracefulTimers(afisSafis.getAfiSafi(), tableTypeRegistry); + final Set gracefulTables = GracefulRestartUtil.getGracefulTables( + afisSafis.nonnullAfiSafi().values(), tableTypeRegistry); + final Map llGracefulTimers = GracefulRestartUtil.getLlGracefulTimers( + afisSafis.nonnullAfiSafi().values(), tableTypeRegistry); this.finalCapabilities = getBgpCapabilities(afisSafis, rib, tableTypeRegistry); final List bgpParameters = getInitialBgpParameters(gracefulTables, llGracefulTimers); final KeyMapping keyMapping = OpenConfigMappingUtil.getNeighborKey(neighbor); diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtil.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtil.java index ab5ffee015..ef10ef8294 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtil.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtil.java @@ -12,12 +12,14 @@ import static org.opendaylight.protocol.bgp.parser.GracefulRestartUtil.gracefulR import com.google.common.collect.Maps; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.rib.impl.BgpPeerUtil; @@ -42,6 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.uint24.rev200104.Uint24; +import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,7 +72,7 @@ public final class GracefulRestartUtil { final TablesKey key = entry.getKey(); return gracefulRestartTable(key.getAfi(), key.getSafi(), entry.getValue()); }) - .collect(Collectors.toList()), restartTime, localRestarting); + .collect(Collectors.toMap(Identifiable::key, Function.identity())), restartTime, localRestarting); } public static CParameters getLlGracefulCapability(final Set llGracefulRestarts) { @@ -88,19 +91,21 @@ public final class GracefulRestartUtil { .build()).build()).build(); } - static Set getGracefulTables(final List afiSafis, + static Set getGracefulTables(final Collection afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { Set gracefulTables = new HashSet<>(); for (final AfiSafi afiSafi : afiSafis) { - if (afiSafi.getGracefulRestart() != null - && afiSafi.getGracefulRestart().getConfig() != null - && afiSafi.getGracefulRestart().getConfig().isEnabled()) { - final Class afiSafiName = afiSafi.getAfiSafiName(); - if (afiSafiName != null) { - final Optional tableKey = tableTypeRegistry.getTableKey(afiSafiName); - if (tableKey.isPresent()) { - final TablesKey tablesKey = tableKey.get(); - gracefulTables.add(tablesKey); + final GracefulRestart gr = afiSafi.getGracefulRestart(); + if (gr != null) { + final Config config = gr.getConfig(); + if (config != null && Boolean.TRUE.equals(config.isEnabled())) { + final Class afiSafiName = afiSafi.getAfiSafiName(); + if (afiSafiName != null) { + final Optional tableKey = tableTypeRegistry.getTableKey(afiSafiName); + if (tableKey.isPresent()) { + final TablesKey tablesKey = tableKey.get(); + gracefulTables.add(tablesKey); + } } } } @@ -108,7 +113,7 @@ public final class GracefulRestartUtil { return gracefulTables; } - static Map getLlGracefulTimers(final List afiSafis, + static Map getLlGracefulTimers(final Collection afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { final Map timers = new HashMap<>(); afiSafis.forEach(afiSafi -> { diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java index 1f2326b7b2..6503f6a9b0 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java @@ -10,14 +10,17 @@ package org.opendaylight.protocol.bgp.rib.impl.config; import static com.google.common.base.Preconditions.checkState; import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -32,6 +35,7 @@ import org.opendaylight.protocol.util.Ipv4Util; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.BgpCommonAfiSafiList; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder; +import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiKey; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborAddPathsConfig; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborGroup; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborTransportConfig; @@ -70,7 +74,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.open import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.ClusterIdentifier; -import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint16; @@ -79,7 +82,7 @@ final class OpenConfigMappingUtil { static final Optional APPLICATION_PEER_GROUP_NAME_OPT = Optional.of(APPLICATION_PEER_GROUP_NAME); static final int HOLDTIMER = 90; private static final AfiSafi IPV4_AFISAFI = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(); - private static final List DEFAULT_AFISAFI = ImmutableList.of(IPV4_AFISAFI); + private static final Map DEFAULT_AFISAFI = ImmutableMap.of(IPV4_AFISAFI.key(), IPV4_AFISAFI); private static final int CONNECT_RETRY = 30; private static final PortNumber PORT = new PortNumber(Uint16.valueOf(179).intern()); @@ -125,21 +128,17 @@ final class OpenConfigMappingUtil { } //make sure IPv4 Unicast (RFC 4271) when required - static List getAfiSafiWithDefault( + static Map getAfiSafiWithDefault( final BgpCommonAfiSafiList afiSAfis, final boolean setDeafultIPv4) { if (afiSAfis == null || afiSAfis.getAfiSafi() == null) { - return setDeafultIPv4 ? DEFAULT_AFISAFI : Collections.emptyList(); - } - final List afiSafi = afiSAfis.getAfiSafi(); - if (setDeafultIPv4) { - final boolean anyMatch = afiSafi.stream() - .anyMatch(input -> input.getAfiSafiName().equals(IPV4UNICAST.class)); - if (!anyMatch) { - final List newAfiSafi = new ArrayList<>(afiSafi.size() + 1); - newAfiSafi.addAll(afiSafi); - newAfiSafi.add(IPV4_AFISAFI); - return newAfiSafi; - } + return setDeafultIPv4 ? DEFAULT_AFISAFI : Collections.emptyMap(); + } + final Map afiSafi = afiSAfis.nonnullAfiSafi(); + if (setDeafultIPv4 && !afiSafi.containsKey(IPV4_AFISAFI.key())) { + final Map newAfiSafi = Maps.newHashMapWithExpectedSize(afiSafi.size() + 1); + newAfiSafi.putAll(afiSafi); + newAfiSafi.put(IPV4_AFISAFI.key(), IPV4_AFISAFI); + return newAfiSafi; } return afiSafi; } @@ -181,7 +180,7 @@ final class OpenConfigMappingUtil { return null; } - static Map toPathSelectionMode(final List afiSafis, + static Map toPathSelectionMode(final Collection afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { final Map pathSelectionModes = new HashMap<>(); for (final AfiSafi afiSafi : afiSafis) { @@ -216,7 +215,7 @@ final class OpenConfigMappingUtil { return false; } - static List toAddPathCapability(final List afiSafis, + static List toAddPathCapability(final Collection afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { final List addPathCapability = new ArrayList<>(); for (final AfiSafi afiSafi : afiSafis) { @@ -249,7 +248,7 @@ final class OpenConfigMappingUtil { return false; } - static List toTableTypes(final List afiSafis, + static List toTableTypes(final Collection afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { return afiSafis.stream() .map(afiSafi -> tableTypeRegistry.getTableType(afiSafi.getAfiSafiName())) @@ -258,9 +257,9 @@ final class OpenConfigMappingUtil { .collect(Collectors.toList()); } - static Set toTableKey(final List afiSafis, final BGPTableTypeRegistryConsumer + static Set toTableKey(final Map afiSafis, final BGPTableTypeRegistryConsumer tableTypeRegistry) { - return afiSafis.stream() + return afiSafis.values().stream() .map(afiSafi -> tableTypeRegistry.getTableKey(afiSafi.getAfiSafiName())) .filter(Optional::isPresent) .map(Optional::get) @@ -442,11 +441,11 @@ final class OpenConfigMappingUtil { static @NonNull PortNumber getPort(final Neighbor neighbor, final PeerGroup peerGroup) { PortNumber port = null; if (peerGroup != null) { - port = getPort(peerGroup.getTransport(), PeerGroupTransportConfig.class); + port = getPort(peerGroup.getTransport(), config -> config.augmentation(PeerGroupTransportConfig.class)); } if (port == null) { - port = getPort(neighbor.getTransport(), NeighborTransportConfig.class); + port = getPort(neighbor.getTransport(), config -> config.augmentation(NeighborTransportConfig.class)); } if (port == null) { @@ -456,12 +455,12 @@ final class OpenConfigMappingUtil { return port; } - private static > @Nullable PortNumber getPort( - final @Nullable Transport transport, final Class augment) { + private static @Nullable PortNumber getPort(final @Nullable Transport transport, + final Function extractConfig) { if (transport != null) { final Config config = transport.getConfig(); if (config != null) { - final T peerTc = config.augmentation(augment); + final TransportConfig peerTc = extractConfig.apply(config); if (peerTc != null) { return peerTc.getRemotePort(); } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java index d94427cf2a..934271c525 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java @@ -13,24 +13,21 @@ import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUti import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FluentFuture; -import java.util.List; +import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.TransactionChain; import org.opendaylight.mdsal.binding.api.TransactionChainListener; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; -import org.opendaylight.protocol.bgp.rib.impl.CodecsRegistryImpl; import org.opendaylight.protocol.bgp.rib.impl.RIBImpl; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; @@ -56,10 +53,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.BgpId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.ClusterIdentifier; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.osgi.framework.ServiceRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,14 +65,12 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { private final RIBExtensionConsumerContext extensions; private final BGPDispatcher dispatcher; - private final BindingCodecTreeFactory codecTreeFactory; + private final CodecsRegistry codecsRegistry; private final DOMDataBroker domBroker; - private final DOMSchemaService domSchemaService; private final BGPRibRoutingPolicyFactory policyProvider; private RIBImpl ribImpl; private ServiceRegistration serviceRegistration; - private ListenerRegistration schemaContextRegistration; - private List afiSafi; + private Collection afiSafi; private AsNumber asNumber; private Ipv4AddressNoZone routerId; @@ -88,17 +81,15 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { final RIBExtensionConsumerContext contextProvider, final BGPDispatcher dispatcher, final BGPRibRoutingPolicyFactory policyProvider, - final BindingCodecTreeFactory codecTreeFactory, + final CodecsRegistry codecsRegistry, final DOMDataBroker domBroker, - final DataBroker dataBroker, - final DOMSchemaService domSchemaService + final DataBroker dataBroker ) { this.extensions = contextProvider; this.dispatcher = dispatcher; - this.codecTreeFactory = codecTreeFactory; + this.codecsRegistry = codecsRegistry; this.domBroker = domBroker; this.dataBroker = dataBroker; - this.domSchemaService = domSchemaService; this.policyProvider = policyProvider; } @@ -106,11 +97,10 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { Preconditions.checkState(this.ribImpl == null, "Previous instance %s was not closed.", this); this.ribImpl = createRib(global, instanceName, tableTypeRegistry); - this.schemaContextRegistration = this.domSchemaService.registerSchemaContextListener(this.ribImpl); } Boolean isGlobalEqual(final Global global) { - final List globalAfiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true); + final Collection globalAfiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true).values(); final Config globalConfig = global.getConfig(); final AsNumber globalAs = globalConfig.getAs(); final Ipv4Address globalRouterId = global.getConfig().getRouterId(); @@ -199,10 +189,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { this.ribImpl.close(); this.ribImpl = null; } - if (this.schemaContextRegistration != null) { - this.schemaContextRegistration.close(); - this.schemaContextRegistration = null; - } if (this.serviceRegistration != null) { try { this.serviceRegistration.unregister(); @@ -246,7 +232,7 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { final Global global, final String bgpInstanceName, final BGPTableTypeRegistryConsumer tableTypeRegistry) { - this.afiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true); + this.afiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true).values(); final Config globalConfig = global.getConfig(); this.asNumber = globalConfig.getAs(); this.routerId = IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(globalConfig.getRouterId()); @@ -259,8 +245,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable { final BGPRibRoutingPolicy ribPolicy = this.policyProvider.buildBGPRibPolicy(this.asNumber.getValue().toJava(), this.routerId, this.clusterId, RoutingPolicyUtil.getApplyPolicy(global.getApplyPolicy())); - final CodecsRegistryImpl codecsRegistry = CodecsRegistryImpl.create(codecTreeFactory, - this.extensions.getClassLoadingStrategy()); return new RIBImpl( tableTypeRegistry, diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/state/BGPSessionStateImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/state/BGPSessionStateImpl.java index 9fffe935a6..187c7b6e26 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/state/BGPSessionStateImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/state/BGPSessionStateImpl.java @@ -78,9 +78,9 @@ public final class BGPSessionStateImpl implements BGPSessionState, BGPTimersStat @Override public synchronized void advertizeCapabilities(final int newHoldTimerValue, final SocketAddress newRemoteAddress, final SocketAddress localAddress, final Set tableTypes, final List bgpParameters) { - if (bgpParameters != null && !bgpParameters.isEmpty()) { + if (bgpParameters != null) { for (final BgpParameters parameters : bgpParameters) { - for (final OptionalCapabilities optionalCapabilities : parameters.getOptionalCapabilities()) { + for (final OptionalCapabilities optionalCapabilities : parameters.nonnullOptionalCapabilities()) { final CParameters cParam = optionalCapabilities.getCParameters(); final CParameters1 capabilities = cParam.augmentation(CParameters1.class); if (capabilities != null) { diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java index 3359cbbbf0..9b2c108a0f 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java @@ -56,6 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.prefixes.destination.ipv4.Ipv4PrefixesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.Ipv4Routes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.ipv4.routes.Ipv4Route; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.ipv4.routes.Ipv4RouteKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv4CaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.NotifyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Open; @@ -135,7 +136,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { private NioEventLoopGroup boss; private org.opendaylight.protocol.bgp.inet.BGPActivator inetActivator; protected StrictBGPPeerRegistry serverRegistry; - protected CodecsRegistryImpl codecsRegistry; + protected ConstantCodecsRegistry codecsRegistry; private List clientDispatchers; @@ -146,7 +147,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { this.ribActivator = new RIBActivator(); this.ribExtension = new SimpleRIBExtensionProviderContext(); - this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService); + this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService.currentSerializer()); this.bgpActivator = new BGPActivator(); this.inetActivator = new org.opendaylight.protocol.bgp.inet.BGPActivator(); @@ -163,8 +164,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { doReturn(Mockito.mock(ClusterSingletonServiceRegistration.class)).when(this.clusterSingletonServiceProvider) .registerClusterSingletonService(any(ClusterSingletonService.class)); - this.codecsRegistry = CodecsRegistryImpl.create(this.mappingService.getCodecFactory(), - this.ribExtension.getClassLoadingStrategy()); + this.codecsRegistry = new ConstantCodecsRegistry(mappingService.currentSerializer()); this.clientDispatchers = new ArrayList<>(); } @@ -176,7 +176,6 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { this.worker.shutdownGracefully(0, 0, TimeUnit.SECONDS); this.boss.shutdownGracefully(0, 0, TimeUnit.SECONDS); } - this.mappingService.close(); this.ribActivator.close(); this.inetActivator.close(); this.bgpActivator.close(); @@ -213,13 +212,13 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { // FIXME: remove this sleep Thread.sleep(100); readDataOperational(getDataBroker(), BGP_IID, bgpRib -> { - final Ipv4RoutesCase routes = (Ipv4RoutesCase) bgpRib.getRib().get(0).getLocRib().getTables().get(0) - .getRoutes(); + final Ipv4RoutesCase routes = (Ipv4RoutesCase) bgpRib.getRib().values().iterator().next().getLocRib() + .getTables().values().iterator().next().getRoutes(); final int size; if (routes != null) { final Ipv4Routes routesCase = routes.getIpv4Routes(); if (routesCase != null) { - final List routeList = routesCase.getIpv4Route(); + final Map routeList = routesCase.getIpv4Route(); size = routeList == null ? 0 : routeList.size(); } else { size = 0; @@ -235,7 +234,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest { void checkPeersPresentOnDataStore(final int numberOfPeers) throws Exception { readDataOperational(getDataBroker(), BGP_IID, bgpRib -> { - Assert.assertEquals(numberOfPeers, bgpRib.getRib().get(0).getPeer().size()); + Assert.assertEquals(numberOfPeers, bgpRib.getRib().values().iterator().next().getPeer().size()); return bgpRib; }); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractRIBTestSetup.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractRIBTestSetup.java index 41269a014a..1eb44500d4 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractRIBTestSetup.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractRIBTestSetup.java @@ -31,12 +31,7 @@ import org.mockito.MockitoAnnotations; import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.binding.api.TransactionChain; import org.opendaylight.mdsal.binding.api.WriteTransaction; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; -import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; +import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener; @@ -53,7 +48,6 @@ import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext; -import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; @@ -86,7 +80,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest { @@ -97,9 +90,7 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest { static final QName PREFIX_QNAME = QName.create(Ipv4Route.QNAME, "prefix").intern(); private static final BgpId RIB_ID = new BgpId("127.0.0.1"); private RIBImpl rib; - private BindingCodecTreeFactory codecFactory; private RIBActivator a1; - private RIBSupport ribSupport; @Mock private BGPDispatcher dispatcher; @@ -127,12 +118,6 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest { @Mock private ClusterSingletonServiceProvider clusterSingletonServiceProvider; - private static ModuleInfoBackedContext createClassLoadingStrategy() throws Exception { - final ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create(); - ctx.registerModuleInfo(BindingReflections.getModuleInfo(Ipv4Route.class)); - return ctx; - } - @Override @Before public void setUp() throws Exception { @@ -142,29 +127,21 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest { public void mockRib() throws Exception { final RIBExtensionProviderContext context = new SimpleRIBExtensionProviderContext(); - final ModuleInfoBackedContext strategy = createClassLoadingStrategy(); - final SchemaContext schemaContext = strategy.tryToCreateSchemaContext().get(); - this.codecFactory = new BindingNormalizedNodeCodecRegistry( - BindingRuntimeContext.create(strategy, schemaContext)); final List localTables = new ArrayList<>(); localTables.add(new BgpTableTypeImpl(IPV4_AFI, SAFI)); localTables.add(new BgpTableTypeImpl(IPV6_AFI, SAFI)); + final CurrentAdapterSerializer serializer = mappingService.currentSerializer(); this.a1 = new RIBActivator(); - this.a1.startRIBExtensionProvider(context, this.mappingService); - - final CodecsRegistryImpl codecsRegistry = CodecsRegistryImpl.create(this.codecFactory, - GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()); + this.a1.startRIBExtensionProvider(context, serializer); mockedMethods(); doReturn(mock(ClusterSingletonServiceRegistration.class)).when(this.clusterSingletonServiceProvider) .registerClusterSingletonService(any(ClusterSingletonService.class)); this.rib = new RIBImpl(this.tableRegistry, new RibId("test"), new AsNumber(Uint32.valueOf(5)), RIB_ID, context, - this.dispatcher, codecsRegistry, this.dom, getDataBroker(), this.policies, + this.dispatcher, new ConstantCodecsRegistry(serializer), this.dom, getDataBroker(), this.policies, localTables, Collections.singletonMap(KEY, BasePathSelectionModeFactory.createBestPathSelectionStrategy())); - this.rib.onGlobalContextUpdated(schemaContext); - this.ribSupport = getRib().getRibSupportContext().getRIBSupport(KEY); } @SuppressWarnings("unchecked") @@ -194,8 +171,8 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest { doReturn(Optional.empty()).when(this.future).get(); doReturn(this.future).when(this.domTransWrite).commit(); doNothing().when(this.future).addListener(any(Runnable.class), any(Executor.class)); - doNothing().when(this.transWrite).put(eq(LogicalDatastoreType.OPERATIONAL), - any(InstanceIdentifier.class), any(DataObject.class), eq(true)); + doNothing().when(this.transWrite).mergeParentStructurePut(eq(LogicalDatastoreType.OPERATIONAL), + any(InstanceIdentifier.class), any(DataObject.class)); doNothing().when(this.transWrite).put(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class)); doReturn(this.future).when(this.transWrite).commit(); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathAllPathsTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathAllPathsTest.java index b441dfe96f..200dd45a84 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathAllPathsTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathAllPathsTest.java @@ -60,7 +60,6 @@ public class AddPathAllPathsTest extends AbstractAddPathTest { getDomBroker(), getDataBroker(), this.policies, TABLES_TYPE, pathTables); this.ribImpl.instantiateServiceInstance(); - this.ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final ChannelFuture channelFuture = this.serverDispatcher.createServer( new InetSocketAddress(RIB_ID, PORT.toJava())); waitFutureSuccess(channelFuture); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathBasePathsTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathBasePathsTest.java index 9fca780010..d80259d8c4 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathBasePathsTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathBasePathsTest.java @@ -46,7 +46,6 @@ public class AddPathBasePathsTest extends AbstractAddPathTest { this.serverDispatcher, this.codecsRegistry, getDomBroker(), getDataBroker(), this.policies, TABLES_TYPE, pathTables); this.ribImpl.instantiateServiceInstance(); - this.ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final ChannelFuture channelFuture = this.serverDispatcher.createServer( new InetSocketAddress(RIB_ID, PORT.toJava())); waitFutureSuccess(channelFuture); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathNPathsTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathNPathsTest.java index 4d3df06c8f..72ee0d0900 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathNPathsTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathNPathsTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.protocol.bgp.rib.impl; import static org.junit.Assert.assertEquals; @@ -47,7 +46,6 @@ public class AddPathNPathsTest extends AbstractAddPathTest { TABLES_TYPE, pathTables); this.ribImpl.instantiateServiceInstance(); - this.ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final ChannelFuture channelFuture = this.serverDispatcher.createServer( new InetSocketAddress(RIB_ID, PORT.toJava())); waitFutureSuccess(channelFuture); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java index 8bb07efe23..f21e6dfcf8 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImplTest.java @@ -28,7 +28,6 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoop; -import io.netty.channel.embedded.EmbeddedChannel; import io.netty.util.concurrent.GlobalEventExecutor; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -57,14 +56,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.ProtocolVersion; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Update; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilitiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapabilityBuilder; @@ -104,27 +101,25 @@ public class BGPSessionImplTest { @Before public void setUp() throws UnknownHostException { - new EmbeddedChannel(); MockitoAnnotations.initMocks(this); - final List tlvs = new ArrayList<>(); - this.classicOpen = new OpenBuilder() - .setMyAsNumber(Uint16.valueOf(AS_NUMBER.getValue())) - .setHoldTimer(HOLD_TIMER) - .setVersion(new ProtocolVersion(Uint8.valueOf(4))) - .setBgpParameters(tlvs) - .setBgpIdentifier(BGP_ID) - .build(); final List capa = new ArrayList<>(); capa.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder() - .addAugmentation(CParameters1.class, new CParameters1Builder() + .addAugmentation(new CParameters1Builder() .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()) .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().build()).build()) .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(AS_NUMBER).build()).build()).build()); capa.add(new OptionalCapabilitiesBuilder().setCParameters(BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY) .build()); - tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capa).build()); + + this.classicOpen = new OpenBuilder() + .setMyAsNumber(Uint16.valueOf(AS_NUMBER.getValue())) + .setHoldTimer(HOLD_TIMER) + .setVersion(new ProtocolVersion(Uint8.valueOf(4))) + .setBgpParameters(List.of(new BgpParametersBuilder().setOptionalCapabilities(capa).build())) + .setBgpIdentifier(BGP_ID) + .build(); final ChannelFuture f = mock(ChannelFuture.class); doReturn(null).when(f).addListener(any()); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtilTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtilTest.java index fbfc78a9fa..ca29446ba6 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtilTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BgpPeerUtilTest.java @@ -15,10 +15,12 @@ import static org.junit.Assert.assertTrue; import java.util.Collections; import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Update; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.NlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpUnreachNlri; @@ -69,27 +71,23 @@ public class BgpPeerUtilTest { .build(); final Update ipv6EOT = new UpdateBuilder() .setAttributes(new AttributesBuilder() - .addAugmentation(Attributes2.class, new Attributes2Builder() - .setMpUnreachNlri(ipv6EOTnlri) - .build()) - .build()) + .addAugmentation(new Attributes2Builder().setMpUnreachNlri(ipv6EOTnlri).build()) + .build()) .build(); assertTrue(BgpPeerUtil.isEndOfRib(ipv4EOT)); assertTrue(BgpPeerUtil.isEndOfRib(ipv6EOT)); final Update ipv4NonEOT = new UpdateBuilder() - .setNlri(Collections.emptyList()) + .setNlri(Collections.singletonList(new NlriBuilder().setPrefix(new Ipv4Prefix("0.0.0.0/32")).build())) .build(); final MpUnreachNlri ipv6NonEOTnlri = new MpUnreachNlriBuilder(ipv6EOTnlri) .setWithdrawnRoutes(new WithdrawnRoutesBuilder().build()) .build(); final Update ipv6NonEOT = new UpdateBuilder() .setAttributes(new AttributesBuilder() - .addAugmentation(Attributes2.class, new Attributes2Builder() - .setMpUnreachNlri(ipv6NonEOTnlri) - .build()) - .build()) + .addAugmentation(new Attributes2Builder().setMpUnreachNlri(ipv6NonEOTnlri).build()) + .build()) .build(); assertFalse(BgpPeerUtil.isEndOfRib(ipv4NonEOT)); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/GracefulRestartTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/GracefulRestartTest.java index ea0f8d14dd..73a6ba9d41 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/GracefulRestartTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/GracefulRestartTest.java @@ -113,7 +113,6 @@ public class GracefulRestartTest extends AbstractAddPathTest { getDomBroker(), getDataBroker(), this.policies, tableTypes, pathTables); this.ribImpl.instantiateServiceInstance(); - this.ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final ChannelFuture channelFuture = this.serverDispatcher.createServer( new InetSocketAddress(RIB_ID, PORT.toJava())); waitFutureSuccess(channelFuture); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java index 6b2468827c..d4022dc1c5 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java @@ -8,7 +8,7 @@ package org.opendaylight.protocol.bgp.rib.impl; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -32,7 +32,7 @@ import org.junit.Ignore; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; +import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; import org.opendaylight.protocol.bgp.inet.RIBActivator; import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; @@ -74,7 +74,7 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { private RIBExtensionProviderContext ext2; @Mock private BGPDispatcher dispatcher; - private CodecsRegistryImpl codecsRegistry; + private ConstantCodecsRegistry codecsRegistry; @Override @Before @@ -95,10 +95,10 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { this.baseact = new RIBActivator(); this.lsact = new org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator(); - this.baseact.startRIBExtensionProvider(this.ext1, this.mappingService); - this.lsact.startRIBExtensionProvider(this.ext2, this.mappingService); - this.codecsRegistry = CodecsRegistryImpl.create(this.bindingCodecTreeFactory, - GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()); + final CurrentAdapterSerializer serializer = mappingService.currentSerializer(); + this.baseact.startRIBExtensionProvider(this.ext1, serializer); + this.lsact.startRIBExtensionProvider(this.ext2, serializer); + this.codecsRegistry = new ConstantCodecsRegistry(serializer); } @Override @@ -119,7 +119,6 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { .createBestPathSelectionStrategy())); rib.instantiateServiceInstance(); assertTablesExists(tables); - rib.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final BGPPeer peer = AbstractAddPathTest.configurePeer(this.tableRegistry, this.localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); peer.instantiateServiceInstance(); @@ -136,7 +135,6 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { tables, Collections.singletonMap(TABLE_KEY, BasePathSelectionModeFactory.createBestPathSelectionStrategy())); rib.instantiateServiceInstance(); - rib.onGlobalContextUpdated(this.schemaService.getGlobalContext()); assertTablesExists(tables); final BGPPeer peer = AbstractAddPathTest.configurePeer(this.tableRegistry, this.localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); @@ -158,12 +156,12 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { private void assertTablesExists(final List expectedTables) throws InterruptedException, ExecutionException { readDataOperational(getDataBroker(), BGP_IID, bgpRib -> { - final List tables = bgpRib.getRib().get(0).getLocRib().getTables(); - assertFalse(tables.isEmpty()); + final var tables = bgpRib.getRib().values().iterator().next().getLocRib().getTables(); + assertNotNull(tables); for (final BgpTableType tableType : expectedTables) { boolean found = false; - for (final Tables table : tables) { + for (final Tables table : tables.values()) { if (table.getAfi().equals(tableType.getAfi()) && table.getSafi().equals(tableType.getSafi())) { found = true; assertEquals(Boolean.TRUE, table.getAttributes().isUptodate()); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/SynchronizationAndExceptionTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/SynchronizationAndExceptionTest.java index ad96e68e7b..a9b0f2835b 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/SynchronizationAndExceptionTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/SynchronizationAndExceptionTest.java @@ -32,7 +32,6 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoop; -import io.netty.channel.embedded.EmbeddedChannel; import io.netty.util.concurrent.GlobalEventExecutor; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -66,7 +65,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.OpenBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.ProtocolVersion; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilitiesBuilder; @@ -81,7 +79,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.Nlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.NlriBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapabilityBuilder; @@ -142,19 +139,10 @@ public class SynchronizationAndExceptionTest extends AbstractAddPathTest { @Before public void setUp() throws Exception { super.setUp(); - new EmbeddedChannel(); - final List tlvs = new ArrayList<>(); - this.classicOpen = new OpenBuilder() - .setMyAsNumber(Uint16.valueOf(AS_NUMBER.getValue())) - .setHoldTimer(Uint16.valueOf(HOLD_TIMER)) - .setVersion(new ProtocolVersion(Uint8.valueOf(4))) - .setBgpParameters(tlvs) - .setBgpIdentifier(BGP_ID) - .build(); final List capa = new ArrayList<>(); capa.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder() - .addAugmentation(CParameters1.class, new CParameters1Builder() + .addAugmentation(new CParameters1Builder() .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()) .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder().setRestartTime(Uint16.ZERO) @@ -163,7 +151,16 @@ public class SynchronizationAndExceptionTest extends AbstractAddPathTest { .build()); capa.add(new OptionalCapabilitiesBuilder() .setCParameters(BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY).build()); - tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capa).build()); + + this.classicOpen = new OpenBuilder() + .setMyAsNumber(Uint16.valueOf(AS_NUMBER.getValue())) + .setHoldTimer(Uint16.valueOf(HOLD_TIMER)) + .setVersion(new ProtocolVersion(Uint8.valueOf(4))) + .setBgpParameters(List.of(new BgpParametersBuilder() + .setOptionalCapabilities(capa) + .build())) + .setBgpIdentifier(BGP_ID) + .build(); doReturn(null).when(mock(ChannelFuture.class)).addListener(any()); doReturn(this.eventLoop).when(this.speakerListener).eventLoop(); @@ -220,7 +217,6 @@ public class SynchronizationAndExceptionTest extends AbstractAddPathTest { this.serverDispatcher, this.codecsRegistry, this.domBroker, getDataBroker(), this.policies, ImmutableList.of(this.ipv4tt), pathTables); ribImpl.instantiateServiceInstance(); - ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final BGPPeer bgpPeer = AbstractAddPathTest.configurePeer(this.tableRegistry, neighbor.getIpv4AddressNoZone(), ribImpl, null, PeerRole.Ibgp, this.serverRegistry, AFI_SAFIS_ADVERTIZED, Collections.emptySet()); @@ -269,7 +265,6 @@ public class SynchronizationAndExceptionTest extends AbstractAddPathTest { this.serverDispatcher, this.codecsRegistry, this.domBroker, getDataBroker(), this.policies, ImmutableList.of(this.ipv4tt), pathTables); ribImpl.instantiateServiceInstance(); - ribImpl.onGlobalContextUpdated(this.schemaService.getGlobalContext()); final BGPPeer bgpPeer = AbstractAddPathTest.configurePeer(this.tableRegistry, neighbor.getIpv4AddressNoZone(), ribImpl, null, PeerRole.Ibgp, this.serverRegistry, AFI_SAFIS_ADVERTIZED, Collections.emptySet()); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java index 7a61c5387f..ff38c83b9f 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerImplTest.java @@ -31,16 +31,14 @@ import org.mockito.Mock; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.mdsal.binding.api.WriteTransaction; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; import org.opendaylight.protocol.bgp.rib.impl.DefaultRibPoliciesMockTest; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; +import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; import org.opendaylight.protocol.bgp.rib.impl.spi.InstanceType; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp; @@ -57,7 +55,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NetworkInstanceProtocol; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.osgi.framework.BundleContext; @@ -88,8 +85,6 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { @Mock private DataTreeModification modification; @Mock - private ListenerRegistration dataTreeRegistration; - @Mock private ServiceRegistration registration; @Mock private ClusterSingletonServiceProvider singletonServiceProvider; @@ -109,22 +104,15 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { doReturn(this.registration).when(this.bundleContext).registerService(eq(InstanceType.PEER.getServices()), any(), any(Dictionary.class)); - doNothing().when(this.dataTreeRegistration).close(); doReturn("bgpPeer").when(this.modification).toString(); final RIBExtensionConsumerContext extension = mock(RIBExtensionConsumerContext.class); - doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(extension).getClassLoadingStrategy(); final ClusterSingletonServiceRegistration serviceRegistration = mock(ClusterSingletonServiceRegistration.class); doReturn(serviceRegistration).when(this.singletonServiceProvider).registerClusterSingletonService(any()); doNothing().when(serviceRegistration).close(); - schemaService = mock(DOMSchemaService.class); - doNothing().when(this.dataTreeRegistration).close(); - - doReturn(this.dataTreeRegistration).when(schemaService).registerSchemaContextListener(any()); - final RibImpl ribImpl = new RibImpl(extension, mock(BGPDispatcher.class), this.policyProvider, - mock(BindingCodecTreeFactory.class), getDomBroker(), getDataBroker(), schemaService); + mock(CodecsRegistry.class), getDomBroker(), getDataBroker()); doReturn(ribImpl).when(this.blueprintContainer).getComponentInstance(eq("ribImpl")); doReturn(new BgpPeer(mock(RpcProviderService.class))).when(this.blueprintContainer) @@ -155,7 +143,6 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { verify(this.blueprintContainer).getComponentInstance(eq("ribImpl")); verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS).times(2)).registerService( eq(InstanceType.RIB.getServices()), any(), any(Dictionary.class)); - verify(this.dataTreeRegistration).close(); verify(this.registration).unregister(); //Delete for existing rib @@ -164,7 +151,6 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { verify(this.blueprintContainer).getComponentInstance(eq("ribImpl")); verify(this.bundleContext, timeout(VERIFY_TIMEOUT_MILIS).times(2)) .registerService(eq(InstanceType.RIB.getServices()), any(), any(Dictionary.class)); - verify(this.dataTreeRegistration, timeout(VERIFY_TIMEOUT_MILIS).times(2)).close(); verify(this.registration, timeout(VERIFY_TIMEOUT_MILIS).times(2)).unregister(); deployer.close(); @@ -205,7 +191,7 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { private void createRib(final Global global) throws ExecutionException, InterruptedException { final WriteTransaction wr = getDataBroker().newWriteOnlyTransaction(); - wr.put(LogicalDatastoreType.CONFIGURATION, GLOBAL_II, global, true); + wr.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, GLOBAL_II, global); wr.commit().get(); } @@ -217,7 +203,7 @@ public class BgpDeployerImplTest extends DefaultRibPoliciesMockTest { private void createNeighbor(final Neighbors neighbors) throws ExecutionException, InterruptedException { final WriteTransaction wr = getDataBroker().newWriteOnlyTransaction(); - wr.put(LogicalDatastoreType.CONFIGURATION, NEIGHBORS_II, neighbors, true); + wr.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, NEIGHBORS_II, neighbors); wr.commit().get(); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java index 552d391efb..58887cd3a1 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java @@ -21,13 +21,14 @@ import static org.mockito.Mockito.verify; import java.math.BigDecimal; import java.net.InetSocketAddress; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.protocol.concepts.KeyMapping; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder; +import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiKey; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AddPaths; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AddPathsBuilder; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis; @@ -64,7 +65,7 @@ public class BgpPeerTest extends AbstractConfig { static final AfiSafi AFI_SAFI_IPV4 = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) .addAugmentation(NeighborAddPathsConfig.class, new NeighborAddPathsConfigBuilder() .setReceive(true).setSendMax(Uint8.ZERO).build()).build(); - static final List AFI_SAFI = Collections.singletonList(AFI_SAFI_IPV4); + static final Map AFI_SAFI = Collections.singletonMap(AFI_SAFI_IPV4.key(), AFI_SAFI_IPV4); private static final BigDecimal DEFAULT_TIMERS = BigDecimal.valueOf(30); private BgpPeer bgpPeer; diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtilTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtilTest.java index 452242d4e2..4c27092594 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtilTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/GracefulRestartUtilTest.java @@ -46,7 +46,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily; @@ -108,10 +107,10 @@ public class GracefulRestartUtilTest { assertNotNull(gracefulCapability); assertTrue(gracefulCapability.getRestartFlags().isRestartState()); assertEquals(RESTART_TIME, gracefulCapability.getRestartTime().intValue()); - final List tables = gracefulCapability.getTables(); + final var tables = gracefulCapability.getTables(); assertNotNull(tables); assertEquals(2, tables.size()); - tables.forEach(table -> { + tables.values().forEach(table -> { assertTrue(isSameKey(IPV4_KEY, table.key()) && table.getAfiFlags().isForwardingState() || isSameKey(IPV6_KEY, table.key()) && !table.getAfiFlags().isForwardingState()); }); @@ -172,12 +171,11 @@ public class GracefulRestartUtilTest { assertNotNull(params); final LlGracefulRestartCapability llGracefulCapability = params.getLlGracefulRestartCapability(); assertNotNull(llGracefulCapability); - final List tables = llGracefulCapability.getTables(); + final var tables = llGracefulCapability.getTables(); assertNotNull(tables); assertEquals(2, tables.size()); - assertEquals(STALE_TIME, tables.get(0).getLongLivedStaleTime().getValue().intValue()); - tables.forEach(table -> { + assertEquals(STALE_TIME, tables.values().iterator().next().getLongLivedStaleTime().getValue().intValue()); + tables.values().forEach(table -> { assertTrue(isSameKey(IPV4_KEY, table.key()) && table.getAfiFlags().isForwardingState() || isSameKey(IPV6_KEY, table.key()) && !table.getAfiFlags().isForwardingState()); }); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java index ba8d12c799..ca8b4dfb34 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java @@ -25,7 +25,7 @@ import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createNe import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.HOLDTIMER; import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -45,6 +45,7 @@ import org.opendaylight.protocol.bgp.parser.spi.pojo.RevisedErrorHandlingSupport import org.opendaylight.protocol.bgp.rib.impl.spi.RIB; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder; +import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiKey; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborTransportConfig; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.graceful.restart.GracefulRestartBuilder; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis; @@ -85,7 +86,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.SendReceive; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamilies; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamiliesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfigBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentationBuilder; @@ -152,10 +152,10 @@ public class OpenConfigMappingUtilTest { TABLE_TYPES.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class)); TABLE_TYPES.add(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class)); AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) - .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(Boolean.TRUE) + .addAugmentation(new GlobalAddPathsConfigBuilder().setReceive(Boolean.TRUE) .setSendMax(N_PATHS).build()).build()); AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class) - .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(Boolean.TRUE) + .addAugmentation(new GlobalAddPathsConfigBuilder().setReceive(Boolean.TRUE) .setSendMax(ALL_PATHS).build()).build()); } @@ -324,8 +324,8 @@ public class OpenConfigMappingUtilTest { @Test public void testGetAfiSafiWithDefault() { - final ImmutableList defaultValue - = ImmutableList.of(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build()); + final AfiSafi v4afi = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(); + final ImmutableMap defaultValue = ImmutableMap.of(v4afi.key(), v4afi); assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(null, true)); final AfiSafis afiSafi = new AfiSafisBuilder().build(); assertEquals(defaultValue, OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, true)); @@ -338,17 +338,18 @@ public class OpenConfigMappingUtilTest { final List expected = new ArrayList<>(afiSafiIpv6List); expected.add(AFI_SAFI_IPV4); - assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder() - .setAfiSafi(afiSafiIpv6List).build(), true).get(0)); - assertEquals(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(), - OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder().setAfiSafi(afiSafiIpv6List).build(), - true).get(1)); + + final Map v6 = OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder() + .setAfiSafi(afiSafiIpv6List).build(), true); + assertEquals(2, v6.size()); + assertTrue(v6.containsValue(afiSafiIpv6)); + assertTrue(v6.containsValue(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build())); assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), true)); assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(null, false).isEmpty()); assertTrue(OpenConfigMappingUtil.getAfiSafiWithDefault(afiSafi, false).isEmpty()); assertEquals(afiSafiIpv6, OpenConfigMappingUtil.getAfiSafiWithDefault(new AfiSafisBuilder() - .setAfiSafi(afiSafiIpv6List).build(), false).get(0)); + .setAfiSafi(afiSafiIpv6List).build(), false).values().iterator().next()); assertEquals(AFI_SAFI, OpenConfigMappingUtil.getAfiSafiWithDefault(createAfiSafi(), false)); } @@ -402,11 +403,9 @@ public class OpenConfigMappingUtilTest { public void toPathSelectionMode() { final List families = new ArrayList<>(); families.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) - .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder() - .setSendMax(N_PATHS).build()).build()); + .addAugmentation(new GlobalAddPathsConfigBuilder().setSendMax(N_PATHS).build()).build()); families.add(new AfiSafiBuilder().setAfiSafiName(IPV6UNICAST.class) - .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder() - .setSendMax(ALL_PATHS).build()).build()); + .addAugmentation(new GlobalAddPathsConfigBuilder().setSendMax(ALL_PATHS).build()).build()); final Map result = OpenConfigMappingUtil .toPathSelectionMode(families, this.tableTypeRegistry); final Map expected = new HashMap<>(); @@ -414,6 +413,7 @@ public class OpenConfigMappingUtilTest { ADD_PATH_BEST_N_PATH_SELECTION); expected.put(new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class), ADD_PATH_BEST_ALL_PATH_SELECTION); + // FIXME: these assertions are wrong, as they perform lookup on non-existing keys assertEquals(expected.get(0), result.get(0)); assertEquals(expected.get(1), result.get(1)); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java index 14028bf02d..9e9d3116e6 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java @@ -23,13 +23,10 @@ import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; -import org.opendaylight.protocol.bgp.rib.impl.RIBImpl; +import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; import org.opendaylight.protocol.bgp.rib.spi.RIBSupport; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi; @@ -40,7 +37,6 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.t import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAddPathsConfigBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.Rib; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; @@ -63,21 +59,17 @@ public class RibImplTest extends AbstractConfig { static { AFISAFIS.add(new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class) - .addAugmentation(GlobalAddPathsConfig.class, new GlobalAddPathsConfigBuilder().setReceive(true) - .setSendMax(Uint8.ZERO).build()).build()); + .addAugmentation(new GlobalAddPathsConfigBuilder().setReceive(true).setSendMax(Uint8.ZERO).build()) + .build()); } @Mock private RIBExtensionConsumerContext extension; @Mock - private BindingCodecTreeFactory bindingCodecTreeFactory; + private CodecsRegistry codecsRegistry; @Mock private DOMDataBroker domDataBroker; @Mock - private DOMSchemaService domSchemaService; - @Mock - private ListenerRegistration dataTreeRegistration; - @Mock private RIBSupport ribSupport; @Mock private ServiceRegistration serviceRegistration; @@ -87,7 +79,6 @@ public class RibImplTest extends AbstractConfig { public void setUp() throws Exception { super.setUp(); - doReturn(mock(GeneratedClassLoadingStrategy.class)).when(this.extension).getClassLoadingStrategy(); doReturn(this.ribSupport).when(this.extension).getRIBSupport(any(TablesKey.class)); final NodeIdentifier nii = new NodeIdentifier(QName.create("", "test").intern()); doReturn(nii).when(this.ribSupport).routeAttributesIdentifier(); @@ -102,8 +93,6 @@ public class RibImplTest extends AbstractConfig { final DOMDataTreeChangeService dOMDataTreeChangeService = mock(DOMDataTreeChangeService.class); doReturn(ImmutableClassToInstanceMap.of(DOMDataTreeChangeService.class, dOMDataTreeChangeService)) .when(this.domDataBroker).getExtensions(); - doReturn(this.dataTreeRegistration).when(this.domSchemaService).registerSchemaContextListener(any()); - doNothing().when(this.dataTreeRegistration).close(); doReturn(mock(ListenerRegistration.class)).when(dOMDataTreeChangeService) .registerDataTreeChangeListener(any(), any()); doNothing().when(this.serviceRegistration).unregister(); @@ -115,15 +104,12 @@ public class RibImplTest extends AbstractConfig { this.extension, this.dispatcher, this.policyProvider, - this.bindingCodecTreeFactory, + this.codecsRegistry, this.domDataBroker, - getDataBroker(), - this.domSchemaService); + getDataBroker()); ribImpl.setServiceRegistration(this.serviceRegistration); ribImpl.start(createGlobal(), "rib-test", this.tableTypeRegistry); - verify(this.extension).getClassLoadingStrategy(); verify(this.domDataBroker).getExtensions(); - verify(this.domSchemaService).registerSchemaContextListener(any(RIBImpl.class)); assertEquals("RIBImpl{bgpId=Ipv4Address{_value=127.0.0.1}, localTables=[BgpTableTypeImpl [" + "getAfi()=interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types." + "rev200120.Ipv4AddressFamily, " @@ -142,8 +128,6 @@ public class RibImplTest extends AbstractConfig { assertNotNull(ribImpl.getCodecsRegistry()); ribImpl.close(); - verify(this.dataTreeRegistration).close(); - verify(this.dataTreeRegistration).close(); verify(this.serviceRegistration).unregister(); } diff --git a/bgp/rib-spi/pom.xml b/bgp/rib-spi/pom.xml index fb9c694e2f..18f5d261cb 100644 --- a/bgp/rib-spi/pom.xml +++ b/bgp/rib-spi/pom.xml @@ -83,7 +83,7 @@ org.opendaylight.mdsal - mdsal-binding-generator-impl + mdsal-binding-dom-adapter com.google.guava @@ -103,7 +103,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.checkerframework @@ -116,7 +116,12 @@ org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-runtime-spi + test + + + org.opendaylight.mdsal + mdsal-binding-test-utils test diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java index c4e10c253c..9486222657 100644 --- a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java +++ b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java @@ -32,9 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpReachNlri; @@ -153,13 +151,13 @@ public abstract class AbstractRIBSupport< final QName destContainerQname) { final QNameModule module = BindingReflections.getQNameModule(cazeClass); this.routesContainerIdentifier = NodeIdentifier.create( - BindingReflections.findQName(containerClass).withModule(module)); - this.routeAttributesIdentifier = NodeIdentifier.create(Attributes.QNAME.withModule(module)); + BindingReflections.findQName(containerClass).bindTo(module)); + this.routeAttributesIdentifier = NodeIdentifier.create(Attributes.QNAME.bindTo(module)); this.cazeClass = requireNonNull(cazeClass); this.mappingService = requireNonNull(mappingService); this.containerClass = requireNonNull(containerClass); this.listClass = requireNonNull(listClass); - this.routeQname = BindingReflections.findQName(listClass).withModule(module); + this.routeQname = BindingReflections.findQName(listClass).bindTo(module); this.routesListIdentifier = NodeIdentifier.create(this.routeQname); this.tk = new TablesKey(afiClass, safiClass); this.emptyTable = (MapEntryNode) this.mappingService @@ -425,12 +423,12 @@ public abstract class AbstractRIBSupport< if (!advertised.isEmpty()) { final MpReachNlri mb = buildReach(advertised, hop); - ab.addAugmentation(Attributes1.class, new Attributes1Builder().setMpReachNlri(mb).build()); + ab.addAugmentation(new Attributes1Builder().setMpReachNlri(mb).build()); LOG.debug("mpreach nexthop={}", mb); } if (!withdrawn.isEmpty()) { final MpUnreachNlri mb = buildUnreach(withdrawn); - ab.addAugmentation(Attributes2.class, new Attributes2Builder().setMpUnreachNlri(mb).build()); + ab.addAugmentation(new Attributes2Builder().setMpUnreachNlri(mb).build()); LOG.debug("mpunrach mb={}", mb); } diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionConsumerContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionConsumerContext.java index b539aeefb5..491ae1438f 100644 --- a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionConsumerContext.java +++ b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBExtensionConsumerContext.java @@ -9,7 +9,6 @@ package org.opendaylight.protocol.bgp.rib.spi; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.Route; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; @@ -62,13 +61,4 @@ public interface RIBExtensionConsumerContext { , S extends ChildOf, R extends Route & ChildOf & Identifiable, I extends Identifier> @Nullable RIBSupport getRIBSupport(@NonNull NodeIdentifierWithPredicates key); - - - /** - * Returns class loading strategy for loading YANG modeled classes - * associated with registered RIB supports. - * - * @return Class loading strategy for loading YANG modeled classes. - */ - @NonNull GeneratedClassLoadingStrategy getClassLoadingStrategy(); } diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupport.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupport.java index fde397f1dd..2735952c60 100644 --- a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupport.java +++ b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupport.java @@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableSet; import java.util.Collection; import java.util.List; +import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; @@ -320,5 +321,5 @@ public interface RIBSupport< * @param routes Table route choice * @return A potentially empty list of routes */ - @NonNull List extractAdjRibInRoutes(Routes routes); + @NonNull Map extractAdjRibInRoutes(Routes routes); } diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java index 7a502bae10..9fbc413c38 100644 --- a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java +++ b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContext.java @@ -10,13 +10,8 @@ package org.opendaylight.protocol.bgp.rib.spi; import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; -import java.util.HashSet; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.Route; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; @@ -28,21 +23,17 @@ import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.Identifier; -import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SimpleRIBExtensionProviderContext implements RIBExtensionProviderContext { - private static final Logger LOG = LoggerFactory.getLogger(SimpleRIBExtensionProviderContext.class); private final ConcurrentMap> supports = new ConcurrentHashMap<>(); private final ConcurrentMap> domSupports = new ConcurrentHashMap<>(); - private final ModuleInfoBackedContext classLoadingStrategy = ModuleInfoBackedContext.create(); - @Override public > RIBSupportRegistration registerRIBSupport( final Class afi, final Class safi, @@ -52,36 +43,15 @@ public class SimpleRIBExtensionProviderContext implements RIBExtensionProviderCo Preconditions.checkArgument(prev == null, "AFI %s SAFI %s is already registered with %s", afi, safi, prev); this.domSupports.put(RibSupportUtils.toYangTablesKey(afi, safi), support); - addClassLoadingSupport(afi, safi, support); - return new AbstractRIBSupportRegistration(support) { + return new AbstractRIBSupportRegistration<>(support) { @Override protected void removeRegistration() { + // FIXME: clean up registrations, too SimpleRIBExtensionProviderContext.this.supports.remove(key); } }; } - private void addClassLoadingSupport(final Class afi, final Class safi, final RIBSupport support) { - final Set moduleInfos = getModuleInfos(afi, safi, support.routesListClass(), - support.routesContainerClass(), support.routesCaseClass()); - if (!moduleInfos.isEmpty()) { - this.classLoadingStrategy.addModuleInfos(moduleInfos); - } - } - - @SuppressWarnings("checkstyle:IllegalCatch") - private static Set getModuleInfos(final Class... clazzes) { - final Set moduleInfos = new HashSet<>(); - for (final Class clz : clazzes) { - try { - moduleInfos.add(BindingReflections.getModuleInfo(clz)); - } catch (final Exception e) { - LOG.debug("Could not find module info for class {}", clz, e); - } - } - return moduleInfos; - } - @Override public , S extends ChildOf, R extends Route & ChildOf & Identifiable, I extends Identifier> RIBSupport getRIBSupport( @@ -104,9 +74,4 @@ public class SimpleRIBExtensionProviderContext implements RIBExtensionProviderCo final NodeIdentifierWithPredicates key) { return (RIBSupport) this.domSupports.get(key); } - - @Override - public GeneratedClassLoadingStrategy getClassLoadingStrategy() { - return this.classLoadingStrategy; - } } diff --git a/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml b/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml index acbffe0e3f..7359224d7e 100644 --- a/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml +++ b/bgp/rib-spi/src/main/resources/OSGI-INF/blueprint/bgp-rib-spi.xml @@ -13,8 +13,8 @@ META-INF/services/org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator resources. --> - + + org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext - \ No newline at end of file + diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBActivatorTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBActivatorTest.java index e60cf7c1f5..51fde6d765 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBActivatorTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBActivatorTest.java @@ -7,17 +7,17 @@ */ package org.opendaylight.protocol.bgp.rib.spi; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; public abstract class AbstractRIBActivatorTest extends AbstractConcurrentDataBrokerTest { - protected BindingNormalizedNodeSerializer mappingService; + protected AdapterContext context; @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.mappingService = customizer.getBindingToNormalized(); + this.context = customizer.getAdapterContext(); return customizer; } } diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java index 9cb3ba9e53..744a8d6e3d 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupportTest.java @@ -14,15 +14,16 @@ import static org.mockito.MockitoAnnotations.initMocks; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; import org.junit.Before; import org.mockito.Mock; +import org.opendaylight.binding.runtime.spi.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; @@ -85,18 +86,16 @@ public abstract class AbstractRIBSupportTest> deletedRoutes; protected List, DataObject>> insertedRoutes; - protected BindingNormalizedNodeSerializer mappingService; + protected AdapterContext adapter; private AbstractRIBSupport abstractRIBSupport; private ModuleInfoBackedContext moduleInfoBackedContext; protected final void setUpTestCustomizer(final AbstractRIBSupport ribSupport) throws Exception { this.abstractRIBSupport = ribSupport; - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesContainerClass())); - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesCaseClass())); - this.moduleInfoBackedContext - .registerModuleInfo(BindingReflections.getModuleInfo(this.abstractRIBSupport.routesListClass())); + this.moduleInfoBackedContext.registerModuleInfos(Arrays.asList( + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesContainerClass()), + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesCaseClass()), + BindingReflections.getModuleInfo(this.abstractRIBSupport.routesListClass()))); } @Before @@ -104,7 +103,7 @@ public abstract class AbstractRIBSupportTest { final Object[] args = invocation.getArguments(); - AbstractRIBSupportTest.this.insertedRoutes.add(AbstractRIBSupportTest.this.mappingService + AbstractRIBSupportTest.this.insertedRoutes.add(adapter.currentSerializer() .fromNormalizedNode((YangInstanceIdentifier) args[1], (NormalizedNode) args[2])); return args[1]; }).when(this.tx).put(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class), @@ -113,7 +112,7 @@ public abstract class AbstractRIBSupportTest { final Object[] args = invocation.getArguments(); AbstractRIBSupportTest.this.deletedRoutes.add((InstanceIdentifier) - this.mappingService.fromYangInstanceIdentifier((YangInstanceIdentifier) args[1])); + adapter.currentSerializer().fromYangInstanceIdentifier((YangInstanceIdentifier) args[1])); return args[1]; }).when(this.tx).delete(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class)); this.deletedRoutes = new ArrayList<>(); @@ -124,14 +123,14 @@ public abstract class AbstractRIBSupportTest> result = this.mappingService + final Map.Entry> result = this.adapter.currentSerializer() .toNormalizedNode(MP_UNREACH_IID, mpReach); return (ContainerNode) result.getValue(); } @@ -139,33 +138,33 @@ public abstract class AbstractRIBSupportTest> result = this.mappingService + final Map.Entry> result = this.adapter.currentSerializer() .toNormalizedNode(MP_REACH_IID, mpReach); return (ContainerNode) result.getValue(); } protected final ContainerNode createAttributes() { - return (ContainerNode) this.mappingService.toNormalizedNode(ATTRIBUTES_IID, ATTRIBUTES).getValue(); + return (ContainerNode) this.adapter.currentSerializer().toNormalizedNode(ATTRIBUTES_IID, ATTRIBUTES).getValue(); } protected final MapEntryNode createEmptyTable() { final Tables tables = new TablesBuilder().withKey(getTablesKey()) .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329 .rib.tables.AttributesBuilder().build()).build(); - return (MapEntryNode) this.mappingService.toNormalizedNode(tablesIId(), tables).getValue(); + return (MapEntryNode) this.adapter.currentSerializer().toNormalizedNode(tablesIId(), tables).getValue(); } protected final ChoiceNode createRoutes(final Routes routes) { final Tables tables = new TablesBuilder().withKey(getTablesKey()).setRoutes(routes).build(); - return (ChoiceNode) ((MapEntryNode) this.mappingService.toNormalizedNode(tablesIId(), tables).getValue()) - .getChild(new NodeIdentifier(BindingReflections.findQName(Routes.class))).get(); + return (ChoiceNode) ((MapEntryNode) this.adapter.currentSerializer().toNormalizedNode(tablesIId(), tables) + .getValue()).getChild(new NodeIdentifier(BindingReflections.findQName(Routes.class))).get(); } protected final Collection createRoutes(final S routes) { Preconditions.checkArgument(routes.implementedInterface() .equals(this.abstractRIBSupport.routesContainerClass())); final InstanceIdentifier routesIId = routesIId(); - final Map.Entry> normalizedNode = this.mappingService + final Map.Entry> normalizedNode = this.adapter.currentSerializer() .toNormalizedNode(routesIId, routes); final ContainerNode container = (ContainerNode) normalizedNode.getValue(); final NodeIdentifier routeNid = new NodeIdentifier(getRouteListQname()); @@ -187,12 +186,12 @@ public abstract class AbstractRIBSupportTest tables = tablesIId(); - return this.mappingService.toYangInstanceIdentifier(tables); + return this.adapter.currentSerializer().toYangInstanceIdentifier(tables); } protected final YangInstanceIdentifier getRoutePath() { final InstanceIdentifier routesIId = routesIId(); - return this.mappingService.toYangInstanceIdentifier(routesIId).node(getRouteListQname()); + return this.adapter.currentSerializer().toYangInstanceIdentifier(routesIId).node(getRouteListQname()); } private QName getRouteListQname() { diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTest.java index 5561d4da42..5ef587438f 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTest.java @@ -25,7 +25,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; @@ -94,13 +94,13 @@ public class RIBSupportTest extends AbstractConcurrentDataBrokerTest { private final Map> routesMap = new HashMap<>(); private ContainerNode attributes; private MapEntryNode mapEntryNode; - private BindingToNormalizedNodeCodec mappingService; + private AdapterContext context; @Before public void setUp() throws Exception { super.setup(); MockitoAnnotations.initMocks(this); - this.ribSupportTestImp = new RIBSupportTestImp(this.mappingService); + this.ribSupportTestImp = new RIBSupportTestImp(context.currentSerializer()); this.emptyTree = Mockito.mock(DataTreeCandidateNode.class); this.emptySubTree = Mockito.mock(DataTreeCandidateNode.class); this.subTree = Mockito.mock(DataTreeCandidateNode.class); @@ -153,7 +153,7 @@ public class RIBSupportTest extends AbstractConcurrentDataBrokerTest { @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.mappingService = customizer.getBindingToNormalized(); + this.context = customizer.getAdapterContext(); return customizer; } diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTestImp.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTestImp.java index 51da7dd5ea..0ccfc1b562 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTestImp.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/RIBSupportTestImp.java @@ -9,7 +9,7 @@ package org.opendaylight.protocol.bgp.rib.spi; import java.util.Collection; import java.util.Collections; -import java.util.List; +import java.util.Map; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.PathId; @@ -88,7 +88,7 @@ public final class RIBSupportTestImp extends AbstractRIBSupport extractAdjRibInRoutes(final Routes routes) { + public Map extractAdjRibInRoutes(final Routes routes) { return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.test.rev180515.bgp.rib.rib.peer .adj.rib.in.tables.routes.Ipv4RoutesCase) routes).getIpv4Routes().nonnullIpv4Route(); } diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java index 974b1f7e50..cb57674e8c 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionProviderContextActivatorTest.java @@ -25,7 +25,7 @@ public class SimpleRIBExtensionProviderContextActivatorTest extends AbstractRIBA final List extensionActivators = Collections.singletonList(new RibActivator()); final SimpleRIBExtensionProviderContextActivator activator = new SimpleRIBExtensionProviderContextActivator(new SimpleRIBExtensionProviderContext(), - extensionActivators, this.mappingService); + extensionActivators, context.currentSerializer()); activator.start(); assertTrue(RIBACTIVATED); activator.close(); diff --git a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java index 45d117cb5c..3b9bb1271b 100644 --- a/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java +++ b/bgp/rib-spi/src/test/java/org/opendaylight/protocol/bgp/rib/spi/SimpleRIBExtensionTest.java @@ -12,7 +12,7 @@ import java.util.List; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; -import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; @@ -23,22 +23,23 @@ import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; public class SimpleRIBExtensionTest extends AbstractConcurrentDataBrokerTest { - private BindingToNormalizedNodeCodec codec; + private AdapterContext adapter; @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.codec = customizer.getBindingToNormalized(); + this.adapter = customizer.getAdapterContext(); return customizer; } @Test public void testExtensionProvider() { + final BindingNormalizedNodeSerializer codec = adapter.currentSerializer(); final ServiceLoaderRIBExtensionConsumerContext ctx = - ServiceLoaderRIBExtensionConsumerContext.createConsumerContext(this.codec); + ServiceLoaderRIBExtensionConsumerContext.createConsumerContext(codec); Assert.assertNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class)); final TestActivator act = new TestActivator(); - act.startRIBExtensionProvider(ctx, this.codec); + act.startRIBExtensionProvider(ctx, codec); Assert.assertNotNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class)); act.close(); Assert.assertNull(ctx.getRIBSupport(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class)); diff --git a/bgp/topology-provider/pom.xml b/bgp/topology-provider/pom.xml index e5df53dfa7..71155f090f 100644 --- a/bgp/topology-provider/pom.xml +++ b/bgp/topology-provider/pom.xml @@ -164,6 +164,11 @@ test test-jar + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.yangtools diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java index b11ea16f50..e09714299a 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java @@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; @@ -115,7 +114,7 @@ abstract class AbstractReachabilityTopologyBuilder extends Abst .child(IgpNodeAttributes.class).build(); trans.merge(LogicalDatastoreType.OPERATIONAL, nii, new NodeBuilder().withKey(nii.getKey()).setNodeId(ni) - .addAugmentation(Node1.class, new Node1Builder().setIgpNodeAttributes( + .addAugmentation(new Node1Builder().setIgpNodeAttributes( new IgpNodeAttributesBuilder().setPrefix(Collections.emptyList()).build()).build()).build()); this.nodes.put(ni, new NodeUsage(ret)); @@ -172,8 +171,7 @@ abstract class AbstractReachabilityTopologyBuilder extends Abst if (present.useCount == 0) { final IgpNodeAttributes attrs = read(trans, present.attrId); if (attrs != null) { - final List prefix = attrs.getPrefix(); - present.useCount = prefix == null ? 0 : prefix.size(); + present.useCount = attrs.nonnullPrefix().size(); } else { present.useCount = 0; } diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilder.java index 4edceb7430..e64366ea65 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilder.java @@ -17,7 +17,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.bgp.ipv4.reachability.topology.type.BgpIpv4ReachabilityTopologyBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -27,7 +26,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public final class Ipv4ReachabilityTopologyBuilder extends AbstractReachabilityTopologyBuilder { public static final TopologyTypes IPV4_TOPOLOGY_TYPE = new TopologyTypesBuilder() - .addAugmentation(TopologyTypes1.class, new TopologyTypes1Builder() + .addAugmentation(new TopologyTypes1Builder() .setBgpIpv4ReachabilityTopology(new BgpIpv4ReachabilityTopologyBuilder().build()).build()).build(); public Ipv4ReachabilityTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilder.java index af31938ad7..07f39639e6 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilder.java @@ -17,7 +17,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.bgp.ipv6.reachability.topology.type.BgpIpv6ReachabilityTopologyBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -27,7 +26,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public final class Ipv6ReachabilityTopologyBuilder extends AbstractReachabilityTopologyBuilder { public static final TopologyTypes IPV6_TOPOLOGY_TYPE = new TopologyTypesBuilder() - .addAugmentation(TopologyTypes1.class, new TopologyTypes1Builder() + .addAugmentation(new TopologyTypes1Builder() .setBgpIpv6ReachabilityTopology(new BgpIpv6ReachabilityTopologyBuilder().build()).build()).build(); public Ipv6ReachabilityTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, diff --git a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateGraphBuilder.java b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateGraphBuilder.java index cc268d4034..807528fe62 100644 --- a/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateGraphBuilder.java +++ b/bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateGraphBuilder.java @@ -80,7 +80,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.re import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.graph.topology.graph.VertexKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.vertex.SrgbBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.TopologyTypes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.topology.types.rev160524.bgp.linkstate.topology.type.BgpLinkstateTopologyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.SrlgId; @@ -105,7 +104,6 @@ import org.slf4j.LoggerFactory; public class LinkstateGraphBuilder extends AbstractTopologyBuilder { private static final TopologyTypes LINKSTATE_TOPOLOGY_TYPE = new TopologyTypesBuilder().addAugmentation( - TopologyTypes1.class, new TopologyTypes1Builder().setBgpLinkstateTopology(new BgpLinkstateTopologyBuilder().build()).build()) .build(); @@ -113,11 +111,11 @@ public class LinkstateGraphBuilder extends AbstractTopologyBuilder unRsvBw = new ArrayList<>(upperBound); for (final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120 - .UnreservedBandwidth bandwidth : la.getUnreservedBandwidth()) { + .UnreservedBandwidth bandwidth : la.nonnullUnreservedBandwidth().values()) { unRsvBw.add(new UnreservedBandwidthBuilder() .setBandwidth(bandwithToDecimalBandwidth(bandwidth.getBandwidth())) .withKey(new UnreservedBandwidthKey(bandwidth.getPriority())).build()); @@ -365,7 +363,7 @@ public class LinkstateGraphBuilder extends AbstractTopologyBuilder srlgs = new ArrayList(); + List srlgs = new ArrayList<>(); for (SrlgId srlg : la.getSharedRiskLinkGroups()) { srlgs.add(srlg.getValue()); } @@ -399,7 +397,7 @@ public class LinkstateGraphBuilder extends AbstractTopologyBuilder { @VisibleForTesting static final TopologyTypes LINKSTATE_TOPOLOGY_TYPE = new TopologyTypesBuilder() - .addAugmentation(TopologyTypes1.class, new TopologyTypes1Builder() + .addAugmentation(new TopologyTypes1Builder() .setBgpLinkstateTopology(new BgpLinkstateTopologyBuilder().build()).build()).build(); @VisibleForTesting static final TopologyTypes SR_AWARE_LINKSTATE_TOPOLOGY_TYPE = new TopologyTypesBuilder(LINKSTATE_TOPOLOGY_TYPE) - .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819 - .TopologyTypes1.class, - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819 + .addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819 .TopologyTypes1Builder().setTopologySr(new TopologySrBuilder().build()).build()) .build(); @@ -206,13 +201,11 @@ public class LinkstateTopologyBuilder extends AbstractTopologyBuilder 0) { - this.nb.addAugmentation( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class, - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819 - .Node1Builder().setSegments(this.sr.getSegments()).build()); + this.nb.addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr + .rev130819.Node1Builder().setSegments(this.sr.getSegments()).build()); } final Node n = this.nb - .addAugmentation(Node1.class, new Node1Builder().setIgpNodeAttributes(this.inab.build()).build()) + .addAugmentation(new Node1Builder().setIgpNodeAttributes(this.inab.build()).build()) .build(); trans.put(LogicalDatastoreType.OPERATIONAL, nid, n); LOG.trace("Created node {} at {}", n, nid); @@ -291,13 +284,13 @@ public class LinkstateTopologyBuilder extends AbstractTopologyBuilder segments = new ArrayList<>(); - private Map srPrefixes = new HashMap<>(); - private Map prefixSegments = new HashMap<>(); - private Map adjSegments = new HashMap<>(); + private final List segments = new ArrayList<>(); + private final Map srPrefixes = new HashMap<>(); + private final Map prefixSegments = new HashMap<>(); + private final Map adjSegments = new HashMap<>(); NodeSrHolder(final NodeId nodeId) { this.nodeId = nodeId; @@ -528,9 +521,11 @@ public class LinkstateTopologyBuilder extends AbstractTopologyBuilder unreservedBandwidthList( - final List input) { final List ret = new ArrayList<>(input.size()); diff --git a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderTest.java b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderTest.java index 1e1816b33d..98b30ac64d 100644 --- a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderTest.java +++ b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderTest.java @@ -76,22 +76,22 @@ public class Ipv4ReachabilityTopologyBuilderTest extends AbstractTopologyBuilder final TopologyTypes1 topologyTypes = topology.getTopologyTypes().augmentation(TopologyTypes1.class); assertNotNull(topologyTypes); assertNotNull(topologyTypes.getBgpIpv4ReachabilityTopology()); - assertEquals(1, topology.getNode().size()); - final Node node = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node node = topology.nonnullNode().values().iterator().next(); assertEquals(NEXT_HOP, node.getNodeId().getValue()); - assertEquals(ROUTE_IP4PREFIX, node.augmentation(Node1.class).getIgpNodeAttributes().getPrefix().get(0) - .getPrefix().getIpv4Prefix().getValue()); + assertEquals(ROUTE_IP4PREFIX, node.augmentation(Node1.class).getIgpNodeAttributes().nonnullPrefix().values() + .iterator().next().getPrefix().getIpv4Prefix().getValue()); return topology; }); // update route updateIpv4Route(createIpv4Route(NEW_NEXT_HOP)); readDataOperational(getDataBroker(), this.ipv4TopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getNode().size()); - final Node nodeUpdated = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node nodeUpdated = topology.nonnullNode().values().iterator().next(); assertEquals(NEW_NEXT_HOP, nodeUpdated.getNodeId().getValue()); assertEquals(ROUTE_IP4PREFIX, nodeUpdated.augmentation(Node1.class).getIgpNodeAttributes() - .getPrefix().get(0).getPrefix().getIpv4Prefix().getValue()); + .nonnullPrefix().values().iterator().next().getPrefix().getIpv4Prefix().getValue()); return topology; }); diff --git a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderTest.java b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderTest.java index f5b66f50ec..107148f8b8 100644 --- a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderTest.java +++ b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderTest.java @@ -73,11 +73,11 @@ public class Ipv6ReachabilityTopologyBuilderTest extends AbstractTopologyBuilder final TopologyTypes1 topologyType = topology.getTopologyTypes().augmentation(TopologyTypes1.class); assertNotNull(topologyType); assertNotNull(topologyType.getBgpIpv6ReachabilityTopology()); - assertEquals(1, topology.getNode().size()); - final Node node = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node node = topology.nonnullNode().values().iterator().next(); assertEquals(NEXT_HOP, node.getNodeId().getValue()); - assertEquals(ROUTE_IP6PREFIX, node.augmentation(Node1.class).getIgpNodeAttributes().getPrefix() - .get(0).getPrefix().getIpv6Prefix().getValue()); + assertEquals(ROUTE_IP6PREFIX, node.augmentation(Node1.class).getIgpNodeAttributes().nonnullPrefix() + .values().iterator().next().getPrefix().getIpv6Prefix().getValue()); return topology; }); @@ -85,11 +85,11 @@ public class Ipv6ReachabilityTopologyBuilderTest extends AbstractTopologyBuilder updateIpv6Route(createIpv6Route(NEW_NEXT_HOP)); readDataOperational(getDataBroker(), this.ipv6TopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getNode().size()); - final Node nodeUpdated = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node nodeUpdated = topology.nonnullNode().values().iterator().next(); assertEquals(NEW_NEXT_HOP, nodeUpdated.getNodeId().getValue()); - assertEquals(ROUTE_IP6PREFIX, nodeUpdated.augmentation(Node1.class).getIgpNodeAttributes().getPrefix() - .get(0).getPrefix().getIpv6Prefix().getValue()); + assertEquals(ROUTE_IP6PREFIX, nodeUpdated.augmentation(Node1.class).getIgpNodeAttributes().nonnullPrefix() + .values().iterator().next().getPrefix().getIpv6Prefix().getValue()); return topology; }); diff --git a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilderTest.java b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilderTest.java index f3ba073f70..17f3b67f0a 100644 --- a/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilderTest.java +++ b/bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilderTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify; import static org.opendaylight.protocol.util.CheckUtil.checkNotPresentOperational; import static org.opendaylight.protocol.util.CheckUtil.readDataOperational; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import io.netty.buffer.Unpooled; import java.nio.charset.StandardCharsets; @@ -70,7 +71,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.linkstate.routes.LinkstateRoute; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.linkstate.routes.LinkstateRouteBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.linkstate.routes.LinkstateRouteKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.linkstate.routes.linkstate.route.Attributes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.linkstate.routes.linkstate.route.Attributes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.node.identifier.c.router.identifier.IsisNodeCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.node.identifier.c.router.identifier.isis.node._case.IsisNodeBuilder; @@ -171,14 +171,13 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { } @Test - @SuppressWarnings("checkstyle:LineLength") public void testIsisLinkstateTopologyBuilder() throws InterruptedException, ExecutionException { // create node updateLinkstateRoute(this.linkstateNodeRouteIID, createLinkstateNodeRoute(ProtocolId.IsisLevel2, "node1", NODE_1_AS, ROUTER_1_ID)); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getNode().size()); - final Node node1 = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node node1 = topology.nonnullNode().values().iterator().next(); assertEquals(NODE_1_ISIS_ID, node1.getNodeId().getValue()); final IgpNodeAttributes igpNode1 = node1.augmentation(Node1.class).getIgpNodeAttributes(); assertEquals(ROUTER_1_ID, igpNode1.getRouterId().get(0).getIpv4Address().getValue()); @@ -194,7 +193,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { .topology.rev131021.IgpNodeAttributes1.class)); assertEquals(LinkstateTopologyBuilder.LINKSTATE_TOPOLOGY_TYPE, topology.getTopologyTypes()); assertNull(node1.augmentation( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class)); + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class)); return topology; }); @@ -202,11 +201,11 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { updateLinkstateRoute(this.linkstateLinkRouteIID, createLinkstateLinkRoute(ProtocolId.IsisLevel2, NODE_1_AS, NODE_2_AS, "link1")); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getLink().size()); - final Link link1 = topology.getLink().get(0); - assertEquals(2, topology.getNode().size()); - assertEquals(1, topology.getNode().get(0).getTerminationPoint().size()); - assertEquals(1, topology.getNode().get(1).getTerminationPoint().size()); + assertEquals(1, topology.nonnullLink().size()); + final Link link1 = topology.nonnullLink().values().iterator().next(); + assertEquals(2, topology.nonnullNode().size()); + assertEquals(1, Iterables.get(topology.getNode().values(), 0).getTerminationPoint().size()); + assertEquals(1, Iterables.get(topology.getNode().values(), 1).getTerminationPoint().size()); assertEquals("bgpls://IsisLevel2:1/type=link&local-as=1&local-router=0000.0102.0304&remote-as" + "=2&mt=1", link1.getLinkId().getValue()); assertEquals(NODE_1_ISIS_ID, link1.getSource().getSourceNode().getValue()); @@ -220,10 +219,10 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { assertEquals(LinkstateTopologyBuilder.SR_AWARE_LINKSTATE_TOPOLOGY_TYPE, topology.getTopologyTypes()); assertEquals(2, topology.getNode().size()); final Node srcNode; - if (topology.getNode().get(0).getNodeId().getValue().contains("0000.0102.0304")) { - srcNode = topology.getNode().get(0); + if (topology.getNode().values().iterator().next().getNodeId().getValue().contains("0000.0102.0304")) { + srcNode = topology.getNode().values().iterator().next(); } else { - srcNode = topology.getNode().get(1); + srcNode = Iterables.get(topology.getNode().values(), 1); } assertEquals(1, srcNode.augmentation( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class) @@ -240,7 +239,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { createLinkstateNodeRoute(ProtocolId.IsisLevel2, "updated-node", NODE_1_AS, ROUTER_2_ID)); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { assertEquals(1, topology.getNode().size()); - final IgpNodeAttributes igpNode2 = topology.getNode().get(0).augmentation(Node1.class) + final IgpNodeAttributes igpNode2 = topology.getNode().values().iterator().next().augmentation(Node1.class) .getIgpNodeAttributes(); assertEquals(ROUTER_2_ID, igpNode2.getRouterId().get(0).getIpv4Address().getValue()); assertEquals("updated-node", igpNode2.getName().getValue()); @@ -258,14 +257,13 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { } @Test - @SuppressWarnings("checkstyle:LineLength") public void testOspfLinkstateTopologyBuilder() throws InterruptedException, ExecutionException { // create node updateLinkstateRoute(this.linkstateNodeRouteIID, createLinkstateNodeRoute(ProtocolId.Ospf, "node1", NODE_1_AS, ROUTER_1_ID)); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getNode().size()); - final Node node1 = topology.getNode().get(0); + assertEquals(1, topology.nonnullNode().size()); + final Node node1 = topology.nonnullNode().values().iterator().next(); assertEquals(NODE_1_OSPF_ID, node1.getNodeId().getValue()); final IgpNodeAttributes igpNode1 = node1.augmentation(Node1.class).getIgpNodeAttributes(); assertEquals(ROUTER_1_ID, igpNode1.getRouterId().get(0).getIpv4Address().getValue()); @@ -276,7 +274,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { .getTeRouterIdIpv4().getValue()); assertEquals(LinkstateTopologyBuilder.LINKSTATE_TOPOLOGY_TYPE, topology.getTopologyTypes()); assertNull(node1.augmentation( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class)); + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class)); return topology; }); @@ -284,19 +282,19 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { updateLinkstateRoute(this.linkstatePrefixRouteIID, createLinkstatePrefixRoute(ProtocolId.Ospf, NODE_1_AS, NODE_1_PREFIX, 500L, ROUTER_1_ID)); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { - final Node node1 = topology.getNode().get(0); + final Node node1 = topology.nonnullNode().values().iterator().next(); final IgpNodeAttributes igpNode1 = node1.augmentation(Node1.class).getIgpNodeAttributes(); - assertEquals(1, igpNode1.getPrefix().size()); - final Prefix prefix = igpNode1.getPrefix().get(0); + assertEquals(1, igpNode1.nonnullPrefix().size()); + final Prefix prefix = igpNode1.nonnullPrefix().values().iterator().next(); assertEquals(NODE_1_PREFIX, prefix.getPrefix().getIpv4Prefix().getValue()); assertEquals(500L, prefix.getMetric().longValue()); assertEquals(LinkstateTopologyBuilder.SR_AWARE_LINKSTATE_TOPOLOGY_TYPE, topology.getTopologyTypes()); assertEquals(1, node1.augmentation( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class) - .getSegments().size()); + .nonnullSegments().size()); assertEquals(SRGB_START + NODE_SID_INDEX, node1.augmentation( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class) - .getSegments().get(0).getSegmentId().getValue().intValue()); + .nonnullSegments().values().iterator().next().getSegmentId().getValue().intValue()); return topology; }); @@ -304,11 +302,11 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { updateLinkstateRoute(this.linkstateLinkRouteIID, createLinkstateLinkRoute(ProtocolId.Ospf, NODE_1_AS, NODE_2_AS, "link1")); readDataOperational(getDataBroker(), this.linkstateTopoBuilder.getInstanceIdentifier(), topology -> { - assertEquals(1, topology.getLink().size()); - final Link link1 = topology.getLink().get(0); + assertEquals(1, topology.nonnullLink().size()); + final Link link1 = topology.nonnullLink().values().iterator().next(); assertEquals(2, topology.getNode().size()); - assertEquals(1, topology.getNode().get(0).getTerminationPoint().size()); - assertEquals(1, topology.getNode().get(1).getTerminationPoint().size()); + assertEquals(1, Iterables.get(topology.getNode().values(), 0).getTerminationPoint().size()); + assertEquals(1, Iterables.get(topology.getNode().values(), 1).getTerminationPoint().size()); assertEquals("bgpls://Ospf:1/type=link&local-as=1&local-router=0000.0102.0304&remote-as=2&mt=1", link1.getLinkId().getValue()); assertEquals(NODE_1_OSPF_ID, link1.getSource().getSourceNode().getValue()); @@ -325,10 +323,10 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { assertEquals(LinkstateTopologyBuilder.SR_AWARE_LINKSTATE_TOPOLOGY_TYPE, topology.getTopologyTypes()); assertEquals(2, topology.getNode().size()); final Node srcNode; - if (topology.getNode().get(0).getNodeId().getValue().contains("0000.0102.0304")) { - srcNode = topology.getNode().get(0); + if (topology.getNode().values().iterator().next().getNodeId().getValue().contains("0000.0102.0304")) { + srcNode = topology.getNode().values().iterator().next(); } else { - srcNode = topology.getNode().get(1); + srcNode = Iterables.get(topology.getNode().values(), 1); } assertEquals(2, srcNode.augmentation( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.sr.rev130819.Node1.class) @@ -449,7 +447,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { .setAsNumber(asNumber).build()).build()) .setAttributes(new AttributesBuilder() .setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build()) - .addAugmentation(Attributes1.class, new Attributes1Builder() + .addAugmentation(new Attributes1Builder() .setLinkStateAttribute(new NodeAttributesCaseBuilder() .setNodeAttributes(new NodeAttributesBuilder() .setDynamicHostname(nodeName) @@ -479,7 +477,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { .setIpReachabilityInformation(new IpPrefix(new Ipv4Prefix(ipv4Prefix))).build()).build()) .setAttributes(new AttributesBuilder() .setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build()) - .addAugmentation(Attributes1.class, new Attributes1Builder() + .addAugmentation(new Attributes1Builder() .setLinkStateAttribute(new PrefixAttributesCaseBuilder() .setPrefixAttributes(new PrefixAttributesBuilder() .setOspfForwardingAddress(new IpAddressNoZone(new Ipv4AddressNoZone(ospfFwdAddress))) @@ -510,7 +508,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest { .setMultiTopologyId(new TopologyIdentifier(Uint16.ONE)).build()).build()) .setAttributes(new AttributesBuilder() .setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build()) - .addAugmentation(Attributes1.class, new Attributes1Builder() + .addAugmentation(new Attributes1Builder() .setLinkStateAttribute(new LinkAttributesCaseBuilder() .setLinkAttributes(new LinkAttributesBuilder() .setSharedRiskLinkGroups(Lists.newArrayList( diff --git a/binding-parent/pom.xml b/binding-parent/pom.xml index 04d1b1d14c..dee41072bc 100644 --- a/binding-parent/pom.xml +++ b/binding-parent/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.mdsal binding-parent - 5.0.9 + 6.0.0 diff --git a/bmp/bmp-artifacts/pom.xml b/bmp/bmp-artifacts/pom.xml index 88ab3d4f01..b467bfc07e 100644 --- a/bmp/bmp-artifacts/pom.xml +++ b/bmp/bmp-artifacts/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/bmp/bmp-config-example/pom.xml b/bmp/bmp-config-example/pom.xml index 9ccb0009d7..24c4beb7e5 100644 --- a/bmp/bmp-config-example/pom.xml +++ b/bmp/bmp-config-example/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent - 6.0.4 + 7.0.1 diff --git a/bmp/bmp-impl/pom.xml b/bmp/bmp-impl/pom.xml index 53585d7f8f..a977008815 100644 --- a/bmp/bmp-impl/pom.xml +++ b/bmp/bmp-impl/pom.xml @@ -104,7 +104,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.mdsal @@ -155,10 +155,6 @@ org.opendaylight.mdsal.binding.model.ietf rfc6991-ietf-inet-types - - org.opendaylight.yangtools - yang-model-api - org.checkerframework checker-qual @@ -168,6 +164,11 @@ org.opendaylight.yangtools mockito-configuration + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitoringStationImpl.java b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitoringStationImpl.java index 45d213d92d..d0f61387b3 100644 --- a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitoringStationImpl.java +++ b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitoringStationImpl.java @@ -18,7 +18,7 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import java.net.InetAddress; import java.net.InetSocketAddress; -import java.util.List; +import java.util.Collection; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; @@ -55,7 +55,7 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu private final DOMDataBroker domDataBroker; private final InetSocketAddress address; private final MonitorId monitorId; - private final List monitoredRouters; + private final Collection monitoredRouters; private final BmpDispatcher dispatcher; private final RouterSessionManager sessionManager; private final YangInstanceIdentifier yangMonitorId; @@ -64,7 +64,7 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu public BmpMonitoringStationImpl(final BmpDeployerDependencies bmpDeployerDependencies, final BmpDispatcher dispatcher, final MonitorId monitorId, final InetSocketAddress address, - final List mrs) { + final Collection mrs) { this.domDataBroker = requireNonNull(bmpDeployerDependencies.getDomDataBroker()); this.dispatcher = requireNonNull(dispatcher); this.monitorId = monitorId; diff --git a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/KeyConstructorUtil.java b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/KeyConstructorUtil.java index 8ec8d506fe..44c0b05212 100644 --- a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/KeyConstructorUtil.java +++ b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/KeyConstructorUtil.java @@ -8,7 +8,7 @@ package org.opendaylight.protocol.bmp.impl.app; import java.nio.charset.StandardCharsets; -import java.util.List; +import java.util.Collection; import java.util.Objects; import org.opendaylight.protocol.concepts.KeyMapping; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil; @@ -20,7 +20,7 @@ public final class KeyConstructorUtil { // Hidden on purpose } - public static KeyMapping constructKeys(final List mrs) { + public static KeyMapping constructKeys(final Collection mrs) { final KeyMapping ret = KeyMapping.getKeyMapping(); if (mrs != null) { mrs.stream().filter(Objects::nonNull).filter(KeyConstructorUtil::isNotNullorEmpty) diff --git a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerDependencies.java b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerDependencies.java index 99ae3fbd52..5dcc4b0e58 100644 --- a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerDependencies.java +++ b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerDependencies.java @@ -11,11 +11,9 @@ import static java.util.Objects.requireNonNull; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; public final class BmpDeployerDependencies { private final DataBroker dataBroker; @@ -25,12 +23,12 @@ public final class BmpDeployerDependencies { private final ClusterSingletonServiceProvider singletonProvider; public BmpDeployerDependencies(final DataBroker dataBroker, final DOMDataBroker domDataBroker, - final RIBExtensionConsumerContext extensions, final BindingCodecTreeFactory codecTreeFactory, - final SchemaContext schemaContext, final ClusterSingletonServiceProvider singletonProvider) { + final RIBExtensionConsumerContext extensions, final BindingCodecTree codecTree, + final ClusterSingletonServiceProvider singletonProvider) { this.dataBroker = requireNonNull(dataBroker); this.domDataBroker = requireNonNull(domDataBroker); this.extensions = requireNonNull(extensions); - this.tree = requireNonNull(codecTreeFactory).create(schemaContext); + this.tree = requireNonNull(codecTree); this.singletonProvider = requireNonNull(singletonProvider); } diff --git a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerImpl.java b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerImpl.java index 8bd4c83886..ec9f20db0d 100644 --- a/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerImpl.java +++ b/bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerImpl.java @@ -130,7 +130,7 @@ public final class BmpDeployerImpl implements ClusteredDataTreeChangeListener - - + - - - - + diff --git a/bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java b/bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java index 1a921a057a..5b426e2dcd 100644 --- a/bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java +++ b/bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java @@ -33,19 +33,18 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import java.net.InetSocketAddress; -import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; @@ -115,7 +114,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { .create(BmpMonitor.class).child(Monitor.class, new MonitorKey(MONITOR_ID)); private static final PeerId PEER_ID = new PeerId(PEER1.getValue()); private static final InstanceIdentifier BMP_II = InstanceIdentifier.create(BmpMonitor.class); - private BindingToNormalizedNodeCodec mappingService; + private AdapterContext mappingService; private RIBActivator ribActivator; private BGPActivator bgpActivator; private BmpActivator bmpActivator; @@ -133,7 +132,6 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { private ClusterSingletonServiceProvider clusterSSProv; @Mock private ClusterSingletonServiceProvider clusterSSProv2; - private DOMSchemaService schemaService; @Before public void setUp() throws Exception { @@ -159,10 +157,9 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { doAnswer(invocationOnMock -> BmpMonitorImplTest.this.singletonService2.closeServiceInstance()) .when(this.singletonServiceRegistration2).close(); - this.mappingService.onGlobalContextUpdated(this.schemaService.getGlobalContext()); this.ribActivator = new RIBActivator(); this.ribExtension = new SimpleRIBExtensionProviderContext(); - this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService); + this.ribActivator.startRIBExtensionProvider(this.ribExtension, this.mappingService.currentSerializer()); this.bgpActivator = new BGPActivator(); final BGPExtensionProviderContext context = new SimpleBGPExtensionProviderContext(); @@ -186,16 +183,15 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { wTx.commit().get(); final BmpDeployerDependencies bmpDependecies = new BmpDeployerDependencies(getDataBroker(), getDomBroker(), - this.ribExtension, this.mappingService.getCodecFactory(), this.schemaService.getGlobalContext(), - this.clusterSSProv); + this.ribExtension, this.mappingService.currentSerializer(), this.clusterSSProv); this.bmpApp = new BmpMonitoringStationImpl(bmpDependecies, this.dispatcher, MONITOR_ID, inetAddress, null); readDataOperational(getDataBroker(), BMP_II, monitor -> { - assertEquals(1, monitor.getMonitor().size()); - final Monitor bmpMonitor = monitor.getMonitor().get(0); + assertEquals(1, monitor.nonnullMonitor().size()); + final Monitor bmpMonitor = monitor.getMonitor().values().iterator().next(); assertEquals(MONITOR_ID, bmpMonitor.getMonitorId()); - assertEquals(0, bmpMonitor.getRouter().size()); + assertEquals(0, bmpMonitor.nonnullRouter().size()); assertEquals(MONITOR_ID, bmpMonitor.getMonitorId()); - assertEquals(0, bmpMonitor.getRouter().size()); + assertEquals(0, bmpMonitor.nonnullRouter().size()); return monitor; }); } @@ -203,8 +199,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.mappingService = customizer.getBindingToNormalized(); - this.schemaService = customizer.getSchemaService(); + this.mappingService = customizer.getAdapterContext(); return customizer; } @@ -215,7 +210,6 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { this.bmpActivator.close(); this.dispatcher.close(); this.bmpApp.close(); - this.mappingService.close(); checkNotPresentOperational(getDataBroker(), BMP_II); } @@ -285,7 +279,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { assertNotNull(monitor.getRouter()); // now find the current router instance Router router = null; - for (final Router r : monitor.getRouter()) { + for (final Router r : monitor.getRouter().values()) { if (routerId.equals(r.getRouterId())) { router = r; break; @@ -293,7 +287,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { } assertNotNull(router); assertEquals(Status.Down, router.getStatus()); - assertTrue(router.getPeer().isEmpty()); + assertNull(router.getPeer()); return router; }); @@ -303,7 +297,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { readDataOperational(getDataBroker(), MONITOR_IID, monitor -> { assertNotNull(monitor.getRouter()); Router retRouter = null; - for (final Router r : monitor.getRouter()) { + for (final Router r : monitor.getRouter().values()) { if (routerId.equals(r.getRouterId())) { retRouter = r; break; @@ -314,7 +308,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { assertEquals("name", retRouter.getName()); assertEquals("description", retRouter.getDescription()); assertEquals(routerId, retRouter.getRouterId()); - assertTrue(retRouter.getPeer().isEmpty()); + assertNull(retRouter.getPeer()); assertEquals(Status.Up, retRouter.getStatus()); return retRouter; }); @@ -324,10 +318,10 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { MONITOR_IID.child(Router.class, new RouterKey(routerId)); readDataOperational(getDataBroker(), routerIId, router -> { - final List peers = router.getPeer(); - assertNotNull(peers.size()); + final Map peers = router.getPeer(); + assertNotNull(peers); assertEquals(1, peers.size()); - final Peer peer = peers.get(0); + final Peer peer = peers.values().iterator().next(); assertEquals(PeerType.Global, peer.getType()); assertEquals(PEER_ID, peer.getPeerId()); assertEquals(PEER1, peer.getBgpId()); @@ -337,15 +331,15 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { assertNull(peer.getStats()); assertNotNull(peer.getPrePolicyRib()); - assertEquals(1, peer.getPrePolicyRib().getTables().size()); - final Tables prePolicyTable = peer.getPrePolicyRib().getTables().get(0); + assertEquals(1, peer.getPrePolicyRib().nonnullTables().size()); + final Tables prePolicyTable = peer.getPrePolicyRib().nonnullTables().values().iterator().next(); assertEquals(Ipv4AddressFamily.class, prePolicyTable.getAfi()); assertEquals(UnicastSubsequentAddressFamily.class, prePolicyTable.getSafi()); assertFalse(prePolicyTable.getAttributes().isUptodate()); assertNotNull(peer.getPostPolicyRib()); - assertEquals(1, peer.getPostPolicyRib().getTables().size()); - final Tables postPolicyTable = peer.getPrePolicyRib().getTables().get(0); + assertEquals(1, peer.getPostPolicyRib().nonnullTables().size()); + final Tables postPolicyTable = peer.getPrePolicyRib().nonnullTables().values().iterator().next(); assertEquals(Ipv4AddressFamily.class, postPolicyTable.getAfi()); assertEquals(UnicastSubsequentAddressFamily.class, postPolicyTable.getSafi()); assertFalse(postPolicyTable.getAttributes().isUptodate()); @@ -381,9 +375,11 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { assertEquals(tlvs.getLocRibRoutesTlv().getCount(), peerStats.getLocRibRoutes()); assertEquals(tlvs.getRejectedPrefixesTlv().getCount(), peerStats.getRejectedPrefixes()); assertEquals(tlvs.getPerAfiSafiAdjRibInTlv().getCount().toString(), - peerStats.getPerAfiSafiAdjRibInRoutes().getAfiSafi().get(0).getCount().toString()); + peerStats.getPerAfiSafiAdjRibInRoutes().getAfiSafi().values().iterator().next().getCount() + .toString()); assertEquals(tlvs.getPerAfiSafiLocRibTlv().getCount().toString(), - peerStats.getPerAfiSafiLocRibRoutes().getAfiSafi().get(0).getCount().toString()); + peerStats.getPerAfiSafiLocRibRoutes().getAfiSafi().values().iterator().next().getCount() + .toString()); return peerStats; }); @@ -402,8 +398,8 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { AdjRibInType.PrePolicy))); readDataOperational(getDataBroker(), peerIId.child(PrePolicyRib.class), prePolicyRib -> { - assertTrue(!prePolicyRib.getTables().isEmpty()); - final Tables tables = prePolicyRib.getTables().get(0); + assertFalse(prePolicyRib.getTables().isEmpty()); + final Tables tables = prePolicyRib.getTables().values().iterator().next(); assertTrue(tables.getAttributes().isUptodate()); assertEquals(3, ((Ipv4RoutesCase) tables.getRoutes()).getIpv4Routes().getIpv4Route().size()); return tables; @@ -415,8 +411,8 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { AdjRibInType.PostPolicy))); readDataOperational(getDataBroker(), peerIId.child(PostPolicyRib.class), postPolicyRib -> { - assertTrue(!postPolicyRib.getTables().isEmpty()); - final Tables tables = postPolicyRib.getTables().get(0); + assertFalse(postPolicyRib.getTables().isEmpty()); + final Tables tables = postPolicyRib.getTables().values().iterator().next(); assertTrue(tables.getAttributes().isUptodate()); assertEquals(3, ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet .rev180329.bmp.monitor.monitor.router.peer.post.policy.rib.tables.routes.Ipv4RoutesCase) @@ -437,8 +433,7 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest { @Test public void deploySecondInstance() throws Exception { final BmpDeployerDependencies bmpDependecies = new BmpDeployerDependencies(getDataBroker(), getDomBroker(), - this.ribExtension, this.mappingService.getCodecFactory(), this.schemaService.getGlobalContext(), - this.clusterSSProv2); + this.ribExtension, this.mappingService.currentSerializer(), this.clusterSSProv2); final BmpMonitoringStation monitoringStation2 = new BmpMonitoringStationImpl(bmpDependecies, this.dispatcher, new MonitorId("monitor2"), diff --git a/bmp/pom.xml b/bmp/pom.xml index 4d15b329ef..7ec7401c6a 100644 --- a/bmp/pom.xml +++ b/bmp/pom.xml @@ -16,7 +16,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/config-loader/bmp-monitors-config-loader/pom.xml b/config-loader/bmp-monitors-config-loader/pom.xml index 132b63f482..a86a03785a 100644 --- a/config-loader/bmp-monitors-config-loader/pom.xml +++ b/config-loader/bmp-monitors-config-loader/pom.xml @@ -47,7 +47,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.yangtools @@ -76,6 +76,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/config-loader/config-loader-artifacts/pom.xml b/config-loader/config-loader-artifacts/pom.xml index fae755b135..b9d77feb28 100644 --- a/config-loader/config-loader-artifacts/pom.xml +++ b/config-loader/config-loader-artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/config-loader/config-loader-impl/pom.xml b/config-loader/config-loader-impl/pom.xml index 550ce5c24f..0a063e8e82 100644 --- a/config-loader/config-loader-impl/pom.xml +++ b/config-loader/config-loader-impl/pom.xml @@ -62,7 +62,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api com.google.guava @@ -99,6 +99,11 @@ yang-test-util test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/ConfigLoaderImpl.java b/config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/ConfigLoaderImpl.java index 213e99f297..516ce6c24d 100644 --- a/config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/ConfigLoaderImpl.java +++ b/config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/ConfigLoaderImpl.java @@ -41,7 +41,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.slf4j.Logger; @@ -57,7 +57,7 @@ public final class ConfigLoaderImpl implements ConfigLoader, AutoCloseable { private static final long TIMEOUT_SECONDS = 5; @GuardedBy("this") private final Map configServices = new HashMap<>(); - private final SchemaContext schemaContext; + private final EffectiveModelContext schemaContext; private final BindingNormalizedNodeSerializer bindingSerializer; private final String path; private final Thread watcherThread; @@ -65,8 +65,8 @@ public final class ConfigLoaderImpl implements ConfigLoader, AutoCloseable { @GuardedBy("this") private boolean closed = false; - public ConfigLoaderImpl(final SchemaContext schemaContext, final BindingNormalizedNodeSerializer bindingSerializer, - final FileWatcher fileWatcher) { + public ConfigLoaderImpl(final EffectiveModelContext schemaContext, + final BindingNormalizedNodeSerializer bindingSerializer, final FileWatcher fileWatcher) { this.schemaContext = requireNonNull(schemaContext); this.bindingSerializer = requireNonNull(bindingSerializer); this.path = requireNonNull(fileWatcher.getPathFile()); diff --git a/config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/AbstractConfigLoader.java b/config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/AbstractConfigLoader.java index 36bf11237c..002ecf5a93 100644 --- a/config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/AbstractConfigLoader.java +++ b/config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/AbstractConfigLoader.java @@ -22,10 +22,9 @@ import org.junit.Before; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.opendaylight.bgpcep.config.loader.spi.ConfigFileProcessor; -import org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec; +import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.dom.api.DOMSchemaService; public abstract class AbstractConfigLoader extends AbstractConcurrentDataBrokerTest { @@ -42,8 +41,7 @@ public abstract class AbstractConfigLoader extends AbstractConcurrentDataBrokerT private WatchEvent watchEvent; @Mock private FileWatcher fileWatcher; - protected BindingToNormalizedNodeCodec mappingService; - protected BindingCodecTreeFactory bindingCodecTreeFactory; + protected AdapterContext mappingService; protected DOMSchemaService schemaService; public AbstractConfigLoader() { @@ -65,15 +63,15 @@ public abstract class AbstractConfigLoader extends AbstractConcurrentDataBrokerT clearEvent(); return null; }).when(this.processor).loadConfiguration(any()); - this.configLoader = new ConfigLoaderImpl(getSchemaContext(), this.mappingService, this.fileWatcher); + this.configLoader = new ConfigLoaderImpl(getSchemaContext(), this.mappingService.currentSerializer(), + this.fileWatcher); this.configLoader.init(); } @Override protected final AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() { final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.mappingService = customizer.getBindingToNormalized(); - this.bindingCodecTreeFactory = customizer.getBindingToNormalized(); + this.mappingService = customizer.getAdapterContext(); this.schemaService = customizer.getSchemaService(); return customizer; } diff --git a/config-loader/config-loader-spi/pom.xml b/config-loader/config-loader-spi/pom.xml index 6afd7c2c4d..007fc49d18 100644 --- a/config-loader/config-loader-spi/pom.xml +++ b/config-loader/config-loader-spi/pom.xml @@ -26,7 +26,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.yangtools diff --git a/config-loader/pom.xml b/config-loader/pom.xml index 2e6f959a0a..ad2e67501c 100644 --- a/config-loader/pom.xml +++ b/config-loader/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/config-loader/protocols-config-loader/pom.xml b/config-loader/protocols-config-loader/pom.xml index 32801d861d..85e9c05372 100644 --- a/config-loader/protocols-config-loader/pom.xml +++ b/config-loader/protocols-config-loader/pom.xml @@ -51,7 +51,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.yangtools @@ -70,6 +70,11 @@ guava + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + ${project.groupId} config-loader-impl diff --git a/config-loader/routing-policy-config-loader/pom.xml b/config-loader/routing-policy-config-loader/pom.xml index b76127ad96..f484ad96e0 100644 --- a/config-loader/routing-policy-config-loader/pom.xml +++ b/config-loader/routing-policy-config-loader/pom.xml @@ -44,7 +44,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.yangtools @@ -74,6 +74,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/config-loader/topology-config-loader/pom.xml b/config-loader/topology-config-loader/pom.xml index 50ec898ab8..513082965d 100644 --- a/config-loader/topology-config-loader/pom.xml +++ b/config-loader/topology-config-loader/pom.xml @@ -35,7 +35,7 @@ org.opendaylight.mdsal - mdsal-binding-dom-codec + mdsal-binding-dom-codec-api org.opendaylight.mdsal @@ -77,6 +77,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/data-change-counter/pom.xml b/data-change-counter/pom.xml index 61c4da58d0..f57d1ef901 100644 --- a/data-change-counter/pom.xml +++ b/data-change-counter/pom.xml @@ -50,6 +50,11 @@ + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/distribution-karaf/pom.xml b/distribution-karaf/pom.xml index 900b8f0b6b..240375e4b8 100644 --- a/distribution-karaf/pom.xml +++ b/distribution-karaf/pom.xml @@ -9,7 +9,7 @@ org.opendaylight.odlparent karaf4-parent - 6.0.4 + 7.0.1 @@ -104,8 +104,8 @@ runtime - org.opendaylight.controller - features-mdsal-trace + org.opendaylight.mdsal + features-mdsal features xml runtime diff --git a/feature-repo-parent/pom.xml b/feature-repo-parent/pom.xml index 81f59b6715..a10e082a0e 100644 --- a/feature-repo-parent/pom.xml +++ b/feature-repo-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent feature-repo-parent - 6.0.4 + 7.0.1 diff --git a/features/algo/pom.xml b/features/algo/pom.xml index 7ad3bc47fd..99b044b827 100644 --- a/features/algo/pom.xml +++ b/features/algo/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/bgp/odl-bgpcep-bgp-dependencies/src/main/feature/feature.xml b/features/bgp/odl-bgpcep-bgp-dependencies/src/main/feature/feature.xml index 8ff90e654d..cc3c74b2e2 100644 --- a/features/bgp/odl-bgpcep-bgp-dependencies/src/main/feature/feature.xml +++ b/features/bgp/odl-bgpcep-bgp-dependencies/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-yangtools-data-api + odl-yangtools-data-api diff --git a/features/bgp/odl-bgpcep-bgp-rib-impl/pom.xml b/features/bgp/odl-bgpcep-bgp-rib-impl/pom.xml index 470c504479..a37980e8dd 100644 --- a/features/bgp/odl-bgpcep-bgp-rib-impl/pom.xml +++ b/features/bgp/odl-bgpcep-bgp-rib-impl/pom.xml @@ -91,5 +91,11 @@ xml features + + org.opendaylight.controller + odl-controller-exp-netty-config + xml + features + diff --git a/features/bgp/odl-bgpcep-bgp-rib-impl/src/main/feature/feature.xml b/features/bgp/odl-bgpcep-bgp-rib-impl/src/main/feature/feature.xml index 802d2588c3..42e906aa01 100644 --- a/features/bgp/odl-bgpcep-bgp-rib-impl/src/main/feature/feature.xml +++ b/features/bgp/odl-bgpcep-bgp-rib-impl/src/main/feature/feature.xml @@ -11,6 +11,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0"> + odl-controller-exp-netty-config mvn:org.opendaylight.bgpcep/bgp-config-example/${project.version}/xml/routing-policy-default-config - \ No newline at end of file + diff --git a/features/bgp/pom.xml b/features/bgp/pom.xml index 8c35f70bcf..e819799d3d 100644 --- a/features/bgp/pom.xml +++ b/features/bgp/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/bgpcep-extras/odl-bgpcep-extras-dependencies/src/main/feature/feature.xml b/features/bgpcep-extras/odl-bgpcep-extras-dependencies/src/main/feature/feature.xml index 42ca28efd3..c07601aa3f 100644 --- a/features/bgpcep-extras/odl-bgpcep-extras-dependencies/src/main/feature/feature.xml +++ b/features/bgpcep-extras/odl-bgpcep-extras-dependencies/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-netty-4 + odl-netty-4 diff --git a/features/bgpcep-extras/pom.xml b/features/bgpcep-extras/pom.xml index 17d606a766..75ae2fefd7 100644 --- a/features/bgpcep-extras/pom.xml +++ b/features/bgpcep-extras/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/bmp/pom.xml b/features/bmp/pom.xml index 6901666a39..8fb307d469 100644 --- a/features/bmp/pom.xml +++ b/features/bmp/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/concepts/pom.xml b/features/concepts/pom.xml index 092044847c..d7faefc796 100644 --- a/features/concepts/pom.xml +++ b/features/concepts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/config-loader/pom.xml b/features/config-loader/pom.xml index 3c3e8cdcc5..b06e93661c 100644 --- a/features/config-loader/pom.xml +++ b/features/config-loader/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/graph/pom.xml b/features/graph/pom.xml index e12863fe03..f532ecaac1 100644 --- a/features/graph/pom.xml +++ b/features/graph/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/pcep/odl-bgpcep-pcep-impl/pom.xml b/features/pcep/odl-bgpcep-pcep-impl/pom.xml index c37b28395f..4fcdb14833 100644 --- a/features/pcep/odl-bgpcep-pcep-impl/pom.xml +++ b/features/pcep/odl-bgpcep-pcep-impl/pom.xml @@ -23,8 +23,10 @@ - ${project.groupId} - pcep-impl + org.opendaylight.controller + odl-controller-exp-netty-config + xml + features ${project.groupId} @@ -32,5 +34,9 @@ xml features + + ${project.groupId} + pcep-impl + diff --git a/features/pcep/odl-bgpcep-pcep-impl/src/main/feature/feature.xml b/features/pcep/odl-bgpcep-pcep-impl/src/main/feature/feature.xml new file mode 100644 index 0000000000..215e2ebbb7 --- /dev/null +++ b/features/pcep/odl-bgpcep-pcep-impl/src/main/feature/feature.xml @@ -0,0 +1,16 @@ + + + + + + odl-controller-exp-netty-config + + diff --git a/features/pcep/odl-bgpcep-pcep-tunnel-provider/src/main/feature/feature.xml b/features/pcep/odl-bgpcep-pcep-tunnel-provider/src/main/feature/feature.xml index a03f2dca42..be78caaebc 100644 --- a/features/pcep/odl-bgpcep-pcep-tunnel-provider/src/main/feature/feature.xml +++ b/features/pcep/odl-bgpcep-pcep-tunnel-provider/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-apache-commons-lang3 + odl-apache-commons-lang3 diff --git a/features/pcep/odl-bgpcep-programming-impl/pom.xml b/features/pcep/odl-bgpcep-programming-impl/pom.xml index 907a0b3e74..db46fa7b43 100644 --- a/features/pcep/odl-bgpcep-programming-impl/pom.xml +++ b/features/pcep/odl-bgpcep-programming-impl/pom.xml @@ -38,5 +38,11 @@ xml features + + org.opendaylight.controller + odl-controller-exp-netty-config + xml + features + diff --git a/features/pcep/odl-bgpcep-programming-impl/src/main/feature/feature.xml b/features/pcep/odl-bgpcep-programming-impl/src/main/feature/feature.xml new file mode 100644 index 0000000000..ea2aa833a3 --- /dev/null +++ b/features/pcep/odl-bgpcep-programming-impl/src/main/feature/feature.xml @@ -0,0 +1,16 @@ + + + + + + odl-controller-exp-netty-config + + diff --git a/features/pcep/pom.xml b/features/pcep/pom.xml index 743df9beff..456373a3f5 100644 --- a/features/pcep/pom.xml +++ b/features/pcep/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/pom.xml b/features/pom.xml index a1faa69cad..bded183181 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/rsvp/pom.xml b/features/rsvp/pom.xml index 8daf1c5be6..d02b6a19e3 100644 --- a/features/rsvp/pom.xml +++ b/features/rsvp/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/features/topology/pom.xml b/features/topology/pom.xml index 21b682bdd9..1f881cc706 100644 --- a/features/topology/pom.xml +++ b/features/topology/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/graph/graph-api/src/main/java/org/opendaylight/graph/ConnectedGraph.java b/graph/graph-api/src/main/java/org/opendaylight/graph/ConnectedGraph.java index f163c34065..aafd2296f1 100644 --- a/graph/graph-api/src/main/java/org/opendaylight/graph/ConnectedGraph.java +++ b/graph/graph-api/src/main/java/org/opendaylight/graph/ConnectedGraph.java @@ -8,6 +8,7 @@ package org.opendaylight.graph; import java.util.List; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev191125.graph.topology.Graph; @@ -62,7 +63,7 @@ public interface ConnectedGraph { * @param key Unique Vertex Identifier * @return Vertex or null if there is no Vertex associated to the given key in this graph */ - ConnectedVertex getConnectedVertex(Long key); + ConnectedVertex getConnectedVertex(@NonNull Long key); /** * Returns the Vertex associated to the given IP address. @@ -111,7 +112,7 @@ public interface ConnectedGraph { * @param key Unique Edge Identifier * @return Edge or null if there is no Edge associated to the given key in this graph */ - ConnectedEdge getConnectedEdge(Long key); + ConnectedEdge getConnectedEdge(@NonNull Long key); /** * Returns the Edge associated to the given IP address. diff --git a/graph/graph-artifacts/pom.xml b/graph/graph-artifacts/pom.xml index d280cfcbe7..c7bb79bef9 100644 --- a/graph/graph-artifacts/pom.xml +++ b/graph/graph-artifacts/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphImpl.java b/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphImpl.java index 8e356b5c5d..16adf45590 100644 --- a/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphImpl.java +++ b/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphImpl.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.graph.impl; import static com.google.common.base.Preconditions.checkArgument; @@ -36,10 +35,7 @@ import org.slf4j.LoggerFactory; * @author Olivier Dugeon * @author Philippe Niger */ - - public class ConnectedGraphImpl implements ConnectedGraph { - private static final Logger LOG = LoggerFactory.getLogger(ConnectedGraphImpl.class); /* List of Connected Vertics that composed this Connected Graph */ @@ -57,7 +53,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { /* Reference to Graph Model Server to store corresponding graph in DataStore */ private final ConnectedGraphServer connectedGraphServer; - public ConnectedGraphImpl(Graph newGraph, ConnectedGraphServer server) { + public ConnectedGraphImpl(final Graph newGraph, final ConnectedGraphServer server) { this.graph = newGraph; createConnectedGraph(); this.connectedGraphServer = server; @@ -73,28 +69,22 @@ public class ConnectedGraphImpl implements ConnectedGraph { return; } /* Add all vertices */ - if (this.graph.getVertex() != null) { - for (Vertex vertex : this.graph.getVertex()) { - ConnectedVertexImpl cvertex = new ConnectedVertexImpl(vertex); - vertices.put(cvertex.getKey(), cvertex); - } + for (Vertex vertex : this.graph.nonnullVertex().values()) { + ConnectedVertexImpl cvertex = new ConnectedVertexImpl(vertex); + vertices.put(cvertex.getKey(), cvertex); } /* Add all edges */ - if (this.graph.getEdge() != null) { - for (Edge edge : this.graph.getEdge()) { - ConnectedEdgeImpl cedge = new ConnectedEdgeImpl(edge); - edges.put(cedge.getKey(), cedge); - } + for (Edge edge : this.graph.nonnullEdge().values()) { + ConnectedEdgeImpl cedge = new ConnectedEdgeImpl(edge); + edges.put(cedge.getKey(), cedge); } /* Add all prefixes */ - if (this.graph.getPrefix() != null) { - for (Prefix prefix : this.graph.getPrefix()) { - ConnectedVertexImpl cvertex = vertices.get(prefix.getVertexId().longValue()); - if (cvertex != null) { - cvertex.addPrefix(prefix); - } - prefixes.putIfAbsent(prefix.getPrefix(), prefix); + for (Prefix prefix : this.graph.nonnullPrefix().values()) { + ConnectedVertexImpl cvertex = vertices.get(prefix.getVertexId().longValue()); + if (cvertex != null) { + cvertex.addPrefix(prefix); } + prefixes.putIfAbsent(prefix.getPrefix(), prefix); } } @@ -104,7 +94,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { * @param key Unique Vertex Key identifier * @return new or existing Connected Vertex */ - private ConnectedVertexImpl updateConnectedVertex(@NonNull Long key) { + private ConnectedVertexImpl updateConnectedVertex(final @NonNull Long key) { checkArgument(key != 0, "Provided Vertex Key must not be equal to 0"); ConnectedVertexImpl vertex = vertices.get(key); if (vertex == null) { @@ -120,7 +110,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { * @param key Unique Edge Key identifier * @return new or existing Connected Edge */ - private ConnectedEdgeImpl updateConnectedEdge(@NonNull Long key) { + private ConnectedEdgeImpl updateConnectedEdge(final @NonNull Long key) { checkArgument(key != 0, "Provided Edge Key must not be equal to 0"); ConnectedEdgeImpl edge = edges.get(key); if (edge == null) { @@ -137,7 +127,8 @@ public class ConnectedGraphImpl implements ConnectedGraph { * @param dstVertex Destination Connected Vertex * @param edge Connected Edge */ - private void connectVertices(ConnectedVertexImpl srcVertex, ConnectedVertexImpl dstVertex, ConnectedEdgeImpl edge) { + private static void connectVertices(final ConnectedVertexImpl srcVertex, final ConnectedVertexImpl dstVertex, + final ConnectedEdgeImpl edge) { if (edge != null) { edge.setSource(srcVertex); edge.setDestination(dstVertex); @@ -157,16 +148,16 @@ public class ConnectedGraphImpl implements ConnectedGraph { @Override public List getVertices() { - return new ArrayList(this.vertices.values()); + return new ArrayList<>(this.vertices.values()); } @Override - public ConnectedVertex getConnectedVertex(@NonNull Long key) { + public ConnectedVertex getConnectedVertex(final Long key) { return vertices.get(key); } @Override - public ConnectedVertex getConnectedVertex(IpAddress address) { + public ConnectedVertex getConnectedVertex(final IpAddress address) { IpPrefix prefix = null; if (address.getIpv4Address() != null) { prefix = new IpPrefix(new Ipv4Prefix(address.getIpv4Address().getValue() + "/32")); @@ -189,16 +180,16 @@ public class ConnectedGraphImpl implements ConnectedGraph { @Override public List getEdges() { - return new ArrayList(this.edges.values()); + return new ArrayList<>(this.edges.values()); } @Override - public ConnectedEdge getConnectedEdge(@NonNull Long key) { + public ConnectedEdge getConnectedEdge(final Long key) { return edges.get(key); } @Override - public ConnectedEdge getConnectedEdge(IpAddress address) { + public ConnectedEdge getConnectedEdge(final IpAddress address) { for (ConnectedEdge cedge : edges.values()) { if (cedge.getEdge() == null) { continue; @@ -217,16 +208,16 @@ public class ConnectedGraphImpl implements ConnectedGraph { @Override public List getPrefixes() { - return new ArrayList(this.prefixes.values()); + return new ArrayList<>(this.prefixes.values()); } @Override - public Prefix getPrefix(IpPrefix prefix) { + public Prefix getPrefix(final IpPrefix prefix) { return this.prefixes.get(prefix); } @Override - public ConnectedVertex addVertex(Vertex vertex) { + public ConnectedVertex addVertex(final Vertex vertex) { checkArgument(vertex != null, "Provided Vertex is a null object"); ConnectedVertexImpl cvertex = updateConnectedVertex(vertex.getVertexId().longValue()); Vertex old = cvertex.getVertex(); @@ -236,7 +227,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { } @Override - public void deleteVertex(VertexKey key) { + public void deleteVertex(final VertexKey key) { checkArgument(key != null, "Provided Vertex Key is a null object"); ConnectedVertexImpl cvertex = vertices.get(key.getVertexId().longValue()); if (cvertex != null) { @@ -248,7 +239,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { } @Override - public ConnectedEdge addEdge(Edge edge) { + public ConnectedEdge addEdge(final Edge edge) { checkArgument(edge != null, "Provided Edge is a null object"); ConnectedEdgeImpl cedge = updateConnectedEdge(edge.getEdgeId().longValue()); Edge old = cedge.getEdge(); @@ -269,7 +260,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { } @Override - public void deleteEdge(EdgeKey key) { + public void deleteEdge(final EdgeKey key) { checkArgument(key != null, "Provided Edge Key is a null object"); ConnectedEdgeImpl cedge = edges.get(key.getEdgeId().longValue()); if (cedge != null) { @@ -281,7 +272,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { } @Override - public void addPrefix(Prefix prefix) { + public void addPrefix(final Prefix prefix) { checkArgument(prefix != null, "Provided Prefix is a null object"); ConnectedVertexImpl cvertex = updateConnectedVertex(prefix.getVertexId().longValue()); cvertex.addPrefix(prefix); @@ -290,7 +281,7 @@ public class ConnectedGraphImpl implements ConnectedGraph { } @Override - public void deletePrefix(IpPrefix ippfx) { + public void deletePrefix(final IpPrefix ippfx) { checkArgument(ippfx != null, "Provided Prefix is a null object"); Prefix prefix = prefixes.get(ippfx); if (prefix != null) { diff --git a/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphServer.java b/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphServer.java index 0ae34caca9..c12b53b8e5 100644 --- a/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphServer.java +++ b/graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphServer.java @@ -15,7 +15,6 @@ import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import org.opendaylight.graph.ConnectedGraph; import org.opendaylight.graph.ConnectedGraphProvider; @@ -90,9 +89,9 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction final WriteTransaction trans = this.chain.newWriteOnlyTransaction(); LOG.info("Create Graph Model at top level in Operational DataStore: {}", this.graphTopologyIdentifier); trans.put(LogicalDatastoreType.OPERATIONAL, this.graphTopologyIdentifier, - new GraphTopologyBuilder().setGraph(Collections.emptyList()).build()); + new GraphTopologyBuilder().build()); trans.put(LogicalDatastoreType.CONFIGURATION, this.graphTopologyIdentifier, - new GraphTopologyBuilder().setGraph(Collections.emptyList()).build()); + new GraphTopologyBuilder().build()); LOG.info("Create Graph Model at top level in Configuration DataStore: {}", this.graphTopologyIdentifier); trans.commit().addCallback(new FutureCallback() { @Override @@ -170,20 +169,20 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction /** * DataStore Instance Identifier creation for the various Graph components. */ - private InstanceIdentifier getGraphInstanceIdentifier(String name) { + private InstanceIdentifier getGraphInstanceIdentifier(final String name) { GraphKey graphKey = new GraphKey(name); return this.graphTopologyIdentifier.child(Graph.class, graphKey); } - private InstanceIdentifier getVertexInstanceIdentifier(Graph graph, final Vertex vertex) { + private InstanceIdentifier getVertexInstanceIdentifier(final Graph graph, final Vertex vertex) { return this.graphTopologyIdentifier.child(Graph.class, graph.key()).child(Vertex.class, vertex.key()); } - private InstanceIdentifier getEdgeInstanceIdentifier(Graph graph, final Edge edge) { + private InstanceIdentifier getEdgeInstanceIdentifier(final Graph graph, final Edge edge) { return this.graphTopologyIdentifier.child(Graph.class, graph.key()).child(Edge.class, edge.key()); } - private InstanceIdentifier getPrefixInstanceIdentifier(Graph graph, final Prefix prefix) { + private InstanceIdentifier getPrefixInstanceIdentifier(final Graph graph, final Prefix prefix) { return this.graphTopologyIdentifier.child(Graph.class, graph.key()).child(Prefix.class, prefix.key()); } @@ -274,7 +273,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * * @param graph Graph associated to the Connected Graph */ - public void clearGraph(Graph graph) { + public void clearGraph(final Graph graph) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); removeFromDataStore(getGraphInstanceIdentifier(graph.getName()), "Graph(" + graph.getName() + ")"); } @@ -287,7 +286,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param vertex Vertex to be inserted in the graph * @param old Old vertex when performing an update. Must be null for a simple addition */ - public void addVertex(Graph graph, Vertex vertex, Vertex old) { + public void addVertex(final Graph graph, final Vertex vertex, final Vertex old) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(vertex != null, "Provided Vertex is a null object"); InstanceIdentifier oldId = null; @@ -306,7 +305,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param graph Graph where the vertex is stored * @param vertex Vertex to be removed */ - public void deleteVertex(Graph graph, Vertex vertex) { + public void deleteVertex(final Graph graph, final Vertex vertex) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(vertex != null, "Provided Vertex is a null object"); removeFromDataStore(getVertexInstanceIdentifier(graph, vertex), "Vertex(" + vertex.getName() + ")"); @@ -320,7 +319,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param edge Edge to be inserted in the graph * @param old Old edge when performing an update. Must be null for a simple addition */ - public void addEdge(Graph graph, Edge edge, Edge old) { + public void addEdge(final Graph graph, final Edge edge, final Edge old) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(edge != null, "Provided Edge is a null object"); InstanceIdentifier oldId = null; @@ -338,7 +337,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param graph Graph where the edge is stored * @param edge Edge to be removed */ - public void deleteEdge(Graph graph, Edge edge) { + public void deleteEdge(final Graph graph, final Edge edge) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(edge != null, "Provided Edge is a null object"); removeFromDataStore(getEdgeInstanceIdentifier(graph, edge), "Edge(" + edge.getName() + ")"); @@ -351,7 +350,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param graph Graph where the prefix will be stored * @param prefix Prefix to be interted in the graph */ - public void addPrefix(Graph graph, Prefix prefix) { + public void addPrefix(final Graph graph, final Prefix prefix) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(prefix != null, "Provided Prefix is a null object"); addToDataStore(getPrefixInstanceIdentifier(graph, prefix), prefix, "Prefix(" + prefix.getPrefix() + ")"); @@ -364,7 +363,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction * @param graph Graph where the prefix is stored * @param prefix Prefix to be removed */ - public void deletePrefix(Graph graph, Prefix prefix) { + public void deletePrefix(final Graph graph, final Prefix prefix) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); Preconditions.checkArgument(prefix != null, "Provided Prefix is a null object"); removeFromDataStore(getPrefixInstanceIdentifier(graph, prefix), "Prefix(" + prefix.getPrefix() + ")"); @@ -384,21 +383,21 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction @Override public ArrayList getConnectedGraphs() { - return new ArrayList(this.graphs.values()); + return new ArrayList<>(this.graphs.values()); } @Override - public ConnectedGraph getConnectedGraph(GraphKey key) { + public ConnectedGraph getConnectedGraph(final GraphKey key) { return graphs.get(key); } @Override - public ConnectedGraph getConnectedGraph(String name) { + public ConnectedGraph getConnectedGraph(final String name) { return graphs.get(new GraphKey(name)); } @Override - public Graph getGraph(GraphKey key) { + public Graph getGraph(final GraphKey key) { if (graphs.containsKey(key)) { return graphs.get(key).getGraph(); } else { @@ -407,18 +406,15 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction } @Override - public Graph getGraph(String name) { + public Graph getGraph(final String name) { return getGraph(new GraphKey(name)); } @Override - public ConnectedGraph createConnectedGraph(String name, DomainScope scope) { + public ConnectedGraph createConnectedGraph(final String name, final DomainScope scope) { Graph graph = new GraphBuilder() .setName(name) .setDomainScope(scope) - .setEdge(Collections.emptyList()) - .setVertex(Collections.emptyList()) - .setPrefix(Collections.emptyList()) .build(); addToDataStore(getGraphInstanceIdentifier(name), graph, "Graph(" + name + ")"); ConnectedGraphImpl cgraph = new ConnectedGraphImpl(graph, this); @@ -427,7 +423,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction } @Override - public ConnectedGraph addGraph(Graph graph) { + public ConnectedGraph addGraph(final Graph graph) { Preconditions.checkArgument(graph != null, "Provided Graph is a null object"); addToDataStore(getGraphInstanceIdentifier(graph.getName()), graph, "Graph(" + graph.getName() + ")"); ConnectedGraphImpl cgraph = new ConnectedGraphImpl(graph, this); @@ -436,7 +432,7 @@ public class ConnectedGraphServer implements ConnectedGraphProvider, Transaction } @Override - public void deleteGraph(GraphKey key) { + public void deleteGraph(final GraphKey key) { Preconditions.checkArgument(key != null, "Provided Graph Key is a null object"); ConnectedGraphImpl cgraph = graphs.remove(key); /* diff --git a/graph/pom.xml b/graph/pom.xml index d9fc15e1d1..c4d76246f9 100644 --- a/graph/pom.xml +++ b/graph/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/parent/pom.xml b/parent/pom.xml index 368f8fc348..8a2f6117b0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent bundle-parent - 6.0.4 + 7.0.1 @@ -42,8 +42,8 @@ org.opendaylight.controller - mdsal-artifacts - 1.11.0 + controller-artifacts + 2.0.0 import pom @@ -51,7 +51,7 @@ org.opendaylight.yangtools yangtools-artifacts - 4.0.6 + 5.0.1 import pom @@ -59,7 +59,7 @@ org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 pom import diff --git a/pcep/auto-bandwidth-extension/pom.xml b/pcep/auto-bandwidth-extension/pom.xml index fcbe0fb24e..a4df876dae 100644 --- a/pcep/auto-bandwidth-extension/pom.xml +++ b/pcep/auto-bandwidth-extension/pom.xml @@ -84,8 +84,8 @@ - javax.xml.bind - jaxb-api + jakarta.xml.bind + jakarta.xml.bind-api test diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/message/PCEPRequestMessageParser.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/message/PCEPRequestMessageParser.java index 602446614a..911554a728 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/message/PCEPRequestMessageParser.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/message/PCEPRequestMessageParser.java @@ -571,7 +571,10 @@ public class PCEPRequestMessageParser extends AbstractMessageParser { if (obj.isProcessingRule()) { final int lastIndex = epRros.size() - 1; final EndpointRroPair endpointRroPair = epRros.get(lastIndex); - final List rros = endpointRroPair.getRros(); + List rros = endpointRroPair.getRros(); + if (rros == null) { + rros = new ArrayList<>(); + } if (obj instanceof Rro) { rros.add(new RrosBuilder() .setRouteObject(new ReportedRouteObjectCaseBuilder().setRro((Rro) obj) diff --git a/pcep/config-example/pom.xml b/pcep/config-example/pom.xml index f9a7f4df29..37a9493881 100644 --- a/pcep/config-example/pom.xml +++ b/pcep/config-example/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent - 6.0.4 + 7.0.1 diff --git a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImplTest.java b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImplTest.java index a72396ec66..7519838a3b 100644 --- a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImplTest.java +++ b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImplTest.java @@ -154,7 +154,7 @@ public class PCEPDispatcherImplTest { } @Test(timeout = 20000) - public void testReconectClient() throws InterruptedException, ExecutionException { + public void testReconnectClient() throws InterruptedException, ExecutionException { final int port = InetSocketAddressUtil.getRandomPort(); final InetSocketAddress clientAddr = InetSocketAddressUtil.getRandomLoopbackInetSocketAddress(port); diff --git a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java index 306a9038de..66ff45ebb1 100644 --- a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java +++ b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java @@ -1308,7 +1308,7 @@ public class PCEPObjectParserTest { assertNotNull(object); assertTrue(object instanceof Ero); final Ero eroObject = (Ero) object; - assertTrue(eroObject.getSubobject().isEmpty()); + assertNull(eroObject.getSubobject()); final ByteBuf buffer = Unpooled.buffer(); this.ctx.getObjectHandlerRegistry().serializeObject(eroObject, buffer); diff --git a/pcep/pcep-artifacts/pom.xml b/pcep/pcep-artifacts/pom.xml index efe76288e4..e4d91b7e6b 100644 --- a/pcep/pcep-artifacts/pom.xml +++ b/pcep/pcep-artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pcep/pom.xml b/pcep/pom.xml index 6c2856711c..8c12aa1cdb 100644 --- a/pcep/pom.xml +++ b/pcep/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pcep/segment-routing/pom.xml b/pcep/segment-routing/pom.xml index 01d9a3ebb7..6bff7f5d29 100644 --- a/pcep/segment-routing/pom.xml +++ b/pcep/segment-routing/pom.xml @@ -97,6 +97,11 @@ testtool-util test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapability.java b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapability.java index f7ec904bee..c7f97f7784 100644 --- a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapability.java +++ b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapability.java @@ -9,7 +9,6 @@ package org.opendaylight.protocol.pcep.segment.routing; import java.net.InetSocketAddress; import org.opendaylight.protocol.pcep.PCEPCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.Tlvs1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.Tlvs1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.pce.capability.tlv.SrPceCapabilityBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder; @@ -26,9 +25,9 @@ public class PCEPSegmentRoutingCapability implements PCEPCapability { @Override public void setCapabilityProposal(final InetSocketAddress address, final TlvsBuilder builder) { if (this.isSegmentRoutingCapable) { - builder.addAugmentation(Tlvs1.class, - new Tlvs1Builder().setSrPceCapability(new SrPceCapabilityBuilder().setMsd(Uint8.ZERO).build()) - .build()); + builder.addAugmentation(new Tlvs1Builder() + .setSrPceCapability(new SrPceCapabilityBuilder().setMsd(Uint8.ZERO).build()) + .build()); } } diff --git a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PcepOpenObjectWithSpcTlvParser.java b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PcepOpenObjectWithSpcTlvParser.java index 2993b27069..7d13040d68 100644 --- a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PcepOpenObjectWithSpcTlvParser.java +++ b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/PcepOpenObjectWithSpcTlvParser.java @@ -37,7 +37,7 @@ public class PcepOpenObjectWithSpcTlvParser extends SyncOptimizationsOpenObjectP if (tlv instanceof SrPceCapability) { tlvBuilder.setSrPceCapability((SrPceCapability) tlv); } - tbuilder.addAugmentation(Tlvs1.class, tlvBuilder.build()); + tbuilder.addAugmentation(tlvBuilder.build()); } @Override diff --git a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapabilityTest.java b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapabilityTest.java index a826063bc9..70d8bab993 100644 --- a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapabilityTest.java +++ b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/PCEPSegmentRoutingCapabilityTest.java @@ -15,10 +15,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yangtools.yang.common.Uint8; public class PCEPSegmentRoutingCapabilityTest { - private static final Tlvs EXPECTED_TLVS = - new TlvsBuilder().addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment - .routing.rev181109.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep + new TlvsBuilder().addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep .segment.routing.rev181109.Tlvs1Builder().setSrPceCapability(new SrPceCapabilityBuilder() .setMsd(Uint8.ZERO).build()).build()).build(); diff --git a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/SrObjectParserTest.java b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/SrObjectParserTest.java index d0a4a6f6cc..3ea90e6f63 100644 --- a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/SrObjectParserTest.java +++ b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/SrObjectParserTest.java @@ -26,10 +26,8 @@ import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContex import org.opendaylight.protocol.util.ByteArray; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.SidType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.Tlvs1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.Tlvs1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.add.lsp.input.arguments.ero.subobject.subobject.type.SrEroTypeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.pce.capability.tlv.SrPceCapabilityBuilder; @@ -88,13 +86,13 @@ public class SrObjectParserTest { .setDeadTimer(Uint8.valueOf(120)) .setSessionId(Uint8.ONE); - final Tlvs1 tlv = new Tlvs1Builder().setSrPceCapability(new SrPceCapabilityBuilder().setMsd(Uint8.ONE).build()) - .build(); builder.setTlvs(new TlvsBuilder() - .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful - .rev181109.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep - .ietf.stateful.rev181109.Tlvs1Builder().build()).addAugmentation(Tlvs1.class, tlv) - .addAugmentation(Tlvs3.class, new Tlvs3Builder().build()).build()); + .addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev181109.Tlvs1Builder().build()) + .addAugmentation(new Tlvs1Builder() + .setSrPceCapability(new SrPceCapabilityBuilder().setMsd(Uint8.ONE).build()) + .build()) + .addAugmentation(new Tlvs3Builder().build()).build()); final ByteBuf result = Unpooled.wrappedBuffer(OPEN_OBJECT_BYTES); assertEquals(builder.build(), diff --git a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/TopologyProviderTest.java b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/TopologyProviderTest.java index 2812e4278b..e96ea0f694 100644 --- a/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/TopologyProviderTest.java +++ b/pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/TopologyProviderTest.java @@ -14,6 +14,7 @@ import static org.opendaylight.protocol.util.CheckTestUtil.readDataOperational; import com.google.common.collect.Lists; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; @@ -49,6 +50,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.path.setup.type.tlv.PathSetupTypeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.ReportedLsp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.ReportedLspKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.reported.lsp.Path; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.reported.lsp.PathKey; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint8; @@ -74,14 +78,18 @@ public class TopologyProviderTest extends AbstractPCEPSessionTest { //check sr-path - final List reportedLsps = pcc.getReportedLsp(); + final Map reportedLsps = pcc.getReportedLsp(); assertNotNull(reportedLsps); assertEquals(1, reportedLsps.size()); - final ReportedLsp lsp = reportedLsps.get(0); + final ReportedLsp lsp = reportedLsps.values().iterator().next(); assertEquals("sr-path1", lsp.getName()); - assertEquals(1, lsp.getPath().get(0).augmentation(Path1.class).getPathSetupType() - .getPst().intValue()); - final List subobjects = lsp.getPath().get(0).getEro().getSubobject(); + + final Map paths = lsp.getPath(); + assertNotNull(paths); + final Path path = paths.values().iterator().next(); + + assertEquals(1, path.augmentation(Path1.class).getPathSetupType().getPst().intValue()); + final List subobjects = path.getEro().nonnullSubobject(); assertEquals(1, subobjects.size()); assertEquals("1.1.1.1", ((IpNodeId)((SrEroType)subobjects.get(0).getSubobjectType()) .getNai()).getIpAddress().getIpv4AddressNoZone().getValue()); @@ -92,7 +100,7 @@ public class TopologyProviderTest extends AbstractPCEPSessionTest { //check second lsp sr-path - final List reportedLsps = pcc.getReportedLsp(); + final Map reportedLsps = pcc.getReportedLsp(); assertNotNull(reportedLsps); assertEquals(2, reportedLsps.size()); return pcc; @@ -103,12 +111,13 @@ public class TopologyProviderTest extends AbstractPCEPSessionTest { //check updated sr-path - final List reportedLsps = pcc.getReportedLsp(); + final Map reportedLsps = pcc.getReportedLsp(); assertNotNull(reportedLsps); assertEquals(2, reportedLsps.size()); - for (final ReportedLsp rlsp : reportedLsps) { + for (final ReportedLsp rlsp : reportedLsps.values()) { if (rlsp.getName().equals("sr-path1")) { - final List subobjects = rlsp.getPath().get(0).getEro().getSubobject(); + final List subobjects = rlsp.nonnullPath().values().iterator().next() + .getEro().nonnullSubobject(); assertEquals(1, subobjects.size()); assertEquals("1.1.1.2", ((IpNodeId)((SrEroType)subobjects.get(0) .getSubobjectType()).getNai()).getIpAddress().getIpv4AddressNoZone().getValue()); diff --git a/pcep/server/pom.xml b/pcep/server/pom.xml index 62df503226..1915957f9c 100644 --- a/pcep/server/pom.xml +++ b/pcep/server/pom.xml @@ -13,7 +13,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pcep/topology/cli/pom.xml b/pcep/topology/cli/pom.xml index 8f38df6122..dbcd595135 100644 --- a/pcep/topology/cli/pom.xml +++ b/pcep/topology/cli/pom.xml @@ -83,6 +83,11 @@ mdsal-binding-dom-adapter test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + diff --git a/pcep/topology/pom.xml b/pcep/topology/pom.xml index aac846fc70..825b849cc9 100644 --- a/pcep/topology/pom.xml +++ b/pcep/topology/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pcep/topology/topology-provider/pom.xml b/pcep/topology/topology-provider/pom.xml index 5bf56237fa..0dd9972c0c 100644 --- a/pcep/topology/topology-provider/pom.xml +++ b/pcep/topology/topology-provider/pom.xml @@ -171,6 +171,11 @@ test-jar test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractTopologySessionListener.java b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractTopologySessionListener.java index 0c9d24a107..72471ac4ea 100644 --- a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractTopologySessionListener.java +++ b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractTopologySessionListener.java @@ -9,8 +9,8 @@ package org.opendaylight.bgpcep.pcep.topology.provider; import static java.util.Objects.requireNonNull; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -443,9 +443,9 @@ public abstract class AbstractTopologySessionListener implements TopologyS private static List makeBeforeBreak(final ReportedLspBuilder rlb, final ReportedLsp previous, final String name, final boolean remove) { // just one path should be reported - Preconditions.checkState(rlb.getPath().size() == 1); + final Path path = Iterables.getOnlyElement(rlb.getPath().values()); final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId reportedLspId = - rlb.getPath().get(0).getLspId(); + path.getLspId(); final List updatedPaths; //lspId = 0 and remove = false -> tunnel is down, still exists but no path is signaled //remove existing tunnel's paths now, as explicit path remove will not come @@ -454,14 +454,15 @@ public abstract class AbstractTopologySessionListener implements TopologyS LOG.debug("Remove previous paths {} to this lsp name {}", previous.getPath(), name); } else { // check previous report for existing paths - updatedPaths = new ArrayList<>(previous.getPath()); + final Collection prev = previous.nonnullPath().values(); + updatedPaths = new ArrayList<>(prev); LOG.debug("Found previous paths {} to this lsp name {}", updatedPaths, name); - for (final Path path : previous.getPath()) { + for (final Path prevPath : prev) { //we found reported path in previous reports - if (path.getLspId().getValue().toJava() == 0 || path.getLspId().equals(reportedLspId)) { - LOG.debug("Match on lsp-id {}", path.getLspId().getValue()); + if (prevPath.getLspId().getValue().toJava() == 0 || prevPath.getLspId().equals(reportedLspId)) { + LOG.debug("Match on lsp-id {}", prevPath.getLspId().getValue()); // path that was reported previously and does have the same lsp-id, path will be updated - final boolean r = updatedPaths.remove(path); + final boolean r = updatedPaths.remove(prevPath); LOG.trace("Request removed? {}", r); } } @@ -469,8 +470,8 @@ public abstract class AbstractTopologySessionListener implements TopologyS // if the path does not exist in previous report, add it to path list, it's a new ERO // only one path will be added //lspId is 0 means confirmation message that shouldn't be added (because we have no means of deleting it later) - LOG.trace("Adding new path {} to {}", rlb.getPath(), updatedPaths); - updatedPaths.addAll(rlb.getPath()); + LOG.trace("Adding new path {} to {}", path, updatedPaths); + updatedPaths.add(path); if (remove) { if (reportedLspId.getValue().toJava() == 0) { // if lsp-id also 0, remove all paths @@ -478,8 +479,8 @@ public abstract class AbstractTopologySessionListener implements TopologyS updatedPaths.clear(); } else { // path is marked to be removed - LOG.debug("Removing path {} from {}", rlb.getPath(), updatedPaths); - final boolean r = updatedPaths.removeAll(rlb.getPath()); + LOG.debug("Removing path {} from {}", path, updatedPaths); + final boolean r = updatedPaths.remove(path); LOG.trace("Request removed? {}", r); } } @@ -605,7 +606,7 @@ public abstract class AbstractTopologySessionListener implements TopologyS return Math.toIntExact(stream .map(ReportedLsp::getPath).filter(pathList -> pathList != null && !pathList.isEmpty()) // pick the first path, as delegate status should be same in each path - .map(pathList -> pathList.get(0)) + .map(pathList -> pathList.values().iterator().next()) .map(path -> path.augmentation(Path1.class)).filter(Objects::nonNull) .map(LspObject::getLsp).filter(Objects::nonNull) .filter(Lsp::isDelegate) diff --git a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java index a4fbe85ce3..8940f9e05a 100644 --- a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java +++ b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java @@ -113,7 +113,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< private final AtomicBoolean lspUpdateCapability = new AtomicBoolean(false); private final AtomicBoolean initiationCapability = new AtomicBoolean(false); - private PceServerProvider pceServerProvider; + private final PceServerProvider pceServerProvider; /** * Creates a new stateful topology session listener for given server session manager. @@ -554,7 +554,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< return OperationResults.UNSENT; } // check if at least one of the paths has the same status as requested - for (final Path p : rep.get().getPath()) { + for (final Path p : rep.get().nonnullPath().values()) { final Path1 p1 = p.augmentation(Path1.class); if (p1 == null) { LOG.warn("Node {} LSP {} does not contain data", input.getNode(), input.getName()); @@ -575,7 +575,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< return null; } // it doesn't matter how many lsps there are in the path list, we only need data that is the same in each path - final Path1 ra = rep.get().getPath().get(0).augmentation(Path1.class); + final Path1 ra = rep.get().getPath().values().iterator().next().augmentation(Path1.class); checkState(ra != null, "Reported LSP reported null from data-store."); final Lsp reportedLsp = ra.getLsp(); checkState(reportedLsp != null, "Reported LSP does not contain LSP object."); @@ -584,7 +584,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< private static Optional getPST(final Optional rep) { if (rep.isPresent()) { - final Path1 path1 = rep.get().getPath().get(0).augmentation(Path1.class); + final Path1 path1 = rep.get().getPath().values().iterator().next().augmentation(Path1.class); if (path1 != null) { final PathSetupType pst = path1.getPathSetupType(); if (!PSTUtil.isDefaultPST(pst)) { @@ -603,12 +603,11 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< final Map lsps, final boolean incrementalSynchro) { //load node's lsps from DS final PathComputationClient pcc = node.augmentation(Node1.class).getPathComputationClient(); - final List reportedLsps = pcc.getReportedLsp(); - for (final ReportedLsp reportedLsp : reportedLsps) { + for (final ReportedLsp reportedLsp : pcc.nonnullReportedLsp().values()) { final String lspName = reportedLsp.getName(); lspData.put(lspName, reportedLsp); if (!reportedLsp.getPath().isEmpty()) { - final Path1 path1 = reportedLsp.getPath().get(0).augmentation(Path1.class); + final Path1 path1 = reportedLsp.getPath().values().iterator().next().augmentation(Path1.class); if (path1 != null) { final PlspId plspId = path1.getLsp().getPlspId(); if (!incrementalSynchro) { @@ -686,7 +685,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< // mark lsp as stale final ReportedLsp staleLsp = rep.get(); if (!staleLsp.getPath().isEmpty()) { - final Path1 path1 = staleLsp.getPath().get(0).augmentation(Path1.class); + final Path1 path1 = staleLsp.getPath().values().iterator().next().augmentation(Path1.class); if (path1 != null) { Stateful07TopologySessionListener.this.staleLsps.add(path1.getLsp().getPlspId()); } @@ -759,9 +758,9 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< /* Call Path Computation if an ERO was not provided */ boolean segmentRouting = !PSTUtil.isDefaultPST(args2.getPathSetupType()); - if ((rb.getEro() == null) - || (rb.getEro().getSubobject() == null) - || (rb.getEro().getSubobject().size() == 0)) { + if (rb.getEro() == null + || rb.getEro().getSubobject() == null + || rb.getEro().getSubobject().size() == 0) { /* Get a Path Computation to compute the Path from the Arguments */ PathComputation pathComputation = pceServerProvider.getPathComputation(); diff --git a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderUtil.java b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderUtil.java index 0cb63a7d5d..4ea817b97b 100644 --- a/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderUtil.java +++ b/pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/config/PCEPTopologyProviderUtil.java @@ -36,7 +36,7 @@ final class PCEPTopologyProviderUtil { if (topology.getNode() == null) { return ret; } - topology.getNode().stream() + topology.nonnullNode().values().stream() .filter(Objects::nonNull) .filter(node -> node.augmentation(PcepNodeConfig.class) != null) .filter(node -> node.augmentation(PcepNodeConfig.class).getSessionConfig() != null) @@ -74,7 +74,7 @@ final class PCEPTopologyProviderUtil { if (topology.getNode() == null) { return ret; } - topology.getNode().stream() + topology.nonnullNode().values().stream() .filter(Objects::nonNull) .filter(node -> node.augmentation(PcepNodeConfig.class) != null) .filter(node -> node.augmentation(PcepNodeConfig.class).getSessionConfig() != null) diff --git a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractPCEPSessionTest.java b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractPCEPSessionTest.java index da820dc03b..7b4205eb2c 100644 --- a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractPCEPSessionTest.java +++ b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractPCEPSessionTest.java @@ -5,12 +5,12 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.bgpcep.pcep.topology.provider; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -152,7 +152,8 @@ public abstract class AbstractPCEPSessionTest { - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -79,7 +76,7 @@ public class IncrementalSynchronizationProcedureTest //check node - IncrementalSync state assertEquals(PccSyncState.IncrementalSync, pcc.getStateSync()); //check reported LSP - persisted from previous session - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -90,7 +87,7 @@ public class IncrementalSynchronizationProcedureTest //check node - synchronized assertEquals(PccSyncState.IncrementalSync, pcc.getStateSync()); //check reported LSP is not empty - assertEquals(2, pcc.getReportedLsp().size()); + assertEquals(2, pcc.nonnullReportedLsp().size()); return pcc; }); @@ -101,7 +98,7 @@ public class IncrementalSynchronizationProcedureTest //check node - synchronized assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); //check reported LSP is empty, LSP state from previous session was purged - assertEquals(2, pcc.getReportedLsp().size()); + assertEquals(2, pcc.nonnullReportedLsp().size()); return pcc; }); @@ -111,21 +108,26 @@ public class IncrementalSynchronizationProcedureTest readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { //check node - synchronized assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); - assertEquals(3,pcc.getReportedLsp().size()); + assertEquals(3,pcc.nonnullReportedLsp().size()); return pcc; }); } private Open getOpen(final LspDbVersion dbVersion) { - return new OpenBuilder(super.getLocalPref()).setTlvs(new TlvsBuilder().addAugmentation(Tlvs1.class, - new Tlvs1Builder().setStateful(new StatefulBuilder().addAugmentation(Stateful1.class, - new Stateful1Builder().setInitiation(Boolean.TRUE).build()) - .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync - .optimizations.rev181109.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params - .xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1Builder() - .setIncludeDbVersion(Boolean.TRUE).setDeltaLspSyncCapability(Boolean.TRUE).build()) - .build()).build()).addAugmentation(Tlvs3.class, new Tlvs3Builder().setLspDbVersion(dbVersion).build()) - .build()).build(); + return new OpenBuilder(super.getLocalPref()) + .setTlvs(new TlvsBuilder() + .addAugmentation(new Tlvs1Builder() + .setStateful(new StatefulBuilder() + .addAugmentation(new Stateful1Builder().setInitiation(Boolean.TRUE).build()) + .addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang + .controller.pcep.sync.optimizations.rev181109.Stateful1Builder() + .setIncludeDbVersion(Boolean.TRUE).setDeltaLspSyncCapability(Boolean.TRUE) + .build()) + .build()) + .build()) + .addAugmentation(new Tlvs3Builder().setLspDbVersion(dbVersion).build()) + .build()) + .build(); } private static Pcrpt getPcrpt(final Uint32 val, final String pathname) { diff --git a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTriggeredReSynchronizationProcedureTest.java b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTriggeredReSynchronizationProcedureTest.java index 93121f5c24..43c19847e7 100644 --- a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTriggeredReSynchronizationProcedureTest.java +++ b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTriggeredReSynchronizationProcedureTest.java @@ -16,7 +16,7 @@ import static org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil.createP import static org.opendaylight.protocol.util.CheckTestUtil.readDataOperational; import java.util.Collections; -import java.util.List; +import java.util.Map; import java.util.Optional; import org.junit.Before; import org.junit.Test; @@ -46,7 +46,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.PccSyncState; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.TriggerSyncInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.ReportedLsp; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; @@ -76,7 +75,7 @@ public class PCEPTriggeredReSynchronizationProcedureTest readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -98,7 +97,7 @@ public class PCEPTriggeredReSynchronizationProcedureTest this.listener.onMessage(this.session, pcRpt); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { - final List lsp = pcc.getReportedLsp(); + final Map lsp = pcc.getReportedLsp(); assertNotNull(lsp); assertEquals(1, lsp.size()); return pcc; @@ -130,8 +129,7 @@ public class PCEPTriggeredReSynchronizationProcedureTest this.listener.onMessage(this.session, pcRpt); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); - final List reportedLspPcc = pcc.getReportedLsp(); - assertFalse(reportedLspPcc.isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -139,13 +137,13 @@ public class PCEPTriggeredReSynchronizationProcedureTest this.listener.triggerSync(new TriggerSyncInputBuilder().setNode(this.nodeId).setName("test").build()); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { assertEquals(PccSyncState.PcepTriggeredResync, pcc.getStateSync()); - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); this.listener.onMessage(this.session, pcRpt); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -156,7 +154,7 @@ public class PCEPTriggeredReSynchronizationProcedureTest //check node - synchronized assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); //check reported LSP - assertEquals(1, pcc.getReportedLsp().size()); + assertEquals(1, pcc.nonnullReportedLsp().size()); return pcc; }); diff --git a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCETriggeredInitialSyncProcedureTest.java b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCETriggeredInitialSyncProcedureTest.java index a1b59b60b0..8511af7696 100644 --- a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCETriggeredInitialSyncProcedureTest.java +++ b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCETriggeredInitialSyncProcedureTest.java @@ -10,7 +10,7 @@ package org.opendaylight.bgpcep.pcep.topology.provider; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNull; import static org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil.createLsp; import static org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil.createPath; import static org.opendaylight.protocol.util.CheckTestUtil.readDataOperational; @@ -85,7 +85,7 @@ public class PCETriggeredInitialSyncProcedureTest //check node - synchronized assertEquals(PccSyncState.Synchronized, pcc.getStateSync()); //check reported LSP is empty, LSP state from previous session was purged - assertTrue(pcc.getReportedLsp().isEmpty()); + assertNull(pcc.getReportedLsp()); return pcc; }); @@ -94,7 +94,7 @@ public class PCETriggeredInitialSyncProcedureTest this.listener.onMessage(session, pcRpt); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); diff --git a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/StateSynchronizationAvoidanceProcedureTest.java b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/StateSynchronizationAvoidanceProcedureTest.java index e9b14bddfd..9abc560b6d 100644 --- a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/StateSynchronizationAvoidanceProcedureTest.java +++ b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/StateSynchronizationAvoidanceProcedureTest.java @@ -124,7 +124,7 @@ public class StateSynchronizationAvoidanceProcedureTest extends .build(), Optional.empty(), createPath(Collections.emptyList())); this.listener.onMessage(session, pcRpt); readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); @@ -141,7 +141,7 @@ public class StateSynchronizationAvoidanceProcedureTest extends //check node - not synchronized assertEquals(PccSyncState.InitialResync, pcc.getStateSync()); //check reported LSP - persisted from previous session - assertFalse(pcc.getReportedLsp().isEmpty()); + assertFalse(pcc.nonnullReportedLsp().isEmpty()); return pcc; }); diff --git a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListenerTest.java b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListenerTest.java index 44edd8b51d..ee0d4c0485 100644 --- a/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListenerTest.java +++ b/pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListenerTest.java @@ -157,18 +157,18 @@ public class Stateful07TopologySessionListenerTest readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { assertEquals(this.testAddress, pcc.getIpAddress().getIpv4AddressNoZone().getValue()); // reported lsp so far empty, has not received response (PcRpt) yet - assertTrue(pcc.getReportedLsp().isEmpty()); + assertNull(pcc.getReportedLsp()); return pcc; }); this.listener.onMessage(this.session, pcRpt); // check created lsp readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { - assertEquals(1, pcc.getReportedLsp().size()); - final ReportedLsp reportedLsp = pcc.getReportedLsp().get(0); + assertEquals(1, pcc.nonnullReportedLsp().size()); + final ReportedLsp reportedLsp = pcc.getReportedLsp().values().iterator().next(); assertEquals(this.tunnelName, reportedLsp.getName()); - assertEquals(1, reportedLsp.getPath().size()); - final Path path = reportedLsp.getPath().get(0); + assertEquals(1, reportedLsp.nonnullPath().size()); + final Path path = reportedLsp.nonnullPath().values().iterator().next(); assertEquals(1, path.getEro().getSubobject().size()); assertEquals(this.eroIpPrefix, getLastEroIpPrefix(path.getEro())); return pcc; @@ -191,7 +191,7 @@ public class Stateful07TopologySessionListenerTest .ArgumentsBuilder updArgsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang .topology.pcep.rev200120.update.lsp.args.ArgumentsBuilder(); updArgsBuilder.setEro(createEroWithIpPrefixes(Lists.newArrayList(this.eroIpPrefix, this.dstIpPrefix))); - updArgsBuilder.addAugmentation(Arguments3.class, new Arguments3Builder().setLsp(new LspBuilder() + updArgsBuilder.addAugmentation(new Arguments3Builder().setLsp(new LspBuilder() .setDelegate(TRUE).setAdministrative(FALSE).build()).build()); final UpdateLspInput update = new UpdateLspInputBuilder().setArguments(updArgsBuilder.build()) .setName(this.tunnelName).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)) @@ -213,10 +213,10 @@ public class Stateful07TopologySessionListenerTest //check updated lsp readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> { assertEquals(1, pcc.getReportedLsp().size()); - final ReportedLsp reportedLsp = pcc.getReportedLsp().get(0); + final ReportedLsp reportedLsp = pcc.getReportedLsp().values().iterator().next(); assertEquals(this.tunnelName, reportedLsp.getName()); assertEquals(1, reportedLsp.getPath().size()); - final Path path = reportedLsp.getPath().get(0); + final Path path = reportedLsp.getPath().values().iterator().next(); assertEquals(2, path.getEro().getSubobject().size()); assertEquals(this.dstIpPrefix, getLastEroIpPrefix(path.getEro())); assertEquals(1, listenerState.getDelegatedLspsCount().intValue()); diff --git a/pcep/topology/topology-stats/pom.xml b/pcep/topology/topology-stats/pom.xml index a3e2e3b9c6..92c26e00fe 100644 --- a/pcep/topology/topology-stats/pom.xml +++ b/pcep/topology/topology-stats/pom.xml @@ -80,6 +80,11 @@ mdsal-binding-dom-adapter test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + diff --git a/pcep/topology/topology-stats/src/main/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImpl.java b/pcep/topology/topology-stats/src/main/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImpl.java index c4a974ec09..8ef5de3fa3 100644 --- a/pcep/topology/topology-stats/src/main/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImpl.java +++ b/pcep/topology/topology-stats/src/main/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImpl.java @@ -25,13 +25,10 @@ import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdRpcAugBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAug; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesRpcAugBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAug; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesRpcAugBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesStatsAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stats.rev171113.pcep.session.state.LocalPref; @@ -110,58 +107,62 @@ public class TopologyStatsRpcServiceImpl } @Override - @SuppressWarnings("checkstyle:LineLength") public ListenableFuture> getStats(final GetStatsInput input) { - final List iTopologies = - input.getTopology(); - final List iTopologyIds; + final var iTopologies = input.getTopology(); + final Collection iTopologyIds; if (iTopologies != null) { - iTopologyIds = iTopologies.stream().map( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.Topology::getTopologyId) + iTopologyIds = iTopologies.values().stream() + .map(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.input.Topology::getTopologyId) .collect(Collectors.toList()); } else { iTopologyIds = getAvailableTopologyIds(); } - final List oTopologies = - new ArrayList<>(); + final List oTopologies = new ArrayList<>(); iTopologyIds.forEach(iTopologyId -> { - final List iNodes; - if (input.getTopology() != null) { - iNodes = input.getTopology().stream().filter(t -> t.getTopologyId().equals(iTopologyId)).findFirst() + final Collection iNodes; + if (iTopologies != null) { + final var nodes = iTopologies.values().stream() + .filter(t -> iTopologyId.equals(t.getTopologyId())) + .findFirst() .get().getNode(); + iNodes = nodes != null ? nodes.values() : null; } else { iNodes = null; } final List iNodeIds; if (iNodes != null) { - iNodeIds = iNodes.stream().map( - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.topology.Node::getNodeId) + iNodeIds = iNodes.stream() + .map(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.input.topology.Node::getNodeId) .collect(Collectors.toList()); } else { iNodeIds = getAvailableNodeIds(iTopologyId); } - final List oNodes = - new ArrayList<>(); + final List oNodes = new ArrayList<>(); iNodeIds.forEach(iNodeId -> { final InstanceIdentifier iid = InstanceIdentifier.builder(NetworkTopology.class) .child(Topology.class, new TopologyKey(iTopologyId)).child(Node.class, new NodeKey(iNodeId)) .augmentation(PcepTopologyNodeStatsAug.class).child(PcepSessionState.class).build(); - if (!sessionStateMap.containsKey(iid)) { + final PcepSessionState state = sessionStateMap.get(iid); + if (state == null) { LOG.debug("Pcep session stats not available for node {} in topology {}", iNodeId.getValue(), iTopologyId.getValue()); } - oNodes.add( - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.topology.NodeBuilder() - .setNodeId(iNodeId) - .setPcepSessionState(transformStatefulAugmentation(sessionStateMap.get(iid))).build()); + oNodes.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.output.topology.NodeBuilder() + .setNodeId(iNodeId) + .setPcepSessionState(transformStatefulAugmentation(state)).build()); }); - oTopologies.add( - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.TopologyBuilder() - .setTopologyId(iTopologyId).setNode(oNodes).build()); + oTopologies.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.output.TopologyBuilder().setTopologyId(iTopologyId).setNode(oNodes).build()); }); final RpcResult res = @@ -184,13 +185,15 @@ public class TopologyStatsRpcServiceImpl if (topoMessage != null) { final StatefulMessagesStatsAug messageStatsAug = topoMessage.augmentation(StatefulMessagesStatsAug.class); if (messageStatsAug != null) { - final StatefulMessagesRpcAug messageRpcAug = new StatefulMessagesRpcAugBuilder() - .setLastReceivedRptMsgTimestamp(messageStatsAug.getLastReceivedRptMsgTimestamp()) - .setReceivedRptMsgCount(messageStatsAug.getReceivedRptMsgCount()) - .setSentInitMsgCount(messageStatsAug.getSentInitMsgCount()) - .setSentUpdMsgCount(messageStatsAug.getSentUpdMsgCount()).build(); - sb.setMessages(new MessagesBuilder(topoMessage).removeAugmentation(StatefulMessagesStatsAug.class) - .addAugmentation(StatefulMessagesRpcAug.class, messageRpcAug).build()); + sb.setMessages(new MessagesBuilder(topoMessage) + .removeAugmentation(StatefulMessagesStatsAug.class) + .addAugmentation(new StatefulMessagesRpcAugBuilder() + .setLastReceivedRptMsgTimestamp(messageStatsAug.getLastReceivedRptMsgTimestamp()) + .setReceivedRptMsgCount(messageStatsAug.getReceivedRptMsgCount()) + .setSentInitMsgCount(messageStatsAug.getSentInitMsgCount()) + .setSentUpdMsgCount(messageStatsAug.getSentUpdMsgCount()) + .build()) + .build()); } } @@ -199,12 +202,14 @@ public class TopologyStatsRpcServiceImpl final StatefulCapabilitiesStatsAug capabilityStatsAug = topoPeerCapability.augmentation(StatefulCapabilitiesStatsAug.class); if (capabilityStatsAug != null) { - final StatefulCapabilitiesRpcAug capabilityRpcAug = new StatefulCapabilitiesRpcAugBuilder() - .setActive(capabilityStatsAug.isActive()).setInstantiation(capabilityStatsAug.isInstantiation()) - .setStateful(capabilityStatsAug.isStateful()).build(); sb.setPeerCapabilities(new PeerCapabilitiesBuilder(topoPeerCapability) .removeAugmentation(StatefulCapabilitiesStatsAug.class) - .addAugmentation(StatefulCapabilitiesRpcAug.class, capabilityRpcAug).build()); + .addAugmentation(new StatefulCapabilitiesRpcAugBuilder() + .setActive(capabilityStatsAug.isActive()) + .setInstantiation(capabilityStatsAug.isInstantiation()) + .setStateful(capabilityStatsAug.isStateful()) + .build()) + .build()); } } @@ -212,10 +217,12 @@ public class TopologyStatsRpcServiceImpl if (topoLocalPref != null) { final PcepEntityIdStatsAug entityStatsAug = topoLocalPref.augmentation(PcepEntityIdStatsAug.class); if (entityStatsAug != null) { - final PcepEntityIdRpcAug entityRpcAug = new PcepEntityIdRpcAugBuilder() - .setSpeakerEntityIdValue(entityStatsAug.getSpeakerEntityIdValue()).build(); - sb.setLocalPref(new LocalPrefBuilder(topoLocalPref).removeAugmentation(PcepEntityIdStatsAug.class) - .addAugmentation(PcepEntityIdRpcAug.class, entityRpcAug).build()); + sb.setLocalPref(new LocalPrefBuilder(topoLocalPref) + .removeAugmentation(PcepEntityIdStatsAug.class) + .addAugmentation(new PcepEntityIdRpcAugBuilder() + .setSpeakerEntityIdValue(entityStatsAug.getSpeakerEntityIdValue()) + .build()) + .build()); } } diff --git a/pcep/topology/topology-stats/src/test/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImplTest.java b/pcep/topology/topology-stats/src/test/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImplTest.java index 5c20b0c40a..0bc59b0714 100644 --- a/pcep/topology/topology-stats/src/test/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImplTest.java +++ b/pcep/topology/topology-stats/src/test/java/org/opendaylight/bgpcep/pcep/topology/stats/rpc/TopologyStatsRpcServiceImplTest.java @@ -20,13 +20,9 @@ import org.junit.Test; import org.opendaylight.mdsal.binding.api.WriteTransaction; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdRpcAugBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.PcepEntityIdStatsAugBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesRpcAugBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulCapabilitiesStatsAugBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesRpcAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.stateful.stats.rev181109.StatefulMessagesRpcAugBuilder; @@ -49,7 +45,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.top import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.GetStatsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.GetStatsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.GetStatsOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAug; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.stats.rev181109.PcepTopologyNodeStatsAugBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopologyBuilder; @@ -107,9 +102,11 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke } private static Node createPcepNode(final String nodeId) { - return new NodeBuilder().setNodeId(new NodeId(nodeId)) - .addAugmentation(PcepTopologyNodeStatsAug.class, - new PcepTopologyNodeStatsAugBuilder().setPcepSessionState(createTopologySessionState()).build()) + return new NodeBuilder() + .setNodeId(new NodeId(nodeId)) + .addAugmentation(new PcepTopologyNodeStatsAugBuilder() + .setPcepSessionState(createTopologySessionState()) + .build()) .build(); } @@ -139,11 +136,14 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke .setReceivedMsgCount(Uint32.valueOf(4)) .setReplyTime(replyTime) .setErrorMessages(errorMsg) - .addAugmentation(StatefulMessagesStatsAug.class, statefulMsg).build(); + .addAugmentation(statefulMsg).build(); final PeerCapabilities capabilities = new PeerCapabilitiesBuilder() - .addAugmentation(StatefulCapabilitiesStatsAug.class, new StatefulCapabilitiesStatsAugBuilder() - .setStateful(true).setInstantiation(true).setActive(true).build()) + .addAugmentation(new StatefulCapabilitiesStatsAugBuilder() + .setStateful(true) + .setInstantiation(true) + .setActive(true) + .build()) .build(); final LocalPref localPref = new LocalPrefBuilder() @@ -151,7 +151,7 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke .setDeadtimer(Uint8.valueOf(120)) .setIpAddress("127.0.0.1") .setSessionId(Uint16.ZERO) - .addAugmentation(PcepEntityIdStatsAug.class, new PcepEntityIdStatsAugBuilder() + .addAugmentation(new PcepEntityIdStatsAugBuilder() .setSpeakerEntityIdValue(new byte[] {0x01, 0x02, 0x03, 0x04}) .build()) .build(); @@ -186,10 +186,10 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke .setReceivedMsgCount(Uint32.valueOf(4)) .setReplyTime(replyTime) .setErrorMessages(errorMsg) - .addAugmentation(StatefulMessagesRpcAug.class, statefulMsg).build(); + .addAugmentation(statefulMsg).build(); final PeerCapabilities capabilities = new PeerCapabilitiesBuilder() - .addAugmentation(StatefulCapabilitiesRpcAug.class, new StatefulCapabilitiesRpcAugBuilder() + .addAugmentation(new StatefulCapabilitiesRpcAugBuilder() .setStateful(true).setInstantiation(true).setActive(true).build()) .build(); @@ -198,7 +198,7 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke .setDeadtimer(Uint8.valueOf(120)) .setIpAddress("127.0.0.1") .setSessionId(Uint16.ZERO) - .addAugmentation(PcepEntityIdRpcAug.class, new PcepEntityIdRpcAugBuilder() + .addAugmentation(new PcepEntityIdRpcAugBuilder() .setSpeakerEntityIdValue(new byte[] {0x01, 0x02, 0x03, 0x04}) .build()) .build(); @@ -253,16 +253,13 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke } @Test - @SuppressWarnings("checkstyle:LineLength") public void testGetStatsAllMatch() throws Exception { GetStatsInput in; - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.Topology ot1 = - createGetStatsOutput(TOPOLOGY_ID1, Collections.singletonList(NODE_ID1), createRpcSessionState()) - .getTopology().get(0); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.Topology ot2 = - createGetStatsOutput(TOPOLOGY_ID2, Arrays.asList(NODE_ID2, NODE_ID3), createRpcSessionState()) - .getTopology().get(0); + final var ot1 = createGetStatsOutput(TOPOLOGY_ID1, Collections.singletonList(NODE_ID1), createRpcSessionState()) + .getTopology().values() .iterator().next(); + final var ot2 = createGetStatsOutput(TOPOLOGY_ID2, Arrays.asList(NODE_ID2, NODE_ID3), createRpcSessionState()) + .getTopology().values().iterator().next(); final GetStatsOutput out = new GetStatsOutputBuilder().setTopology(Arrays.asList(ot1, ot2)).build(); // Implicitly match all PCEP topologies and nodes @@ -270,17 +267,17 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke performCountTest(in, out); // Explicitly match all PCEP topologies and nodes - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.Topology it1 = - createGetStatsInput(TOPOLOGY_ID1, Collections.singletonList(NODE_ID1)).getTopology().get(0); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.Topology it2 = - createGetStatsInput(TOPOLOGY_ID2, Arrays.asList(NODE_ID2, NODE_ID3)).getTopology().get(0); + final var it1 = createGetStatsInput(TOPOLOGY_ID1, Collections.singletonList(NODE_ID1)).getTopology().values() + .iterator().next(); + final var it2 = createGetStatsInput(TOPOLOGY_ID2, Arrays.asList(NODE_ID2, NODE_ID3)).getTopology().values() + .iterator().next(); in = new GetStatsInputBuilder().setTopology(Arrays.asList(it1, it2)).build(); performCountTest(in, out); } private void performTest(final GetStatsInput in, final GetStatsOutput out) throws Exception { final RpcResult result = rpcService.getStats(in).get(); - assertEquals(result.getResult(), out); + assertEquals(out, result.getResult()); assertTrue(result.isSuccessful()); assertTrue(result.getErrors().isEmpty()); } @@ -294,28 +291,34 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke final RpcResult result = rpcService.getStats(in).get(); assertEquals(result.getResult().getTopology().size(), out.getTopology().size()); assertTrue(result.isSuccessful()); - assertEquals(result.getResult().getTopology().stream().flatMap(t -> t.getNode().stream()).count(), - out.getTopology().stream().flatMap(t -> t.getNode().stream()).count()); + assertEquals(result.getResult().nonnullTopology().values().stream() + .flatMap(t -> t.nonnullNode().values().stream()).count(), + out.nonnullTopology().values().stream().flatMap(t -> t.nonnullNode().values().stream()).count()); assertTrue(result.isSuccessful()); assertTrue(result.getErrors().isEmpty()); } - @SuppressWarnings("checkstyle:LineLength") private static GetStatsInput createGetStatsInput(final String topologyId, final List nodeIds) { - final List nodes; + final List nodes; if (nodeIds != null) { - nodes = nodeIds.stream().map( - nodeId -> new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.topology.NodeBuilder() - .setNodeId(new NodeId(nodeId)).build()) + nodes = nodeIds.stream() + .map(nodeId -> new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology + .stats.rpc.rev190321.get.stats.input.topology.NodeBuilder() + .setNodeId(new NodeId(nodeId)) + .build()) .collect(Collectors.toList()); } else { nodes = null; } - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.Topology topology; + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get + .stats.input.Topology topology; if (topologyId != null) { - topology = - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.TopologyBuilder() - .setTopologyId(new TopologyId(topologyId)).setNode(nodes).build(); + topology = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.input.TopologyBuilder() + .setTopologyId(new TopologyId(topologyId)) + .setNode(nodes) + .build(); } else { topology = null; } @@ -323,23 +326,29 @@ public class TopologyStatsRpcServiceImplTest extends AbstractConcurrentDataBroke .build(); } - @SuppressWarnings("checkstyle:LineLength") private static GetStatsOutput createGetStatsOutput(final String topologyId, final List nodeIds, final PcepSessionState state) { - final List nodes; + final List nodes; if (nodeIds != null) { - nodes = nodeIds.stream().map( - nodeId -> new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.topology.NodeBuilder() - .setNodeId(new NodeId(nodeId)).setPcepSessionState(state).build()) + nodes = nodeIds.stream() + .map(nodeId -> new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology + .stats.rpc.rev190321.get.stats.output.topology.NodeBuilder() + .setNodeId(new NodeId(nodeId)) + .setPcepSessionState(state) + .build()) .collect(Collectors.toList()); } else { nodes = null; } - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.Topology topology; + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get + .stats.output.Topology topology; if (topologyId != null) { - topology = - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.TopologyBuilder() - .setTopologyId(new TopologyId(topologyId)).setNode(nodes).build(); + topology = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc + .rev190321.get.stats.output.TopologyBuilder() + .setTopologyId(new TopologyId(topologyId)) + .setNode(nodes) + .build(); } else { topology = null; } diff --git a/pcep/tunnel/pom.xml b/pcep/tunnel/pom.xml index b35e94e9a1..eeef10d045 100644 --- a/pcep/tunnel/pom.xml +++ b/pcep/tunnel/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pcep/tunnel/tunnel-provider/pom.xml b/pcep/tunnel/tunnel-provider/pom.xml index 5e9d04a66b..d72aa482ed 100644 --- a/pcep/tunnel/tunnel-provider/pom.xml +++ b/pcep/tunnel/tunnel-provider/pom.xml @@ -162,6 +162,11 @@ pcep-impl test-jar + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/CreateTunnelInstructionExecutor.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/CreateTunnelInstructionExecutor.java index 8561ce361e..5a5a743544 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/CreateTunnelInstructionExecutor.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/CreateTunnelInstructionExecutor.java @@ -26,7 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.AdministrativeStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments2Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.LspBuilder; @@ -195,7 +194,7 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor final AdministrativeStatus adminStatus = this.p2pTunnelInput.augmentation(PcepCreateP2pTunnelInput1.class) .getAdministrativeStatus(); if (adminStatus != null) { - args.addAugmentation(Arguments2.class, new Arguments2Builder().setLsp(new LspBuilder() + args.addAugmentation(new Arguments2Builder().setLsp(new LspBuilder() .setAdministrative(adminStatus == AdministrativeStatus.Active).build()).build()); } return args.build(); diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/DestroyTunnelInstructionExecutor.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/DestroyTunnelInstructionExecutor.java index 6603d29d6d..ed076a5b5f 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/DestroyTunnelInstructionExecutor.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/DestroyTunnelInstructionExecutor.java @@ -63,7 +63,7 @@ final class DestroyTunnelInstructionExecutor extends AbstractInstructionExecutor } final RemoveLspInputBuilder ab = new RemoveLspInputBuilder(); ab.setName(link.augmentation(Link1.class).getSymbolicPathName()); - ab.setNode(node.getSupportingNode().get(0).key().getNodeRef()); + ab.setNode(node.nonnullSupportingNode().values().iterator().next().key().getNodeRef()); return Futures.transform( this.topologyService.removeLsp(ab.build()), RpcResult::getResult, MoreExecutors.directExecutor()); diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java index 426d8c4e9d..a982615677 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java @@ -10,7 +10,6 @@ package org.opendaylight.bgpcep.pcep.tunnel.provider; import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; @@ -42,9 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.PathComputationClient; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.ReportedLsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.path.computation.client.reported.lsp.Path; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.tunnel.pcep.supporting.node.attributes.PathComputationClientBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId; @@ -119,7 +116,7 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene return; } - for (final ReportedLsp l : pccnode.getPathComputationClient().getReportedLsp()) { + for (final ReportedLsp l : pccnode.getPathComputationClient().nonnullReportedLsp().values()) { lsps.add(id.builder().augmentation(Node1.class).child(PathComputationClient.class) .child(ReportedLsp.class, l.key()).build()); } @@ -139,14 +136,12 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene } private SupportingNode createSupportingNode(final NodeId sni, final Boolean inControl) { - final SupportingNodeKey sk = new SupportingNodeKey(sni, this.source); - final SupportingNodeBuilder snb = new SupportingNodeBuilder(); - snb.setNodeRef(sni); - snb.withKey(sk); - snb.addAugmentation(SupportingNode1.class, new SupportingNode1Builder().setPathComputationClient( - new PathComputationClientBuilder().setControlling(inControl).build()).build()); - - return snb.build(); + return new SupportingNodeBuilder() + .setNodeRef(sni) + .withKey(new SupportingNodeKey(sni, this.source)) + .addAugmentation(new SupportingNode1Builder().setPathComputationClient( + new PathComputationClientBuilder().setControlling(inControl).build()).build()) + .build(); } private void handleSni(final InstanceIdentifier sni, final Node node, final Boolean inControl, @@ -159,12 +154,10 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene * so it does not have a supporting node pointer. Since we now know what it is, * fill it in. */ - if (node.getSupportingNode() != null) { - for (final SupportingNode sn : node.getSupportingNode()) { - if (sn.getNodeRef().equals(k.getNodeId())) { - have = true; - break; - } + for (final SupportingNode sn : node.nonnullSupportingNode().values()) { + if (sn.getNodeRef().equals(k.getNodeId())) { + have = true; + break; } } if (!have) { @@ -179,26 +172,22 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene final IpAddress addr, final InstanceIdentifier sni, final Boolean inControl) throws ExecutionException, InterruptedException { final Topology topo = trans.read(LogicalDatastoreType.OPERATIONAL, this.target).get().get(); - if (topo.getNode() != null) { - for (final Node n : topo.getNode()) { - if (n.getTerminationPoint() != null) { - for (final TerminationPoint tp : n.getTerminationPoint()) { - final TerminationPoint1 tpa = tp.augmentation(TerminationPoint1.class); - if (tpa != null) { - final TerminationPointType tpt = tpa.getIgpTerminationPointAttributes() - .getTerminationPointType(); - if (tpt instanceof Ip) { - for (final IpAddress address : ((Ip) tpt).getIpAddress()) { - if (addr.equals(address)) { - handleSni(sni, n, inControl, trans); - return this.target.builder().child(Node.class, n.key()) - .child(TerminationPoint.class, tp.key()).build(); - } - } - } else { - LOG.debug("Ignoring termination point type {}", tpt); + for (final Node n : topo.nonnullNode().values()) { + for (final TerminationPoint tp : n.nonnullTerminationPoint().values()) { + final TerminationPoint1 tpa = tp.augmentation(TerminationPoint1.class); + if (tpa != null) { + final TerminationPointType tpt = tpa.getIgpTerminationPointAttributes() + .getTerminationPointType(); + if (tpt instanceof Ip) { + for (final IpAddress address : ((Ip) tpt).getIpAddress()) { + if (addr.equals(address)) { + handleSni(sni, n, inControl, trans); + return this.target.builder().child(Node.class, n.key()) + .child(TerminationPoint.class, tp.key()).build(); } } + } else { + LOG.debug("Ignoring termination point type {}", tpt); } } } @@ -213,9 +202,11 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene final TerminationPointKey tpk = new TerminationPointKey(new TpId(url)); final TerminationPointBuilder tpb = new TerminationPointBuilder(); tpb.withKey(tpk).setTpId(tpk.getTpId()); - tpb.addAugmentation(TerminationPoint1.class, new TerminationPoint1Builder().setIgpTerminationPointAttributes( - new IgpTerminationPointAttributesBuilder().setTerminationPointType( - new IpBuilder().setIpAddress(Lists.newArrayList(addr)).build()).build()).build()); + tpb.addAugmentation(new TerminationPoint1Builder() + .setIgpTerminationPointAttributes(new IgpTerminationPointAttributesBuilder() + .setTerminationPointType(new IpBuilder().setIpAddress(Lists.newArrayList(addr)).build()) + .build()) + .build()); final NodeKey nk = new NodeKey(new NodeId(url)); final NodeBuilder nb = new NodeBuilder(); @@ -234,7 +225,7 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene final ReportedLsp value) throws ExecutionException, InterruptedException { final InstanceIdentifier ni = identifier.firstIdentifierOf(Node.class); - final Path1 rl = value.getPath().get(0).augmentation(Path1.class); + final Path1 rl = value.nonnullPath().values().iterator().next().augmentation(Path1.class); final AddressFamily af = rl.getLsp().getTlvs().getLspIdentifiers().getAddressFamily(); @@ -255,7 +246,7 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene throw new IllegalArgumentException("Unsupported address family: " + af.implementedInterface()); } - final Path path0 = value.getPath().get(0); + final Path path0 = value.nonnullPath().values().iterator().next(); final Link1Builder lab = new Link1Builder(); if (path0.getBandwidth() != null) { lab.setBandwidth(path0.getBandwidth().getBandwidth()); @@ -284,9 +275,8 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene .setSourceTp(src.firstKeyOf(TerminationPoint.class).getTpId()).build()); lb.setDestination(new DestinationBuilder().setDestNode(dst.firstKeyOf(Node.class).getNodeId()) .setDestTp(dst.firstKeyOf(TerminationPoint.class).getTpId()).build()); - lb.addAugmentation(Link1.class, lab.build()); - lb.addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful - .rev181109.Link1.class, slab.build()); + lb.addAugmentation(lab.build()); + lb.addAugmentation(slab.build()); trans.put(LogicalDatastoreType.OPERATIONAL, linkForLsp(id), lb.build()); } @@ -327,7 +317,7 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene boolean orphDstNode = true; boolean orphDstTp = true; boolean orphSrcTp = true; - for (final Link lw : nonNullList(topology.getLink())) { + for (final Link lw : topology.nonnullLink().values()) { LOG.trace("Checking link {}", lw); final NodeId sn = lw.getSource().getSourceNode(); @@ -514,8 +504,4 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene DataBroker getDataProvider() { return dataProvider; } - - private static List nonNullList(final List nullable) { - return nullable != null ? nullable : ImmutableList.of(); - } } diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelTopologyProvider.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelTopologyProvider.java index 9c4b438aca..2c5a658926 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelTopologyProvider.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelTopologyProvider.java @@ -16,7 +16,6 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.binding.api.WriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.TopologyTypes1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.TopologyTypes1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.topology.tunnel.pcep.type.TopologyTunnelPcepBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; @@ -60,7 +59,7 @@ public final class PCEPTunnelTopologyProvider extends DefaultTopologyReference i tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, getTopologyReference().getInstanceIdentifier(), new TopologyBuilder().setTopologyId(this.tunneltopologyId) .setTopologyTypes(new TopologyTypesBuilder() - .addAugmentation(TopologyTypes1.class, new TopologyTypes1Builder() + .addAugmentation(new TopologyTypes1Builder() .setTopologyTunnelPcep( new TopologyTunnelPcepBuilder().build()).build()).build()) .setNode(new ArrayList<>()).build()); diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunelProgrammingUtil.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunelProgrammingUtil.java index 5e25b085dd..2bdbd8500e 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunelProgrammingUtil.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunelProgrammingUtil.java @@ -12,6 +12,7 @@ import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.binding.api.ReadTransaction; @@ -23,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.FailureType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.OperationResult; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHops; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHopsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.ExplicitHops1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; @@ -59,12 +61,12 @@ final class TunelProgrammingUtil { // Hidden on purpose } - public static Ero buildEro(final List explicitHops) { + public static Ero buildEro(final Map explicitHops) { final EroBuilder b = new EroBuilder(); - if (!explicitHops.isEmpty()) { + if (explicitHops != null && !explicitHops.isEmpty()) { final List subobjs = new ArrayList<>(explicitHops.size()); - for (final ExplicitHops h : explicitHops) { + for (final ExplicitHops h : explicitHops.values()) { final ExplicitHops1 h1 = h.augmentation(ExplicitHops1.class); if (h1 != null) { @@ -82,7 +84,7 @@ final class TunelProgrammingUtil { } public static NodeId supportingNode(final Node node) { - for (final SupportingNode n : node.getSupportingNode()) { + for (final SupportingNode n : node.nonnullSupportingNode().values()) { final SupportingNode1 n1 = n.augmentation(SupportingNode1.class); if (n1 != null && n1.getPathComputationClient().isControlling()) { return n.key().getNodeRef(); diff --git a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/UpdateTunnelInstructionExecutor.java b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/UpdateTunnelInstructionExecutor.java index 529e612fba..87abd75f09 100644 --- a/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/UpdateTunnelInstructionExecutor.java +++ b/pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/UpdateTunnelInstructionExecutor.java @@ -21,7 +21,6 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.AdministrativeStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments3; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Arguments3Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepUpdateTunnelInput1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.LspBuilder; @@ -95,7 +94,7 @@ final class UpdateTunnelInstructionExecutor extends AbstractInstructionExecutor final AdministrativeStatus adminStatus = this.updateTunnelInput.augmentation(PcepUpdateTunnelInput1.class) .getAdministrativeStatus(); if (adminStatus != null) { - args.addAugmentation(Arguments3.class, new Arguments3Builder().setLsp(new LspBuilder() + args.addAugmentation(new Arguments3Builder().setLsp(new LspBuilder() .setAdministrative(adminStatus == AdministrativeStatus.Active).build()).build()); } ab.setArguments(args.build()); diff --git a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListenerTest.java b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListenerTest.java index 868a5deac3..ab748b4916 100644 --- a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListenerTest.java +++ b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListenerTest.java @@ -12,8 +12,10 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.opendaylight.protocol.util.CheckTestUtil.readDataOperational; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import java.util.Collections; +import java.util.Iterator; import java.util.concurrent.ExecutionException; import org.junit.After; import org.junit.Assert; @@ -28,7 +30,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Path1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Path1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.LspIdentifiersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder; @@ -38,7 +39,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.BandwidthBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.Node1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.Node1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.PccSyncState; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.pcep.client.attributes.PathComputationClientBuilder; @@ -117,12 +117,14 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { final Node dst; final Node src; - if (tunnelTopo.getNode().get(0).getNodeId().equals(srcId)) { - src = tunnelTopo.getNode().get(0); - dst = tunnelTopo.getNode().get(1); + final Iterator it = tunnelTopo.nonnullNode().values().iterator(); + final Node tmp = it.next(); + if (tmp.getNodeId().equals(srcId)) { + src = tmp; + dst = it.next(); } else { - src = tunnelTopo.getNode().get(1); - dst = tunnelTopo.getNode().get(0); + src = it.next(); + dst = tmp; } Assert.assertEquals(srcId, src.getNodeId()); @@ -130,8 +132,8 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { Assert.assertEquals(1, dst.getTerminationPoint().size()); Assert.assertEquals(1, src.getTerminationPoint().size()); - final TerminationPoint dstTp = dst.getTerminationPoint().get(0); - final TerminationPoint srcTp = src.getTerminationPoint().get(0); + final TerminationPoint dstTp = dst.nonnullTerminationPoint().values().iterator().next(); + final TerminationPoint srcTp = src.nonnullTerminationPoint().values().iterator().next(); final TpId dstNodeTpId = new TpId(dstId.getValue()); final TpId srcNodeTpId = new TpId(srcId.getValue()); Assert.assertEquals(dstNodeTpId, dstTp.getTpId()); @@ -139,11 +141,11 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { Assert.assertEquals(1, src.getSupportingNode().size()); Assert.assertNull(dst.getSupportingNode()); - final SupportingNode sNode = src.getSupportingNode().get(0); + final SupportingNode sNode = src.nonnullSupportingNode().values().iterator().next(); Assert.assertEquals(NODE1_ID, sNode.key().getNodeRef()); - Assert.assertEquals(1, tunnelTopo.getLink().size()); - final Link link = tunnelTopo.getLink().get(0); + Assert.assertEquals(1, tunnelTopo.nonnullLink().size()); + final Link link = tunnelTopo.nonnullLink().values().iterator().next(); Assert.assertEquals(srcId, link.getSource().getSourceNode()); Assert.assertEquals(srcNodeTpId, link.getSource().getSourceTp()); Assert.assertEquals(dstId, link.getDestination().getDestNode()); @@ -155,15 +157,15 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { assertNotNull(updatedNodeTopo.getNode()); Assert.assertEquals(2, updatedNodeTopo.getNode().size()); final Node updatedNode; - if (updatedNodeTopo.getNode().get(0).getNodeId().equals(srcId)) { - updatedNode = updatedNodeTopo.getNode().get(1); + if (updatedNodeTopo.nonnullNode().values().iterator().next().getNodeId().equals(srcId)) { + updatedNode = Iterables.get(updatedNodeTopo.nonnullNode().values(), 1); } else { - updatedNode = updatedNodeTopo.getNode().get(0); + updatedNode = updatedNodeTopo.nonnullNode().values().iterator().next(); } assertNotNull(updatedNode.getSupportingNode()); - Assert.assertEquals(1, updatedNode.getSupportingNode().size()); - final SupportingNode sNode2 = updatedNode.getSupportingNode().get(0); + Assert.assertEquals(1, updatedNode.nonnullSupportingNode().size()); + final SupportingNode sNode2 = updatedNode.nonnullSupportingNode().values().iterator().next(); Assert.assertEquals(NODE2_ID, sNode2.getNodeRef()); Assert.assertEquals(2, updatedNodeTopo.getLink().size()); return updatedNodeTopo; @@ -171,12 +173,13 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { }); readDataOperational(getDataBroker(), TUNNEL_TOPO_IID, updatedNodeTopo -> { - final Link link2; - if (updatedNodeTopo.getLink().get(0).getSource().getSourceNode().equals(srcId)) { - link2 = updatedNodeTopo.getLink().get(1); - } else { - link2 = updatedNodeTopo.getLink().get(0); + Link link2; + Iterator it2 = updatedNodeTopo.nonnullLink().values().iterator(); + link2 = it2.next(); + if (srcId.equals(link2.getSource().getSourceNode())) { + link2 = it2.next(); } + assertEquals(dstId, link2.getSource().getSourceNode()); assertEquals(dstNodeTpId, link2.getSource().getSourceTp()); assertEquals(srcId, link2.getDestination().getDestNode()); @@ -208,7 +211,7 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { pathBuilder.withKey(new PathKey(new LspId(lspId))); pathBuilder.setBandwidth(new BandwidthBuilder().setBandwidth( new Bandwidth(new byte[]{0x00, 0x00, (byte) 0xff, (byte) 0xff})).build()); - pathBuilder.addAugmentation(Path1.class, new Path1Builder().setLsp(new LspBuilder().setTlvs(new TlvsBuilder() + pathBuilder.addAugmentation(new Path1Builder().setLsp(new LspBuilder().setTlvs(new TlvsBuilder() .setLspIdentifiers(new LspIdentifiersBuilder().setAddressFamily(new Ipv4CaseBuilder().setIpv4( new Ipv4Builder().setIpv4TunnelSenderAddress(new Ipv4AddressNoZone(ipv4Address)) .setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(ipv4Address)) @@ -223,7 +226,7 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest { .setReportedLsp(Lists.newArrayList(reportedLps)) .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone(ipv4Address))) .build()); - nodeBuilder.addAugmentation(Node1.class, node1Builder.build()); + nodeBuilder.addAugmentation(node1Builder.build()); final WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction(); wTx.put(LogicalDatastoreType.OPERATIONAL, PCEP_TOPO_IID.builder().child(Node.class, new NodeKey(nodeId)).build(), nodeBuilder.build()); diff --git a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java index 9db478a5a9..ba253c53ac 100644 --- a/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java +++ b/pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java @@ -35,9 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.topology.rev140113.NetworkTopologyRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.AdministrativeStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepCreateP2pTunnelInput1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepUpdateTunnelInput1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcepUpdateTunnelInput1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ClassType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.Ipv4Case; @@ -61,11 +59,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepCreateP2pTunnelInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepDestroyTunnelInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev181109.PcepUpdateTunnelInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.ExplicitHops1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.ExplicitHops1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.Link1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.SupportingNode1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.tunnel.pcep.supporting.node.attributes.PathComputationClientBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.create.p2p.tunnel.input.DestinationBuilder; @@ -89,12 +84,12 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNode; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNodeKey; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.TerminationPoint1; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.TerminationPoint1Builder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.termination.point.attributes.IgpTerminationPointAttributesBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.termination.point.attributes.igp.termination.point.attributes.termination.point.type.IpBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint8; import org.osgi.framework.BundleContext; @@ -151,7 +146,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { final TerminationPointBuilder tpBuilder = new TerminationPointBuilder(); tpBuilder.setTpId(tpId); tpBuilder.withKey(new TerminationPointKey(tpId)); - tpBuilder.addAugmentation(TerminationPoint1.class, new TerminationPoint1Builder() + tpBuilder.addAugmentation(new TerminationPoint1Builder() .setIgpTerminationPointAttributes(new IgpTerminationPointAttributesBuilder() .setTerminationPointType(new IpBuilder() .setIpAddress(Collections.singletonList(new IpAddress(new Ipv4Address(ipv4Address)))) @@ -162,19 +157,21 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { nodeBuilder.setTerminationPoint(Lists.newArrayList(tpBuilder.build())); final SupportingNode supportingNode = new SupportingNodeBuilder() .withKey(new SupportingNodeKey(nodeId, new TopologyId("dummy"))) - .addAugmentation(SupportingNode1.class, new SupportingNode1Builder() + .addAugmentation(new SupportingNode1Builder() .setPathComputationClient(new PathComputationClientBuilder() .setControlling(true).build()).build()).build(); nodeBuilder.setSupportingNode(Lists.newArrayList(supportingNode)); return nodeBuilder.build(); } - private static ExplicitHops createExplicitHop(final String ipv4Prefix) { - final ExplicitHopsBuilder explcitHopsBuilder = new ExplicitHopsBuilder(); - explcitHopsBuilder.addAugmentation(ExplicitHops1.class, new ExplicitHops1Builder() - .setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(new IpPrefixBuilder() - .setIpPrefix(new IpPrefix(new Ipv4Prefix(ipv4Prefix))).build()).build()).build()); - return explcitHopsBuilder.build(); + private static ExplicitHops createExplicitHop(final String ipv4Prefix, Uint32 order) { + return new ExplicitHopsBuilder() + .setOrder(order) + .addAugmentation(new ExplicitHops1Builder() + .setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(new IpPrefixBuilder() + .setIpPrefix(new IpPrefix(new Ipv4Prefix(ipv4Prefix))).build()).build()) + .build()) + .build(); } @Before @@ -246,7 +243,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { createInputBuilder.setClassType(classType); createInputBuilder.setSymbolicPathName(tunnelName); createInputBuilder.setExplicitHops(Collections.emptyList()); - createInputBuilder.addAugmentation(PcepCreateP2pTunnelInput1.class, new PcepCreateP2pTunnelInput1Builder() + createInputBuilder.addAugmentation(new PcepCreateP2pTunnelInput1Builder() .setAdministrativeStatus(AdministrativeStatus.Active).build()); this.tunnelProgramming.pcepCreateP2pTunnel(createInputBuilder.build()); //check add-lsp input @@ -267,10 +264,10 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { updateInputBuilder.setNetworkTopologyRef(topologyRef); updateInputBuilder.setBandwidth(bwd); updateInputBuilder.setClassType(classType); - updateInputBuilder.setExplicitHops(Lists.newArrayList(createExplicitHop(IPV4_PREFIX1), - createExplicitHop(IPV4_PREFIX2))); + updateInputBuilder.setExplicitHops(Lists.newArrayList(createExplicitHop(IPV4_PREFIX1, Uint32.ONE), + createExplicitHop(IPV4_PREFIX2, Uint32.TWO))); updateInputBuilder.setLinkId(LINK1_ID); - updateInputBuilder.addAugmentation(PcepUpdateTunnelInput1.class, new PcepUpdateTunnelInput1Builder() + updateInputBuilder.addAugmentation(new PcepUpdateTunnelInput1Builder() .setAdministrativeStatus(AdministrativeStatus.Active).build()); this.tunnelProgramming.pcepUpdateTunnel(updateInputBuilder.build()); //check update-lsp input @@ -315,7 +312,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest { .rev131021.link.attributes.DestinationBuilder().setDestNode(NODE2_ID).setDestTp(TP2_ID).build()); linkBuilder.setLinkId(LINK1_ID); linkBuilder.withKey(new LinkKey(LINK1_ID)); - linkBuilder.addAugmentation(Link1.class, new Link1Builder().setSymbolicPathName(LINK1_ID.getValue()).build()); + linkBuilder.addAugmentation(new Link1Builder().setSymbolicPathName(LINK1_ID.getValue()).build()); final WriteTransaction wTx = getDataBroker().newWriteOnlyTransaction(); wTx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, TOPO_IID.builder().child(Link.class, new LinkKey(LINK1_ID)).build(), linkBuilder.build()); diff --git a/pom.xml b/pom.xml index dee120bbc7..c3f6ab0a59 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/programming/impl/pom.xml b/programming/impl/pom.xml index 9e0933a1a6..4e50bd5aca 100644 --- a/programming/impl/pom.xml +++ b/programming/impl/pom.xml @@ -114,6 +114,11 @@ yang-parser-api test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/programming/pom.xml b/programming/pom.xml index 584c94adaa..116fac923c 100644 --- a/programming/pom.xml +++ b/programming/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/programming/programming-artifacts/pom.xml b/programming/programming-artifacts/pom.xml index caa49c0d47..2e457fa93c 100644 --- a/programming/programming-artifacts/pom.xml +++ b/programming/programming-artifacts/pom.xml @@ -14,7 +14,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/rsvp/pom.xml b/rsvp/pom.xml index 39fea5e370..15241c8eee 100644 --- a/rsvp/pom.xml +++ b/rsvp/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/rsvp/rsvp-artifacts/pom.xml b/rsvp/rsvp-artifacts/pom.xml index c86d8ea0cf..ad51caf622 100644 --- a/rsvp/rsvp-artifacts/pom.xml +++ b/rsvp/rsvp-artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java index 6385bdcf7b..3813997e6c 100644 --- a/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java +++ b/rsvp/spi/src/main/java/org/opendaylight/protocol/rsvp/parser/spi/subobjects/EROSubobjectListParser.java @@ -5,13 +5,11 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.protocol.rsvp.parser.spi.subobjects; import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; - import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import java.util.ArrayList; diff --git a/single-feature-parent/pom.xml b/single-feature-parent/pom.xml index 8b5250cb7d..9df226c463 100644 --- a/single-feature-parent/pom.xml +++ b/single-feature-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/testtool-parent/pom.xml b/testtool-parent/pom.xml index 8691bac641..4a6e0f091c 100644 --- a/testtool-parent/pom.xml +++ b/testtool-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.odlparent odlparent - 6.0.4 + 7.0.1 diff --git a/testtool-util/pom.xml b/testtool-util/pom.xml index ae15a533cd..dc76e7ea83 100644 --- a/testtool-util/pom.xml +++ b/testtool-util/pom.xml @@ -64,6 +64,11 @@ netty-transport test + + org.opendaylight.mdsal + mdsal-binding-test-utils + test + org.opendaylight.mdsal mdsal-binding-dom-adapter diff --git a/topology/pom.xml b/topology/pom.xml index 2b1bd8a4b4..bd08146968 100644 --- a/topology/pom.xml +++ b/topology/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/topology/topology-artifacts/pom.xml b/topology/topology-artifacts/pom.xml index 397ba0f987..b66ad20509 100644 --- a/topology/topology-artifacts/pom.xml +++ b/topology/topology-artifacts/pom.xml @@ -12,7 +12,7 @@ org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 -- 2.36.6