]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10658 Prevent Scanner Context from being too big
authorJulien HENRY <julien.henry@sonarsource.com>
Wed, 23 May 2018 07:50:37 +0000 (09:50 +0200)
committerSonarTech <sonartech@sonarsource.com>
Fri, 25 May 2018 07:01:13 +0000 (09:01 +0200)
sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java
sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java

index e806f5b5e24e8a2dd05d37fac574ec7e2a6bb3bd..7eebce010829e7470846c528c846c52d92039f79 100644 (file)
@@ -29,7 +29,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.TreeSet;
-
+import org.apache.commons.lang.StringUtils;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.ScannerSide;
@@ -53,6 +53,7 @@ public class AnalysisContextReportPublisher {
 
   private static final String ENV_PROP_PREFIX = "env.";
   private static final String SONAR_PROP_PREFIX = "sonar.";
+  private static final int MAX_WIDTH = 1000;
   private final ScannerPluginRepository pluginRepo;
   private final AnalysisMode mode;
   private final System2 system;
@@ -145,7 +146,7 @@ public class AnalysisContextReportPublisher {
   }
 
   private static void dumpPropIfNotSensitive(BufferedWriter fileWriter, String prop, String value) throws IOException {
-    fileWriter.append(String.format(KEY_VALUE_FORMAT, prop, sensitive(prop) ? "******" : value)).append('\n');
+    fileWriter.append(String.format(KEY_VALUE_FORMAT, prop, sensitive(prop) ? "******" : StringUtils.abbreviate(value, MAX_WIDTH))).append('\n');
   }
 
   /**
index d420c70666c031481abd598ee132202ecfd99db2..f28f160b8bc6d938d4c7416445032948f45f988e 100644 (file)
 package org.sonar.scanner.report;
 
 import com.google.common.collect.ImmutableMap;
-import java.util.Arrays;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -70,7 +73,7 @@ public class AnalysisContextReportPublisherTest {
   private InputModuleHierarchy hierarchy;
 
   @Before
-  public void prepare() throws Exception {
+  public void prepare() {
     logTester.setLevel(LoggerLevel.INFO);
     system2 = mock(System2.class);
     when(system2.properties()).thenReturn(new Properties());
@@ -82,13 +85,13 @@ public class AnalysisContextReportPublisherTest {
 
   @Test
   public void shouldOnlyDumpPluginsByDefault() throws Exception {
-    when(pluginRepo.getPluginInfos()).thenReturn(Arrays.asList(new PluginInfo("xoo").setName("Xoo").setVersion(Version.create("1.0"))));
+    when(pluginRepo.getPluginInfos()).thenReturn(Collections.singletonList(new PluginInfo("xoo").setName("Xoo").setVersion(Version.create("1.0"))));
 
     ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder());
     publisher.init(writer);
 
     assertThat(writer.getFileStructure().analysisLog()).exists();
-    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).contains("Xoo 1.0 (xoo)");
+    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8)).contains("Xoo 1.0 (xoo)");
 
     verifyZeroInteractions(system2);
   }
@@ -112,7 +115,7 @@ public class AnalysisContextReportPublisherTest {
 
     publisher.init(writer);
 
-    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).containsOnlyOnce(COM_FOO);
     assertThat(content).containsOnlyOnce(SONAR_SKIP);
   }
@@ -128,7 +131,7 @@ public class AnalysisContextReportPublisherTest {
 
     publisher.dumpModuleSettings(new DefaultInputModule(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder())));
 
-    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).doesNotContain(COM_FOO);
     assertThat(content).containsOnlyOnce(SONAR_SKIP);
   }
@@ -143,7 +146,7 @@ public class AnalysisContextReportPublisherTest {
     when(system2.properties()).thenReturn(props);
     publisher.init(writer);
 
-    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).containsOnlyOnce(COM_FOO);
     assertThat(content).doesNotContain(SONAR_SKIP);
 
@@ -154,7 +157,7 @@ public class AnalysisContextReportPublisherTest {
       .setProperty(COM_FOO, "bar")
       .setProperty(SONAR_SKIP, "true")));
 
-    content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).containsOnlyOnce(COM_FOO);
     assertThat(content).containsOnlyOnce(SONAR_SKIP);
   }
@@ -170,7 +173,7 @@ public class AnalysisContextReportPublisherTest {
     when(system2.envVariables()).thenReturn(env);
     publisher.init(writer);
 
-    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).containsOnlyOnce(FOO);
     assertThat(content).containsOnlyOnce(BIZ);
     assertThat(content).containsSubsequence(BIZ, FOO);
@@ -181,7 +184,7 @@ public class AnalysisContextReportPublisherTest {
       .setProperty("sonar.projectKey", "foo")
       .setProperty("env." + FOO, "BAR")));
 
-    content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).containsOnlyOnce(FOO);
     assertThat(content).containsOnlyOnce(BIZ);
     assertThat(content).doesNotContain("env." + FOO);
@@ -203,13 +206,34 @@ public class AnalysisContextReportPublisherTest {
       .setProperty("sonar.password", "azerty")
       .setProperty("sonar.cpp.license.secured", "AZERTY")));
 
-    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).containsSubsequence(
+    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8)).containsSubsequence(
       "sonar.cpp.license.secured=******",
       "sonar.login=******",
       "sonar.password=******",
       "sonar.projectKey=foo");
   }
 
+  @Test
+  public void shouldShortenModuleProperties() throws Exception {
+    File baseDir = temp.newFolder();
+    ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder());
+    publisher.init(writer);
+
+    assertThat(writer.getFileStructure().analysisLog()).exists();
+
+    publisher.dumpModuleSettings(new DefaultInputModule(ProjectDefinition.create()
+      .setBaseDir(baseDir)
+      .setWorkDir(temp.newFolder())
+      .setProperty("sonar.projectKey", "foo")
+      .setProperty("sonar.projectBaseDir", baseDir.toString())
+      .setProperty("sonar.aVeryLongProp", StringUtils.repeat("abcde", 1000))));
+
+    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8)).containsSubsequence(
+      "sonar.aVeryLongProp=" + StringUtils.repeat("abcde", 199) + "ab...",
+      "sonar.projectBaseDir=" + baseDir.toString(),
+      "sonar.projectKey=foo");
+  }
+
   // SONAR-7598
   @Test
   public void shouldNotDumpSensitiveGlobalProperties() throws Exception {
@@ -218,7 +242,7 @@ public class AnalysisContextReportPublisherTest {
 
     publisher.init(writer);
 
-    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).containsSubsequence(
+    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8)).containsSubsequence(
       "sonar.cpp.license.secured=******",
       "sonar.login=******",
       "sonar.password=******");
@@ -247,7 +271,7 @@ public class AnalysisContextReportPublisherTest {
 
     publisher.dumpModuleSettings(module);
 
-    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
+    String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
     assertThat(content).doesNotContain(SONAR_SKIP);
   }
 }