diff options
author | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-08-12 14:25:26 +0200 |
---|---|---|
committer | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-08-12 14:25:50 +0200 |
commit | 80aa231222ce602fb955f5d9edf0876dab354c23 (patch) | |
tree | a5362fec15cbb59cad2cc5d702d8aec628d97542 /server/process | |
parent | cae764c4348e68ceb31012f2bc4224de70a61524 (diff) | |
download | sonarqube-80aa231222ce602fb955f5d9edf0876dab354c23.tar.gz sonarqube-80aa231222ce602fb955f5d9edf0876dab354c23.zip |
SONAR-4898 - Can run in install dir with spaces in path.
Diffstat (limited to 'server/process')
-rw-r--r-- | server/process/sonar-dummy-app/pom.xml | 2 | ||||
-rw-r--r-- | server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkProcess.java (renamed from server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkApp.java) | 13 | ||||
-rw-r--r-- | server/process/sonar-process-test/src/test/java/org/sonar/application/ProcessWrapperTest.java | 42 | ||||
-rw-r--r-- | server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java | 15 |
4 files changed, 61 insertions, 11 deletions
diff --git a/server/process/sonar-dummy-app/pom.xml b/server/process/sonar-dummy-app/pom.xml index 4829cd17693..ded06395f6e 100644 --- a/server/process/sonar-dummy-app/pom.xml +++ b/server/process/sonar-dummy-app/pom.xml @@ -69,7 +69,7 @@ <archive> <manifest> <addClasspath>false</addClasspath> - <mainClass>org.sonar.application.DummyOkApp</mainClass> + <mainClass>org.sonar.application.DummyOkProcess</mainClass> </manifest> </archive> </configuration> diff --git a/server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkApp.java b/server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkProcess.java index 74925472e97..10b95d86253 100644 --- a/server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkApp.java +++ b/server/process/sonar-dummy-app/src/main/java/org/sonar/application/DummyOkProcess.java @@ -24,17 +24,20 @@ import org.slf4j.LoggerFactory; import org.sonar.process.MonitoredProcess; import org.sonar.process.Props; +import java.io.File; import java.util.Properties; -public class DummyOkApp extends MonitoredProcess { +public class DummyOkProcess extends MonitoredProcess { - private static final Logger LOGGER = LoggerFactory.getLogger(DummyOkApp.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DummyOkProcess.class); private boolean isReady = false; private boolean isRunning = true; - protected DummyOkApp(Props props) throws Exception { + protected DummyOkProcess(Props props) throws Exception { super(props); + File temp = File.createTempFile("hello", ".tmp"); + } @Override @@ -63,8 +66,8 @@ public class DummyOkApp extends MonitoredProcess { public static void main(String[] args) throws Exception { Props props = new Props(new Properties()); - props.set(MonitoredProcess.NAME_PROPERTY, DummyOkApp.class.getSimpleName()); - new DummyOkApp(props).start(); + props.set(MonitoredProcess.NAME_PROPERTY, DummyOkProcess.class.getSimpleName()); + new DummyOkProcess(props).start(); System.exit(1); } } diff --git a/server/process/sonar-process-test/src/test/java/org/sonar/application/ProcessWrapperTest.java b/server/process/sonar-process-test/src/test/java/org/sonar/application/ProcessWrapperTest.java index 1555df9ae8d..760b964cf67 100644 --- a/server/process/sonar-process-test/src/test/java/org/sonar/application/ProcessWrapperTest.java +++ b/server/process/sonar-process-test/src/test/java/org/sonar/application/ProcessWrapperTest.java @@ -20,6 +20,7 @@ package org.sonar.application; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -27,10 +28,12 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.sonar.process.MonitoredProcess; import org.sonar.process.ProcessWrapper; +import org.sonar.process.Props; import java.io.File; import java.io.IOException; import java.net.ServerSocket; +import java.util.Properties; import static org.fest.assertions.Assertions.assertThat; import static org.fest.assertions.Fail.fail; @@ -41,7 +44,7 @@ public class ProcessWrapperTest { @Rule public TemporaryFolder temp = new TemporaryFolder(); - private static final String DUMMY_OK_APP = "org.sonar.application.DummyOkApp"; + private static final String DUMMY_OK_APP = "org.sonar.application.DummyOkProcess"; int freePort; File dummyAppJar; @@ -92,10 +95,11 @@ public class ProcessWrapperTest { @Test public void execute_dummy_app() throws Exception { - ProcessWrapper process = new ProcessWrapper("DummyOkApp") - .addProperty(MonitoredProcess.NAME_PROPERTY, "DummyOkApp") + ProcessWrapper process = new ProcessWrapper("DummyOkProcess") + .addProperty(MonitoredProcess.NAME_PROPERTY, "DummyOkProcess") .addClasspath(dummyAppJar.getAbsolutePath()) .setWorkDir(temp.getRoot()) + .setTempDirectory(temp.getRoot()) .setJmxPort(freePort) .setClassName(DUMMY_OK_APP); @@ -113,4 +117,36 @@ public class ProcessWrapperTest { } } + + + @Test + public void execute_dummy_in_space_folder_app() throws Exception { + + // 0 create a home with space... + File home = temp.newFolder("t est"); + assertThat(home.canWrite()).isTrue(); + File lib = new File(home, "lib"); + File tempdir = new File(home, "temp"); + FileUtils.copyFileToDirectory(dummyAppJar, lib); + + // 1 Create Properties + Props props = new Props(new Properties()); + props.set("spaceHome", home.getAbsolutePath()); + + // 3 start dummy app + File effectiveHome = props.fileOf("spaceHome"); + + String cp = FilenameUtils.concat(new File(effectiveHome, "lib").getAbsolutePath(), "*"); + System.out.println("cp = " + cp); + ProcessWrapper process = new ProcessWrapper("DummyOkProcess") + .addProperty(MonitoredProcess.NAME_PROPERTY, "DummyOkProcess") + .setTempDirectory(tempdir) + .addClasspath(cp) + .setWorkDir(home) + .setJmxPort(freePort) + .setClassName(DUMMY_OK_APP); + + assertThat(process.isAlive()).isFalse(); + assertCanStart(process); + } }
\ No newline at end of file diff --git a/server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java b/server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java index e4324a2c946..5ed52d9da80 100644 --- a/server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java +++ b/server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java @@ -118,6 +118,17 @@ public class ProcessWrapper extends Thread implements Terminable { return this; } + public ProcessWrapper setTempDirectory(File tempDirectory) { + this.setEnvProperty("java.io.tmpdir", tempDirectory.getAbsolutePath()); + return this; + } + + public ProcessWrapper setLogDir(File logDirectory) { + this.setEnvProperty("sonar.path.logs",logDirectory.getAbsolutePath()); + return this; + } + + @CheckForNull public Process process() { return process; @@ -195,8 +206,8 @@ public class ProcessWrapper extends Thread implements Terminable { private String buildJavaCommand() { String separator = System.getProperty("file.separator"); - return System.getProperty("java.home") - + separator + "bin" + separator + "java"; + return new File(new File(System.getProperty("java.home")), + "bin" + separator + "java").getAbsolutePath(); } private List<String> buildJMXOptions() throws Exception { |