You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whirr.apache.org by to...@apache.org on 2011/01/04 19:28:37 UTC

svn commit: r1055133 - in /incubator/whirr/trunk: ./ cli/src/test/java/org/apache/whirr/cli/command/ core/src/main/java/org/apache/whirr/service/ core/src/main/java/org/apache/whirr/ssh/ core/src/test/java/org/apache/whirr/service/ services/cassandra/s...

Author: tomwhite
Date: Tue Jan  4 18:28:37 2011
New Revision: 1055133

URL: http://svn.apache.org/viewvc?rev=1055133&view=rev
Log:
WHIRR-164. Tests fail if there is no ~/.ssh/id_rsa keypair. Contributed by Andrei Savu.

Modified:
    incubator/whirr/trunk/CHANGES.txt
    incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java
    incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java
    incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java
    incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java
    incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/ClusterSpec.java
    incubator/whirr/trunk/core/src/main/java/org/apache/whirr/ssh/KeyPair.java
    incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java
    incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java
    incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java
    incubator/whirr/trunk/services/cassandra/src/test/resources/whirr-cassandra-test.properties
    incubator/whirr/trunk/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java
    incubator/whirr/trunk/services/cdh/src/test/resources/whirr-hadoop-test.properties
    incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
    incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java
    incubator/whirr/trunk/services/hadoop/src/test/resources/whirr-hadoop-test.properties
    incubator/whirr/trunk/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java
    incubator/whirr/trunk/services/hbase/src/test/resources/whirr-hbase-test.properties
    incubator/whirr/trunk/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java
    incubator/whirr/trunk/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties

Modified: incubator/whirr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/CHANGES.txt?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/CHANGES.txt (original)
+++ incubator/whirr/trunk/CHANGES.txt Tue Jan  4 18:28:37 2011
@@ -96,6 +96,9 @@ Trunk (unreleased changes)
     WHIRR-185. [ZooKeeper] Fix selection of instances for getHosts() call.
     (Lars George via tomwhite)
 
+    WHIRR-164. Tests fail if there is no ~/.ssh/id_rsa keypair.
+    (Andrei Savu via tomwhite)
+
 Release 0.2.0 - 2010-11-04
 
   NEW FEATURES

Modified: incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java (original)
+++ incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java Tue Jan  4 18:28:37 2011
@@ -21,14 +21,17 @@ package org.apache.whirr.cli.command;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
+import java.io.File;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.util.List;
+import java.util.Map;
 
 import joptsimple.OptionSet;
 
 import org.apache.whirr.service.ClusterSpec;
 import org.apache.whirr.service.ServiceFactory;
+import org.apache.whirr.ssh.KeyPair;
 import org.junit.Test;
 
 public class AbstractClusterSpecCommandTest {
@@ -44,9 +47,12 @@ public class AbstractClusterSpecCommandT
       }
     };
 
+    Map<String, File> keys = KeyPair.generateTemporaryFiles();
     OptionSet optionSet = clusterSpecCommand.parser.parse(
         "--service-name", "overridden-test-service",
-        "--config", "whirr-override-test.properties");
+        "--config", "whirr-override-test.properties",
+        "--private-key-file", keys.get("private").getAbsolutePath()
+    );
     ClusterSpec clusterSpec = clusterSpecCommand.getClusterSpec(optionSet);
     assertThat(clusterSpec.getServiceName(), is("overridden-test-service"));
     assertThat(clusterSpec.getClusterName(), is("test-cluster"));
@@ -66,9 +72,12 @@ public class AbstractClusterSpecCommandT
       }
     };
 
+    Map<String, File> keys = KeyPair.generateTemporaryFiles();
     OptionSet optionSet = clusterSpecCommand.parser.parse(
         "--service-name", "foo",
-        "--config", "whirr-override-test.properties");
+        "--config", "whirr-override-test.properties",
+        "--private-key-file", keys.get("private").getAbsolutePath()
+    );
     ClusterSpec clusterSpec = clusterSpecCommand.getClusterSpec(optionSet);
     // this should fail - non-existent service
     clusterSpecCommand.createService("bar");

