aboutsummaryrefslogtreecommitdiffstats
path: root/server/process
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-08-12 14:25:26 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-08-12 14:25:50 +0200
commit80aa231222ce602fb955f5d9edf0876dab354c23 (patch)
treea5362fec15cbb59cad2cc5d702d8aec628d97542 /server/process
parentcae764c4348e68ceb31012f2bc4224de70a61524 (diff)
downloadsonarqube-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.xml2
-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.java42
-rw-r--r--server/process/sonar-process/src/main/java/org/sonar/process/ProcessWrapper.java15
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 {