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