Modified: incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java (original)
+++ incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java Tue Jan  4 18:28:37 2011
@@ -33,6 +33,8 @@ import java.io.PrintStream;
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.whirr.service.ClusterSpec;
 import org.apache.whirr.service.Service;
 import org.apache.whirr.service.ServiceFactory;
@@ -85,12 +87,15 @@ public class DestroyClusterCommandTest {
         "--provider", "rackspace",
         "--identity", "myusername", "--credential", "mypassword",
         "--private-key-file", keys.get("private").getAbsolutePath(),
-        "--public-key-file", keys.get("public").getAbsolutePath()
+        "--version", "version-string"
         ));
     
     assertThat(rc, is(0));
 
-    ClusterSpec expectedClusterSpec = new ClusterSpec();
+    Configuration conf = new PropertiesConfiguration();
+    conf.addProperty("whirr.version", "version-string");
+
+    ClusterSpec expectedClusterSpec = ClusterSpec.withNoDefaults(conf);
     expectedClusterSpec.setServiceName("test-service");
     expectedClusterSpec.setProvider("rackspace");
     expectedClusterSpec.setIdentity("myusername");

Modified: incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java (original)
+++ incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java Tue Jan  4 18:28:37 2011
@@ -35,6 +35,8 @@ import java.io.PrintStream;
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.whirr.service.Cluster;
 import org.apache.whirr.service.ClusterSpec;
 import org.apache.whirr.service.Service;
@@ -91,12 +93,15 @@ public class LaunchClusterCommandTest {
         "--provider", "rackspace",
         "--identity", "myusername", "--credential", "mypassword",
         "--private-key-file", keys.get("private").getAbsolutePath(),
-        "--public-key-file", keys.get("public").getAbsolutePath()
+        "--version", "version-string"
         ));
     
     assertThat(rc, is(0));
 
-    ClusterSpec expectedClusterSpec = new ClusterSpec();
+    Configuration conf = new PropertiesConfiguration();
+    conf.addProperty("whirr.version", "version-string");
+
+    ClusterSpec expectedClusterSpec = ClusterSpec.withNoDefaults(conf);
     expectedClusterSpec.setInstanceTemplates(Lists.newArrayList(
         new ClusterSpec.InstanceTemplate(1, Sets.newHashSet("role1", "role2")),
         new ClusterSpec.InstanceTemplate(2, Sets.newHashSet("role3"))

Modified: incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java (original)
+++ incubator/whirr/trunk/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java Tue Jan  4 18:28:37 2011
@@ -29,13 +29,16 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.PrintStream;
 import java.util.Collections;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.whirr.service.ClusterSpec;
 import org.apache.whirr.service.Service;
 import org.apache.whirr.service.ServiceFactory;
+import org.apache.whirr.ssh.KeyPair;
 import org.hamcrest.Matcher;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.NodeState;
@@ -95,13 +98,16 @@ public class ListClusterCommandTest {
         Lists.newArrayList("10.0.0.2"), null);
     when(service.getNodes((ClusterSpec) any())).thenReturn(
         (Set) Sets.newLinkedHashSet(Lists.newArrayList(node1, node2)));
-    
+
     ListClusterCommand command = new ListClusterCommand(factory);
-    
+
+    Map<String, File> keys = KeyPair.generateTemporaryFiles();
     int rc = command.run(null, out, null, Lists.newArrayList(
         "--service-name", "test-service",
         "--cluster-name", "test-cluster",
-        "--identity", "myusername"));
+        "--identity", "myusername",
+        "--private-key-file", keys.get("private").getAbsolutePath())
+    );
     
     assertThat(rc, is(0));
     

