use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.Device in project netconf by opendaylight.
the class MountedDeviceListener method trackNotificationsPerformance.
private void trackNotificationsPerformance(final YangInstanceIdentifier path) {
// 1. get nodeId from the path
final String nodeId = TestUtils.getNodeId(path).get();
// 2. extract needed services from the mount point
final DOMMountPoint mountPoint = mountPointService.getMountPoint(path).orElseThrow(() -> new RuntimeException("Unable to get mountpoint"));
final DOMRpcService rpcService = mountPoint.getService(DOMRpcService.class).orElseThrow(() -> new RuntimeException("Unable to get RPC Service from the mountpoint"));
final DOMNotificationService notificationService = mountPoint.getService(DOMNotificationService.class).orElseThrow(() -> new RuntimeException("Unable to get NotificationService from the mountpoint"));
// 3. create a listener for the notifications
listeners.put(path, notificationService.registerNotificationListener(new NotificationsCounter(nodeId, serializer), Absolute.of(VrfRouteNotification.QNAME)));
// 4. send 'create-subscription' request to the device
final StreamNameType streamNameType = new StreamNameType(STREAM_DEFAULT_NAME);
final CreateSubscriptionInputBuilder subscriptionInputBuilder = new CreateSubscriptionInputBuilder();
subscriptionInputBuilder.setStream(streamNameType);
final CreateSubscriptionInput input = subscriptionInputBuilder.build();
final ContainerNode inputNode = serializer.toNormalizedNodeRpcData(input);
final ListenableFuture<? extends DOMRpcResult> resultFuture = rpcService.invokeRpc(CREATE_SUBSCRIPTION_QNAME, inputNode);
Futures.addCallback(resultFuture, new FutureCallback<DOMRpcResult>() {
@Override
public void onSuccess(@Nullable final DOMRpcResult rpcResult) {
LOG.info("Notification stream subscription succesfully completed");
}
@Override
public void onFailure(final Throwable throwable) {
LOG.error("Notification stream subscription failed");
}
}, MoreExecutors.directExecutor());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.Device in project netconf by opendaylight.
the class NetconfClientDispatcherImpl method getNegotiatorFactory.
protected NetconfClientSessionNegotiatorFactory getNegotiatorFactory(final NetconfClientConfiguration cfg) {
final List<Uri> odlHelloCapabilities = cfg.getOdlHelloCapabilities();
if (odlHelloCapabilities == null || odlHelloCapabilities.isEmpty()) {
return new NetconfClientSessionNegotiatorFactory(timer, cfg.getAdditionalHeader(), cfg.getConnectionTimeoutMillis());
}
// LinkedHashSet since perhaps the device cares about order of hello message capabilities.
// This allows user control of the order while complying with the existing interface.
final Set<String> stringCapabilities = new LinkedHashSet<>();
for (final Uri uri : odlHelloCapabilities) {
stringCapabilities.add(uri.getValue());
}
return new NetconfClientSessionNegotiatorFactory(timer, cfg.getAdditionalHeader(), cfg.getConnectionTimeoutMillis(), stringCapabilities);
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.Device in project netconf by opendaylight.
the class NetconfDeviceTest method testNetconfDeviceNotificationsCapabilityIsNotPresent.
@Test
public void testNetconfDeviceNotificationsCapabilityIsNotPresent() throws Exception {
final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
final NetconfDeviceCommunicator listener = getListener();
final EffectiveModelContextFactory schemaContextProviderFactory = getSchemaFactory();
final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER);
final NetconfDevice device = new NetconfDeviceBuilder().setSchemaResourcesDTO(schemaResourcesDTO).setGlobalProcessingExecutor(getExecutor()).setId(getId()).setSalFacade(facade).setBaseSchemas(BASE_SCHEMAS).build();
final NetconfDevice netconfSpy = spy(device);
final NetconfSessionPreferences sessionCaps = getSessionCaps(false, Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION));
netconfSpy.onRemoteSessionUp(sessionCaps, listener);
final ArgumentCaptor<NetconfSessionPreferences> argument = ArgumentCaptor.forClass(NetconfSessionPreferences.class);
verify(facade, timeout(5000)).onDeviceConnected(any(MountPointContext.class), argument.capture(), any(DOMRpcService.class), isNull());
final NetconfDeviceCapabilities netconfDeviceCaps = argument.getValue().getNetconfDeviceCapabilities();
List<String> notificationModulesName = Arrays.asList(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.$YangModuleInfoImpl.getInstance().getName().toString(), org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.$YangModuleInfoImpl.getInstance().getName().toString());
assertFalse(netconfDeviceCaps.getResolvedCapabilities().stream().anyMatch(entry -> notificationModulesName.contains(entry.getCapability())));
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.Device in project netconf by opendaylight.
the class NetconfDeviceTest method testNetconfDeviceMissingSource.
@Test
public void testNetconfDeviceMissingSource() throws Exception {
final RemoteDeviceHandler<NetconfSessionPreferences> facade = getFacade();
final NetconfDeviceCommunicator listener = getListener();
final EffectiveModelContextFactory schemaFactory = getSchemaFactory();
final SchemaRepository schemaRepository = getSchemaRepository();
// Make fallback attempt to fail due to empty resolved sources
final MissingSchemaSourceException schemaResolutionException = new MissingSchemaSourceException("fail first", TEST_SID);
doReturn(Futures.immediateFailedFuture(schemaResolutionException)).when(schemaRepository).getSchemaSource(eq(TEST_SID), eq(YangTextSchemaSource.class));
doAnswer(invocation -> {
if (((Collection<?>) invocation.getArguments()[0]).size() == 2) {
return Futures.immediateFailedFuture(schemaResolutionException);
} else {
return Futures.immediateFuture(SCHEMA_CONTEXT);
}
}).when(schemaFactory).createEffectiveModelContext(anyCollection());
final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id, schemaContext) -> {
final Module first = Iterables.getFirst(SCHEMA_CONTEXT.getModules(), null);
final QName qName = QName.create(first.getQNameModule(), first.getName());
final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName);
final NetconfStateSchemas.RemoteYangSchema source2 = new NetconfStateSchemas.RemoteYangSchema(QName.create(first.getQNameModule(), "test-module2"));
return new NetconfStateSchemas(Sets.newHashSet(source1, source2));
};
final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver);
final NetconfDevice device = new NetconfDeviceBuilder().setReconnectOnSchemasChange(true).setSchemaResourcesDTO(schemaResourcesDTO).setGlobalProcessingExecutor(getExecutor()).setBaseSchemas(BASE_SCHEMAS).setId(getId()).setSalFacade(facade).build();
// Monitoring supported
final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2));
device.onRemoteSessionUp(sessionCaps, listener);
verify(facade, timeout(5000)).onDeviceConnected(any(MountPointContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), isNull());
verify(schemaFactory, times(1)).createEffectiveModelContext(anyCollection());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.Device in project netconf by opendaylight.
the class NetconfDeviceTopologyAdapter method initDeviceData.
private void initDeviceData() {
final WriteTransaction writeTx = txChain.newWriteOnlyTransaction();
createNetworkTopologyIfNotPresent(writeTx);
final Node node = getNodeIdBuilder(id).addAugmentation(new NetconfNodeBuilder().setConnectionStatus(ConnectionStatus.Connecting).setHost(id.getHost()).setPort(new PortNumber(Uint16.valueOf(id.getAddress().getPort()))).build()).build();
LOG.trace("{}: Init device state transaction {} putting if absent operational data started.", id, writeTx.getIdentifier());
writeTx.put(LogicalDatastoreType.OPERATIONAL, id.getTopologyBindingPath(), node);
LOG.trace("{}: Init device state transaction {} putting operational data ended.", id, writeTx.getIdentifier());
LOG.trace("{}: Init device state transaction {} putting if absent config data started.", id, writeTx.getIdentifier());
LOG.trace("{}: Init device state transaction {} putting config data ended.", id, writeTx.getIdentifier());
commitTransaction(writeTx, "init");
}
Aggregations