aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-application
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2014-09-22 23:43:05 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2014-09-22 23:43:05 +0200
commit54ba59001aee817ee4420d137ae5ae2beba13bc4 (patch)
tree3f7e04e8d19e61cda5883a0885ae6c93eab53c86 /sonar-application
parentf00cda378e649a87b2b1693db5aaaec37461a481 (diff)
downloadsonarqube-54ba59001aee817ee4420d137ae5ae2beba13bc4.tar.gz
sonarqube-54ba59001aee817ee4420d137ae5ae2beba13bc4.zip
SONAR-4898 add some tests
Diffstat (limited to 'sonar-application')
-rw-r--r--sonar-application/src/main/java/org/sonar/application/App.java8
-rw-r--r--sonar-application/src/test/java/org/sonar/application/AppTest.java84
2 files changed, 91 insertions, 1 deletions
diff --git a/sonar-application/src/main/java/org/sonar/application/App.java b/sonar-application/src/main/java/org/sonar/application/App.java
index c051e2f1c8d..bba2dd73069 100644
--- a/sonar-application/src/main/java/org/sonar/application/App.java
+++ b/sonar-application/src/main/java/org/sonar/application/App.java
@@ -41,6 +41,7 @@ import java.util.Properties;
public class App implements Stoppable {
private final Monitor monitor;
+ private StopWatcher stopWatcher = null;
public App() {
this(Monitor.create());
@@ -55,7 +56,8 @@ public class App implements Stoppable {
// stop application when file <temp>/app.stop is created
File tempDir = props.nonNullValueAsFile("sonar.path.temp");
ProcessCommands commands = new ProcessCommands(tempDir, "app");
- new StopWatcher(commands, this).start();
+ stopWatcher = new StopWatcher(commands, this);
+ stopWatcher.start();
}
monitor.start(createCommands(props));
monitor.awaitTermination();
@@ -113,6 +115,10 @@ public class App implements Stoppable {
app.start(props);
}
+ StopWatcher getStopWatcher() {
+ return stopWatcher;
+ }
+
@Override
public void stopAsync() {
monitor.stopAsync();
diff --git a/sonar-application/src/test/java/org/sonar/application/AppTest.java b/sonar-application/src/test/java/org/sonar/application/AppTest.java
index b89ab7dd982..32d1f2969c4 100644
--- a/sonar-application/src/test/java/org/sonar/application/AppTest.java
+++ b/sonar-application/src/test/java/org/sonar/application/AppTest.java
@@ -23,11 +23,19 @@ import org.apache.commons.io.FilenameUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.mockito.ArgumentCaptor;
+import org.sonar.process.Props;
+import org.sonar.process.monitor.JavaCommand;
+import org.sonar.process.monitor.Monitor;
import java.io.File;
import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
public class AppTest {
@@ -43,4 +51,80 @@ public class AppTest {
.startsWith(FilenameUtils.normalize(homeDir.getAbsolutePath(), true));
}
+ @Test
+ public void do_not_watch_stop_file_by_default() throws Exception {
+ Monitor monitor = mock(Monitor.class);
+ App app = new App(monitor);
+ app.start(initDefaultProps());
+
+ assertThat(app.getStopWatcher()).isNull();
+ }
+
+ @Test
+ public void watch_stop_file() throws Exception {
+ Monitor monitor = mock(Monitor.class);
+ App app = new App(monitor);
+ Props props = initDefaultProps();
+ props.set("sonar.enableStopCommand", "true");
+ app.start(props);
+
+ assertThat(app.getStopWatcher()).isNotNull();
+ assertThat(app.getStopWatcher().isAlive()).isTrue();
+
+ app.getStopWatcher().stopWatching();
+ app.getStopWatcher().interrupt();
+ }
+
+ @Test
+ public void start_elasticsearch_and_tomcat_by_default() throws Exception {
+ Monitor monitor = mock(Monitor.class);
+ App app = new App(monitor);
+ Props props = initDefaultProps();
+ app.start(props);
+
+ Class<List<JavaCommand>> listClass = (Class<List<JavaCommand>>)(Class)List.class;
+ ArgumentCaptor<List<JavaCommand>> argument = ArgumentCaptor.forClass(listClass);
+ verify(monitor).start(argument.capture());
+
+ assertThat(argument.getValue()).onProperty("key").containsOnly("search", "web");
+ }
+
+ @Test
+ public void do_not_start_tomcat_if_elasticsearch_single_node() throws Exception {
+ Monitor monitor = mock(Monitor.class);
+ App app = new App(monitor);
+ Props props = initDefaultProps();
+ props.set("sonar.cluster.master", "x.y.z");
+ app.start(props);
+
+ Class<List<JavaCommand>> listClass = (Class<List<JavaCommand>>)(Class)List.class;
+ ArgumentCaptor<List<JavaCommand>> argument = ArgumentCaptor.forClass(listClass);
+ verify(monitor).start(argument.capture());
+
+ assertThat(argument.getValue()).onProperty("key").containsOnly("search");
+ }
+
+ @Test
+ public void add_custom_jdbc_driver_to_tomcat_classpath() throws Exception {
+ Monitor monitor = mock(Monitor.class);
+ App app = new App(monitor);
+ Props props = initDefaultProps();
+ props.set("sonar.jdbc.driverPath", "oracle/ojdbc6.jar");
+ app.start(props);
+
+ Class<List<JavaCommand>> listClass = (Class<List<JavaCommand>>)(Class)List.class;
+ ArgumentCaptor<List<JavaCommand>> argument = ArgumentCaptor.forClass(listClass);
+ verify(monitor).start(argument.capture());
+
+ assertThat(argument.getValue().get(1).getClasspath()).contains("oracle/ojdbc6.jar");
+ }
+
+ private Props initDefaultProps() throws IOException {
+ Props props = new Props(new Properties());
+ DefaultSettings.init(props);
+ props.set("sonar.path.home", temp.newFolder().getAbsolutePath());
+ props.set("sonar.path.temp", temp.newFolder().getAbsolutePath());
+ props.set("sonar.path.logs", temp.newFolder().getAbsolutePath());
+ return props;
+ }
}