Alon Bar-Lev has uploaded a new change for review.

Change subject: host-deploy: add Closeable interface to our objects
......................................................................

host-deploy: add Closeable interface to our objects

Change-Id: Iae58c623eb1f3acabe2404022b9bdbae32095bbb
Signed-off-by: Alon Bar-Lev <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetServerSSHKeyFingerprintQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterUtil.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/utils/GlusterUtilTest.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHClient.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHDialog.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/BasicTest.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/CommandTest.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/PropertiesTest.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/SSHDialogTest.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TimeoutTest.java
M 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TransferTest.java
16 files changed, 251 insertions(+), 216 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/20796/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
index 2341fcf..c33e191 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
@@ -419,9 +419,7 @@
             !getParameters().getAddPending() &&
             Config.<Boolean> GetValue(ConfigValues.InstallVds)
         ) {
-            EngineSSHClient sshclient = null;
-            try {
-                sshclient = getSSHClient();
+            try (final EngineSSHClient sshclient = getSSHClient()) {
                 sshclient.connect();
                 sshclient.authenticate();
 
@@ -457,10 +455,6 @@
                         );
 
                 return 
failCanDoAction(VdcBllMessages.VDS_CANNOT_CONNECT_TO_SERVER);
-            } finally {
-                if (sshclient != null) {
-                    sshclient.disconnect();
-                }
             }
         }
         return true;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetServerSSHKeyFingerprintQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetServerSSHKeyFingerprintQuery.java
