CLOUDSTACK-9470: Fix for SshHelper - test_network_acl was failing on Vmware due to a bug in sshExecute, in which value returned was null and there was still stdout to consume. This fix addresses this problem, consuming stdout peoperly to return expected value in sshExecute
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1190d76a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1190d76a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1190d76a Branch: refs/heads/4.9-bountycastle-daan Commit: 1190d76a65e93eefec7c19255e07cea18cf4db1f Parents: 0671a80 Author: nvazquez <[email protected]> Authored: Wed Aug 24 09:32:55 2016 -0300 Committer: nvazquez <[email protected]> Committed: Fri Sep 2 12:16:58 2016 -0300 ---------------------------------------------------------------------- .../src/main/java/com/cloud/utils/ssh/SshHelper.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1190d76a/utils/src/main/java/com/cloud/utils/ssh/SshHelper.java ---------------------------------------------------------------------- diff --git a/utils/src/main/java/com/cloud/utils/ssh/SshHelper.java b/utils/src/main/java/com/cloud/utils/ssh/SshHelper.java index 4d7a852..1f6d30c 100644 --- a/utils/src/main/java/com/cloud/utils/ssh/SshHelper.java +++ b/utils/src/main/java/com/cloud/utils/ssh/SshHelper.java @@ -22,6 +22,10 @@ package com.cloud.utils.ssh; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -196,6 +200,16 @@ public class SshHelper { String result = sbResult.toString(); + if (StringUtils.isBlank(result)) { + try { + result = IOUtils.toString(stdout, StandardCharsets.UTF_8); + } + catch (IOException e) { + s_logger.error("Couldn't get content of input stream due to: " + e.getMessage()); + return new Pair<Boolean, String>(false, result); + } + } + if (sess.getExitStatus() == null) { //Exit status is NOT available. Returning failure result. s_logger.error(String.format("SSH execution of command %s has no exit status set. Result output: %s", command, result));
