You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/01/22 12:59:16 UTC

jclouds git commit: JCLOUDS-1053: Fallback to -1 when sshj exit status returns null

Repository: jclouds
Updated Branches:
  refs/heads/master ef7b85130 -> a4b8a7379


JCLOUDS-1053: Fallback to -1 when sshj exit status returns null


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a4b8a737
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a4b8a737
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a4b8a737

Branch: refs/heads/master
Commit: a4b8a73790d057498cd7f88e936e870a61c1c98e
Parents: ef7b851
Author: Reijhanniel Jearl Campos <de...@gmail.com>
Authored: Tue Jan 19 19:41:52 2016 +0800
Committer: Ignasi Barrera <na...@apache.org>
Committed: Fri Jan 22 12:40:35 2016 +0100

----------------------------------------------------------------------
 .../jclouds/compute/domain/ExecResponse.java    |  6 ++-
 .../src/test/clojure/org/jclouds/ssh_test.clj   |  4 +-
 .../java/org/jclouds/sshj/SshjSshClient.java    |  3 +-
 .../org/jclouds/sshj/SshjSshClientTest.java     | 43 ++++++++++++++++++++
 4 files changed, 50 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a4b8a737/compute/src/main/java/org/jclouds/compute/domain/ExecResponse.java
----------------------------------------------------------------------
diff --git a/compute/src/main/java/org/jclouds/compute/domain/ExecResponse.java b/compute/src/main/java/org/jclouds/compute/domain/ExecResponse.java
index 345d6da..b74729b 100644
--- a/compute/src/main/java/org/jclouds/compute/domain/ExecResponse.java
+++ b/compute/src/main/java/org/jclouds/compute/domain/ExecResponse.java
@@ -22,14 +22,16 @@ import com.google.common.base.Objects;
 
 public class ExecResponse implements CustomizationResponse {
 
+   public static final int DEFAULT_EXIT_STATUS = -1;
+    
    private final String output;
    private final String error;
    private final int exitStatus;
 
-   public ExecResponse(String output, String error, int exitStatus) {
+   public ExecResponse(String output, String error, Integer exitStatus) {
       this.output = output;
       this.error = error;
-      this.exitStatus = exitStatus;
+      this.exitStatus = exitStatus != null ? exitStatus : DEFAULT_EXIT_STATUS;
    }
 
    public String getError() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a4b8a737/compute/src/test/clojure/org/jclouds/ssh_test.clj
----------------------------------------------------------------------
diff --git a/compute/src/test/clojure/org/jclouds/ssh_test.clj b/compute/src/test/clojure/org/jclouds/ssh_test.clj
index defc024..494c936 100644
--- a/compute/src/test/clojure/org/jclouds/ssh_test.clj
+++ b/compute/src/test/clojure/org/jclouds/ssh_test.clj
@@ -46,9 +46,9 @@
   "Default exec function - replies to ./runscript status by returning 1"
   [cmd]
   (merge
-   {:exit 0 :err "stderr" :out "stdout"}
+   {:exit (Integer. 0) :err "stderr" :out "stdout"}
    (condp = cmd
-       "/tmp/init-bootstrap status" {:exit 1 :out "[]"}
+       "/tmp/init-bootstrap status" {:exit (Integer. 1) :out "[]"}
        {})))
 
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a4b8a737/drivers/sshj/src/main/java/org/jclouds/sshj/SshjSshClient.java
----------------------------------------------------------------------
diff --git a/drivers/sshj/src/main/java/org/jclouds/sshj/SshjSshClient.java b/drivers/sshj/src/main/java/org/jclouds/sshj/SshjSshClient.java
index b07b0e2..32632ac 100644
--- a/drivers/sshj/src/main/java/org/jclouds/sshj/SshjSshClient.java
+++ b/drivers/sshj/src/main/java/org/jclouds/sshj/SshjSshClient.java
@@ -460,9 +460,8 @@ public class SshjSshClient implements SshClient {
             Command output = session.exec(checkNotNull(command, "command"));
             String outputString = IOUtils.readFully(output.getInputStream()).toString();
             output.join(sshClientConnection.getSessionTimeout(), TimeUnit.MILLISECONDS);
-            int errorStatus = output.getExitStatus();
             String errorString = IOUtils.readFully(output.getErrorStream()).toString();
-            return new ExecResponse(outputString, errorString, errorStatus);
+            return new ExecResponse(outputString, errorString, output.getExitStatus());
          } finally {
             clear();
          }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a4b8a737/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientTest.java
----------------------------------------------------------------------
diff --git a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientTest.java b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientTest.java
index eb2875b..1d2e826 100644
--- a/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientTest.java
+++ b/drivers/sshj/src/test/java/org/jclouds/sshj/SshjSshClientTest.java
@@ -22,20 +22,28 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
+import static org.testng.Assert.assertEquals;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.ConnectException;
 import java.net.SocketTimeoutException;
 import java.util.Properties;
+import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 
 import net.schmizz.sshj.SSHClient;
 import net.schmizz.sshj.common.SSHException;
 import net.schmizz.sshj.connection.ConnectionException;
+import net.schmizz.sshj.connection.channel.direct.PTYMode;
+import net.schmizz.sshj.connection.channel.direct.Session;
+import net.schmizz.sshj.connection.channel.direct.Session.Command;
 import net.schmizz.sshj.sftp.SFTPException;
 import net.schmizz.sshj.transport.TransportException;
 import net.schmizz.sshj.userauth.UserAuthException;
 
+import org.jclouds.compute.domain.ExecResponse;
 import org.jclouds.domain.LoginCredentials;
 import org.jclouds.logging.BufferLogger;
 import org.jclouds.logging.BufferLogger.Record;
@@ -47,12 +55,14 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.net.HostAndPort;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 
+
 @Test
 public class SshjSshClientTest {
 
@@ -205,5 +215,38 @@ public class SshjSshClientTest {
       logcheck.assertLogDoesntContain("attempt 2 of 5");
       Assert.assertEquals(Level.INFO, r.getLevel());
    }
+   
+   public void testExecResponseHasDefaultExitStatusIfDriverReturnsNullExitStatus() throws Exception {
+      SSHClientConnection mockConnection = createMock(SSHClientConnection.class);
+      net.schmizz.sshj.SSHClient mockClient = createMock(net.schmizz.sshj.SSHClient.class);
+      Session session = createMock(Session.class);
+      Command command = createMock(Command.class);
+      SshjSshClient client = createClient();
+      InputStream is = new ByteArrayInputStream( new byte[0] );
+
+      mockConnection.getSessionTimeout(); expectLastCall().andReturn(0);
+      mockClient.isConnected(); expectLastCall().andReturn(true);
+      mockClient.startSession(); expectLastCall().andReturn(session);
+      session.allocatePTY("vt100", 80, 24, 0, 0, ImmutableMap.<PTYMode, Integer> of());
+      expectLastCall();
+      session.exec("some-command"); expectLastCall().andReturn( command );
+      session.close(); expectLastCall();
+      command.join(0, TimeUnit.MILLISECONDS); expectLastCall();
+      command.getInputStream(); expectLastCall().andReturn(is);
+      command.getErrorStream(); expectLastCall().andReturn(is);
+      command.getExitStatus(); expectLastCall().andReturn(null);
+      replay(mockConnection);
+      replay(mockClient);
+      replay(session);
+      replay(command);
+      
+      mockConnection.ssh = mockClient;
+      client.sshClientConnection = mockConnection;
+      
+      ExecResponse response = client.exec( "some-command" );
+       
+      assertEquals(response.getExitStatus(), ExecResponse.DEFAULT_EXIT_STATUS);
+      verify(mockConnection, mockClient, session, command);
+   }
 
 }