You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/11/27 10:49:53 UTC

[5/9] incubator-brooklyn git commit: Add documentation and additional tests to SshToolAbstractIntegrationTest

Add documentation and additional tests to SshToolAbstractIntegrationTest


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0f2061ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0f2061ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0f2061ca

Branch: refs/heads/master
Commit: 0f2061caa02d59353d16b4b9c93ed0a186e1f9c5
Parents: b03f77e
Author: Valentin Aitken <va...@cloudsoftcorp.com>
Authored: Thu Nov 26 23:56:10 2015 +0200
Committer: Valentin Aitken <va...@cloudsoftcorp.com>
Committed: Fri Nov 27 01:41:16 2015 +0200

----------------------------------------------------------------------
 .../ssh/SshToolAbstractIntegrationTest.java     | 79 +++++++++++++++-----
 1 file changed, 61 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0f2061ca/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/SshToolAbstractIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/SshToolAbstractIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/SshToolAbstractIntegrationTest.java
index 07ca008..131caa3 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/SshToolAbstractIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/SshToolAbstractIntegrationTest.java
@@ -26,6 +26,7 @@ import static org.testng.Assert.fail;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.LinkedHashMap;
@@ -33,9 +34,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.core.internal.ssh.ShellTool;
-import org.apache.brooklyn.util.core.internal.ssh.SshException;
-import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.text.Identifiers;
@@ -53,17 +51,25 @@ import com.google.common.io.Files;
 
 /**
  * Test the operation of the {@link SshTool} utility class; to be extended to test concrete implementations.
- * 
- * Requires keys set up, e.g. running:
- * 
- * <pre>
- * cd ~/.ssh
- * ssh-keygen
- * id_rsa_with_passphrase
- * mypassphrase
- * mypassphrase
- * </pre>
- * 
+ * <p>
+ * The test <strong>assumes that</strong> you have configured keys for accessing localhost with the following keys:
+ * <ul>
+ * <li>passwordless ~/.ssh/id_rsa</li>
+ * <li>~/.ssh/id_rsa_with_passphrase with password mypassphrase </li>
+ * </ul>
+ *
+ * <br>
+ * Paths for the keys above can override the from Java System Properties.
+ * Here are the system properties you can override:
+ *
+ * <ul>
+ * <li>brooklyn.sshPrivateKeyWithPassphrase by default it is ~/.ssh/id_rsa_with_passphrase<br>
+ * <li>brooklyn.sshPrivateKeyPassphrase     by default it is mypassphrase<br>
+ * <li>brooklyn.sshDefaultPrivateKeyFile    by default it is ~/.ssh/id_rsa<br>
+ * </ul>
+ *
+ * Note that {@link #testSshKeyWithNoKeyDefaultsToIdrsa} requires a passwordless ~/.ssh/id_rsa
+ * </p>
  */
 public abstract class SshToolAbstractIntegrationTest extends ShellToolAbstractTest {
 
@@ -74,8 +80,9 @@ public abstract class SshToolAbstractIntegrationTest extends ShellToolAbstractTe
 
     // TODO No tests for retry logic and exception handing yet
 
-    public static final String SSH_KEY_WITH_PASSPHRASE = System.getProperty("sshPrivateKeyWithPassphrase", "~/.ssh/id_rsa_with_passphrase");
-    public static final String SSH_PASSPHRASE = System.getProperty("sshPrivateKeyPassphrase", "mypassphrase");
+    public static final String SSH_KEY_WITH_PASSPHRASE = System.getProperty("brooklyn.sshPrivateKeyWithPassphrase", "~/.ssh/id_rsa_with_passphrase");
+    public static final String SSH_PASSPHRASE = System.getProperty("brooklyn.sshPrivateKeyPassphrase", "mypassphrase");
+    public static final String SSH_DEFAULT_KEYFILE = System.getProperty("brooklyn.sshDefaultPrivateKeyFile", "~/.ssh/id_rsa");
 
     protected String remoteFilePath;
 
@@ -85,7 +92,7 @@ public abstract class SshToolAbstractIntegrationTest extends ShellToolAbstractTe
 
     @Override
     protected SshTool newTool() {
-        return newTool(ImmutableMap.of("host", "localhost", "privateKeyFile", "~/.ssh/id_rsa"));
+        return newTool(ImmutableMap.of("host", "localhost", "privateKeyFile", SSH_DEFAULT_KEYFILE));
     }
     
     @Override
@@ -264,8 +271,44 @@ public abstract class SshToolAbstractIntegrationTest extends ShellToolAbstractTe
     }
 
     @Test(groups = {"Integration"})
+    public void testSshKeyWithNoKeyDefaultsToIdrsa() throws Exception {
+        final SshTool localtool = newTool(ImmutableMap.<String,Object>builder()
+                .put(SshTool.PROP_HOST.getName(), "localhost")
+                .build());
+        tools.add(localtool);
+        localtool.connect();
+        assertEquals(localtool.execScript(MutableMap.<String,Object>of(), ImmutableList.of("date")), 0);
+    }
+
+    @Test(groups = {"Integration"})
+    public void testSshKeyWithPrivateKeyData() throws Exception {
+        final SshTool localtool = newTool(ImmutableMap.<String,Object>builder()
+                .put(SshTool.PROP_HOST.getName(), "localhost")
+                .put(SshTool.PROP_PRIVATE_KEY_DATA.getName(), new String(Files.toByteArray(new File(Os.tidyPath(SSH_DEFAULT_KEYFILE))), StandardCharsets.UTF_8))
+                .build());
+        localtool.connect();
+
+        assertEquals(localtool.execScript(MutableMap.<String,Object>of(), ImmutableList.of("date")), 0);
+
+        // Also needs the negative test to prove that we're really using an ssh-key with a passphrase
+        try {
+            final SshTool localtool2 = newTool(ImmutableMap.<String,Object>builder()
+                    .put(SshTool.PROP_HOST.getName(), "localhost")
+                    .put(SshTool.PROP_PRIVATE_KEY_DATA.getName(), "invalid data")
+                    .build());
+            localtool2.connect();
+            localtool2.execScript(MutableMap.<String,Object>of(), ImmutableList.of("date"));
+            // Notice that executing a command may succeed for SshCliToolIntegrationTest.testSshKeyWithPrivateKeyData if you already have valid keys loaded in the ssh-agent
+            fail();
+        } catch (Exception e) {
+            SshException se = Exceptions.getFirstThrowableOfType(e, SshException.class);
+            if (se == null) throw e;
+        }
+    }
+
+    @Test(groups = {"Integration"})
     public void testConnectWithInvalidUserThrowsException() throws Exception {
-        final ShellTool localtool = newTool(ImmutableMap.of("user", "wronguser", "host", "localhost", "privateKeyFile", "~/.ssh/id_rsa"));
+        final ShellTool localtool = newTool(ImmutableMap.of("user", "wronguser", "host", "localhost", "privateKeyFile", SSH_DEFAULT_KEYFILE));
         tools.add(localtool);
         try {
             connect(localtool);