]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3895 do not download JDBC driver on dry run
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 26 Oct 2012 14:21:02 +0000 (16:21 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 26 Oct 2012 14:21:02 +0000 (16:21 +0200)
sonar-batch/pom.xml
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginRepository.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/JdbcDriverHolder.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectExclusions.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/TempDirectories.java
sonar-batch/src/test/java/org/sonar/batch/bootstrap/JdbcDriverHolderTest.java

index ec6c38fa8aa487a1ba574e2acc8e1d38c34d3a1f..3000f785c9449ee409b0975cd085a9af82c1e173 100644 (file)
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
     </dependency>
+    <dependency>
+      <!-- local database -->
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+    </dependency>
 
     <!-- unit tests -->
     <dependency>
index 812cebf8d1e83d2afeb8afd00e45487b87bf3970..69a74c8f91dead599915dcf44af4006698c3727a 100644 (file)
@@ -70,6 +70,7 @@ public class BatchPluginRepository implements PluginRepository {
   }
 
   public void start() {
+    LOG.info("Install plugins");
     doStart(pluginDownloader.downloadPluginIndex());
   }
 
index dd6b47ab31173fbfc1a79ffe8b33be6cece9c8ca..56f17e613549733ba735e80bd9588a59881953d4 100644 (file)
@@ -43,17 +43,27 @@ public class JdbcDriverHolder {
   private ServerClient serverClient;
 
   // initialized in start()
-  private JdbcDriverClassLoader classLoader;
+  private JdbcDriverClassLoader classLoader = null;
+  private DryRun dryRun;
 
-  public JdbcDriverHolder(TempDirectories tempDirectories, ServerClient serverClient) {
+  public JdbcDriverHolder(DryRun dryRun, TempDirectories tempDirectories, ServerClient serverClient) {
     this.tempDirectories = tempDirectories;
     this.serverClient = serverClient;
+    this.dryRun = dryRun;
   }
 
   public void start() {
-    File jdbcDriver = new File(tempDirectories.getRoot(), "jdbc-driver.jar");
-    serverClient.download("/deploy/jdbc-driver.jar", jdbcDriver);
-    classLoader = initClassloader(jdbcDriver);
+    if (!dryRun.isEnabled()) {
+      LOG.info("Install JDBC driver");
+      File jdbcDriver = new File(tempDirectories.getRoot(), "jdbc-driver.jar");
+      serverClient.download("/deploy/jdbc-driver.jar", jdbcDriver);
+      classLoader = initClassloader(jdbcDriver);
+    }
+  }
+
+  @VisibleForTesting
+  JdbcDriverClassLoader getClassLoader() {
+    return classLoader;
   }
 
   @VisibleForTesting
@@ -94,8 +104,10 @@ public class JdbcDriverHolder {
    * </p>
    */
   public void stop() {
-    classLoader.clearReferencesJdbc();
-    classLoader = null;
+    if (classLoader != null) {
+      classLoader.clearReferencesJdbc();
+      classLoader = null;
+    }
   }
 
   static class JdbcDriverClassLoader extends URLClassLoader {
index f13a84f71be91cf224b2624a1f588c965366377c..acbc33b3c47a20dfcb8c8cca2e84cd460938d9d9 100644 (file)
@@ -48,7 +48,7 @@ public class ProjectExclusions implements BatchComponent {
   }
 
   public void start() {
-    LOG.debug("Apply project exclusions");
+    LOG.info("Apply project exclusions");
     for (ProjectDefinition project : reactor.getProjects()) {
       if (isExcluded(key(project), project == reactor.getRoot())) {
         exclude(project);
index ec1f840a69e58bac7ee9470eea97f42b648a7a93..d397e443c52afb568248b4f0f053076cb3a2ca9e 100644 (file)
@@ -36,7 +36,7 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Map;
 
-public final class TempDirectories {
+public class TempDirectories {
 
   public static final String DIR_PREFIX = "sonar-batch";
 
index a573dbcc3c9c8011456e92891d6d7367895b4e97..fe97564a344a075002c6f28617b111b1659eaf97 100644 (file)
@@ -28,6 +28,10 @@ import java.net.URISyntaxException;
 import java.net.URL;
 
 import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
 
 public class JdbcDriverHolderTest {
 
@@ -55,4 +59,19 @@ public class JdbcDriverHolderTest {
     assertThat(Thread.currentThread().getContextClassLoader()).isSameAs(classloader);
   }
 
+  @Test
+  public void should_be_disabled_if_dry_run() {
+    DryRun dryRun = mock(DryRun.class);
+    when(dryRun.isEnabled()).thenReturn(true);
+    ServerClient server = mock(ServerClient.class);
+    JdbcDriverHolder holder = new JdbcDriverHolder(dryRun, mock(TempDirectories.class), server);
+
+    holder.start();
+
+    assertThat(holder.getClassLoader()).isNull();
+    verifyZeroInteractions(server);
+
+    // no error during stop
+    holder.stop();
+  }
 }