diff options
Diffstat (limited to 'sonar-application')
-rw-r--r-- | sonar-application/src/main/java/org/sonar/application/App.java | 8 | ||||
-rw-r--r-- | sonar-application/src/test/java/org/sonar/application/AppTest.java | 84 |
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; + } } |