]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4898 add some tests
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 22 Sep 2014 21:43:05 +0000 (23:43 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 22 Sep 2014 21:43:05 +0000 (23:43 +0200)
server/sonar-process/src/main/java/org/sonar/process/StopWatcher.java
sonar-application/src/main/java/org/sonar/application/App.java
sonar-application/src/test/java/org/sonar/application/AppTest.java

index b7b4ffa15d8f8a271bf2116633f10ab6b07c9259..2441a1937483af36bafd8669cb6611cc6bced90d 100644 (file)
@@ -55,7 +55,7 @@ public class StopWatcher extends Thread {
     }
   }
 
-  void stopWatching() {
+  public void stopWatching() {
     watching = false;
   }
 }
index c051e2f1c8d11f5d09a305c5012bed5b1b9ef45b..bba2dd730697210b5817ab2c20cd80960c59fa9e 100644 (file)
@@ -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();
index b89ab7dd982a8583279be370a036035988c804aa..32d1f2969c40783496814d934c3a6db6f356b229 100644 (file)
@@ -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;
+  }
 }