]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7140 Do not check java.io.tmpdir in bootstrap process
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 14 Dec 2015 12:37:59 +0000 (13:37 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 14 Dec 2015 15:40:21 +0000 (16:40 +0100)
server/sonar-process/src/main/java/org/sonar/process/MinimumViableSystem.java
server/sonar-process/src/test/java/org/sonar/process/MinimumViableSystemTest.java
server/sonar-search/src/main/java/org/sonar/search/SearchServer.java
server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java
sonar-application/src/main/java/org/sonar/application/App.java

index fdbc721761164a8ed5b2679e26b7d10518466db6..9a166fdaed73c22bd036a24beba088b70043f928 100644 (file)
@@ -27,59 +27,50 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-public class MinimumViableSystem {
-
-  private final Map<String, String> requiredJavaOptions = new HashMap<>();
-
-  public MinimumViableSystem setRequiredJavaOption(String propertyKey, String expectedValue) {
-    requiredJavaOptions.put(propertyKey, expectedValue);
-    return this;
-  }
+import static java.lang.String.format;
 
-  /**
-   * Entry point for all checks
-   */
-  public void check() {
-    checkJavaVersion();
-    checkJavaOptions();
-    checkWritableTempDir();
-  }
+public class MinimumViableSystem {
 
   /**
    * Verify that temp directory is writable
    */
-  private void checkWritableTempDir() {
+  public MinimumViableSystem checkWritableTempDir() {
     checkWritableDir(System.getProperty("java.io.tmpdir"));
+    return this;
   }
 
+  // Visible for testing
   void checkWritableDir(String tempPath) {
     try {
       File tempFile = File.createTempFile("check", "tmp", new File(tempPath));
       FileUtils.deleteQuietly(tempFile);
     } catch (IOException e) {
-      throw new IllegalStateException(String.format("Temp directory is not writable: %s", tempPath), e);
+      throw new IllegalStateException(format("Temp directory is not writable: %s", tempPath), e);
     }
   }
 
-  void checkJavaOptions() {
+  public MinimumViableSystem checkRequiredJavaOptions(Map<String, String> requiredJavaOptions) {
     for (Map.Entry<String, String> entry : requiredJavaOptions.entrySet()) {
       String value = System.getProperty(entry.getKey());
       if (!StringUtils.equals(value, entry.getValue())) {
-        throw new MessageException(String.format(
+        throw new MessageException(format(
           "JVM option '%s' must be set to '%s'. Got '%s'", entry.getKey(), entry.getValue(), StringUtils.defaultString(value)));
       }
     }
+    return this;
   }
 
-  void checkJavaVersion() {
+  public MinimumViableSystem checkJavaVersion() {
     String javaVersion = System.getProperty("java.specification.version");
     checkJavaVersion(javaVersion);
+    return this;
   }
 
+  // Visible for testing
   void checkJavaVersion(String javaVersion) {
     if (!javaVersion.startsWith("1.6") && !javaVersion.startsWith("1.7") && !javaVersion.startsWith("1.8")) {
       // still better than "java.lang.UnsupportedClassVersionError: Unsupported major.minor version 49.0
-      throw new MessageException(String.format("Supported versions of Java are 1.6, 1.7 and 1.8. Got %s.", javaVersion));
+      throw new MessageException(format("Supported versions of Java are 1.6, 1.7 and 1.8. Got %s.", javaVersion));
     }
   }
 
index 88e813f4fbb57f02dc41c6909d46ce30e694cab7..a3b3f582ee79bc0acc8f64bd78f7d963bd9918cf 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.process;
 
+import com.google.common.collect.ImmutableMap;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -33,32 +34,16 @@ public class MinimumViableSystemTest {
   @Rule
   public TemporaryFolder temp = new TemporaryFolder();
 
-  /**
-   * Verifies that all checks can be verified without error.
-   * Test environment does not necessarily follows all checks.
-   */
-  @Test
-  public void check() {
-    MinimumViableSystem mve = new MinimumViableSystem();
-
-    try {
-      mve.check();
-      // ok
-    } catch (MessageException e) {
-      // also ok. All other exceptions are errors.
-    }
-  }
+  MinimumViableSystem underTest = new MinimumViableSystem();
 
   @Test
   public void checkJavaVersion() {
-    MinimumViableSystem mve = new MinimumViableSystem();
-
     // yes, sources are compiled with a supported Java version!
-    mve.checkJavaVersion();
-    mve.checkJavaVersion("1.6");
+    underTest.checkJavaVersion();
+    underTest.checkJavaVersion("1.6");
 
     try {
-      mve.checkJavaVersion("1.9");
+      underTest.checkJavaVersion("1.9");
       fail();
     } catch (MessageException e) {
       assertThat(e).hasMessage("Supported versions of Java are 1.6, 1.7 and 1.8. Got 1.9.");
@@ -66,34 +51,31 @@ public class MinimumViableSystemTest {
   }
 
   @Test
-  public void checkJavaOption() {
+  public void checkRequiredJavaOptions() {
     String key = "MinimumViableEnvironmentTest.test.prop";
-    MinimumViableSystem mve = new MinimumViableSystem()
-      .setRequiredJavaOption(key, "true");
 
     try {
       System.setProperty(key, "false");
-      mve.checkJavaOptions();
+      underTest.checkRequiredJavaOptions(ImmutableMap.of(key, "true"));
       fail();
     } catch (MessageException e) {
       assertThat(e).hasMessage("JVM option '" + key + "' must be set to 'true'. Got 'false'");
     }
 
     System.setProperty(key, "true");
-    mve.checkJavaOptions();
     // do not fail
+    underTest.checkRequiredJavaOptions(ImmutableMap.of(key, "true"));
   }
 
   @Test
   public void checkWritableTempDir() throws Exception {
     File dir = temp.newFolder();
-    MinimumViableSystem mve = new MinimumViableSystem();
 
-    mve.checkWritableDir(dir.getAbsolutePath());
+    underTest.checkWritableDir(dir.getAbsolutePath());
 
     dir.delete();
     try {
-      mve.checkWritableDir(dir.getAbsolutePath());
+      underTest.checkWritableDir(dir.getAbsolutePath());
       fail();
     } catch (IllegalStateException e) {
       assertThat(e).hasMessage("Temp directory is not writable: " + dir.getAbsolutePath());
index 13dde539c1092047d50f80a226a6bea3f9736eea..77db6b77a1dfd1d9479a1ad68b214d74a9d01f62 100644 (file)
@@ -34,7 +34,9 @@ public class SearchServer implements Monitored {
 
   public SearchServer(Props props) {
     this.settings = new SearchSettings(props);
-    new MinimumViableSystem().check();
+    new MinimumViableSystem()
+      .checkJavaVersion()
+      .checkWritableTempDir();
   }
 
   @Override
index 2907102148fc3c7d57eb518a70701275741c4764..9a997dcc3026684ce5706aa008ba9084e3074e9e 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.sonar.server.app;
 
+import com.google.common.collect.ImmutableMap;
 import org.sonar.process.MinimumViableSystem;
 import org.sonar.process.Monitored;
 import org.sonar.process.ProcessEntryPoint;
@@ -30,8 +31,9 @@ public class WebServer implements Monitored {
 
   WebServer(Props props) throws Exception {
     new MinimumViableSystem()
-      .setRequiredJavaOption("file.encoding", "UTF-8")
-      .check();
+      .checkJavaVersion()
+      .checkWritableTempDir()
+      .checkRequiredJavaOptions(ImmutableMap.of("file.encoding", "UTF-8"));
     this.tomcat = new EmbeddedTomcat(props);
   }
 
index 9547d50589515917715e52307a043847abb4121e..8c6afac739a5c113d4f355378dd1e6d26395894e 100644 (file)
@@ -109,7 +109,7 @@ public class App implements Stoppable {
   }
 
   public static void main(String[] args) throws Exception {
-    new MinimumViableSystem().check();
+    new MinimumViableSystem().checkJavaVersion();
     CommandLineParser cli = new CommandLineParser();
     Properties rawProperties = cli.parseArguments(args);
     Props props = new PropsBuilder(rawProperties, new JdbcSettings()).build();