Add AsyncSshHandler.onConnectComplete() 16/102716/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 18 Oct 2022 08:27:19 +0000 (10:27 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 18 Oct 2022 10:01:02 +0000 (12:01 +0200)
Rather than using an anonymous listener, document the lifecycle event,
allowing us to refactor locking and extraction in the future. Also use
getException() to check for success.

JIRA: NETCONF-905
Change-Id: I8569ca007aefad634aff54294b475e565ac4f669
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandlerTest.java

index 325c7062b65770f3ce0eddd7593f64cafe6b4d73..dd02c75a90f3b611ef312ea332bec117a3da5152 100644 (file)
@@ -189,17 +189,21 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter {
         }
 
         LOG.debug("Starting SSH to {} on channel: {}", remoteAddress, ctx.channel());
-        final ConnectFuture sshConnectionFuture = sshClient.connect(authenticationHandler.getUsername(), remoteAddress)
+        sshClient.connect(authenticationHandler.getUsername(), remoteAddress)
             // FIXME: this is a blocking call, we should handle this with a concurrently-scheduled timeout. We do not
             //        have a Timer ready, so perhaps we should be using the event loop?
-            .verify(ctx.channel().config().getConnectTimeoutMillis(), TimeUnit.MILLISECONDS);
-        sshConnectionFuture.addListener(future -> {
-            if (future.isConnected()) {
-                handleSshSessionCreated(future, ctx);
-            } else {
-                handleSshSetupFailure(ctx, future.getException());
-            }
-        });
+            .verify(ctx.channel().config().getConnectTimeoutMillis(), TimeUnit.MILLISECONDS)
+            .addListener(future -> onConnectComplete(future, ctx));
+    }
+
+    private void onConnectComplete(final ConnectFuture future, final ChannelHandlerContext ctx) {
+        final var cause = future.getException();
+        if (cause != null) {
+            handleSshSetupFailure(ctx, cause);
+            return;
+        }
+
+        handleSshSessionCreated(future, ctx);
     }
 
     @Override
index 46bce11599c61a3e525fca8e786fee2b9ed31a32..0bb84e5a05cf989f1168964efde03934bab09dea 100644 (file)
@@ -347,7 +347,7 @@ public class AsyncSshHandlerTest {
 
     private static ConnectFuture getSuccessConnectFuture(final ClientSession sshSession) {
         final ConnectFuture connectFuture = mock(ConnectFuture.class);
-        doReturn(true).when(connectFuture).isConnected();
+        doReturn(null).when(connectFuture).getException();
 
         doReturn(sshSession).when(connectFuture).getSession();
         return connectFuture;
@@ -490,7 +490,6 @@ public class AsyncSshHandlerTest {
 
     private static ConnectFuture getFailedConnectFuture() {
         final ConnectFuture connectFuture = mock(ConnectFuture.class);
-        doReturn(false).when(connectFuture).isConnected();
         doReturn(new IllegalStateException()).when(connectFuture).getException();
         return connectFuture;
     }