NetconfSessionPreferences is a record 28/103628/6
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 8 Dec 2022 02:04:08 +0000 (03:04 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 9 Dec 2022 22:18:54 +0000 (23:18 +0100)
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 <robert.varga@pantheon.tech>
netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfNodeUtils.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceSourcesResolver.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferences.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/UserPreferences.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicatorTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfSessionPreferencesTest.java

index 0e1a4de1d93c9df7b87fba2c38328b76825e3bc3..baa46a6c87bc6caccaed451e98108665309ff3ab 100644 (file)
@@ -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);
index 5ef616f790fcf8fa0d438ffe196c27f611aeec46..4f681a2653460e0229c71fb88eebe34a047db3e4 100644 (file)
@@ -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<DeviceSources> {
 
     @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<QName> requiredSources = Sets.newHashSet(remoteSessionCapabilities.getModuleBasedCaps());
-        final Set<QName> providedSources = availableSchemas.getAvailableYangSchemasQNames();
-
-        final Set<QName> 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<DeviceSources> {
         // 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<QName> 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<DeviceSources> {
             requiredSources.addAll(providedSourcesNotRequired);
         }
 
-        final SchemaSourceProvider<YangTextSchemaSource> 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
index bf7a7931b656de72ec850a601800cbd70bf73702..d942fb9c3cd9a8d210957a396beac446d918abae 100644 (file)
@@ -461,7 +461,7 @@ public class NetconfDevice implements RemoteDevice<NetconfDeviceCommunicator> {
                     .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))
index e80b7f82245f7ae3aac0a8a5f79a8e30be0ea92b..ed2a4ef132ba9a74ebd514f1265f1648b6ca83ce 100644 (file)
@@ -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<String> predicate;
-        private final int skipLength;
-
-        ParameterMatcher(final String name) {
-            predicate = input -> input.startsWith(name);
-
-            skipLength = name.length();
-        }
-
-        String from(final Iterable<String> params) {
-            final Optional<String> o = Iterables.tryFind(params, predicate);
-            if (!o.isPresent()) {
-                return null;
-            }
-
-            return o.get().substring(skipLength);
-        }
-    }
+public record NetconfSessionPreferences(
+        @NonNull ImmutableMap<String, CapabilityOrigin> nonModuleCaps,
+        @NonNull ImmutableMap<QName, CapabilityOrigin> 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<String> CONTAINS_REVISION = input -> input.contains("revision=");
 
-    private final ImmutableMap<QName, CapabilityOrigin> moduleBasedCaps;
-    private final ImmutableMap<String, CapabilityOrigin> nonModuleCaps;
-
-    private NetconfSessionPreferences(final ImmutableMap<String, CapabilityOrigin> nonModuleCaps,
-            final ImmutableMap<QName, CapabilityOrigin> moduleBasedCaps) {
-        this.nonModuleCaps = requireNonNull(nonModuleCaps);
-        this.moduleBasedCaps = requireNonNull(moduleBasedCaps);
-    }
-
-    public Set<QName> getModuleBasedCaps() {
-        return moduleBasedCaps.keySet();
-    }
-
-    public Map<QName, CapabilityOrigin> getModuleBasedCapsOrigin() {
-        return moduleBasedCaps;
-    }
-
-    public Set<String> getNonModuleCaps() {
-        return nonModuleCaps.keySet();
-    }
-
-    public Map<String, CapabilityOrigin> 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<String> predicate;
+        private final int skipLength;
+
+        ParameterMatcher(final String name) {
+            predicate = input -> input.startsWith(name);
+            skipLength = name.length();
+        }
+
+        String from(final Iterable<String> params) {
+            final var found = Iterables.tryFind(params, predicate);
+            if (!found.isPresent()) {
+                return null;
+            }
+            return found.get().substring(skipLength);
+        }
+    }
 }
index 9ac222980e0e964256a62c31d3dac8d69593cf86..b6e3e5252bf6766f19a1e632567df3e8ec4ea960 100644 (file)
@@ -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.");
         }
index 2584d8027eaa938ea5c400eabd7cb079a1b53720..eaf8ff1352a90d4358169d0c1837919530046ae2 100644 (file)
@@ -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 + "&amp;revision=" + TEST_REVISION));
-        final Map<QName, AvailableCapability.CapabilityOrigin> moduleBasedCaps = new HashMap<>();
-        moduleBasedCaps.putAll(sessionCaps.getModuleBasedCapsOrigin());
+        final Map<QName, CapabilityOrigin> 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<QName, AvailableCapability.CapabilityOrigin> moduleBasedCaps = new HashMap<>();
+        final Map<QName, CapabilityOrigin> 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);
index 25ace0e9d0806f7a14b90b1bbfd154b3feaed934..ac68f007d2dd73735cfd4f5c5f418aa98e417d7a 100644 (file)
@@ -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<String> 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> 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")
index 135edf324b6ee9424dc476050037299c8abf75d2..2697d82e11f57747983e6b13721330359e7a1376 100644 (file)
@@ -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());
     }
 }