From dae4decaa165461d2cdd52860e93fc6c2dd0f493 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Tue, 3 Sep 2019 15:59:11 +0200 Subject: [PATCH] SQSCANNER-61 Consider 'project.settings' if set using SONARQUBE_SCANNER_PARAMS --- .../sonarsource/scanner/it/ScannerTest.java | 13 ++++++++++++ .../org/sonarsource/scanner/cli/Conf.java | 21 ++++++++++++------- .../org/sonarsource/scanner/cli/ConfTest.java | 15 +++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/it/src/test/java/com/sonarsource/scanner/it/ScannerTest.java b/it/src/test/java/com/sonarsource/scanner/it/ScannerTest.java index c0c2875..f748d21 100644 --- a/it/src/test/java/com/sonarsource/scanner/it/ScannerTest.java +++ b/it/src/test/java/com/sonarsource/scanner/it/ScannerTest.java @@ -25,6 +25,7 @@ import java.io.File; import java.io.IOException; import java.util.Map; import java.util.stream.Collectors; +import org.apache.commons.lang.StringEscapeUtils; import org.junit.After; import org.junit.Rule; import org.junit.Test; @@ -209,4 +210,16 @@ public class ScannerTest extends ScannerTestCase { assertThat(getComponent("sample-with-custom-settings-path").getName()).isEqualTo("Test with custom settings location"); } + // SQSCANNER-61 + @Test + public void should_override_project_settings_path_using_env_variable() { + File projectHome = new File("projects/override-project-settings-path"); + SonarScanner build = newScanner(projectHome) + .setEnvironmentVariable("SONARQUBE_SCANNER_PARAMS", "{" + + "\"project.settings\" : \"" + StringEscapeUtils.escapeJavaScript(new File(projectHome, "conf/sq-project.properties").getAbsolutePath()) + "\"}"); + orchestrator.executeBuild(build); + + assertThat(getComponent("sample-with-custom-settings-path").getName()).isEqualTo("Test with custom settings location"); + } + } diff --git a/src/main/java/org/sonarsource/scanner/cli/Conf.java b/src/main/java/org/sonarsource/scanner/cli/Conf.java index 0a3da87..b914516 100644 --- a/src/main/java/org/sonarsource/scanner/cli/Conf.java +++ b/src/main/java/org/sonarsource/scanner/cli/Conf.java @@ -78,7 +78,13 @@ class Conf { } private Properties loadGlobalProperties() { - Path settingsFile = locatePropertiesFile(cli.properties(), SCANNER_HOME, "conf/sonar-scanner.properties", + Properties knownPropsAtThatPoint = new Properties(); + + knownPropsAtThatPoint.putAll(System.getProperties()); + knownPropsAtThatPoint.putAll(loadEnvironmentProperties()); + knownPropsAtThatPoint.putAll(cli.properties()); + + Path settingsFile = locatePropertiesFile(knownPropsAtThatPoint, SCANNER_HOME, "conf/sonar-scanner.properties", SCANNER_SETTINGS); if (settingsFile != null && Files.isRegularFile(settingsFile)) { logger.info("Scanner configuration file: " + settingsFile); @@ -90,13 +96,14 @@ class Conf { private Properties loadProjectProperties() { Properties rootProps = new Properties(); - Properties knownProps = new Properties(); + Properties knownPropsAtThatPoint = new Properties(); - knownProps.putAll(System.getProperties()); - knownProps.putAll(cli.properties()); + knownPropsAtThatPoint.putAll(System.getProperties()); + knownPropsAtThatPoint.putAll(loadEnvironmentProperties()); + knownPropsAtThatPoint.putAll(cli.properties()); - Path defaultRootSettingsFile = getRootProjectBaseDir(knownProps).resolve(SONAR_PROJECT_PROPERTIES_FILENAME); - Path rootSettingsFile = locatePropertiesFile(defaultRootSettingsFile, knownProps, PROJECT_SETTINGS); + Path defaultRootSettingsFile = getRootProjectBaseDir(knownPropsAtThatPoint).resolve(SONAR_PROJECT_PROPERTIES_FILENAME); + Path rootSettingsFile = locatePropertiesFile(defaultRootSettingsFile, knownPropsAtThatPoint, PROJECT_SETTINGS); if (rootSettingsFile != null && Files.isRegularFile(rootSettingsFile)) { logger.info("Project root configuration file: " + rootSettingsFile); rootProps.putAll(toProperties(rootSettingsFile)); @@ -110,7 +117,7 @@ class Conf { // root config file projectProps.putAll(rootProps); - rootProps.putAll(knownProps); + rootProps.putAll(knownPropsAtThatPoint); rootProps.setProperty(PROPERTY_PROJECT_BASEDIR, getRootProjectBaseDir(rootProps).toString()); // projectProps will be overridden by any properties found in child diff --git a/src/test/java/org/sonarsource/scanner/cli/ConfTest.java b/src/test/java/org/sonarsource/scanner/cli/ConfTest.java index a966b50..1dbbbec 100644 --- a/src/test/java/org/sonarsource/scanner/cli/ConfTest.java +++ b/src/test/java/org/sonarsource/scanner/cli/ConfTest.java @@ -316,4 +316,19 @@ public class ConfTest { properties = conf.properties(); assertThat(properties.get("sonar.prop")).isEqualTo("expected"); } + + // SQSCANNER-61 + @Test + public void should_load_project_settings_using_env() throws Exception { + Path home = Paths.get(getClass().getResource("ConfTest/shouldOverrideProjectSettingsPath/").toURI()); + args.setProperty("project.home", home.toAbsolutePath().toString()); + + Properties properties = conf.properties(); + assertThat(properties.get("sonar.prop")).isEqualTo("default"); + + env.put("SONARQUBE_SCANNER_PARAMS", "{\"project.settings\" : \"" + home.resolve("conf/sq-project.properties").toAbsolutePath().toString() + "\"}"); + + properties = conf.properties(); + assertThat(properties.get("sonar.prop")).isEqualTo("expected"); + } } -- 2.39.5