From e23834b8571c74f1bdc482e55640b9718469ac88 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 8 Dec 2022 03:04:08 +0100 Subject: [PATCH] NetconfSessionPreferences is a record Make this class a record, as it is just a simple holder. Mutators are still confusing, we will deal with that later. JIRA: NETCONF-920 Change-Id: I72bea3729591b46167c025d62b0c6f91ef04c810 Signed-off-by: Robert Varga --- .../topology/spi/NetconfNodeUtils.java | 2 +- .../netconf/DeviceSourcesResolver.java | 30 +++----- .../sal/connect/netconf/NetconfDevice.java | 2 +- .../listener/NetconfSessionPreferences.java | 73 +++++++------------ .../netconf/listener/UserPreferences.java | 8 +- .../connect/netconf/NetconfDeviceTest.java | 20 ++--- .../NetconfDeviceCommunicatorTest.java | 29 ++++---- .../NetconfSessionPreferencesTest.java | 28 +++---- 8 files changed, 78 insertions(+), 114 deletions(-) diff --git a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java index 0e1a4de1d9..baa46a6c87 100644 --- a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java +++ b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java @@ -74,7 +74,7 @@ public final class NetconfNodeUtils { //non-module capabilities should not exist in yang module capabilities final var sessionPreferences = NetconfSessionPreferences.fromStrings(capabilities); - final var nonModulePrefs = sessionPreferences.getNonModuleCaps(); + final var nonModulePrefs = sessionPreferences.nonModuleCaps(); if (!nonModulePrefs.isEmpty()) { throw new IllegalArgumentException("List yang-module-capabilities/capability should contain only module " + "based capabilities. Non-module capabilities used: " + nonModulePrefs); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java index 5ef616f790..4f681a2653 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java @@ -10,9 +10,8 @@ package org.opendaylight.netconf.sal.connect.netconf; import static java.util.Objects.requireNonNull; import com.google.common.collect.Sets; -import java.util.Set; +import java.util.HashSet; import java.util.concurrent.Callable; -import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemas; import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemasResolver; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc; @@ -20,9 +19,6 @@ import org.opendaylight.netconf.sal.connect.netconf.schema.NetconfRemoteSchemaYa import org.opendaylight.netconf.sal.connect.netconf.schema.YangLibrarySchemaYangSourceProvider; import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.BaseSchema; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,15 +46,14 @@ final class DeviceSourcesResolver implements Callable { @Override public DeviceSources call() { - final NetconfDeviceSchemas availableSchemas = stateSchemasResolver.resolve(deviceRpc, remoteSessionCapabilities, - id, baseSchema.getEffectiveModelContext()); + final var availableSchemas = stateSchemasResolver.resolve(deviceRpc, remoteSessionCapabilities, id, + baseSchema.getEffectiveModelContext()); LOG.debug("{}: Schemas exposed by ietf-netconf-monitoring: {}", id, availableSchemas.getAvailableYangSchemasQNames()); - final Set requiredSources = Sets.newHashSet(remoteSessionCapabilities.getModuleBasedCaps()); - final Set providedSources = availableSchemas.getAvailableYangSchemasQNames(); - - final Set requiredSourcesNotProvided = Sets.difference(requiredSources, providedSources); + final var requiredSources = new HashSet<>(remoteSessionCapabilities.moduleBasedCaps().keySet()); + final var providedSources = availableSchemas.getAvailableYangSchemasQNames(); + final var requiredSourcesNotProvided = Sets.difference(requiredSources, providedSources); if (!requiredSourcesNotProvided.isEmpty()) { LOG.warn("{}: Netconf device does not provide all yang models reported in hello message capabilities," + " required but not provided: {}", id, requiredSourcesNotProvided); @@ -70,7 +65,7 @@ final class DeviceSourcesResolver implements Callable { // This clashes with the option of a user to specify supported yang models manually in configuration // for netconf-connector and as a result one is not able to fully override yang models of a device. // It is only possible to add additional models. - final Set providedSourcesNotRequired = Sets.difference(providedSources, requiredSources); + final var providedSourcesNotRequired = Sets.difference(providedSources, requiredSources); if (!providedSourcesNotRequired.isEmpty()) { LOG.warn("{}: Netconf device provides additional yang models not reported in " + "hello message capabilities: {}", id, providedSourcesNotRequired); @@ -79,14 +74,9 @@ final class DeviceSourcesResolver implements Callable { requiredSources.addAll(providedSourcesNotRequired); } - final SchemaSourceProvider sourceProvider; - if (availableSchemas instanceof LibraryModulesSchemas) { - sourceProvider = new YangLibrarySchemaYangSourceProvider(id, - ((LibraryModulesSchemas) availableSchemas).getAvailableModels()); - } else { - sourceProvider = new NetconfRemoteSchemaYangSourceProvider(id, deviceRpc); - } - + final var sourceProvider = availableSchemas instanceof LibraryModulesSchemas libraryModule + ? new YangLibrarySchemaYangSourceProvider(id, libraryModule.getAvailableModels()) + : new NetconfRemoteSchemaYangSourceProvider(id, deviceRpc); return new DeviceSources(requiredSources, providedSources, sourceProvider); } } \ No newline at end of file diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index bf7a7931b6..d942fb9c3c 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -461,7 +461,7 @@ public class NetconfDevice implements RemoteDevice { .build()) .collect(Collectors.toList())); - nonModuleBasedCapabilities.addAll(remoteSessionCapabilities.getNonModuleCaps().stream() + nonModuleBasedCapabilities.addAll(remoteSessionCapabilities.nonModuleCaps().keySet().stream() .map(capability -> new AvailableCapabilityBuilder() .setCapability(capability) .setCapabilityOrigin(remoteSessionCapabilities.capabilityOrigin(capability)) diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java index e80b7f8224..ed2a4ef132 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java @@ -10,7 +10,6 @@ package org.opendaylight.netconf.sal.connect.netconf.listener; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; -import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Splitter; import com.google.common.base.Strings; @@ -20,7 +19,7 @@ import com.google.common.collect.Maps; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.netconf.client.NetconfClientSession; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; @@ -31,27 +30,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; // FIXME: propagate to API with immutable semantics -public final class NetconfSessionPreferences { - - private static final class ParameterMatcher { - private final Predicate predicate; - private final int skipLength; - - ParameterMatcher(final String name) { - predicate = input -> input.startsWith(name); - - skipLength = name.length(); - } - - String from(final Iterable params) { - final Optional o = Iterables.tryFind(params, predicate); - if (!o.isPresent()) { - return null; - } - - return o.get().substring(skipLength); - } - } +public record NetconfSessionPreferences( + @NonNull ImmutableMap nonModuleCaps, + @NonNull ImmutableMap moduleBasedCaps) { private static final Logger LOG = LoggerFactory.getLogger(NetconfSessionPreferences.class); private static final ParameterMatcher MODULE_PARAM = new ParameterMatcher("module="); @@ -60,29 +41,9 @@ public final class NetconfSessionPreferences { private static final Splitter AMP_SPLITTER = Splitter.on('&'); private static final Predicate CONTAINS_REVISION = input -> input.contains("revision="); - private final ImmutableMap moduleBasedCaps; - private final ImmutableMap nonModuleCaps; - - private NetconfSessionPreferences(final ImmutableMap nonModuleCaps, - final ImmutableMap moduleBasedCaps) { - this.nonModuleCaps = requireNonNull(nonModuleCaps); - this.moduleBasedCaps = requireNonNull(moduleBasedCaps); - } - - public Set getModuleBasedCaps() { - return moduleBasedCaps.keySet(); - } - - public Map getModuleBasedCapsOrigin() { - return moduleBasedCaps; - } - - public Set getNonModuleCaps() { - return nonModuleCaps.keySet(); - } - - public Map getNonModuleBasedCapsOrigin() { - return nonModuleCaps; + public NetconfSessionPreferences { + requireNonNull(nonModuleCaps); + requireNonNull(moduleBasedCaps); } public @Nullable CapabilityOrigin capabilityOrigin(final QName capability) { @@ -95,7 +56,7 @@ public final class NetconfSessionPreferences { // allows partial matches - assuming parameters are in the same order public boolean containsPartialNonModuleCapability(final String capability) { - for (final String nonModuleCap : getNonModuleCaps()) { + for (var nonModuleCap : nonModuleCaps.keySet()) { if (nonModuleCap.startsWith(capability)) { LOG.trace("capability {} partially matches {}", capability, nonModuleCaps); return true; @@ -276,4 +237,22 @@ public final class NetconfSessionPreferences { moduleBasedCaps.put(qualifiedName, capabilityOrigin); nonModuleCaps.remove(capability); } + + private static final class ParameterMatcher { + private final Predicate predicate; + private final int skipLength; + + ParameterMatcher(final String name) { + predicate = input -> input.startsWith(name); + skipLength = name.length(); + } + + String from(final Iterable params) { + final var found = Iterables.tryFind(params, predicate); + if (!found.isPresent()) { + return null; + } + return found.get().substring(skipLength); + } + } } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/UserPreferences.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/UserPreferences.java index 9ac222980e..b6e3e5252b 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/UserPreferences.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/UserPreferences.java @@ -19,15 +19,13 @@ public class UserPreferences { private final boolean overrideNonModuleCapabilities; public UserPreferences(final @NonNull NetconfSessionPreferences sessionPreferences, - boolean overrideModuleCapabilities, boolean overrideNonModuleCapabilities) { + final boolean overrideModuleCapabilities, final boolean overrideNonModuleCapabilities) { - if (overrideModuleCapabilities && (sessionPreferences.getModuleBasedCaps() == null - || sessionPreferences.getModuleBasedCaps().isEmpty())) { + if (overrideModuleCapabilities && sessionPreferences.moduleBasedCaps().isEmpty()) { throw new IllegalStateException( "Override module based capabilities flag set true but module based capabilities list is empty."); } - if (overrideNonModuleCapabilities && (sessionPreferences.getNonModuleCaps() == null - || sessionPreferences.getNonModuleCaps().isEmpty())) { + if (overrideNonModuleCapabilities && sessionPreferences.nonModuleCaps().isEmpty()) { throw new IllegalStateException( "Override non-module based capabilities set true but non-module based capabilities list is empty."); } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java index 2584d8027e..eaf8ff1352 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java @@ -24,7 +24,7 @@ import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -63,6 +63,7 @@ import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability.CapabilityOrigin; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -172,9 +173,8 @@ public class NetconfDeviceTest extends AbstractTestModelTest { final SchemaRepository schemaRepository = getSchemaRepository(); // Make fallback attempt to fail due to empty resolved sources - final SchemaResolutionException schemaResolutionException - = new SchemaResolutionException("fail first", - Collections.emptyList(), HashMultimap.create()); + final SchemaResolutionException schemaResolutionException = new SchemaResolutionException("fail first", + List.of(), ImmutableMultimap.of()); doReturn(Futures.immediateFailedFuture(schemaResolutionException)) .when(schemaFactory).createEffectiveModelContext(anyCollection()); @@ -392,10 +392,10 @@ public class NetconfDeviceTest extends AbstractTestModelTest { final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION)); - final Map moduleBasedCaps = new HashMap<>(); - moduleBasedCaps.putAll(sessionCaps.getModuleBasedCapsOrigin()); + final Map moduleBasedCaps = new HashMap<>(); + moduleBasedCaps.putAll(sessionCaps.moduleBasedCaps()); moduleBasedCaps - .put(QName.create("(test:qname:side:loading)test"), AvailableCapability.CapabilityOrigin.UserDefined); + .put(QName.create("(test:qname:side:loading)test"), CapabilityOrigin.UserDefined); netconfSpy.onRemoteSessionUp(sessionCaps.replaceModuleCaps(moduleBasedCaps), listener); @@ -503,13 +503,13 @@ public class NetconfDeviceTest extends AbstractTestModelTest { final NetconfSessionPreferences sessionCaps = getSessionCaps(false, Collections.emptyList()); - final Map moduleBasedCaps = new HashMap<>(); + final Map moduleBasedCaps = new HashMap<>(); moduleBasedCaps.put(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714 .$YangModuleInfoImpl.getInstance().getName(), - AvailableCapability.CapabilityOrigin.DeviceAdvertised); + CapabilityOrigin.DeviceAdvertised); moduleBasedCaps.put(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715 .$YangModuleInfoImpl.getInstance().getName(), - AvailableCapability.CapabilityOrigin.DeviceAdvertised); + CapabilityOrigin.DeviceAdvertised); netconfSpy.onRemoteSessionUp(sessionCaps.replaceModuleCaps(moduleBasedCaps), listener); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicatorTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicatorTest.java index 25ace0e9d0..ac68f007d2 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicatorTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicatorTest.java @@ -26,7 +26,6 @@ import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARA import com.google.common.base.CharMatcher; import com.google.common.base.Strings; -import com.google.common.collect.Sets; import com.google.common.util.concurrent.ListenableFuture; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; @@ -39,8 +38,8 @@ import io.netty.util.concurrent.GlobalEventExecutor; import java.io.ByteArrayInputStream; import java.net.InetSocketAddress; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; +import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -131,15 +130,14 @@ public class NetconfDeviceCommunicatorTest { @Test public void testOnSessionUp() { - String testCapability = "urn:opendaylight:params:xml:ns:test?module=test-module&revision=2014-06-02"; - Collection serverCapabilities = - Sets.newHashSet(NetconfMessageTransformUtil.NETCONF_ROLLBACK_ON_ERROR_URI.toString(), - NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString(), - testCapability); + final var testCapability = "urn:opendaylight:params:xml:ns:test?module=test-module&revision=2014-06-02"; + final var serverCapabilities = Set.of( + NetconfMessageTransformUtil.NETCONF_ROLLBACK_ON_ERROR_URI.toString(), + NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString(), + testCapability); doReturn(serverCapabilities).when(mockSession).getServerCapabilities(); - ArgumentCaptor netconfSessionPreferences = - ArgumentCaptor.forClass(NetconfSessionPreferences.class); + final var netconfSessionPreferences = ArgumentCaptor.forClass(NetconfSessionPreferences.class); doNothing().when(mockDevice).onRemoteSessionUp(netconfSessionPreferences.capture(), eq(communicator)); communicator.onSessionUp(mockSession); @@ -148,14 +146,13 @@ public class NetconfDeviceCommunicatorTest { verify(mockDevice).onRemoteSessionUp(netconfSessionPreferences.capture(), eq(communicator)); NetconfSessionPreferences actualCapabilites = netconfSessionPreferences.getValue(); - assertEquals("containsModuleCapability", true, actualCapabilites.containsNonModuleCapability( + assertTrue(actualCapabilites.containsNonModuleCapability( NetconfMessageTransformUtil.NETCONF_ROLLBACK_ON_ERROR_URI.toString())); - assertEquals("containsModuleCapability", false, actualCapabilites.containsNonModuleCapability(testCapability)); - assertEquals("getModuleBasedCaps", Sets.newHashSet( - QName.create("urn:opendaylight:params:xml:ns:test", "2014-06-02", "test-module")), - actualCapabilites.getModuleBasedCaps()); - assertEquals("isRollbackSupported", true, actualCapabilites.isRollbackSupported()); - assertEquals("isMonitoringSupported", true, actualCapabilites.isMonitoringSupported()); + assertFalse(actualCapabilites.containsNonModuleCapability(testCapability)); + assertEquals(Set.of(QName.create("urn:opendaylight:params:xml:ns:test", "2014-06-02", "test-module")), + actualCapabilites.moduleBasedCaps().keySet()); + assertTrue(actualCapabilites.isRollbackSupported()); + assertTrue(actualCapabilites.isMonitoringSupported()); } @SuppressWarnings("unchecked") diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferencesTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferencesTest.java index 135edf324b..2697d82e11 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferencesTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferencesTest.java @@ -7,8 +7,8 @@ */ package org.opendaylight.netconf.sal.connect.netconf.listener; -import static org.hamcrest.CoreMatchers.hasItem; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsMapContaining.hasKey; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -37,13 +37,13 @@ public class NetconfSessionPreferencesTest { final var merged = sessionCaps1.addModuleCaps(sessionCaps2); assertCaps(merged, 2, 2 + 1 /*Preserved monitoring*/ + 2 /*already present*/); - for (var qname : sessionCaps2.getModuleBasedCaps()) { - assertThat(merged.getModuleBasedCaps(), hasItem(qname)); + for (var qname : sessionCaps2.moduleBasedCaps().keySet()) { + assertThat(merged.moduleBasedCaps(), hasKey(qname)); } - assertThat(merged.getModuleBasedCaps(), hasItem(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING)); + assertThat(merged.moduleBasedCaps(), hasKey(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING)); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0")); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:base:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:capability:rollback-on-error:1.0")); } @Test @@ -89,13 +89,13 @@ public class NetconfSessionPreferencesTest { final var merged = sessionCaps1.addNonModuleCaps(sessionCaps2); assertCaps(merged, 3 + 2, 3); - sessionCaps2.getNonModuleCaps().forEach( - capability -> assertThat(merged.getNonModuleCaps(), hasItem(capability))); + sessionCaps2.nonModuleCaps().forEach( + (capability, origin) -> assertThat(merged.nonModuleCaps(), hasKey(capability))); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0")); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0")); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:writable-running:1.0")); - assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:notification:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:base:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:capability:rollback-on-error:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:capability:writable-running:1.0")); + assertThat(merged.nonModuleCaps(), hasKey("urn:ietf:params:netconf:capability:notification:1.0")); assertTrue(merged.isCandidateSupported()); assertTrue(merged.isRunningWritable()); @@ -143,7 +143,7 @@ public class NetconfSessionPreferencesTest { private static void assertCaps(final NetconfSessionPreferences sessionCaps1, final int nonModuleCaps, final int moduleCaps) { - assertEquals(nonModuleCaps, sessionCaps1.getNonModuleCaps().size()); - assertEquals(moduleCaps, sessionCaps1.getModuleBasedCaps().size()); + assertEquals(nonModuleCaps, sessionCaps1.nonModuleCaps().size()); + assertEquals(moduleCaps, sessionCaps1.moduleBasedCaps().size()); } } -- 2.36.6