]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6835 Sort items in analysis context report + other minor changes
authorJulien HENRY <julien.henry@sonarsource.com>
Mon, 5 Oct 2015 10:42:32 +0000 (12:42 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Mon, 5 Oct 2015 13:05:20 +0000 (15:05 +0200)
sonar-batch/src/main/java/org/sonar/batch/report/AnalysisContextReportPublisher.java
sonar-batch/src/test/java/org/sonar/batch/report/AnalysisContextReportPublisherTest.java

index 172a64a837ba5226f74e93913326220ae716018e..cfbbb8c7d15f40708002d265f1a3c34549c21252 100644 (file)
@@ -26,11 +26,15 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.StandardOpenOption;
 import java.util.Map;
+import java.util.Properties;
+import java.util.TreeSet;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.BatchSide;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.System2;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
 import org.sonar.batch.bootstrap.BatchPluginRepository;
 import org.sonar.batch.protocol.output.BatchReportWriter;
 import org.sonar.core.platform.PluginInfo;
@@ -38,6 +42,8 @@ import org.sonar.core.platform.PluginInfo;
 @BatchSide
 public class AnalysisContextReportPublisher {
 
+  private static final Logger LOG = Loggers.get(AnalysisContextReportPublisher.class);
+
   private static final String ENV_PROP_PREFIX = "env.";
   private static final String SONAR_PROP_PREFIX = "sonar.";
   private final BatchPluginRepository pluginRepo;
@@ -59,8 +65,10 @@ public class AnalysisContextReportPublisher {
     this.writer = writer;
     File analysisLog = writer.getFileStructure().analysisLog();
     try (BufferedWriter fileWriter = Files.newBufferedWriter(analysisLog.toPath(), StandardCharsets.UTF_8)) {
-      writeEnvVariables(fileWriter);
-      writeSystemProps(fileWriter);
+      if (LOG.isDebugEnabled()) {
+        writeEnvVariables(fileWriter);
+        writeSystemProps(fileWriter);
+      }
       writePlugins(fileWriter);
     } catch (IOException e) {
       throw new IllegalStateException("Unable to write analysis log", e);
@@ -76,18 +84,20 @@ public class AnalysisContextReportPublisher {
 
   private void writeSystemProps(BufferedWriter fileWriter) throws IOException {
     fileWriter.write("System properties:\n");
-    for (Map.Entry<Object, Object> env : system.properties().entrySet()) {
-      if (env.getKey().toString().startsWith(SONAR_PROP_PREFIX)) {
+    Properties sysProps = system.properties();
+    for (String prop : new TreeSet<String>(sysProps.stringPropertyNames())) {
+      if (prop.startsWith(SONAR_PROP_PREFIX)) {
         continue;
       }
-      fileWriter.append(String.format("  - %s=%s", env.getKey(), env.getValue())).append('\n');
+      fileWriter.append(String.format("  - %s=%s", prop, sysProps.getProperty(prop))).append('\n');
     }
   }
 
   private void writeEnvVariables(BufferedWriter fileWriter) throws IOException {
     fileWriter.append("Environment variables:\n");
-    for (Map.Entry<String, String> env : system.envVariables().entrySet()) {
-      fileWriter.append(String.format("  - %s=%s", env.getKey(), env.getValue())).append('\n');
+    Map<String, String> envVariables = system.envVariables();
+    for (String env : new TreeSet<String>(envVariables.keySet())) {
+      fileWriter.append(String.format("  - %s=%s", env, envVariables.get(env))).append('\n');
     }
   }
 
@@ -98,23 +108,28 @@ public class AnalysisContextReportPublisher {
     File analysisLog = writer.getFileStructure().analysisLog();
     try (BufferedWriter fileWriter = Files.newBufferedWriter(analysisLog.toPath(), StandardCharsets.UTF_8, StandardOpenOption.WRITE, StandardOpenOption.APPEND)) {
       fileWriter.append(String.format("Settings for module: %s", moduleDefinition.getKey())).append('\n');
-      for (Map.Entry<String, String> prop : settings.getProperties().entrySet()) {
-        if (alreadyLoggedAsSystemProp(prop) || alreadyLoggedAsEnv(prop)) {
+      Map<String, String> moduleSettings = settings.getProperties();
+      for (String prop : new TreeSet<String>(moduleSettings.keySet())) {
+        if (isSystemProp(prop) || isEnvVariable(prop) || !isSqProp(prop)) {
           continue;
         }
-        fileWriter.append(String.format("  - %s=%s", prop.getKey(), sensitive(prop.getKey()) ? "******" : prop.getValue())).append('\n');
+        fileWriter.append(String.format("  - %s=%s", prop, sensitive(prop) ? "******" : moduleSettings.get(prop))).append('\n');
       }
     } catch (IOException e) {
       throw new IllegalStateException("Unable to write analysis log", e);
     }
   }
 
-  private boolean alreadyLoggedAsSystemProp(Map.Entry<String, String> prop) {
-    return system.properties().containsKey(prop.getKey()) && !prop.getKey().startsWith(SONAR_PROP_PREFIX);
+  private static boolean isSqProp(String propKey) {
+    return propKey.startsWith(SONAR_PROP_PREFIX);
+  }
+
+  private boolean isSystemProp(String propKey) {
+    return system.properties().containsKey(propKey) && !propKey.startsWith(SONAR_PROP_PREFIX);
   }
 
-  private boolean alreadyLoggedAsEnv(Map.Entry<String, String> prop) {
-    return prop.getKey().startsWith(ENV_PROP_PREFIX) && system.envVariables().containsKey(prop.getKey().substring(ENV_PROP_PREFIX.length()));
+  private boolean isEnvVariable(String propKey) {
+    return propKey.startsWith(ENV_PROP_PREFIX) && system.envVariables().containsKey(propKey.substring(ENV_PROP_PREFIX.length()));
   }
 
   private static boolean sensitive(String key) {
index f3e8076995954deae84a3a39077d332de07c1418..b83ed9a82dedada48e69a693947fccdadd410364 100644 (file)
@@ -32,6 +32,8 @@ import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.System2;
+import org.sonar.api.utils.log.LogTester;
+import org.sonar.api.utils.log.LoggerLevel;
 import org.sonar.batch.bootstrap.BatchPluginRepository;
 import org.sonar.batch.protocol.output.BatchReportWriter;
 import org.sonar.core.platform.PluginInfo;
@@ -39,6 +41,7 @@ import org.sonar.updatecenter.common.Version;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 public class AnalysisContextReportPublisherTest {
@@ -48,6 +51,9 @@ public class AnalysisContextReportPublisherTest {
   private static final String SONAR_SKIP = "sonar.skip";
   private static final String COM_FOO = "com.foo";
 
+  @Rule
+  public LogTester logTester = new LogTester();
+
   @Rule
   public TemporaryFolder temp = new TemporaryFolder();
 
@@ -58,13 +64,14 @@ public class AnalysisContextReportPublisherTest {
 
   @Before
   public void prepare() throws Exception {
+    logTester.setLevel(LoggerLevel.INFO);
     system2 = mock(System2.class);
     when(system2.properties()).thenReturn(new Properties());
     publisher = new AnalysisContextReportPublisher(analysisMode, pluginRepo, system2);
   }
 
   @Test
-  public void shouldDumpPlugins() throws Exception {
+  public void shouldOnlyDumpPluginsByDefault() throws Exception {
     when(pluginRepo.getPluginInfos()).thenReturn(Arrays.asList(new PluginInfo("xoo").setName("Xoo").setVersion(Version.create("1.0"))));
 
     BatchReportWriter writer = new BatchReportWriter(temp.newFolder());
@@ -72,6 +79,8 @@ public class AnalysisContextReportPublisherTest {
 
     assertThat(writer.getFileStructure().analysisLog()).exists();
     assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).contains("Xoo 1.0 (xoo)");
+
+    verifyZeroInteractions(system2);
   }
 
   @Test
@@ -87,6 +96,7 @@ public class AnalysisContextReportPublisherTest {
 
   @Test
   public void shouldNotDumpSQPropsInSystemProps() throws Exception {
+    logTester.setLevel(LoggerLevel.DEBUG);
     BatchReportWriter writer = new BatchReportWriter(temp.newFolder());
     Properties props = new Properties();
     props.setProperty(COM_FOO, "bar");
@@ -111,6 +121,7 @@ public class AnalysisContextReportPublisherTest {
 
   @Test
   public void shouldNotDumpEnvTwice() throws Exception {
+    logTester.setLevel(LoggerLevel.DEBUG);
     BatchReportWriter writer = new BatchReportWriter(temp.newFolder());
 
     Map<String, String> env = new HashMap<>();
@@ -122,15 +133,14 @@ public class AnalysisContextReportPublisherTest {
     String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
     assertThat(content).containsOnlyOnce(FOO);
     assertThat(content).containsOnlyOnce(BIZ);
+    assertThat(content).containsSequence(BIZ, FOO);
 
     Settings settings = new Settings();
     settings.setProperty("env." + FOO, "BAR");
-    settings.setProperty("env.another", "world");
 
     publisher.dumpSettings(ProjectDefinition.create().setProperty("sonar.projectKey", "foo"), settings);
 
     content = FileUtils.readFileToString(writer.getFileStructure().analysisLog());
-    assertThat(content).containsOnlyOnce("env.another");
     assertThat(content).containsOnlyOnce(FOO);
     assertThat(content).containsOnlyOnce(BIZ);
     assertThat(content).doesNotContain("env." + FOO);
@@ -149,6 +159,9 @@ public class AnalysisContextReportPublisherTest {
     settings.setProperty("sonar.cpp.license.secured", "AZERTY");
     publisher.dumpSettings(ProjectDefinition.create().setProperty("sonar.projectKey", "foo"), settings);
 
-    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).contains("sonar.projectKey=foo", "sonar.password=******", "sonar.cpp.license.secured=******");
+    assertThat(FileUtils.readFileToString(writer.getFileStructure().analysisLog())).containsSequence(
+      "sonar.cpp.license.secured=******",
+      "sonar.password=******",
+      "sonar.projectKey=foo");
   }
 }