Modified: incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/ClusterSpec.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/ClusterSpec.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/ClusterSpec.java (original)
+++ incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/ClusterSpec.java Tue Jan  4 18:28:37 2011
@@ -25,6 +25,7 @@ import static org.jclouds.io.Payloads.ne
 import static org.jclouds.util.Utils.toStringAndClose;
 import static org.apache.whirr.ssh.KeyPair.sameKeyPair;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -36,6 +37,7 @@ import java.io.UnsupportedEncodingExcept
 import java.net.URLEncoder;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.jcraft.jsch.JSch;
@@ -201,7 +203,44 @@ public class ClusterSpec {
   }
 
   private static final String DEFAULT_PROPERTIES = "whirr-default.properties";
-  
+
+  /**
+   * Create an instance that uses a temporary RSA key pair.
+   */
+  @VisibleForTesting
+  public static ClusterSpec withTemporaryKeys()
+  throws ConfigurationException, JSchException, IOException {
+    return withTemporaryKeys(new PropertiesConfiguration());
+  }
+  @VisibleForTesting
+  public static ClusterSpec withTemporaryKeys(Configuration conf) 
+  throws ConfigurationException, JSchException, IOException {
+    
+    if (!conf.containsKey(Property.PRIVATE_KEY_FILE.getConfigName())) {
+      Map<String, File> keys = org.apache.whirr.ssh.KeyPair.generateTemporaryFiles();
+      
+      conf.addProperty(Property.PRIVATE_KEY_FILE.getConfigName(), 
+        keys.get("private").getAbsolutePath());
+      conf.addProperty(Property.PUBLIC_KEY_FILE.getConfigName(), 
+        keys.get("public").getAbsolutePath());
+    }
+    
+    return new ClusterSpec(conf);
+  }
+
+  /**
+   * Create new empty instance for testing.
+   */
+  @VisibleForTesting
+  public static ClusterSpec withNoDefaults() throws ConfigurationException {
+    return withNoDefaults(new PropertiesConfiguration());
+  }
+  @VisibleForTesting
+  public static ClusterSpec withNoDefaults(Configuration conf)
+  throws ConfigurationException {
+    return new ClusterSpec(conf, false);
+  }
+
   private List<InstanceTemplate> instanceTemplates;
   private String serviceName;
   private String provider;
