use of org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration in project netconf by opendaylight.
the class RemoteDeviceConnectorImplTest method testGetClientConfig.
@Test
public void testGetClientConfig() {
final NetconfClientSessionListener listener = mock(NetconfClientSessionListener.class);
final Host host = new Host(new IpAddress(new Ipv4Address("127.0.0.1")));
final PortNumber portNumber = new PortNumber(Uint16.valueOf(9999));
final NetconfNode testingNode = new NetconfNodeBuilder().setConnectionTimeoutMillis(Uint32.valueOf(1000)).setDefaultRequestTimeoutMillis(Uint32.valueOf(2000)).setHost(host).setPort(portNumber).setCredentials(new LoginPasswordBuilder().setUsername("testuser").setPassword("testpassword").build()).setTcpOnly(true).build();
final RemoteDeviceConnectorImpl remoteDeviceConnection = new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, deviceActionFactory);
final NetconfReconnectingClientConfiguration defaultClientConfig = remoteDeviceConnection.getClientConfig(listener, testingNode);
assertEquals(defaultClientConfig.getConnectionTimeoutMillis().longValue(), 1000L);
assertEquals(defaultClientConfig.getAddress(), new InetSocketAddress(InetAddresses.forString("127.0.0.1"), 9999));
assertSame(defaultClientConfig.getSessionListener(), listener);
assertEquals(defaultClientConfig.getAuthHandler().getUsername(), "testuser");
assertEquals(defaultClientConfig.getProtocol(), NetconfClientConfiguration.NetconfClientProtocol.TCP);
}
use of org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration in project netconf by opendaylight.
the class NetconfClientDispatcherImplTest method testNetconfClientDispatcherImpl.
@Test
public void testNetconfClientDispatcherImpl() throws Exception {
EventLoopGroup bossGroup = Mockito.mock(EventLoopGroup.class);
EventLoopGroup workerGroup = Mockito.mock(EventLoopGroup.class);
Timer timer = new HashedWheelTimer();
ChannelFuture chf = Mockito.mock(ChannelFuture.class);
Channel ch = Mockito.mock(Channel.class);
doReturn(ch).when(chf).channel();
Throwable thr = Mockito.mock(Throwable.class);
doReturn(chf).when(workerGroup).register(any(Channel.class));
ChannelPromise promise = Mockito.mock(ChannelPromise.class);
doReturn(promise).when(chf).addListener(any(GenericFutureListener.class));
doReturn(thr).when(chf).cause();
doReturn(true).when(chf).isDone();
doReturn(false).when(chf).isSuccess();
Long timeout = 200L;
NetconfHelloMessageAdditionalHeader header = new NetconfHelloMessageAdditionalHeader("a", "host", "port", "trans", "id");
NetconfClientSessionListener listener = new SimpleNetconfClientSessionListener();
InetSocketAddress address = InetSocketAddress.createUnresolved("host", 830);
ReconnectStrategyFactory reconnectStrategyFactory = Mockito.mock(ReconnectStrategyFactory.class);
AuthenticationHandler handler = Mockito.mock(AuthenticationHandler.class);
ReconnectStrategy reconnect = Mockito.mock(ReconnectStrategy.class);
doReturn(5).when(reconnect).getConnectTimeout();
doReturn("").when(reconnect).toString();
doReturn("").when(handler).toString();
doReturn("").when(reconnectStrategyFactory).toString();
doReturn(reconnect).when(reconnectStrategyFactory).createReconnectStrategy();
NetconfReconnectingClientConfiguration cfg = NetconfReconnectingClientConfigurationBuilder.create().withProtocol(NetconfClientConfiguration.NetconfClientProtocol.SSH).withAddress(address).withConnectionTimeoutMillis(timeout).withReconnectStrategy(reconnect).withAdditionalHeader(header).withSessionListener(listener).withConnectStrategyFactory(reconnectStrategyFactory).withAuthHandler(handler).build();
NetconfReconnectingClientConfiguration cfg2 = NetconfReconnectingClientConfigurationBuilder.create().withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TCP).withAddress(address).withConnectionTimeoutMillis(timeout).withReconnectStrategy(reconnect).withAdditionalHeader(header).withSessionListener(listener).withConnectStrategyFactory(reconnectStrategyFactory).withAuthHandler(handler).build();
NetconfClientDispatcherImpl dispatcher = new NetconfClientDispatcherImpl(bossGroup, workerGroup, timer);
Future<NetconfClientSession> sshSession = dispatcher.createClient(cfg);
Future<NetconfClientSession> tcpSession = dispatcher.createClient(cfg2);
ReconnectFuture sshReconn = dispatcher.createReconnectingClient(cfg);
final ReconnectFuture tcpReconn = dispatcher.createReconnectingClient(cfg2);
assertNotNull(sshSession);
assertNotNull(tcpSession);
assertNotNull(sshReconn);
assertNotNull(tcpReconn);
SslHandlerFactory sslHandlerFactory = Mockito.mock(SslHandlerFactory.class);
NetconfReconnectingClientConfiguration cfg3 = NetconfReconnectingClientConfigurationBuilder.create().withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TLS).withAddress(address).withConnectionTimeoutMillis(timeout).withReconnectStrategy(reconnect).withAdditionalHeader(header).withSessionListener(listener).withConnectStrategyFactory(reconnectStrategyFactory).withSslHandlerFactory(sslHandlerFactory).build();
Future<NetconfClientSession> tlsSession = dispatcher.createClient(cfg3);
ReconnectFuture tlsReconn = dispatcher.createReconnectingClient(cfg3);
assertNotNull(tlsSession);
assertNotNull(tlsReconn);
}
use of org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration in project netconf by opendaylight.
the class NetconfReconnectingClientConfigurationTest method testNetconfReconnectingClientConfiguration.
@Test
public void testNetconfReconnectingClientConfiguration() throws Exception {
Long timeout = 200L;
NetconfHelloMessageAdditionalHeader header = new NetconfHelloMessageAdditionalHeader("a", "host", "port", "trans", "id");
NetconfClientSessionListener listener = new SimpleNetconfClientSessionListener();
InetSocketAddress address = InetSocketAddress.createUnresolved("host", 830);
ReconnectStrategyFactory strategy = Mockito.mock(ReconnectStrategyFactory.class);
AuthenticationHandler handler = Mockito.mock(AuthenticationHandler.class);
ReconnectStrategy reconnect = Mockito.mock(ReconnectStrategy.class);
NetconfReconnectingClientConfiguration cfg = NetconfReconnectingClientConfigurationBuilder.create().withProtocol(NetconfClientConfiguration.NetconfClientProtocol.SSH).withAddress(address).withConnectionTimeoutMillis(timeout).withReconnectStrategy(reconnect).withAdditionalHeader(header).withSessionListener(listener).withConnectStrategyFactory(strategy).withAuthHandler(handler).build();
Assert.assertEquals(timeout, cfg.getConnectionTimeoutMillis());
Assert.assertEquals(Optional.of(header), cfg.getAdditionalHeader());
Assert.assertEquals(listener, cfg.getSessionListener());
Assert.assertEquals(handler, cfg.getAuthHandler());
Assert.assertEquals(strategy, cfg.getConnectStrategyFactory());
Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, cfg.getProtocol());
Assert.assertEquals(address, cfg.getAddress());
Assert.assertEquals(reconnect, cfg.getReconnectStrategy());
SslHandlerFactory sslHandlerFactory = Mockito.mock(SslHandlerFactory.class);
NetconfReconnectingClientConfiguration cfg2 = NetconfReconnectingClientConfigurationBuilder.create().withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TLS).withAddress(address).withConnectionTimeoutMillis(timeout).withReconnectStrategy(reconnect).withAdditionalHeader(header).withSessionListener(listener).withConnectStrategyFactory(strategy).withSslHandlerFactory(sslHandlerFactory).build();
Assert.assertEquals(timeout, cfg2.getConnectionTimeoutMillis());
Assert.assertEquals(Optional.of(header), cfg2.getAdditionalHeader());
Assert.assertEquals(listener, cfg2.getSessionListener());
Assert.assertEquals(sslHandlerFactory, cfg2.getSslHandlerFactory());
Assert.assertEquals(strategy, cfg2.getConnectStrategyFactory());
Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, cfg2.getProtocol());
Assert.assertEquals(address, cfg2.getAddress());
Assert.assertEquals(reconnect, cfg2.getReconnectStrategy());
}
use of org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration in project netconf by opendaylight.
the class NetconfDeviceCommunicatorTest method testNetconfDeviceReconnectInCommunicator.
/**
* Test whether reconnect is scheduled properly.
*/
@Test
public void testNetconfDeviceReconnectInCommunicator() {
final RemoteDevice<NetconfSessionPreferences, NetconfMessage, NetconfDeviceCommunicator> device = mock(RemoteDevice.class);
final TimedReconnectStrategy timedReconnectStrategy = new TimedReconnectStrategy(GlobalEventExecutor.INSTANCE, 10000, 0, 1.0, null, 100L, null);
final ReconnectStrategy reconnectStrategy = spy(new ReconnectStrategy() {
@Override
@Deprecated
public int getConnectTimeout() throws Exception {
return timedReconnectStrategy.getConnectTimeout();
}
@Override
@Deprecated
public Future<Void> scheduleReconnect(final Throwable cause) {
return timedReconnectStrategy.scheduleReconnect(cause);
}
@Override
@Deprecated
public void reconnectSuccessful() {
timedReconnectStrategy.reconnectSuccessful();
}
});
final EventLoopGroup group = new NioEventLoopGroup();
final Timer time = new HashedWheelTimer();
try {
final NetconfDeviceCommunicator listener = new NetconfDeviceCommunicator(new RemoteDeviceId("test", InetSocketAddress.createUnresolved("localhost", 22)), device, 10);
final NetconfReconnectingClientConfiguration cfg = NetconfReconnectingClientConfigurationBuilder.create().withAddress(new InetSocketAddress("localhost", 65000)).withReconnectStrategy(reconnectStrategy).withConnectStrategyFactory(() -> reconnectStrategy).withAuthHandler(new LoginPasswordHandler("admin", "admin")).withConnectionTimeoutMillis(10000).withProtocol(NetconfClientConfiguration.NetconfClientProtocol.SSH).withSessionListener(listener).build();
listener.initializeRemoteConnection(new NetconfClientDispatcherImpl(group, group, time), cfg);
verify(reconnectStrategy, timeout(TimeUnit.MINUTES.toMillis(4)).times(101)).scheduleReconnect(any(Throwable.class));
} finally {
time.stop();
group.shutdownGracefully();
}
}
use of org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration in project netconf by opendaylight.
the class AbstractNetconfTopology method setupConnection.
protected ListenableFuture<NetconfDeviceCapabilities> setupConnection(final NodeId nodeId, final Node configNode) {
final NetconfNode netconfNode = configNode.augmentation(NetconfNode.class);
final NetconfNodeAugmentedOptional nodeOptional = configNode.augmentation(NetconfNodeAugmentedOptional.class);
requireNonNull(netconfNode.getHost());
requireNonNull(netconfNode.getPort());
final NetconfConnectorDTO deviceCommunicatorDTO = createDeviceCommunicator(nodeId, netconfNode, nodeOptional);
final NetconfDeviceCommunicator deviceCommunicator = deviceCommunicatorDTO.getCommunicator();
final NetconfClientSessionListener netconfClientSessionListener = deviceCommunicatorDTO.getSessionListener();
final NetconfReconnectingClientConfiguration clientConfig = getClientConfig(netconfClientSessionListener, netconfNode);
final ListenableFuture<NetconfDeviceCapabilities> future = deviceCommunicator.initializeRemoteConnection(clientDispatcher, clientConfig);
activeConnectors.put(nodeId, deviceCommunicatorDTO);
Futures.addCallback(future, new FutureCallback<NetconfDeviceCapabilities>() {
@Override
public void onSuccess(final NetconfDeviceCapabilities result) {
LOG.debug("Connector for {} started succesfully", nodeId.getValue());
}
@Override
public void onFailure(final Throwable throwable) {
LOG.error("Connector for {} failed", nodeId.getValue(), throwable);
// remove this node from active connectors?
}
}, MoreExecutors.directExecutor());
return future;
}
Aggregations