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/10/25 14:27:07 UTC

jclouds git commit: Fix InitScriptConfigurationForTasks.initScriptPattern on Windows

Repository: jclouds
Updated Branches:
  refs/heads/master a1f6b7ebf -> 199e17ab2


Fix InitScriptConfigurationForTasks.initScriptPattern on Windows

This method has incorrect results when run on Windows. It is expected to
generate folder names compatible with Unix-like target machines, but by
using File.getParent it will actually be influenced by the host machine
OS type. This results in baseDir being set to a style that will not work
on Unix-like targets.


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

Branch: refs/heads/master
Commit: 199e17ab2ccc4681f6272290d2b9cdd435503b42
Parents: a1f6b7e
Author: Richard Downer <ri...@apache.org>
Authored: Tue Feb 10 20:13:04 2015 +0000
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Oct 25 16:05:39 2016 +0200

----------------------------------------------------------------------
 .../InitScriptConfigurationForTasks.java        | 14 ++++++++--
 .../InitScriptConfigurationForTasksTest.java    | 28 ++++++++++++++++----
 2 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/199e17ab/compute/src/main/java/org/jclouds/compute/callables/InitScriptConfigurationForTasks.java
----------------------------------------------------------------------
diff --git a/compute/src/main/java/org/jclouds/compute/callables/InitScriptConfigurationForTasks.java b/compute/src/main/java/org/jclouds/compute/callables/InitScriptConfigurationForTasks.java
old mode 100644
new mode 100755
index 33ecb11..3650197
--- a/compute/src/main/java/org/jclouds/compute/callables/InitScriptConfigurationForTasks.java
+++ b/compute/src/main/java/org/jclouds/compute/callables/InitScriptConfigurationForTasks.java
@@ -16,9 +16,9 @@
  */
 package org.jclouds.compute.callables;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import java.io.File;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.inject.Named;
@@ -47,7 +47,17 @@ public class InitScriptConfigurationForTasks {
    public InitScriptConfigurationForTasks initScriptPattern(
             @Named(PROPERTY_INIT_SCRIPT_PATTERN) String initScriptPattern) {
       this.initScriptPattern = checkNotNull(initScriptPattern, "initScriptPattern ex. /tmp/init-%s");
-      this.basedir = new File(initScriptPattern).getParent();
+      checkArgument(this.initScriptPattern.startsWith("/"), "initScriptPattern must be a UNIX-style path starting at the root (/)");
+
+      int lastSlash = initScriptPattern.lastIndexOf('/');
+      if (lastSlash == 0) {
+         // the only slash is at the beginning, so this is a filename but no subdirectories - e.g. "/foo"
+         this.basedir = "/";
+      } else {
+         // multiple path components - e.g. "/foo/bar"
+         this.basedir = initScriptPattern.substring(0, lastSlash);
+         // result: "/foo/bar" becomes "/foo"
+      }
       return this;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/199e17ab/compute/src/test/java/org/jclouds/compute/callables/InitScriptConfigurationForTasksTest.java
----------------------------------------------------------------------
diff --git a/compute/src/test/java/org/jclouds/compute/callables/InitScriptConfigurationForTasksTest.java b/compute/src/test/java/org/jclouds/compute/callables/InitScriptConfigurationForTasksTest.java
old mode 100644
new mode 100755
index 05aacf0..239c41d
--- a/compute/src/test/java/org/jclouds/compute/callables/InitScriptConfigurationForTasksTest.java
+++ b/compute/src/test/java/org/jclouds/compute/callables/InitScriptConfigurationForTasksTest.java
@@ -16,11 +16,8 @@
  */
 package org.jclouds.compute.callables;
 
-import static java.lang.String.format;
 import static org.testng.Assert.assertEquals;
 
-import java.io.File;
-
 import org.testng.annotations.Test;
 
 import com.google.inject.AbstractModule;
@@ -40,7 +37,7 @@ public class InitScriptConfigurationForTasksTest {
    public void testPatternUpdatesBasedir() {
       InitScriptConfigurationForTasks config = InitScriptConfigurationForTasks.create();
       config.initScriptPattern("/var/foo-init-%s");
-      assertEquals(config.getBasedir(), format("%svar", File.separator));
+      assertEquals(config.getBasedir(), "/var");
       assertEquals(config.getInitScriptPattern(), "/var/foo-init-%s");
    }
 
@@ -55,7 +52,7 @@ public class InitScriptConfigurationForTasksTest {
 
       }).getInstance(InitScriptConfigurationForTasks.class);
       config.initScriptPattern("/var/foo-init-%s");
-      assertEquals(config.getBasedir(), format("%svar", File.separator));
+      assertEquals(config.getBasedir(), "/var");
       assertEquals(config.getInitScriptPattern(), "/var/foo-init-%s");
    }
 
@@ -76,4 +73,25 @@ public class InitScriptConfigurationForTasksTest {
       assertEquals(config.getAnonymousTaskSuffixSupplier().get(), "1");
    }
 
+   @Test
+   public void testInitScriptPattern() throws Exception {
+      InitScriptConfigurationForTasks config = InitScriptConfigurationForTasks.create();
+      config.initScriptPattern("/var/tmp/jclouds-%s");
+      assertEquals(config.getBasedir(), "/var/tmp");
+      assertEquals(config.getInitScriptPattern(), "/var/tmp/jclouds-%s");
+   }
+
+   @Test
+   public void testInitScriptPatternAtRoot() throws Exception {
+      InitScriptConfigurationForTasks config = InitScriptConfigurationForTasks.create();
+      config.initScriptPattern("/jclouds-%s");
+      assertEquals(config.getBasedir(), "/");
+      assertEquals(config.getInitScriptPattern(), "/jclouds-%s");
+   }
+   
+   @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "initScriptPattern must be a UNIX-style path starting at the root \\(/\\)")
+   public void testInitScriptPatternIsUnixLike() {
+      InitScriptConfigurationForTasks config = InitScriptConfigurationForTasks.create();
+      config.initScriptPattern("jclouds-%s/foo");
+   }
 }