@@ -222,17 +261,23 @@ public class ClusterSpec {
   public ClusterSpec() throws ConfigurationException {
     this(new PropertiesConfiguration());
   }
-  
+
+  public ClusterSpec(Configuration config) throws ConfigurationException {
+      this(config, true); // load default configs
+  }
+
   /**
    * 
    * @throws ConfigurationException if something is wrong
    */
-  public ClusterSpec(Configuration config)
+  public ClusterSpec(Configuration config, boolean loadDefaults)
       throws ConfigurationException {
 
     CompositeConfiguration c = new CompositeConfiguration();
     c.addConfiguration(config);
-    c.addConfiguration(new PropertiesConfiguration(DEFAULT_PROPERTIES));
+    if (loadDefaults) {
+      c.addConfiguration(new PropertiesConfiguration(DEFAULT_PROPERTIES));
+    }
 
     setServiceName(c.getString(Property.SERVICE_NAME.getConfigName()));
     setInstanceTemplates(InstanceTemplate.parse(
@@ -249,19 +294,19 @@ public class ClusterSpec {
       String publicKeyPath = c.getString(Property.PUBLIC_KEY_FILE.getConfigName());
       publicKeyPath = (publicKeyPath == null && privateKeyPath != null) ?
                 privateKeyPath + ".pub" : publicKeyPath;
+      if(privateKeyPath != null && publicKeyPath != null) {
+        KeyPair pair = KeyPair.load(new JSch(), privateKeyPath, publicKeyPath);
+        if (pair.isEncrypted()) {
+          throw new ConfigurationException("Key pair is encrypted");
+        }
+        if (!sameKeyPair(new File(privateKeyPath), new File(publicKeyPath))) {
+          throw new ConfigurationException("Both keys should belong " +
+              "to the same key pair");
+        }
 
-      KeyPair pair = KeyPair.load(new JSch(), privateKeyPath, publicKeyPath);
-      if (pair.isEncrypted()) {
-        throw new ConfigurationException("Key pair is encrypted");
-      }
-      if (!sameKeyPair(new File(privateKeyPath), new File(publicKeyPath))) {
-        throw new ConfigurationException("Both keys should belong " +
-           "to the same key pair");
+        setPrivateKey(new File(privateKeyPath));
+        setPublicKey(new File(publicKeyPath));
       }
-
-      setPrivateKey(new File(privateKeyPath));
-      setPublicKey(new File(publicKeyPath));
-
     } catch (JSchException e) {
       throw new ConfigurationException("Invalid key pair", e);
 
@@ -279,7 +324,7 @@ public class ClusterSpec {
     setVersion(c.getString(Property.VERSION.getConfigName()));
     String runUrlBase = c.getString(Property.RUN_URL_BASE.getConfigName());
 
-    if (runUrlBase == null) {
+    if (runUrlBase == null && getVersion() != null) {
       try {
         runUrlBase = String.format("http://whirr.s3.amazonaws.com/%s/",
             URLEncoder.encode(getVersion(), "UTF-8"));

Modified: incubator/whirr/trunk/core/src/main/java/org/apache/whirr/ssh/KeyPair.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/main/java/org/apache/whirr/ssh/KeyPair.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/main/java/org/apache/whirr/ssh/KeyPair.java (original)
+++ incubator/whirr/trunk/core/src/main/java/org/apache/whirr/ssh/KeyPair.java Tue Jan  4 18:28:37 2011
@@ -90,14 +90,29 @@ public class KeyPair {
     File privateKeyFile = File.createTempFile("private", "key");
     privateKeyFile.deleteOnExit();
     Files.write(keys.get("private").getBytes(), privateKeyFile);
+    setPermissionsTo600(privateKeyFile);
 
     File publicKeyFile = new File(privateKeyFile.getAbsolutePath() + ".pub");
     publicKeyFile.deleteOnExit();
     Files.write(keys.get("public").getBytes(), publicKeyFile);
+    setPermissionsTo600(publicKeyFile);
 
     return ImmutableMap.<String, File> of("public", publicKeyFile,
               "private", privateKeyFile);
   }
+  
+  /**
+   * Set file permissions to 600 (unix)
+   */
+  public static void setPermissionsTo600(File f) {
+    f.setReadable(false, false);
+    f.setReadable(true, true);
+
+    f.setWritable(false, false);
+    f.setWritable(true, true);
+
+    f.setExecutable(false);
+  }
 
   public static boolean sameKeyPair(File privateKeyFile, File publicKeyFile) throws IOException {
     try {

Modified: incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java (original)
+++ incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java Tue Jan  4 18:28:37 2011
@@ -46,40 +46,42 @@ import org.junit.Test;
 public class ClusterSpecTest {
   
   @Test
-  public void testDefaultsAreSet() throws ConfigurationException {
-    ClusterSpec spec = new ClusterSpec();
+  public void testDefaultsAreSet()
+  throws ConfigurationException, JSchException, IOException {
+    ClusterSpec spec = ClusterSpec.withTemporaryKeys();
     assertThat(spec.getRunUrlBase(),
         startsWith("http://whirr.s3.amazonaws.com/"));
   }
 
   @Test
-  public void testDefaultsCanBeOverridden() throws ConfigurationException {
+  public void testDefaultsCanBeOverridden()
+  throws ConfigurationException, JSchException, IOException {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty(ClusterSpec.Property.RUN_URL_BASE.getConfigName(),
         "http://example.org");
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec spec = ClusterSpec.withNoDefaults(conf);
     assertThat(spec.getRunUrlBase(), is("http://example.org"));
   }
 
   @Test
   public void testVersionInRunUrlbaseIsUrlEncoded()
-      throws ConfigurationException {
+  throws ConfigurationException, JSchException, IOException {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty(ClusterSpec.Property.VERSION.getConfigName(), "0.1.0+1");
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec spec = ClusterSpec.withNoDefaults(conf);
     assertThat(spec.getRunUrlBase(),
         is("http://whirr.s3.amazonaws.com/0.1.0%2B1/"));
   }
   
   @Test
   public void testGetConfigurationForKeysWithPrefix()
-      throws ConfigurationException {
+  throws ConfigurationException, JSchException, IOException {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty("a.b", 1);
     conf.setProperty("b.a", 2);
     conf.setProperty("a.c", 3);
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec spec = ClusterSpec.withNoDefaults(conf);
     Configuration prefixConf = spec.getConfigurationForKeysWithPrefix("a");
 
     List<String> prefixKeys = Lists.newArrayList();
@@ -114,7 +116,7 @@ public class ClusterSpecTest {
     conf.setProperty("whirr.private-key-file", keys.get("private").getAbsolutePath());
     // If no public-key-file is specified it should append .pub to the private-key-file
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec spec = ClusterSpec.withNoDefaults(conf);
     Assert.assertEquals(IOUtils.toString(
             new FileReader(keys.get("public"))), spec.readPublicKey());
   }
@@ -131,7 +133,7 @@ public class ClusterSpecTest {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty("whirr.private-key-file", privateKeyFile.getAbsolutePath());
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec.withNoDefaults(conf);
   }
 
   @Test(expected = ConfigurationException.class)
@@ -142,7 +144,7 @@ public class ClusterSpecTest {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty("whirr.private-key-file", privateKey.getAbsolutePath());
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec.withNoDefaults(conf);
   }
 
   @Test(expected = ConfigurationException.class)
@@ -150,7 +152,7 @@ public class ClusterSpecTest {
     Configuration conf = new PropertiesConfiguration();
     conf.setProperty("whirr.private-key-file", "/dummy/path/that/does/not/exists");
 
-    ClusterSpec spec = new ClusterSpec(conf);      
+    ClusterSpec.withNoDefaults(conf);      
   }
 
   @Test(expected = ConfigurationException.class)
@@ -161,7 +163,7 @@ public class ClusterSpecTest {
     conf.setProperty("whirr.private-key-file", privateKey.getAbsolutePath());
     conf.setProperty("whirr.public-key-file", "/dummy/path/that/does/not/exists");
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec.withNoDefaults(conf);
   }
 
   @Test(expected = ConfigurationException.class)
@@ -176,7 +178,7 @@ public class ClusterSpecTest {
     conf.setProperty("whirr.private-key-file", privateKey.getAbsolutePath());
     conf.setProperty("whirr.public-key-file", publicKey.getAbsolutePath());
 
-    ClusterSpec spec = new ClusterSpec(conf);
+    ClusterSpec.withNoDefaults(conf);
   }
 
   @Test(expected = ConfigurationException.class)
@@ -188,6 +190,6 @@ public class ClusterSpecTest {
     conf.setProperty("whirr.private-key-file", first.get("private").getAbsolutePath());
     conf.setProperty("whirr.public-key-file", second.get("public").getAbsolutePath());
 
-    ClusterSpec spec = new ClusterSpec(conf);      
+    ClusterSpec.withNoDefaults(conf);      
   }
 }

Modified: incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java (original)
+++ incubator/whirr/trunk/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java Tue Jan  4 18:28:37 2011
@@ -21,20 +21,23 @@ package org.apache.whirr.service;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import com.jcraft.jsch.JSchException;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.whirr.service.jclouds.TemplateBuilderStrategy;
 import org.jclouds.compute.domain.TemplateBuilder;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.IOException;
+
 public class TemplateBuilderStrategyTest {
   
   private TemplateBuilderStrategy strategy = new TemplateBuilderStrategy();
   private ClusterSpec spec;
   
   @Before
-  public void setUp() throws ConfigurationException {
-    spec = new ClusterSpec();
+  public void setUp() throws ConfigurationException, JSchException, IOException {
+    spec = ClusterSpec.withTemporaryKeys();
   }
   
   @Test

Modified: incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java (original)
+++ incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java Tue Jan  4 18:28:37 2011
@@ -58,12 +58,8 @@ public class CassandraServiceTest {
       config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
     }
     config.addConfiguration(new PropertiesConfiguration("whirr-cassandra-test.properties"));
-    clusterSpec = new ClusterSpec(config);
-    if (clusterSpec.getPrivateKey() == null) {
-      Map<String, String> pair = KeyPair.generate();
-      clusterSpec.setPublicKey(pair.get("public"));
-      clusterSpec.setPrivateKey(pair.get("private"));
-    }
+    clusterSpec = ClusterSpec.withTemporaryKeys(config);
+    
     service = new Service();
     cluster = service.launchCluster(clusterSpec);
 

Modified: incubator/whirr/trunk/services/cassandra/src/test/resources/whirr-cassandra-test.properties
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/test/resources/whirr-cassandra-test.properties?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/test/resources/whirr-cassandra-test.properties (original)
+++ incubator/whirr/trunk/services/cassandra/src/test/resources/whirr-cassandra-test.properties Tue Jan  4 18:28:37 2011
@@ -20,4 +20,3 @@ whirr.instance-templates=2 cassandra
 whirr.provider=ec2
 whirr.identity=${sys:whirr.test.identity}
 whirr.credential=${sys:whirr.test.credential}
-whirr.private-key-file=${sys:user.home}/.ssh/id_rsa

Modified: incubator/whirr/trunk/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java (original)
+++ incubator/whirr/trunk/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java Tue Jan  4 18:28:37 2011
@@ -71,12 +71,7 @@ public class CdhHadoopServiceTest {
       config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
     }
     config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties"));
-    clusterSpec = new ClusterSpec(config);
-    if (clusterSpec.getPrivateKey() == null) {
-      Map<String, String> pair = KeyPair.generate();
-      clusterSpec.setPublicKey(pair.get("public"));
-      clusterSpec.setPrivateKey(pair.get("private"));
-    }
+    clusterSpec = ClusterSpec.withTemporaryKeys(config);
     service = new Service();
     
     cluster = service.launchCluster(clusterSpec);

Modified: incubator/whirr/trunk/services/cdh/src/test/resources/whirr-hadoop-test.properties
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cdh/src/test/resources/whirr-hadoop-test.properties?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cdh/src/test/resources/whirr-hadoop-test.properties (original)
+++ incubator/whirr/trunk/services/cdh/src/test/resources/whirr-hadoop-test.properties Tue Jan  4 18:28:37 2011
@@ -20,6 +20,5 @@ whirr.instance-templates=1 jt+nn,1 dn+tt
 whirr.provider=ec2
 whirr.identity=${sys:whirr.test.identity}
 whirr.credential=${sys:whirr.test.credential}
-whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
 whirr.hadoop-install-runurl=cloudera/cdh/install
 whirr.hadoop-configure-runurl=cloudera/cdh/post-configure

Modified: incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java (original)
+++ incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java Tue Jan  4 18:28:37 2011
@@ -33,6 +33,7 @@ import java.net.InetAddress;
 import org.apache.whirr.net.DnsUtil;
 import org.apache.whirr.service.Cluster;
 import org.apache.whirr.service.ClusterSpec;
+import org.apache.whirr.ssh.KeyPair;
 
 public class HadoopProxy {
 
@@ -54,6 +55,7 @@ public class HadoopProxy {
       identity = File.createTempFile("hadoop", "key");
       identity.deleteOnExit();
       Files.write(ByteStreams.toByteArray(clusterSpec.getPrivateKey().getInput()), identity);
+      KeyPair.setPermissionsTo600(identity);
     }
     String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity;
     InetAddress namenode = HadoopCluster.getNamenodePublicAddress(cluster);

Modified: incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java (original)
+++ incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java Tue Jan  4 18:28:37 2011
@@ -77,12 +77,7 @@ public class HadoopServiceController {
       config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
     }
     config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties"));
-    clusterSpec = new ClusterSpec(config);
-    if (clusterSpec.getPrivateKey() == null) {
-      Map<String, String> pair = KeyPair.generate();
-      clusterSpec.setPublicKey(pair.get("public"));
-      clusterSpec.setPrivateKey(pair.get("private"));
-    }
+    clusterSpec = ClusterSpec.withTemporaryKeys(config);
     service = new Service();
     
     cluster = service.launchCluster(clusterSpec);

Modified: incubator/whirr/trunk/services/hadoop/src/test/resources/whirr-hadoop-test.properties
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/test/resources/whirr-hadoop-test.properties?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/test/resources/whirr-hadoop-test.properties (original)
+++ incubator/whirr/trunk/services/hadoop/src/test/resources/whirr-hadoop-test.properties Tue Jan  4 18:28:37 2011
@@ -20,4 +20,3 @@ whirr.instance-templates=1 jt+nn,1 dn+tt
 whirr.provider=ec2
 whirr.identity=${sys:whirr.test.identity}
 whirr.credential=${sys:whirr.test.credential}
-whirr.private-key-file=${sys:user.home}/.ssh/id_rsa

Modified: incubator/whirr/trunk/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java (original)
+++ incubator/whirr/trunk/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java Tue Jan  4 18:28:37 2011
@@ -75,12 +75,7 @@ public class HBaseServiceController {
       config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
     }
     config.addConfiguration(new PropertiesConfiguration("whirr-hbase-test.properties"));
-    clusterSpec = new ClusterSpec(config);
-    if (clusterSpec.getPrivateKey() == null) {
-      Map<String, String> pair = KeyPair.generate();
-      clusterSpec.setPublicKey(pair.get("public"));
-      clusterSpec.setPrivateKey(pair.get("private"));
-    }
+    clusterSpec = ClusterSpec.withTemporaryKeys(config);
     service = new Service();
 
     cluster = service.launchCluster(clusterSpec);

Modified: incubator/whirr/trunk/services/hbase/src/test/resources/whirr-hbase-test.properties
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hbase/src/test/resources/whirr-hbase-test.properties?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hbase/src/test/resources/whirr-hbase-test.properties (original)
+++ incubator/whirr/trunk/services/hbase/src/test/resources/whirr-hbase-test.properties Tue Jan  4 18:28:37 2011
@@ -20,4 +20,3 @@ whirr.instance-templates=1 zk,1 nn+jt+hb
 whirr.provider=ec2
 whirr.identity=${sys:whirr.test.identity}
 whirr.credential=${sys:whirr.test.credential}
-whirr.private-key-file=${sys:user.home}/.ssh/id_rsa

Modified: incubator/whirr/trunk/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java (original)
+++ incubator/whirr/trunk/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java Tue Jan  4 18:28:37 2011
@@ -55,13 +55,9 @@ public class ZooKeeperServiceTest {
       config.addConfiguration(new PropertiesConfiguration(System.getProperty("config")));
     }
     config.addConfiguration(new PropertiesConfiguration("whirr-zookeeper-test.properties"));
-    clusterSpec = new ClusterSpec(config);
-    if (clusterSpec.getPrivateKey() == null) {
-      Map<String, String> pair = KeyPair.generate();
-      clusterSpec.setPublicKey(pair.get("public"));
-      clusterSpec.setPrivateKey(pair.get("private"));
-    }
+    clusterSpec = ClusterSpec.withTemporaryKeys(config);
     service = new Service();
+    
     cluster = service.launchCluster(clusterSpec);
     hosts = ZooKeeperCluster.getHosts(cluster);
   }

Modified: incubator/whirr/trunk/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties?rev=1055133&r1=1055132&r2=1055133&view=diff
==============================================================================
--- incubator/whirr/trunk/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties (original)
+++ incubator/whirr/trunk/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties Tue Jan  4 18:28:37 2011
@@ -20,4 +20,3 @@ whirr.instance-templates=2 zk
 whirr.provider=ec2
 whirr.identity=${sys:whirr.test.identity}
 whirr.credential=${sys:whirr.test.credential}
-whirr.private-key-file=${sys:user.home}/.ssh/id_rsa