]> source.dussan.org Git - sonar-scanner-cli.git/commitdiff
SONARUNNER-91 SonarQube Runner should honor sonar.userHome
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Wed, 16 Sep 2015 12:30:41 +0000 (14:30 +0200)
committerDuarte Meneses <duarte.meneses@sonarsource.com>
Wed, 16 Sep 2015 13:13:22 +0000 (15:13 +0200)
it/src/test/java/com/sonar/runner/it/CacheTest.java
sonar-runner-api/src/main/java/org/sonar/runner/impl/IsolatedLauncherFactory.java
sonar-runner-api/src/main/java/org/sonar/runner/impl/JarDownloader.java
sonar-runner-api/src/main/java/org/sonar/runner/impl/Jars.java
sonar-runner-api/src/main/java/org/sonar/runner/impl/ServerConnection.java
sonar-runner-api/src/test/java/org/sonar/runner/impl/JarDownloaderTest.java
sonar-runner-api/src/test/java/org/sonar/runner/impl/JarsTest.java

index 09f8d2000f736dda71137f666c1629e9a5216fec..0e99bf98a8ccd02539eade95941fd8cfd7b354e5 100644 (file)
@@ -84,7 +84,7 @@ public class CacheTest extends RunnerTestCase {
     try {
       result = orchestrator.executeBuild(build);
     } catch (BuildFailureException e) {
-      assertThat(e.getResult().getLogs()).contains("Server is not accessible and data is not cached");
+      assertThat(e.getResult().getLogs()).contains("and data is not cached");
     }
   }
 
index 3fa467e5f4266cf0fec55a8071bdae3859bab1d9..44682fd51dfe414082022887334e29c99a37c9c6 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.runner.impl;
 
 import java.io.File;
+import java.nio.file.Paths;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.List;
@@ -51,6 +52,10 @@ public class IsolatedLauncherFactory {
 
   private PersistentCache getCache(Properties props) {
     PersistentCacheBuilder builder = new PersistentCacheBuilder(logger);
+    String home = props.getProperty("sonar.userHome");
+    if (home != null) {
+      builder.setSonarHome(Paths.get(home));
+    }
     return builder.build();
   }
 
@@ -70,7 +75,7 @@ public class IsolatedLauncherFactory {
       return new SimulatedLauncher(version, logger);
     }
     ServerConnection serverConnection = ServerConnection.create(props, getCache(props), logger);
-    JarDownloader jarDownloader = new JarDownloader(serverConnection, logger);
+    JarDownloader jarDownloader = new JarDownloader(serverConnection, logger, props);
 
     return createLauncher(jarDownloader, rules);
   }
index f3f88ba44dd9c42c4aa9bcad6beab61bffdda917..4160754ec1db858e974a334ae5099d1fa829b96d 100644 (file)
@@ -21,18 +21,22 @@ package org.sonar.runner.impl;
 
 import java.io.File;
 import java.util.List;
+import java.util.Properties;
+
 import org.sonar.home.cache.Logger;
 
 class JarDownloader {
   private final ServerConnection serverConnection;
   private final Logger logger;
+  private final Properties props;
 
-  JarDownloader(ServerConnection conn, Logger logger) {
+  JarDownloader(ServerConnection conn, Logger logger, Properties props) {
     this.serverConnection = conn;
     this.logger = logger;
+    this.props = props;
   }
 
   List<File> download() {
-    return new Jars(serverConnection, new JarExtractor(), logger).download();
+    return new Jars(serverConnection, new JarExtractor(), logger, props).download();
   }
 }
index 262c859c049fa72e4711c83a1984bd2fb7ccf21b..b526df9bec7da1dec2c393fcf8b842c008993044 100644 (file)
@@ -23,6 +23,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
+
 import org.sonar.home.cache.FileCache;
 import org.sonar.home.cache.FileCacheBuilder;
 import org.sonar.home.cache.Logger;
@@ -36,9 +38,11 @@ class Jars {
   private final JarExtractor jarExtractor;
   private final Logger logger;
 
-  Jars(ServerConnection conn, JarExtractor jarExtractor, Logger logger) {
+  Jars(ServerConnection conn, JarExtractor jarExtractor, Logger logger, Properties props) {
     this.logger = logger;
-    this.fileCache = new FileCacheBuilder(logger).build();
+    this.fileCache = new FileCacheBuilder(logger)
+      .setUserHome(props.getProperty("sonar.userHome"))
+      .build();
     this.connection = conn;
     this.jarExtractor = jarExtractor;
   }
@@ -53,6 +57,13 @@ class Jars {
     this.jarExtractor = jarExtractor;
   }
 
+  /**
+   * For unit tests
+   */
+  FileCache getFileCache() {
+    return fileCache;
+  }
+
   List<File> download() {
     List<File> files = new ArrayList<File>();
     logger.debug("Extract sonar-runner-batch in temp...");
index 7156ebc44c76ea19bdc28e1ee1683c3235499263..22081d39ccc9663edfa5b29d0c5b1490647a2271 100644 (file)
@@ -161,7 +161,7 @@ class ServerConnection {
       if (cached != null) {
         return cached;
       }
-      logger.error(MessageFormat.format(SONAR_SERVER_CAN_NOT_BE_REACHED + " and had a cache miss", serverUrl));
+      logger.error(MessageFormat.format(SONAR_SERVER_CAN_NOT_BE_REACHED + " and data is not cached", serverUrl));
       throw originalException;
     } catch (IOException e) {
       throw new IllegalStateException("Failed to access cache", e);
index 8c6cb6c10a5954561e77c98b653bdd79b30e5b70..284fb149b2d47480fd0aaf37bb8a66c1ec1e7462 100644 (file)
@@ -35,7 +35,7 @@ public class JarDownloaderTest {
 
   ServerConnection serverConnection = mock(ServerConnection.class);
   Properties props = new Properties();
-  JarDownloader downloader = spy(new JarDownloader(serverConnection, mock(Logger.class)));
+  JarDownloader downloader = spy(new JarDownloader(serverConnection, mock(Logger.class), props));
 
   @Test
   public void should_download_jar_files() {
index a772901ed19d060b9f3093158a69561ab6d2a27c..222c693c6fddf001d0456070044884f550f09f9c 100644 (file)
 package org.sonar.runner.impl;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
+import java.util.Properties;
+
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.sonar.home.cache.FileCache;
 import org.sonar.home.cache.Logger;
-
 import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 import static org.mockito.Matchers.any;
@@ -38,7 +40,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 public class JarsTest {
-
   ServerConnection connection = mock(ServerConnection.class);
   JarExtractor jarExtractor = mock(JarExtractor.class);
   FileCache fileCache = mock(FileCache.class);
@@ -66,6 +67,15 @@ public class JarsTest {
     verifyNoMoreInteractions(fileCache);
   }
 
+  @Test
+  public void should_honor_sonarUserHome() throws IOException {
+    Properties props = new Properties();
+    File f = temp.newFolder();
+    props.put("sonar.userHome", f.getAbsolutePath());
+    Jars jars = new Jars(connection, jarExtractor, mock(Logger.class), props);
+    assertThat(jars.getFileCache().getDir()).isEqualTo(new File(f, "cache"));
+  }
+
   @Test
   public void should_fail_to_download_files() throws Exception {
     File batchJar = temp.newFile("sonar-runner-batch.jar");