index 30fa042..a387609 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetServerSSHKeyFingerprintQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetServerSSHKeyFingerprintQuery.java
@@ -20,18 +20,15 @@
 
     public String getServerFingerprint(String serverName) {
         String fingerPrint = null;
-        EngineSSHClient dialog = getEngineSSHClient();
-        try {
-            dialog.setHost(serverName);
-            dialog.connect();
-            fingerPrint = dialog.getHostFingerprint();
+        try (final EngineSSHClient client = getEngineSSHClient()) {
+            client.setHost(serverName);
+            client.connect();
+            fingerPrint = client.getHostFingerprint();
         } catch (Throwable e) {
             log.errorFormat("Could not fetch fingerprint of host {0} with 
message: {1}",
                 serverName,
                 ExceptionUtils.getMessage(e)
             );
-        } finally {
-            dialog.disconnect();
         }
         return fingerPrint;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
index 6f4a3d4..cf36b12 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InstallVdsCommand.java
@@ -118,8 +118,7 @@
     }
 
     private void installHost() {
-        VdsDeploy installer = null;
-        try {
+        try (final VdsDeploy installer = new VdsDeploy(getVds())) {
             log.infoFormat(
                 "Before Installation host {0}, {1}",
                 getVds().getId(),
@@ -127,7 +126,6 @@
             );
 
             T parameters = getParameters();
-            installer = new VdsDeploy(getVds());
             installer.setCorrelationId(getCorrelationId());
             boolean configureNetworkUsingHostDeploy = 
!FeatureSupported.setupManagementNetwork(
                 getVds().getVdsGroupCompatibilityVersion()
@@ -218,21 +216,16 @@
             handleError(e, e.getStatus());
         } catch (Exception e) {
             handleError(e, VDSStatus.InstallFailed);
-        } finally {
-            if (installer != null) {
-                installer.close();
-            }
         }
     }
 
     private void upgradeNode() {
-        OVirtNodeUpgrade upgrade = null;
-        try {
-            T parameters = getParameters();
-            upgrade = new OVirtNodeUpgrade(
+        try (
+            final OVirtNodeUpgrade upgrade = new OVirtNodeUpgrade(
                 getVds(),
-                parameters.getoVirtIsoFile()
-            );
+                getParameters().getoVirtIsoFile()
+            )
+        ) {
             upgrade.setCorrelationId(getCorrelationId());
             log.infoFormat(
                 "Execute upgrade host {0}, {1}",
@@ -264,11 +257,6 @@
             handleError(e, e.getStatus());
         } catch (Exception e) {
             handleError(e, VDSStatus.InstallFailed);
-        }
-        finally {
-            if (upgrade != null) {
-                upgrade.close();
-            }
         }
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
index 3ea526a..9cf229c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OVirtNodeUpgrade.java
@@ -1,7 +1,9 @@
 package org.ovirt.engine.core.bll;
 
 import java.io.BufferedReader;
+import java.io.Closeable;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
@@ -20,7 +22,7 @@
 /**
  * ovirt-node upgrade.
  */
-public class OVirtNodeUpgrade implements SSHDialog.Sink {
+public class OVirtNodeUpgrade implements SSHDialog.Sink, Closeable {
 
     public static enum DeployStatus {Complete, Failed, Reboot};
 
@@ -67,7 +69,12 @@
         catch (Exception e) {
             _failException = e;
             log.error("Error during upgrade", e);
-            _control.disconnect();
+            try {
+                _control.close();
+            }
+            catch (IOException ee) {
+                log.error("Error during close", ee);
+            }
         }
     }
 
@@ -98,7 +105,12 @@
      */
     @Override
     protected void finalize() {
-        close();
+        try {
+            close();
+        }
+        catch (IOException e) {
+            log.error("Exception during finalize", e);
+        }
     }
 
     public void setCorrelationId(String correlationId) {
@@ -108,10 +120,10 @@
     /**
      * Free resources.
      */
-    public void close() {
+    public void close() throws IOException {
         stop();
         if (_dialog != null) {
-            _dialog.disconnect();
+            _dialog.close();
             _dialog = null;
         }
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
index e7ba6ac..7133094 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SshSoftFencingCommand.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.bll;
 
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 
 import org.ovirt.engine.core.bll.utils.EngineSSHClient;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
@@ -63,52 +64,35 @@
      * @returns {@code true} if command has been executed successfully, {@code 
false} otherwise
      */
     private boolean executeSshSoftFencingCommand(String version) {
-        boolean result = false;
-        EngineSSHClient sshClient = null;
+        boolean ret = false;
+        try (
+            final EngineSSHClient sshClient = new EngineSSHClient();
+            final ByteArrayOutputStream cmdOut = new ByteArrayOutputStream();
+            final ByteArrayOutputStream cmdErr = new ByteArrayOutputStream();
+        ) {
+            try {
+                log.infoFormat("Opening SSH Soft Fencing session on host {0}", 
getVds().getHostName());
+                sshClient.setVds(getVds());
+                sshClient.useDefaultKeyPair();
+                sshClient.connect();
+                sshClient.authenticate();
 
-        try {
-            sshClient = new EngineSSHClient();
-            sshClient.setVds(getVds());
-            sshClient.useDefaultKeyPair();
-            sshClient.connect();
-            sshClient.authenticate();
-        } catch (Exception ex) {
-            log.errorFormat("SSH connection to host {0} failed: {1}", 
getVds().getHostName(), ex);
-            closeSshConnection(sshClient);
-            return result;
-        }
-
-        ByteArrayOutputStream cmdOut = new ByteArrayOutputStream();
-        ByteArrayOutputStream cmdErr = new ByteArrayOutputStream();
-        try {
-            log.infoFormat("Executing SSH Soft Fencing command on host {0}", 
getVds().getHostName());
-            sshClient.executeCommand(Config.<String> 
GetValue(ConfigValues.SshSoftFencingCommand, version),
+                log.infoFormat("Executing SSH Soft Fencing command on host 
{0}", getVds().getHostName());
+                sshClient.executeCommand(
+                    Config.<String> 
GetValue(ConfigValues.SshSoftFencingCommand, version),
                     null,
                     cmdOut,
-                    cmdErr);
-            result = true;
-        } catch (Exception ex) {
-            log.errorFormat("SSH Soft Fencing command failed on host {0}: 
{1}\nStdout: {2}\nStderr: {3}\nStacktrace: {4}",
-                    getVds().getHostName(), ex.getMessage(), 
cmdOut.toString(), cmdErr.toString(), ex);
-        } finally {
-            closeSshConnection(sshClient);
-        }
-        return result;
-    }
-
-    /**
-     * Tries to close SSH client connection
-     *
-     * @param sshClient
-     *            SSH client to close
-     */
-    private void closeSshConnection(EngineSSHClient sshClient) {
-        if (sshClient != null) {
-            try {
-                sshClient.disconnect();
+                    cmdErr
+                );
+                ret = true;
             } catch (Exception ex) {
-                log.error("Error disconnecting SSH connection", ex);
+                log.errorFormat("SSH Soft Fencing command failed on host {0}: 
{1}\nStdout: {2}\nStderr: {3}\nStacktrace: {4}",
+                        getVds().getHostName(), ex.getMessage(), 
cmdOut.toString(), cmdErr.toString(), ex);
             }
         }
+        catch(IOException e) {
+            log.error("IOException", e);
+        }
+        return ret;
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
index a0599e1..b00d2c4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.bll;
 
+import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -74,7 +75,7 @@
  * The installer environment is set according to the ovirt-host-deploy
  * documentation.
  */
-public class VdsDeploy implements SSHDialog.Sink {
+public class VdsDeploy implements SSHDialog.Sink, Closeable {
 
     public static enum DeployStatus {Complete, Incomplete, Failed, Reboot};
     private static final int THREAD_JOIN_TIMEOUT = 20 * 1000; // milliseconds
@@ -868,7 +869,12 @@
         catch (Exception e) {
             _failException = e;
             log.error("Error during deploy dialog", e);
-            _control.disconnect();
+            try {
+                _control.close();
+            }
+            catch (IOException ee) {
+                log.error("Error during close", e);
+            }
         }
     }
 
@@ -908,16 +914,21 @@
      */
     @Override
     protected void finalize() {
-        close();
+        try {
+            close();
+        }
+        catch (IOException e) {
+            log.error("Exception during finalize", e);
+        }
     }
 
     /**
      * Release resources.
      */
-    public void close() {
+    public void close() throws IOException {
         stop();
         if (_dialog != null) {
-            _dialog.disconnect();
+            _dialog.close();
             _dialog = null;
         }
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterUtil.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterUtil.java
index e5e7828..3c92dc5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterUtil.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterUtil.java
@@ -54,18 +54,13 @@
      * @throws AuthenticationException
      *             If SSH authentication with given root password fails
      */
-    public Set<String> getPeers(String server, String username, String 
password) throws AuthenticationException {
-        SSHClient client = null;
+    public Set<String> getPeers(String server, String username, String 
password) throws AuthenticationException, IOException {
 
-        try {
-            client = connect(server);
+        try (final SSHClient client = getSSHClient()) {
+            connect(client, server);
             authenticate(client, username, password);
             String serversXml = executePeerStatusCommand(client);
             return extractServers(serversXml);
-        } finally {
-            if (client != null) {
-                client.disconnect();
-            }
         }
     }
 
@@ -101,29 +96,21 @@
      */
     public Map<String, String> getPeers(String server, String username, String 
password, String fingerprint)
             throws AuthenticationException, IOException {
-        SSHClient client = null;
-
-        try {
-            client = connect(server);
+        try (final SSHClient client = getSSHClient()) {
+            connect(client, server);
             authenticate(client, username, password);
             String serversXml = executePeerStatusCommand(client);
             return getFingerprints(extractServers(serversXml));
-        } finally {
-            if (client != null) {
-                client.disconnect();
-            }
         }
     }
 
-    protected SSHClient connect(String serverName) {
-        SSHClient client = new EngineSSHClient();
+    protected void connect(SSHClient client, String serverName) {
         Integer timeout = Config.<Integer> 
GetValue(ConfigValues.ConnectToServerTimeoutInSeconds) * 1000;
         client.setHardTimeout(timeout);
         client.setSoftTimeout(timeout);
         client.setHost(serverName, SSH_PORT);
         try {
             client.connect();
-            return client;
         } catch (Exception e) {
             log.debug(String.format("Could not connect to server %1$s: %2$s", 
serverName, e.getMessage()));
             throw new RuntimeException(e);
@@ -204,4 +191,8 @@
     public BackendInternal getBackendInstance() {
         return Backend.getInstance();
     }
+
+    protected SSHClient getSSHClient() {
+        return new EngineSSHClient();
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/utils/GlusterUtilTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/utils/GlusterUtilTest.java
index 50f3f41..4ab7200 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/utils/GlusterUtilTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/utils/GlusterUtilTest.java
@@ -50,7 +50,8 @@
     }
 
     private void setupMock() throws AuthenticationException, IOException {
-        doReturn(client).when(glusterUtil).connect(SERVER_NAME1);
+        doReturn(client).when(glusterUtil).getSSHClient();
+        doNothing().when(glusterUtil).connect(client, SERVER_NAME1);
         doReturn(FINGER_PRINT1).when(client).getHostFingerprint();
         
doReturn(OUTPUT_XML).when(glusterUtil).executePeerStatusCommand(client);
         doNothing().when(glusterUtil).authenticate(client, USER, PASSWORD);
@@ -62,6 +63,8 @@
     public void testGetPeersWithFingerprint() throws AuthenticationException, 
IOException {
         EXPECTED_MAP.put(SERVER_NAME1, FINGER_PRINT1);
         EXPECTED_MAP.put(SERVER_NAME2, FINGER_PRINT2);
+        doReturn(client).when(glusterUtil).getSSHClient();
+        doNothing().when(glusterUtil).connect(client, SERVER_NAME1);
         
doReturn(EXPECTED_MAP).when(glusterUtil).getFingerprints(any(Set.class));
         Map<String, String> peers = glusterUtil.getPeers(SERVER_NAME1, USER, 
PASSWORD, FINGER_PRINT1);
         assertNotNull(peers);
@@ -73,9 +76,11 @@
 
     @SuppressWarnings("unchecked")
     @Test
-    public void testGetPeers() throws AuthenticationException {
+    public void testGetPeers() throws AuthenticationException, IOException {
         EXPECTED_MAP.put(SERVER_NAME1, FINGER_PRINT1);
         EXPECTED_MAP.put(SERVER_NAME2, FINGER_PRINT2);
+        doReturn(client).when(glusterUtil).getSSHClient();
+        doNothing().when(glusterUtil).connect(client, SERVER_NAME1);
         
doReturn(EXPECTED_MAP).when(glusterUtil).getFingerprints(any(Set.class));
         Set<String> peers = glusterUtil.getPeers(SERVER_NAME1, USER, PASSWORD);
         assertNotNull(peers);
@@ -85,8 +90,9 @@
 
     @SuppressWarnings("unchecked")
     @Test(expected = AuthenticationException.class)
-    public void testGetPeersWithWrongPassword() throws AuthenticationException 
{
+    public void testGetPeersWithWrongPassword() throws 
AuthenticationException, IOException {
         EXPECTED_MAP.put(SERVER_NAME1, FINGER_PRINT1);
+        doReturn(client).when(glusterUtil).getSSHClient();
         
doReturn(EXPECTED_MAP).when(glusterUtil).getFingerprints(any(Set.class));
         glusterUtil.getPeers(SERVER_NAME1, USER, WRONG_PASSWORD);
     }
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHClient.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHClient.java
index 22211f7..70e1be9 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHClient.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHClient.java
@@ -2,6 +2,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -9,8 +10,8 @@
 import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
-import java.nio.charset.Charset;
 import java.net.SocketAddress;
+import java.nio.charset.Charset;
 import java.security.DigestInputStream;
 import java.security.DigestOutputStream;
 import java.security.KeyPair;
@@ -34,7 +35,7 @@
 import org.apache.sshd.client.future.AuthFuture;
 import org.apache.sshd.client.future.ConnectFuture;
 
-public class SSHClient {
+public class SSHClient implements Closeable {
     private static final String COMMAND_FILE_RECEIVE = "test -r '%2$s' && 
md5sum -b '%2$s' | cut -d ' ' -f 1 >&2 && %1$s < '%2$s'";
     private static final String COMMAND_FILE_SEND = "%1$s > '%2$s' && md5sum 
-b '%2$s' | cut -d ' ' -f 1 >&2";
     private static final int STREAM_BUFFER_SIZE = 8192;
@@ -114,7 +115,12 @@
      */
     @Override
     protected void finalize() {
-        disconnect();
+        try {
+            close();
+        }
+        catch (IOException e) {
+            log.error("Finalize exception", e);
+        }
     }
 
     /**
@@ -382,14 +388,19 @@
      *
      * Must be called when done with client.
      */
-    public void disconnect() {
-        if (_session != null) {
-            _session.close(true);
-            _session = null;
+    public void close() throws IOException {
+        try {
+            if (_session != null) {
+                _session.close(true);
+                _session = null;
+            }
+            if (_client != null) {
+                _client.stop();
+                _client = null;
+            }
         }
-        if (_client != null) {
-            _client.stop();
-            _client = null;
+        catch (Exception e) {
+            log.error("Failed to close session", e);
         }
     }
 
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHDialog.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHDialog.java
index 8bd4de4..98959f2 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHDialog.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ssh/SSHDialog.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.core.utils.ssh;
 
 import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -27,7 +28,7 @@
  *
  * The implementation is a wrapper around SSHClient's executeCommand().
  */
-public class SSHDialog {
+public class SSHDialog implements Closeable {
 
     private static final int BUFFER_SIZE = 10 * 1024;
     private static final int DEFAULT_SSH_PORT = 22;
@@ -40,7 +41,7 @@
         /**
          * Disconnect session.
          */
-        public void disconnect();
+        public void close() throws IOException;
     }
 
     /**
@@ -102,7 +103,12 @@
      */
     @Override
     protected void finalize() {
-        disconnect();
+        try {
+            close();
+        }
+        catch (IOException e) {
+            log.error("Finalize exception", e);
+        }
     }
 
     /**
@@ -201,9 +207,9 @@
     /**
      * Disconnect session.
      */
-    public void disconnect() {
+    public void close() throws IOException {
         if (_client != null) {
-            _client.disconnect();
+            _client.close();
             _client = null;
         }
     }
@@ -297,9 +303,9 @@
             sink.setControl(
                 new Control() {
                     @Override
-                    public void disconnect() {
+                    public void close() throws IOException {
                         if (_client != null) {
-                            _client.disconnect();
+                            _client.close();
                         }
                     }
                 }
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/BasicTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/BasicTest.java
index c596a49..668e0a0 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/BasicTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/BasicTest.java
@@ -3,6 +3,7 @@
 import static org.junit.Assert.assertEquals;
 
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 
@@ -46,9 +47,14 @@
 
     @After
     public void tearDown() {
-        if (client != null) {
-            client.disconnect();
-            client = null;
+        try {
+            if (client != null) {
+                client.close();
+                client = null;
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 
@@ -73,22 +79,24 @@
     @Test
     public void testPassword()
     throws Exception {
-        client.setPassword(TestCommon.password);
-        client.connect();
-        client.authenticate();
-        ByteArrayOutputStream out = new ConstraintByteArrayOutputStream(500);
-        client.executeCommand(hello_command, null, out, null);
-        assertEquals(hello_result, new String(out.toByteArray(), "UTF-8"));
+        try (final ByteArrayOutputStream out = new 
ConstraintByteArrayOutputStream(500)) {
+            client.setPassword(TestCommon.password);
+            client.connect();
+            client.authenticate();
+            client.executeCommand(hello_command, null, out, null);
+            assertEquals(hello_result, new String(out.toByteArray(), "UTF-8"));
+        }
     }
 
     @Test
     public void testPK() throws Exception {
-        client.setKeyPair(TestCommon.keyPair);
-        client.connect();
-        client.authenticate();
-        ByteArrayOutputStream out = new ConstraintByteArrayOutputStream(500);
-        client.executeCommand(hello_command, null, out, null);
-        assertEquals(hello_result, new String(out.toByteArray(), "UTF-8"));
+        try (final ByteArrayOutputStream out = new 
ConstraintByteArrayOutputStream(500)) {
+            client.setKeyPair(TestCommon.keyPair);
+            client.connect();
+            client.authenticate();
+            client.executeCommand(hello_command, null, out, null);
+            assertEquals(hello_result, new String(out.toByteArray(), "UTF-8"));
+        }
     }
 
     @Test
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/CommandTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/CommandTest.java
index 1271e10..f9f7ae0 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/CommandTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/CommandTest.java
@@ -48,9 +48,14 @@
 
     @After
     public void tearDown() {
-        if (client != null) {
-            client.disconnect();
-            client = null;
+        try {
+            if (client != null) {
+                client.close();
+                client = null;
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 
@@ -72,34 +77,43 @@
     @Test
     public void testEchoStdout() throws Exception {
         String content = "hello\nworld!\nother\ndata";
-        InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
-        ByteArrayOutputStream stdout = new ByteArrayOutputStream();
-        ByteArrayOutputStream stderr = new ByteArrayOutputStream();
-        client.executeCommand("cat", stdin, stdout, stderr);
-        assertEquals(content, new String(stdout.toByteArray(), "UTF-8"));
-        assertEquals(0, stderr.size());
+        try (
+            final InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
+            final ByteArrayOutputStream stdout = new ByteArrayOutputStream();
+            final ByteArrayOutputStream stderr = new ByteArrayOutputStream();
+        ) {
+            client.executeCommand("cat", stdin, stdout, stderr);
+            assertEquals(content, new String(stdout.toByteArray(), "UTF-8"));
+            assertEquals(0, stderr.size());
+        }
     }
 
     @Test
     public void testEchoStderr() throws Exception {
         String content = "hello\nworld!\nother\ndata";
-        InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
-        ByteArrayOutputStream stdout = new ByteArrayOutputStream();
-        ByteArrayOutputStream stderr = new ByteArrayOutputStream();
-        client.executeCommand("cat >&2", stdin, stdout, stderr);
-        assertEquals(content, new String(stderr.toByteArray(), "UTF-8"));
-        assertEquals(0, stdout.size());
+        try (
+            final InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
+            final ByteArrayOutputStream stdout = new ByteArrayOutputStream();
+            final ByteArrayOutputStream stderr = new ByteArrayOutputStream();
+        ) {
+            client.executeCommand("cat >&2", stdin, stdout, stderr);
+            assertEquals(content, new String(stderr.toByteArray(), "UTF-8"));
+            assertEquals(0, stdout.size());
+        }
     }
 
     @Test
     public void testEchoBoth() throws Exception {
         String content = "hello\nworld!\nother\ndata";
-        InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
-        ByteArrayOutputStream stdout = new ByteArrayOutputStream();
-        ByteArrayOutputStream stderr = new ByteArrayOutputStream();
-        client.executeCommand("cat | tee /proc/self/fd/2", stdin, stdout, 
stderr);
-        assertEquals(content, new String(stdout.toByteArray(), "UTF-8"));
-        assertEquals(content, new String(stderr.toByteArray(), "UTF-8"));
+        try (
+            final InputStream stdin = new 
ByteArrayInputStream(content.getBytes("UTF-8"));
+            final ByteArrayOutputStream stdout = new ByteArrayOutputStream();
+            final ByteArrayOutputStream stderr = new ByteArrayOutputStream();
+        ) {
+            client.executeCommand("cat | tee /proc/self/fd/2", stdin, stdout, 
stderr);
+            assertEquals(content, new String(stdout.toByteArray(), "UTF-8"));
+            assertEquals(content, new String(stderr.toByteArray(), "UTF-8"));
+        }
     }
 
     /* Expected harmless exception of sshd (if used) */
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/PropertiesTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/PropertiesTest.java
index 78621b7..9007ea7 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/PropertiesTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/PropertiesTest.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.utils.ssh;
 
+import java.io.IOException;
+
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
@@ -12,10 +14,7 @@
 public class PropertiesTest {
     @Test
     public void testProperties() {
-        SSHClient ssh = null;
-        try {
-            ssh = new SSHClient();
-
+        try (final SSHClient ssh = new SSHClient()) {
             assertEquals(ssh.getHost(), null);
             assertEquals(ssh.getPort(), 22);
             assertEquals(ssh.getUser(), null);
@@ -33,10 +32,8 @@
             ssh.setHost("host2");
             assertEquals(ssh.getDisplayHost(), "user1@host2");
         }
-        finally {
-            if (ssh != null) {
-                ssh.disconnect();
-            }
+        catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 }
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/SSHDialogTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/SSHDialogTest.java
index f094d0a..2d5e189 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/SSHDialogTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/SSHDialogTest.java
@@ -132,7 +132,12 @@
                 }
             }
             finally {
-                _control.disconnect();
+                try {
+                    _control.close();
+                }
+                catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
             }
         }
     }
@@ -266,9 +271,14 @@
 
     @After
     public void tearDown() {
-        if (_sshdialog != null) {
-            _sshdialog.disconnect();
-            _sshdialog = null;
+        try {
+            if (_sshdialog != null) {
+                _sshdialog.close();
+                _sshdialog = null;
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 
@@ -304,27 +314,27 @@
 
     @Test
     public void testSimple() throws Throwable {
-        Sink sink = new Sink(
-            new String[] {
-                "start",
-                "text1",
-                "text2"
-            },
-            new String[] {
-                "text1",
-                "text2"
-            }
-        );
-        _sshdialog.connect();
-        _sshdialog.authenticate();
-        _sshdialog.executeCommand(
-            sink,
-            "cat",
-            new InputStream[] {
-                new ByteArrayInputStream("start\n".getBytes("UTF-8"))
-            }
-        );
-        sink.exception();
+        try (final InputStream start = new 
ByteArrayInputStream("start\n".getBytes("UTF-8"))) {
+            Sink sink = new Sink(
+                new String[] {
+                    "start",
+                    "text1",
+                    "text2"
+                },
+                new String[] {
+                    "text1",
+                    "text2"
+                }
+            );
+            _sshdialog.connect();
+            _sshdialog.authenticate();
+            _sshdialog.executeCommand(
+                sink,
+                "cat",
+                new InputStream[] {start}
+            );
+            sink.exception();
+        }
     }
 
     @Test(expected=TimeLimitExceededException.class)
@@ -349,27 +359,27 @@
 
     @Test(expected=RuntimeException.class)
     public void testStderr() throws Throwable {
-        Sink sink = new Sink(
-            new String[] {
-                "start",
-                "text1",
-                "text2"
-            },
-            new String[] {
-                "text1",
-                "text2"
-            }
-        );
-        _sshdialog.connect();
-        _sshdialog.authenticate();
-        _sshdialog.executeCommand(
-            sink,
-            "echo message >&2 && cat",
-            new InputStream[] {
-                new ByteArrayInputStream("start\n".getBytes("UTF-8"))
-            }
-        );
-        sink.exception();
+        try (final InputStream start = new 
ByteArrayInputStream("start\n".getBytes("UTF-8"))) {
+            Sink sink = new Sink(
+                new String[] {
+                    "start",
+                    "text1",
+                    "text2"
+                },
+                new String[] {
+                    "text1",
+                    "text2"
+                }
+            );
+            _sshdialog.connect();
+            _sshdialog.authenticate();
+            _sshdialog.executeCommand(
+                sink,
+                "echo message >&2 && cat",
+                new InputStream[] {start}
+            );
+            sink.exception();
+        }
     }
 
     @Test
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TimeoutTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TimeoutTest.java
index 3d346f6..04b8914 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TimeoutTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TimeoutTest.java
@@ -8,6 +8,7 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+import java.io.IOException;
 import javax.naming.TimeLimitExceededException;
 
 import org.apache.sshd.ClientSession;
@@ -46,9 +47,14 @@
 
     @After
     public void tearDown() {
-        if (client != null) {
-            client.disconnect();
-            client = null;
+        try {
+            if (client != null) {
+                client.close();
+                client = null;
+            }
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TransferTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TransferTest.java
index 0da2188..f006092 100644
--- 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TransferTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ssh/TransferTest.java
@@ -105,7 +105,7 @@
             }
             catch(Exception e) {}
             try {
-                client.disconnect();
+                client.close();
             }
             catch(Exception e) {}
             client = null;


-- 
To view, visit http://gerrit.ovirt.org/20796
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iae58c623eb1f3acabe2404022b9bdbae32095bbb
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to