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 <[email protected]> Authored: Tue Feb 10 20:13:04 2015 +0000 Committer: Ignasi Barrera <[email protected]> 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"); + } }
