import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
import org.opendaylight.mdsal.singleton.dom.impl.DOMClusterSingletonServiceProviderImpl;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.client.NetconfClientDispatcher;
import org.opendaylight.netconf.client.mdsal.NetconfDeviceCapabilities;
import org.opendaylight.netconf.client.mdsal.NetconfDeviceSchema;
final var masterSalFacade = masterSalFacadeFuture.get(5, TimeUnit.SECONDS);
masterSalFacade.onDeviceConnected(new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(),
new EmptyMountPointContext(deviceSchemaContext)),
- NetconfSessionPreferences.fromStrings(
- List.of(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0)),
+ NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)),
new RemoteDeviceServices(deviceRpcService, null));
final var masterMountPoint = awaitMountPoint(masterMountPointService);
final var masterSalFacade = masterSalFacadeFuture.get(5, TimeUnit.SECONDS);
masterSalFacade.onDeviceConnected(
new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), new EmptyMountPointContext(deviceSchemaContext)),
- NetconfSessionPreferences.fromStrings(List.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0)),
+ NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE)),
new RemoteDeviceServices(deviceRpcService, null));
verify(masterMountPointListener, timeout(5000)).onMountPointCreated(yangNodeInstanceId);
import org.checkerframework.checker.lock.qual.Holding;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfDocumentedException;
import org.opendaylight.netconf.api.NetconfMessage;
import org.opendaylight.netconf.api.NetconfSessionListener;
XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
XmlNetconfConstants.CAPABILITY);
for (int i = 0; i < nList.getLength(); i++) {
- if (nList.item(i).getTextContent().contains(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1)) {
+ if (nList.item(i).getTextContent().contains(CapabilityURN.BASE_1_1)) {
return true;
}
}
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfSessionListener;
import org.opendaylight.netconf.api.messages.FramingMechanism;
import org.opendaylight.netconf.api.messages.HelloMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.netconf.nettyutil.handler.ChunkedFramingMechanismEncoder;
import org.opendaylight.netconf.nettyutil.handler.EOMFramingMechanismEncoder;
FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
channel.pipeline().addLast(NETCONF_MESSAGE_AGGREGATOR, new NetconfEOMAggregator());
hello = HelloMessage.createClientHello(Set.of(), Optional.empty());
- helloBase11 = HelloMessage.createClientHello(Set.of(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1),
- Optional.empty());
+ helloBase11 = HelloMessage.createClientHello(Set.of(CapabilityURN.BASE_1_1), Optional.empty());
doReturn(promise).when(promise).setFailure(any());
negotiator = new TestSessionNegotiator(helloBase11, promise, channel, timer, listener, 100L);
}
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfSessionListener;
import org.opendaylight.netconf.api.messages.FramingMechanism;
import org.opendaylight.netconf.api.messages.HelloMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.nettyutil.handler.ChunkedFramingMechanismEncoder;
import org.opendaylight.netconf.nettyutil.handler.FramingMechanismHandlerFactory;
import org.opendaylight.netconf.nettyutil.handler.NetconfChunkAggregator;
channel.pipeline().addLast(NETCONF_MESSAGE_FRAME_ENCODER,
FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM));
channel.pipeline().addLast(NETCONF_MESSAGE_AGGREGATOR, new NetconfEOMAggregator());
- final HelloMessage serverHello = HelloMessage.createClientHello(
- Set.of(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1), Optional.empty());
+ final HelloMessage serverHello = HelloMessage.createClientHello(Set.of(CapabilityURN.BASE_1_1),
+ Optional.empty());
negotiator = new TestSessionNegotiator(serverHello, promise, channel, new HashedWheelTimer(), listener, 100L);
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.northbound.ssh.SshProxyServer;
import org.opendaylight.netconf.northbound.ssh.SshProxyServerConfiguration;
import org.opendaylight.netconf.northbound.ssh.SshProxyServerConfigurationBuilder;
return input;
}
}));
- transformedCapabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0"));
+ transformedCapabilities.add(new BasicCapability(CapabilityURN.CANDIDATE));
final NetconfMonitoringService monitoringService1 = new DummyMonitoringService(transformedCapabilities);
final SessionIdProvider idProvider = new DefaultSessionIdProvider();
import java.io.File;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.auth.AuthProvider;
import org.opendaylight.netconf.shaded.sshd.server.auth.pubkey.PublickeyAuthenticator;
import org.opendaylight.netconf.test.tool.operations.OperationsCreator;
import org.slf4j.LoggerFactory;
public class Configuration {
-
private static final Logger LOG = LoggerFactory.getLogger(Configuration.class);
public static final Set<String> DEFAULT_BASE_CAPABILITIES_EXI = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0
- );
+ CapabilityURN.BASE,
+ CapabilityURN.BASE_1_1,
+ CapabilityURN.EXI,
+ CapabilityURN.NOTIFICATION);
public static final Set<String> DEFAULT_BASE_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1
- );
+ CapabilityURN.BASE,
+ CapabilityURN.BASE_1_1);
public static final Set<YangResource> DEFAULT_YANG_RESOURCES = ImmutableSet.of(
new YangResource("ietf-netconf-monitoring", "2010-10-04",
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.SettableFuture;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import org.checkerframework.checker.lock.qual.GuardedBy;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemas;
import org.opendaylight.netconf.client.mdsal.api.DeviceActionFactory;
import org.opendaylight.netconf.client.mdsal.api.NetconfDeviceSchemasResolver;
this.remoteSessionCapabilities = remoteSessionCapabilities;
// If device supports notifications and does not contain necessary modules, add them automatically
- if (remoteSessionCapabilities.containsNonModuleCapability(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0)) {
- deviceSources.getRequiredSourcesQName().addAll(
- Arrays.asList(
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714
- .$YangModuleInfoImpl.getInstance().getName(),
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
- .$YangModuleInfoImpl.getInstance().getName()
- )
+ if (remoteSessionCapabilities.containsNonModuleCapability(CapabilityURN.NOTIFICATION)) {
+ // FIXME: mutable collection modification!
+ deviceSources.getRequiredSourcesQName().addAll(List.of(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714
+ .$YangModuleInfoImpl.getInstance().getName(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
+ .$YangModuleInfoImpl.getInstance().getName())
);
}
@Override
public Set<QName> getAvailableYangSchemasQNames() {
- return getAvailableYangSchemas().stream().map(RemoteYangSchema::getQName)
- .collect(ImmutableSet.toImmutableSet());
+ return availableYangSchemas.stream()
+ .map(RemoteYangSchema::getQName)
+ .collect(ImmutableSet.toImmutableSet());
}
/**
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.client.NetconfClientSession;
import org.opendaylight.netconf.client.mdsal.impl.NetconfMessageTransformUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
}
public boolean isRollbackSupported() {
- return containsNonModuleCapability(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_ROLLBACK_ON_ERROR_1_0);
+ return containsNonModuleCapability(CapabilityURN.ROLLBACK_ON_ERROR);
}
public boolean isCandidateSupported() {
- return containsNonModuleCapability(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0);
+ return containsNonModuleCapability(CapabilityURN.CANDIDATE);
}
public boolean isRunningWritable() {
- return containsNonModuleCapability(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_WRITABLE_RUNNING_1_0);
+ return containsNonModuleCapability(CapabilityURN.WRITABLE_RUNNING);
}
public boolean isNotificationsSupported() {
- return containsPartialNonModuleCapability(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0)
+ return containsPartialNonModuleCapability(CapabilityURN.NOTIFICATION)
|| containsModuleCapability(NetconfMessageTransformUtil.IETF_NETCONF_NOTIFICATIONS);
}
import org.mockito.Mock;
import org.mockito.MockMakers;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfMessage;
import org.opendaylight.netconf.api.NetconfTerminationReason;
import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
public void testOnSessionUp() {
final var testCapability = "urn:opendaylight:params:xml:ns:test?module=test-module&revision=2014-06-02";
final var serverCapabilities = Set.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_ROLLBACK_ON_ERROR_1_0,
+ CapabilityURN.ROLLBACK_ON_ERROR,
NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString(),
testCapability);
doReturn(serverCapabilities).when(spySession).getServerCapabilities();
import static org.mockito.Mockito.verify;
import com.google.common.collect.ImmutableMultimap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListeningExecutorService;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.opendaylight.mdsal.dom.api.DOMNotification;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.netconf.client.mdsal.api.NetconfDeviceSchemasResolver;
import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
schemaContext) -> {
- final Module first = Iterables.getFirst(SCHEMA_CONTEXT.getModules(), null);
+ final Module first = SCHEMA_CONTEXT.getModules().iterator().next();
final QName qName = QName.create(first.getQNameModule(), first.getName());
final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName);
final NetconfStateSchemas.RemoteYangSchema source2 =
.setBaseSchemas(BASE_SCHEMAS)
.build();
// Monitoring supported
- final NetconfSessionPreferences sessionCaps =
- getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2));
+ final NetconfSessionPreferences sessionCaps = getSessionCaps(true, List.of(TEST_CAPABILITY, TEST_CAPABILITY2));
device.onRemoteSessionUp(sessionCaps, listener);
verify(facade, timeout(5000)).onDeviceConnected(any(NetconfDeviceSchema.class),
@Test
public void testNetconfDeviceFailFirstSchemaFailSecondEmpty() throws Exception {
- final ArrayList<String> capList = Lists.newArrayList(TEST_CAPABILITY);
-
final RemoteDeviceHandler facade = getFacade();
final NetconfDeviceCommunicator listener = getListener();
.build();
// Monitoring not supported
- final NetconfSessionPreferences sessionCaps = getSessionCaps(false, capList);
+ final NetconfSessionPreferences sessionCaps = getSessionCaps(false, List.of(TEST_CAPABILITY));
device.onRemoteSessionUp(sessionCaps, listener);
verify(facade, timeout(5000)).onDeviceDisconnected();
final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
schemaContext) -> {
- final Module first = Iterables.getFirst(SCHEMA_CONTEXT.getModules(), null);
+ final Module first = SCHEMA_CONTEXT.getModules().iterator().next();
final QName qName = QName.create(first.getQNameModule(), first.getName());
final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName);
final NetconfStateSchemas.RemoteYangSchema source2 =
.setBaseSchemas(BASE_SCHEMAS)
.build();
- final NetconfSessionPreferences sessionCaps = getSessionCaps(true,
- Lists.newArrayList(TEST_CAPABILITY));
+ final NetconfSessionPreferences sessionCaps = getSessionCaps(true, List.of(TEST_CAPABILITY));
device.onRemoteSessionUp(sessionCaps, listener);
device.onNotification(NOTIFICATION);
.setBaseSchemas(BASE_SCHEMAS)
.build();
final NetconfSessionPreferences sessionCaps = getSessionCaps(true,
- Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
+ List.of(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
device.onRemoteSessionUp(sessionCaps, listener);
verify(schemaContextProviderFactory, timeout(5000)).createEffectiveModelContext(anyCollection());
.setBaseSchemas(BASE_SCHEMAS)
.build();
final NetconfSessionPreferences sessionCaps = getSessionCaps(true,
- Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
+ List.of(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
//session up, start schema resolution
device.onRemoteSessionUp(sessionCaps, listener);
//session closed
final NetconfDevice netconfSpy = spy(device);
final NetconfSessionPreferences sessionCaps = getSessionCaps(true,
- Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
+ List.of(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
final Map<QName, CapabilityOrigin> moduleBasedCaps = new HashMap<>();
moduleBasedCaps.putAll(sessionCaps.moduleBasedCaps());
moduleBasedCaps
.build();
final NetconfDevice netconfSpy = spy(device);
- final NetconfSessionPreferences sessionCaps = getSessionCaps(false,
- Lists.newArrayList(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0));
+ final NetconfSessionPreferences sessionCaps = getSessionCaps(false, List.of(CapabilityURN.NOTIFICATION));
netconfSpy.onRemoteSessionUp(sessionCaps, listener);
final NetconfDevice netconfSpy = spy(device);
final NetconfSessionPreferences sessionCaps = getSessionCaps(false,
- Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
+ List.of(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
netconfSpy.onRemoteSessionUp(sessionCaps, listener);
public NetconfSessionPreferences getSessionCaps(final boolean addMonitor,
final Collection<String> additionalCapabilities) {
- final ArrayList<String> capabilities = Lists.newArrayList(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1);
-
+ final var capabilities = new ArrayList<String>();
+ capabilities.add(CapabilityURN.BASE);
+ capabilities.add(CapabilityURN.BASE_1_1);
if (addMonitor) {
capabilities.add(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString());
}
-
capabilities.addAll(additionalCapabilities);
-
- return NetconfSessionPreferences.fromStrings(
- capabilities);
+ return NetconfSessionPreferences.fromStrings(capabilities);
}
public NetconfDeviceCommunicator getListener() throws Exception {
import com.google.common.collect.Lists;
import java.net.InetSocketAddress;
-import java.util.ArrayList;
import java.util.Collection;
import org.junit.Test;
import org.mockito.Mockito;
import org.opendaylight.mdsal.dom.api.DOMNotification;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceHandler;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
private static NetconfSessionPreferences getSessionCaps(final boolean addMonitor,
final Collection<String> additionalCapabilities) {
- final ArrayList<String> capabilities = Lists.newArrayList(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1);
-
+ final var capabilities = Lists.newArrayList(CapabilityURN.BASE, CapabilityURN.BASE_1_1);
if (addMonitor) {
capabilities.add(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString());
}
-
capabilities.addAll(additionalCapabilities);
-
return NetconfSessionPreferences.fromStrings(capabilities);
}
}
import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.client.mdsal.AbstractTestModelTest;
import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
}
private AbstractNetconfDataTreeService getNetconService() {
- NetconfSessionPreferences prefs = NetconfSessionPreferences.fromStrings(
- List.of(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0));
+ NetconfSessionPreferences prefs = NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE));
final RemoteDeviceId id =
new RemoteDeviceId("device-1", InetSocketAddress.createUnresolved("localhost", 17830));
return AbstractNetconfDataTreeService.of(id, new EmptyMountPointContext(SCHEMA_CONTEXT), rpcService, prefs,
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs;
@Before
public void setUp() throws Exception {
doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(rpcService).invokeNetconf(any(), any());
- dataBroker = getDataBroker(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0);
+ dataBroker = getDataBroker(CapabilityURN.CANDIDATE);
}
@Test
@Test
public void testWritableRunningCandidateWriteTransaction() {
- testWriteTransaction(WriteCandidateRunningTx.class,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_WRITABLE_RUNNING_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0);
+ testWriteTransaction(WriteCandidateRunningTx.class, CapabilityURN.WRITABLE_RUNNING, CapabilityURN.CANDIDATE);
}
@Test
public void testCandidateWriteTransaction() {
- testWriteTransaction(WriteCandidateTx.class,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0);
+ testWriteTransaction(WriteCandidateTx.class, CapabilityURN.CANDIDATE);
}
@Test
public void testRunningWriteTransaction() {
- testWriteTransaction(WriteRunningTx.class,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_WRITABLE_RUNNING_1_0);
+ testWriteTransaction(WriteRunningTx.class, CapabilityURN.WRITABLE_RUNNING);
}
@Test
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMNotification;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.client.mdsal.NetconfDeviceCapabilities;
import org.opendaylight.netconf.client.mdsal.NetconfDeviceSchema;
import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
public void testOnDeviceConnected() {
final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class);
- final var netconfSessionPreferences = NetconfSessionPreferences.fromStrings(
- List.of(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0));
-
+ final var netconfSessionPreferences = NetconfSessionPreferences.fromStrings(List.of(CapabilityURN.CANDIDATE));
final var deviceServices = new RemoteDeviceServices(mock(Rpcs.Normalized.class), null);
deviceFacade.onDeviceConnected(
new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), new EmptyMountPointContext(schemaContext)),
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.server.api.monitoring.BasicCapability;
import org.opendaylight.netconf.server.api.monitoring.Capability;
import org.opendaylight.netconf.server.api.monitoring.CapabilityListener;
@Component(service = NetconfOperationServiceFactory.class, immediate = true, property = "type=mdsal-netconf-connector")
public final class MdsalNetconfOperationServiceFactory implements NetconfOperationServiceFactory, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(MdsalNetconfOperationServiceFactory.class);
- private static final BasicCapability VALIDATE_CAPABILITY =
- new BasicCapability("urn:ietf:params:netconf:capability:validate:1.0");
+ private static final BasicCapability VALIDATE_CAPABILITY = new BasicCapability(CapabilityURN.VALIDATE);
private final DOMDataBroker dataBroker;
private final DOMRpcService rpcService;
final var capabilities = new HashSet<Capability>();
// Added by netconf-impl by default
- // capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0"));
+ // capabilities.add(new BasicCapability(CapabilityURN.CANDIDATE));
// FIXME: rework in terms of ModuleEffectiveStatement
for (var module : currentContext.getModules()) {
public Registration registerCapabilityListener(final CapabilityListener listener) {
// Advertise validate capability only if DOMDataBroker provides DOMDataTransactionValidator
if (dataBroker.getExtensions().get(DOMDataTransactionValidator.class) != null) {
+ // FIXME: support VALIDATE_1_1 as well!
listener.onCapabilitiesChanged(Set.of(VALIDATE_CAPABILITY), Set.of());
}
// Advertise namespaces of supported YANG models as NETCONF capabilities
public final class GetSchema extends AbstractSingletonNetconfOperation {
private static final Logger LOG = LoggerFactory.getLogger(GetSchema.class);
+ public static final String URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING =
+ "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+
private static final String GET_SCHEMA = "get-schema";
private static final String IDENTIFIER = "identifier";
private static final String VERSION = "version";
@Override
protected String getOperationNamespace() {
- return XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING;
+ return URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING;
}
@Override
}
final var getSchemaResult = XmlUtil.createTextElement(document, XmlNetconfConstants.DATA_KEY, schema,
- Optional.of(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING));
+ Optional.of(URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING));
LOG.trace("{} operation successful", GET_SCHEMA);
return getSchemaResult;
}
GetSchemaEntry(final XmlElement getSchemaElement) throws DocumentedException {
getSchemaElement.checkName(GET_SCHEMA);
- getSchemaElement.checkNamespace(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING);
+ getSchemaElement.checkNamespace(URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING);
final XmlElement identifierElement;
try {
--- /dev/null
+/*
+ * Copyright (c) 2023 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.netconf.api;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+
+/**
+ * The contents of
+ * <a href="https://www.iana.org/assignments/netconf-capability-urns/netconf-capability-urns.xhtml">
+ * Network Configuration Protocol (NETCONF) Capability URNs</a> IANA registry as well as any other capabilities we
+ * explicitly recognize.
+ *
+ * <p>
+ * The basic concept of Capabilities is defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241#section-8">RFC6241 section 8</a>. While that section mentions
+ * capabilities are identified by URIs in general, the "identification" part is done through URNs, which are extended
+ * to URIs during negotiation by adding a query part where applicable.
+ */
+@NonNullByDefault
+public final class CapabilityURN {
+ /**
+ * The base NETCONF capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc4741.html#section-8.1">RFC4741, section 8.1</a>.
+ * @deprecated This capability identifies legacy NETCONF devices and has been superseded by {@link #BASE_1_1}, just
+ * as RFC6241 obsoletes RFC4741.
+ */
+ @Deprecated
+ public static final String BASE = "urn:ietf:params:netconf:base:1.0";
+ /**
+ * The base NETCONF capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.1">RFC6241, section 8.1</a>.
+ */
+ public static final String BASE_1_1 = "urn:ietf:params:netconf:base:1.1";
+ /**
+ * The Candidate Configuration Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.3">RFC6241, section 8.3</a>.
+ */
+ public static final String CANDIDATE = "urn:ietf:params:netconf:capability:candidate:1.0";
+ /**
+ * The Candidate Configuration Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc4741.html#section-8.3">RFC4741, section 8.3</a>.
+ * @deprecated This capability is superseded by {@link #CONFIRMED_COMMIT_1_1}.
+ */
+ @Deprecated
+ public static final String CONFIRMED_COMMIT = "urn:ietf:params:netconf:capability:confirmed-commit:1.0";
+ /**
+ * The Rollback-on-Error Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.4">RFC6241, section 8.4</a>.
+ */
+ public static final String CONFIRMED_COMMIT_1_1 = "urn:ietf:params:netconf:capability:confirmed-commit:1.1";
+ /**
+ * The EXI Capability, as defined in
+ * <a href="https://datatracker.ietf.org/doc/html/draft-varga-netconf-exi-capability-01#section-3">
+ * draft-varga-netconf-exi-capability-01, section 3</a>. Note this is an expired IETF draft capability and subject
+ * to change.
+ */
+ @Beta
+ public static final String EXI = "urn:ietf:params:netconf:capability:exi:1.0";
+ /**
+ * The Interleave Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc5277.html#section-6">RFC5277, section 6</a>.
+ */
+ public static final String INTERLEAVE = "urn:ietf:params:netconf:capability:interleave:1.0";
+ /**
+ * The Validate Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc5277.html#section-3.1">RFC5277, section 3.1</a>.
+ */
+ public static final String NOTIFICATION = "urn:ietf:params:netconf:capability:notification:1.0";
+ /**
+ * The Partial Locking Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc5717.html#section-2">RFC5715, section 2</a>.
+ */
+ public static final String PARTIAL_LOCK = "urn:ietf:params:netconf:capability:partial-lock:1.0";
+ /**
+ * The Rollback-on-Error Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.5">RFC6241, section 8.5</a>.
+ */
+ public static final String ROLLBACK_ON_ERROR = "urn:ietf:params:netconf:capability:rollback-on-error:1.0";
+ /**
+ * The Distinct Startup Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.7">RFC6241, section 8.7</a>.
+ */
+ public static final String STARTUP = "urn:ietf:params:netconf:capability:startup:1.0";
+ /**
+ * The Time Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc7758.html#section-4">RFC7758, section 4</a>.
+ */
+ public static final String TIME = "urn:ietf:params:netconf:capability:time:1.0";
+ /**
+ * The URL Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.8">RFC6241, section 8.8</a>.
+ */
+ public static final String URL = "urn:ietf:params:netconf:capability:url:1.0";
+ /**
+ * The Validate Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc4741.html#section-8.6">RFC4741, section 8.6</a>.
+ * @deprecated This capability is superseded by {@link #VALIDATE_1_1}.
+ */
+ @Deprecated
+ public static final String VALIDATE = "urn:ietf:params:netconf:capability:validate:1.0";
+ /**
+ * The Validate Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.6">RFC6241, section 8.6</a>.
+ */
+ public static final String VALIDATE_1_1 = "urn:ietf:params:netconf:capability:validate:1.1";
+ /**
+ * The With-defaults Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6243.html#section-4">RFC6243, section 4</a>.
+ */
+ public static final String WITH_DEFAULTS = "urn:ietf:params:netconf:capability:with-defaults:1.0";
+ /**
+ * The With-defaults Capability, as augmented by
+ * <a href="https://www.rfc-editor.org/rfc/rfc8526#section-3.1.1.2">RFC8526, section 3.1.1.2</a>.
+ */
+ public static final String WITH_OPERATIONAL_DEFAULTS =
+ "urn:ietf:params:netconf:capability:with-operational-defaults:1.0";
+ /**
+ * The Writable-Running Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.2">RFC6241, section 8.2</a>.
+ */
+ public static final String WRITABLE_RUNNING = "urn:ietf:params:netconf:capability:writable-running:1.0";
+ /**
+ * The XPath Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc6241.html#section-8.9">RFC6241, section 8.9</a>.
+ */
+ public static final String XPATH = "urn:ietf:params:netconf:capability:xpath:1.0";
+ /**
+ * The YANG Module Library Capability, as defined in
+ * <a href="hhttps://www.rfc-editor.org/rfc/rfc7950.html#section-5.6.4">RFC7950, section 5.6.4</a> and further
+ * specified by <a href="https://www.rfc-editor.org/rfc/rfc7895">RFC7895</a>. Note this applies to NETCONF endpoints
+ * which DO NOT support Network Management Datastore Architecture as specified by
+ * <a href="https://www.rfc-editor.org/rfc/rfc8342">RFC8342</a>.
+ */
+ public static final String YANG_LIBRARY = "urn:ietf:params:netconf:capability:yang-library:1.0";
+ /**
+ * The YANG Library Capability, as defined in
+ * <a href="https://www.rfc-editor.org/rfc/rfc8526.html#section-2">RFC8526, section 2</a> and further specified
+ * by <a href="https://www.rfc-editor.org/rfc/rfc8525">RFC8525</a>. Note this applies to NETCONF endpoints
+ * which DO support Network Management Datastore Architecture as specified by
+ * <a href="https://www.rfc-editor.org/rfc/rfc8342">RFC8342</a>.
+ */
+ public static final String YANG_LIBRARY_1_1 = "urn:ietf:params:netconf:capability:yang-library:1.1";
+
+ private CapabilityURN() {
+ // Hidden on purpose
+ }
+}
package org.opendaylight.netconf.api.xml;
public final class XmlNetconfConstants {
- private XmlNetconfConstants() {
-
- }
-
public static final String CAPABILITY = "capability";
public static final String CAPABILITIES = "capabilities";
public static final String COMMIT = "commit";
public static final String RPC_REPLY_KEY = "rpc-reply";
public static final String URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0 = "urn:ietf:params:xml:ns:netconf:base:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_BASE_1_0 = "urn:ietf:params:netconf:base:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_BASE_1_1 = "urn:ietf:params:netconf:base:1.1";
public static final String URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0 = "urn:ietf:params:xml:ns:netconf:exi:1.0";
public static final String URN_IETF_PARAMS_XML_NS_NETCONF_NOTIFICATION_1_0 =
"urn:ietf:params:xml:ns:netconf:notification:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0 =
- "urn:ietf:params:netconf:capability:notification:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_ROLLBACK_ON_ERROR_1_0 =
- "urn:ietf:params:netconf:capability:rollback-on-error:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_WRITABLE_RUNNING_1_0 =
- "urn:ietf:params:netconf:capability:writable-running:1.0";
-
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0 =
- "urn:ietf:params:netconf:capability:exi:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0 =
- "urn:ietf:params:netconf:capability:candidate:1.0";
- public static final String URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0 =
- "urn:ietf:params:netconf:capability:url:1.0?scheme=file";
- public static final String URN_IETF_PARAMS_XML_NS_YANG_IETF_NETCONF_MONITORING =
- "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+ private XmlNetconfConstants() {
+ // Hidden on purpose
+ }
}
import java.util.Optional;
import java.util.Set;
import org.checkerframework.checker.index.qual.NonNegative;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfSessionListenerFactory;
import org.opendaylight.netconf.api.messages.HelloMessage;
import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiatorFactory;
import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
implements NetconfSessionNegotiatorFactory<NetconfClientSession, NetconfClientSessionListener> {
public static final Set<String> EXI_CLIENT_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
+ CapabilityURN.BASE,
+ CapabilityURN.BASE_1_1,
+ CapabilityURN.EXI);
public static final Set<String> LEGACY_EXI_CLIENT_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0);
+ CapabilityURN.BASE,
+ CapabilityURN.EXI);
public static final Set<String> DEFAULT_CLIENT_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1);
+ CapabilityURN.BASE,
+ CapabilityURN.BASE_1_1);
- public static final Set<String> LEGACY_FRAMING_CLIENT_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0);
+ public static final Set<String> LEGACY_FRAMING_CLIENT_CAPABILITIES = ImmutableSet.of(CapabilityURN.BASE);
private static final Logger LOG = LoggerFactory.getLogger(NetconfClientSessionNegotiatorFactory.class);
private static final String START_EXI_MESSAGE_ID = "default-start-exi";
import java.net.SocketAddress;
import java.util.Set;
import org.checkerframework.checker.index.qual.NonNegative;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.NetconfSessionListenerFactory;
import org.opendaylight.netconf.api.messages.HelloMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiatorFactory;
import org.opendaylight.netconf.server.api.SessionIdProvider;
implements NetconfSessionNegotiatorFactory<NetconfServerSession, NetconfServerSessionListener> {
public static final Set<String> DEFAULT_BASE_CAPABILITIES = ImmutableSet.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0
- );
+ CapabilityURN.BASE,
+ CapabilityURN.BASE_1_1,
+ CapabilityURN.EXI,
+ CapabilityURN.NOTIFICATION);
private final @NonNegative int maximumIncomingChunkSize;
private final Timer timer;
final ImmutableSet.Builder<String> b = ImmutableSet.builder();
b.addAll(baseCapabilities);
// Base 1.0 capability is supported by default
- b.add(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0);
+ b.add(CapabilityURN.BASE);
return b.build();
}
package org.opendaylight.netconf.server.osgi;
import static com.google.common.base.Preconditions.checkState;
-import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0;
-import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0;
import com.google.common.base.Function;
import com.google.common.base.Throwables;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.server.api.monitoring.BasicCapability;
import org.opendaylight.netconf.server.api.monitoring.Capability;
import org.opendaylight.netconf.server.api.monitoring.CapabilityListener;
final class NetconfCapabilityMonitoringService implements CapabilityListener, AutoCloseable {
private static final Schema.Location NETCONF_LOCATION = new Schema.Location(Schema.Location.Enumeration.NETCONF);
private static final Set<Schema.Location> NETCONF_LOCATIONS = Set.of(NETCONF_LOCATION);
- private static final BasicCapability CANDIDATE_CAPABILITY =
- new BasicCapability(URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0);
- private static final BasicCapability URL_CAPABILITY =
- new BasicCapability(URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0);
+ private static final BasicCapability CANDIDATE_CAPABILITY = new BasicCapability(CapabilityURN.CANDIDATE);
+ // FIXME: hard-coded scheme here
+ private static final BasicCapability URL_CAPABILITY = new BasicCapability(CapabilityURN.URL + "?scheme=file");
private static final Function<Capability, Uri> CAPABILITY_TO_URI = input -> new Uri(input.getCapabilityUri());
private final NetconfOperationServiceFactory netconfOperationProvider;
Set<Capability> capabilities = new HashSet<>(caps);
capabilities.add(CANDIDATE_CAPABILITY);
capabilities.add(URL_CAPABILITY);
- // TODO rollback on error not supported EditConfigXmlParser:100
+ // FIXME: rollback on error not supported EditConfigXmlParser:100
// [RFC6241] 8.5. Rollback-on-Error Capability
- // capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:rollback-on-error:1.0"));
+ // capabilities.add(new BasicCapability(CapabilityURN.ROLLBACK_ON_ERROR));
return capabilities;
}
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.api.DocumentedException;
import org.opendaylight.netconf.api.NetconfMessage;
import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.netconf.client.NetconfClientDispatcher;
import org.opendaylight.netconf.client.NetconfClientDispatcherImpl;
}
public static Set<String> getOnlyExiServerCaps() {
- return Set.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_EXI_1_0
- );
+ return Set.of(CapabilityURN.BASE, CapabilityURN.EXI);
}
public static Set<String> getOnlyChunkServerCaps() {
- return Set.of(
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0,
- XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1
- );
+ return Set.of(CapabilityURN.BASE, CapabilityURN.BASE_1_1);
}
public Runnable getInstanceOfClientRunnable() throws Exception {
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0;
-import static org.opendaylight.netconf.api.xml.XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0;
import java.util.HashSet;
import java.util.List;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.netconf.api.CapabilityURN;
import org.opendaylight.netconf.server.api.monitoring.BasicCapability;
import org.opendaylight.netconf.server.api.monitoring.Capability;
import org.opendaylight.netconf.server.api.monitoring.NetconfMonitoringService;
moduleCapability2 = new YangModuleCapability(TEST_MODULE_NAMESPACE.getValue(), TEST_MODULE_NAME,
TEST_MODULE_REV2, TEST_MODULE_CONTENT2);
- capabilities.add(new BasicCapability("urn:ietf:params:netconf:base:1.0"));
- capabilities.add(new BasicCapability("urn:ietf:params:netconf:base:1.1"));
+ capabilities.add(new BasicCapability(CapabilityURN.BASE));
+ capabilities.add(new BasicCapability(CapabilityURN.BASE_1_1));
capabilities.add(new BasicCapability("urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&"
+ "revision=2010-09-24"));
exp.add(new Uri(capability.getCapabilityUri()));
}
//candidate and url capabilities are added by monitoring service automatically
- exp.add(new Uri(URN_IETF_PARAMS_NETCONF_CAPABILITY_CANDIDATE_1_0));
- exp.add(new Uri(URN_IETF_PARAMS_NETCONF_CAPABILITY_URL_1_0));
+ exp.add(new Uri("urn:ietf:params:netconf:capability:candidate:1.0"));
+ exp.add(new Uri("urn:ietf:params:netconf:capability:url:1.0?scheme=file"));
Capabilities expected = new CapabilitiesBuilder().setCapability(exp).build();
Capabilities actual = monitoringService.getCapabilities();
assertEquals(new HashSet<>(expected.getCapability()), new HashSet<>(actual.getCapability()));