]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7275 fail with specific message when loading rating settings 933/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Mon, 9 May 2016 10:32:04 +0000 (12:32 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 10 May 2016 08:20:07 +0000 (10:20 +0200)
server/sonar-server/src/main/java/org/sonar/server/computation/qualitymodel/RatingSettings.java
server/sonar-server/src/test/java/org/sonar/server/computation/qualitymodel/RatingSettingsTest.java

index b5766e939eecd8ef6b21fd735633071963e1d32e..f36920a1a3298afe11d7690534484698217b2f1f 100644 (file)
@@ -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();
   }
index b5907499917e3066e7ae3cd8190d117cfabfa6f3..681714ef6744b0e4988f050cac49056383a7202b 100644 (file)
@@ -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);
+  }
 }