From: Sébastien Lesaint Date: Mon, 9 May 2016 10:32:04 +0000 (+0200) Subject: SONAR-7275 fail with specific message when loading rating settings X-Git-Tag: 5.6-RC1~189 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0a21ddb780241a6b0ad1ca4394840e479658943c;p=sonarqube.git SONAR-7275 fail with specific message when loading rating settings --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/qualitymodel/RatingSettings.java b/server/sonar-server/src/main/java/org/sonar/server/computation/qualitymodel/RatingSettings.java index b5766e939ee..f36920a1a32 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/qualitymodel/RatingSettings.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/qualitymodel/RatingSettings.java @@ -25,6 +25,7 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; import org.sonar.api.config.Settings; +import org.sonar.api.utils.MessageException; import static java.lang.String.format; import static org.sonar.api.CoreProperties.DEVELOPMENT_COST; @@ -50,7 +51,12 @@ public class RatingSettings { String[] languageConfigIndexes = settings.getStringArray(LANGUAGE_SPECIFIC_PARAMETERS); for (String languageConfigIndex : languageConfigIndexes) { String languagePropertyKey = LANGUAGE_SPECIFIC_PARAMETERS + "." + languageConfigIndex + "." + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY; - builder.put(settings.getString(languagePropertyKey), LanguageSpecificConfiguration.create(settings, languageConfigIndex)); + String languageKey = settings.getString(languagePropertyKey); + if (languageKey == null) { + throw MessageException.of("Technical debt configuration is corrupted. At least one language specific parameter has no Language key. " + + "Contact your administrator to update this configuration in the global administration section of SonarQube."); + } + builder.put(languageKey, LanguageSpecificConfiguration.create(settings, languageConfigIndex)); } return builder.build(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/qualitymodel/RatingSettingsTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/qualitymodel/RatingSettingsTest.java index b5907499917..681714ef674 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/qualitymodel/RatingSettingsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/qualitymodel/RatingSettingsTest.java @@ -26,8 +26,13 @@ import org.junit.rules.ExpectedException; import org.sonar.api.CoreProperties; import org.sonar.api.config.Settings; import org.sonar.api.measures.CoreMetrics; +import org.sonar.api.utils.MessageException; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.api.CoreProperties.DEVELOPMENT_COST; +import static org.sonar.api.CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS; +import static org.sonar.api.CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY; +import static org.sonar.api.CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY; public class RatingSettingsTest { @@ -56,7 +61,7 @@ public class RatingSettingsTest { @Test public void load_work_units_for_language() { - settings.setProperty(CoreProperties.DEVELOPMENT_COST, "50"); + settings.setProperty(DEVELOPMENT_COST, "50"); RatingSettings configurationLoader = new RatingSettings(settings); assertThat(configurationLoader.getDevCost("defaultLanguage")).isEqualTo(50L); @@ -68,13 +73,13 @@ public class RatingSettingsTest { String aLanguage = "aLanguage"; String anotherLanguage = "anotherLanguage"; - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS, "0,1"); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, aLanguage); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "30"); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY, CoreMetrics.NCLOC_KEY); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, anotherLanguage); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "40"); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY, CoreMetrics.COMPLEXITY_KEY); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS, "0,1"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, aLanguage); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "30"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY, CoreMetrics.NCLOC_KEY); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, anotherLanguage); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "40"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "1" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_SIZE_METRIC_KEY, CoreMetrics.COMPLEXITY_KEY); RatingSettings configurationLoader = new RatingSettings(settings); @@ -84,10 +89,10 @@ public class RatingSettingsTest { @Test public void fail_on_invalid_rating_grid_configuration() { + RatingSettings configurationLoader = new RatingSettings(settings); throwable.expect(IllegalArgumentException.class); settings.setProperty(CoreProperties.RATING_GRID, "a b c"); - RatingSettings configurationLoader = new RatingSettings(settings); configurationLoader.getRatingGrid(); } @@ -96,13 +101,26 @@ public class RatingSettingsTest { public void use_generic_value_when_specific_setting_is_missing() { String aLanguage = "aLanguage"; - settings.setProperty(CoreProperties.DEVELOPMENT_COST, "30"); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS, "0"); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, aLanguage); - settings.setProperty(CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + CoreProperties.LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "40"); + settings.setProperty(DEVELOPMENT_COST, "30"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS, "0"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + LANGUAGE_SPECIFIC_PARAMETERS_LANGUAGE_KEY, aLanguage); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "40"); RatingSettings configurationLoader = new RatingSettings(settings); assertThat(configurationLoader.getDevCost(aLanguage)).isEqualTo(40L); } + + @Test + public void constructor_fails_with_ME_if_language_specific_parameter_language_is_missing() { + settings.setProperty(DEVELOPMENT_COST, "30"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS, "0"); + settings.setProperty(LANGUAGE_SPECIFIC_PARAMETERS + "." + "0" + "." + LANGUAGE_SPECIFIC_PARAMETERS_MAN_DAYS_KEY, "40"); + + throwable.expect(MessageException.class); + throwable.expectMessage("Technical debt configuration is corrupted. At least one language specific parameter has no Language key. " + + "Contact your administrator to update this configuration in the global administration section of SonarQube."); + + new RatingSettings(settings); + } }