]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5485 SonarQube should ignore creation of a repository and its rules if the...
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 11 Aug 2014 11:42:48 +0000 (13:42 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 11 Aug 2014 12:03:35 +0000 (14:03 +0200)
server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java
server/sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java

index 5e09f77dd0624df52a941b4b23836b1e9ac40af3..ff7817ad150fc190806c5b94e86009d99f5e8c1e 100644 (file)
@@ -30,6 +30,7 @@ import org.apache.commons.lang.StringUtils;
 import org.picocontainer.Startable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.sonar.api.resources.Languages;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.server.debt.DebtRemediationFunction;
@@ -66,21 +67,23 @@ public class RegisterRules implements Startable {
   private final RuleDefinitionsLoader defLoader;
   private final RuleActivator ruleActivator;
   private final DbClient dbClient;
+  private final Languages languages;
   private final CharacteristicDao characteristicDao;
 
   /**
    * @param registerDebtModel used only to be started after init of the technical debt model
    */
-  public RegisterRules(RuleDefinitionsLoader defLoader, RuleActivator ruleActivator, DbClient dbClient, RegisterDebtModel registerDebtModel) {
-    this(defLoader, ruleActivator, dbClient, System2.INSTANCE);
+  public RegisterRules(RuleDefinitionsLoader defLoader, RuleActivator ruleActivator, DbClient dbClient, Languages languages, RegisterDebtModel registerDebtModel) {
+    this(defLoader, ruleActivator, dbClient, languages, System2.INSTANCE);
   }
 
   @VisibleForTesting
   RegisterRules(RuleDefinitionsLoader defLoader, RuleActivator ruleActivator,
-    DbClient dbClient, System2 system) {
+    DbClient dbClient, Languages languages, System2 system) {
     this.defLoader = defLoader;
     this.ruleActivator = ruleActivator;
     this.dbClient = dbClient;
+    this.languages = languages;
     this.characteristicDao = dbClient.debtCharacteristicDao();
   }
 
@@ -94,32 +97,34 @@ public class RegisterRules implements Startable {
 
       RulesDefinition.Context context = defLoader.load();
       for (RulesDefinition.ExtendedRepository repoDef : getRepositories(context)) {
-        for (RulesDefinition.Rule ruleDef : repoDef.rules()) {
-          RuleKey ruleKey = RuleKey.of(ruleDef.repository().key(), ruleDef.key());
+        if (languages.get(repoDef.language()) != null) {
+          for (RulesDefinition.Rule ruleDef : repoDef.rules()) {
+            RuleKey ruleKey = RuleKey.of(ruleDef.repository().key(), ruleDef.key());
 
-          RuleDto rule = allRules.containsKey(ruleKey) ? allRules.remove(ruleKey) : createRuleDto(ruleDef, session);
+            RuleDto rule = allRules.containsKey(ruleKey) ? allRules.remove(ruleKey) : createRuleDto(ruleDef, session);
 
-          boolean executeUpdate = false;
-          if (mergeRule(ruleDef, rule)) {
-            executeUpdate = true;
-          }
+            boolean executeUpdate = false;
+            if (mergeRule(ruleDef, rule)) {
+              executeUpdate = true;
+            }
 
-          CharacteristicDto subCharacteristic = characteristic(ruleDef, rule.getSubCharacteristicId(), allCharacteristics);
-          if (mergeDebtDefinitions(ruleDef, rule, subCharacteristic)) {
-            executeUpdate = true;
-          }
+            CharacteristicDto subCharacteristic = characteristic(ruleDef, rule.getSubCharacteristicId(), allCharacteristics);
+            if (mergeDebtDefinitions(ruleDef, rule, subCharacteristic)) {
+              executeUpdate = true;
+            }
 
-          if (mergeTags(ruleDef, rule)) {
-            executeUpdate = true;
-          }
+            if (mergeTags(ruleDef, rule)) {
+              executeUpdate = true;
+            }
 
-          if (executeUpdate) {
-            dbClient.ruleDao().update(session, rule);
-          }
+            if (executeUpdate) {
+              dbClient.ruleDao().update(session, rule);
+            }
 
-          mergeParams(ruleDef, rule, session);
+            mergeParams(ruleDef, rule, session);
+          }
+          session.commit();
         }
-        session.commit();
       }
       List<RuleDto> activeRules = processRemainingDbRules(allRules.values(), session);
       removeActiveRulesOnStillExistingRepositories(session, activeRules, context);
index 72c4ea980884ed34cabf820826c192cd7c43fc47..fd8a87a9dd2bfda5f4edf7b0a6a83df5c4281dcc 100644 (file)
@@ -25,8 +25,8 @@ import org.sonar.api.profiles.ProfileDefinition;
 import org.sonar.api.profiles.ProfileExporter;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.rule.Severity;
-import org.sonar.api.rules.*;
-import org.sonar.api.rules.ActiveRule;
+import org.sonar.api.rules.Rule;
+import org.sonar.api.rules.RulePriority;
 import org.sonar.api.server.rule.RuleParamType;
 import org.sonar.api.server.rule.RulesDefinition;
 import org.sonar.api.utils.ValidationMessages;
@@ -43,7 +43,7 @@ import static org.fest.assertions.Fail.fail;
 public class QProfileExportersTest {
 
   @ClassRule
-  public static ServerTester tester = new ServerTester().addComponents(
+  public static ServerTester tester = new ServerTester().addXoo().addComponents(
     XooRulesDefinition.class, XooProfileDefinition.class,
     XooExporter.class, StandardExporter.class);
 
index 79e469dbc8de276d9067d5c0743f1af45cdb6c93..1c22edba15bcdda2a40202b937d2b8328de5a817 100644 (file)
@@ -35,11 +35,7 @@ import org.sonar.api.utils.ValidationMessages;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.properties.PropertiesDao;
 import org.sonar.core.properties.PropertyDto;
-import org.sonar.core.qualityprofile.db.ActiveRuleDto;
-import org.sonar.core.qualityprofile.db.ActiveRuleKey;
-import org.sonar.core.qualityprofile.db.ActiveRuleParamDto;
-import org.sonar.core.qualityprofile.db.QualityProfileDao;
-import org.sonar.core.qualityprofile.db.QualityProfileDto;
+import org.sonar.core.qualityprofile.db.*;
 import org.sonar.core.template.LoadedTemplateDto;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.platform.Platform;
@@ -69,7 +65,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void register_existing_profile_definitions() throws Exception {
-    tester = new ServerTester().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
+    tester = new ServerTester().addXoo().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
     tester.start();
     dbSession = dbClient().openSession(false);
 
@@ -112,7 +108,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void register_profile_definitions() throws Exception {
-    tester = new ServerTester().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
+    tester = new ServerTester().addXoo().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
     tester.start();
     dbSession = dbClient().openSession(false);
 
@@ -147,7 +143,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void fail_if_two_definitions_are_marked_as_default_on_the_same_language() throws Exception {
-    tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", true), new SimpleProfileDefinition("two", true));
+    tester = new ServerTester().addXoo().addComponents(new SimpleProfileDefinition("one", true), new SimpleProfileDefinition("two", true));
 
     try {
       tester.start();
@@ -158,7 +154,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void mark_profile_as_default() throws Exception {
-    tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", false), new SimpleProfileDefinition("two", true));
+    tester = new ServerTester().addXoo().addComponents(new SimpleProfileDefinition("one", false), new SimpleProfileDefinition("two", true));
 
     tester.start();
     verifyProperty("sonar.profile.xoo", "two");
@@ -166,7 +162,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void use_sonar_way_as_default_profile_if_none_are_marked_as_default() throws Exception {
-    tester = new ServerTester().addComponents(new SimpleProfileDefinition("Sonar way", false), new SimpleProfileDefinition("Other way", false));
+    tester = new ServerTester().addXoo().addComponents(new SimpleProfileDefinition("Sonar way", false), new SimpleProfileDefinition("Other way", false));
 
     tester.start();
     verifyProperty("sonar.profile.xoo", "Sonar way");
@@ -174,7 +170,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void fix_default_profile_if_invalid() throws Exception {
-    tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", true));
+    tester = new ServerTester().addXoo().addComponents(new SimpleProfileDefinition("one", true));
     tester.start();
 
     PropertiesDao propertiesDao = dbClient().propertiesDao();
@@ -189,7 +185,7 @@ public class RegisterQualityProfilesMediumTest {
 
   @Test
   public void do_not_reset_default_profile_if_still_valid() throws Exception {
-    tester = new ServerTester().addComponents(new SimpleProfileDefinition("one", true), new SimpleProfileDefinition("two", false));
+    tester = new ServerTester().addXoo().addComponents(new SimpleProfileDefinition("one", true), new SimpleProfileDefinition("two", false));
     tester.start();
 
     PropertiesDao propertiesDao = dbClient().propertiesDao();
@@ -206,7 +202,7 @@ public class RegisterQualityProfilesMediumTest {
    */
   @Test
   public void clean_up_profiles_if_missing_loaded_template() throws Exception {
-    tester = new ServerTester().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
+    tester = new ServerTester().addXoo().addComponents(XooRulesDefinition.class, XooProfileDefinition.class);
     tester.start();
 
     dbSession = dbClient().openSession(false);
@@ -234,7 +230,7 @@ public class RegisterQualityProfilesMediumTest {
   public static class XooProfileDefinition extends ProfileDefinition {
     @Override
     public RulesProfile createProfile(ValidationMessages validation) {
-      final RulesProfile profile = RulesProfile.create("Basic", "xoo");
+      final RulesProfile profile = RulesProfile.create("Basic", ServerTester.Xoo.KEY);
       ActiveRule activeRule1 = profile.activateRule(
         org.sonar.api.rules.Rule.create("xoo", "x1").setParams(newArrayList(new RuleParam().setKey("acceptWhitespace"))),
         RulePriority.CRITICAL);
@@ -248,7 +244,7 @@ public class RegisterQualityProfilesMediumTest {
   public static class XooRulesDefinition implements RulesDefinition {
     @Override
     public void define(Context context) {
-      NewRepository repository = context.createRepository("xoo", "xoo").setName("Xoo Repo");
+      NewRepository repository = context.createRepository("xoo", ServerTester.Xoo.KEY).setName("Xoo Repo");
       NewRule x1 = repository.createRule("x1")
         .setName("x1 name")
         .setHtmlDescription("x1 desc")
index 284c9496f29c40de357b8199067d9cbd6b65732b..22b0d2e8728bb64dc6a0ee9a0b8f92b87af404fa 100644 (file)
@@ -68,7 +68,7 @@ public class RegisterRulesMediumTest {
   static final XooRulesDefinition RULE_DEFS = new XooRulesDefinition();
 
   @ClassRule
-  public static final ServerTester TESTER = new ServerTester().addComponents(RULE_DEFS);
+  public static final ServerTester TESTER = new ServerTester().addXoo().addComponents(RULE_DEFS);
 
   RuleIndex ruleIndex;
   ActiveRuleIndex activeRuleIndex;
@@ -143,6 +143,7 @@ public class RegisterRulesMediumTest {
     assertThat(rule.name()).isEqualTo("x1 name");
     assertThat(rule.htmlDescription()).isEqualTo("x1 desc");
     assertThat(rule.systemTags()).contains("tag1");
+    assertThat(rule.language()).contains("xoo");
     assertThat(rule.params()).hasSize(2);
     assertThat(rule.param("acceptWhitespace").type()).isEqualTo(RuleParamType.BOOLEAN);
     assertThat(rule.param("acceptWhitespace").defaultValue()).isEqualTo("false");
@@ -658,11 +659,11 @@ public class RegisterRulesMediumTest {
     @Override
     public void define(Context context) {
       if (rules != null) {
-        NewRepository repository = context.createRepository("xoo", "xoo").setName("Xoo Repo");
+        NewRepository repository = context.createRepository("xoo", ServerTester.Xoo.KEY).setName("Xoo Repo");
         rules.init(repository);
         repository.done();
       }
     }
-
   }
+
 }
index a95cf00380b04154bbc05896cd823f7ea1d1ab4e..ac63a246aad541691d626a189292f107c93a398c 100644 (file)
@@ -23,6 +23,8 @@ import com.google.common.collect.Sets;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.sonar.api.resources.Language;
+import org.sonar.api.resources.Languages;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
@@ -199,7 +201,10 @@ public class RegisterRulesTest extends AbstractDaoTestCase {
 
   private void execute(RulesDefinition... defs) {
     RuleDefinitionsLoader loader = new RuleDefinitionsLoader(mock(RuleRepositories.class), defs);
-    RegisterRules task = new RegisterRules(loader, ruleActivator, dbClient, system);
+    Languages languages = mock(Languages.class);
+    when(languages.get("java")).thenReturn(mock(Language.class));
+
+    RegisterRules task = new RegisterRules(loader, ruleActivator, dbClient, languages, system);
     task.start();
   }
 
index 121261051bda3befeaf7560ac214cabcc45518f2..649fd8c9df0e54957e575f9a599417bea8b9f4bd 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.junit.rules.ExternalResource;
 import org.sonar.api.database.DatabaseProperties;
+import org.sonar.api.resources.Language;
 import org.sonar.process.MonitoredProcess;
 import org.sonar.process.NetworkUtils;
 import org.sonar.process.Props;
@@ -34,6 +35,7 @@ import org.sonar.server.search.IndexProperties;
 import org.sonar.server.ws.WsTester;
 
 import javax.annotation.Nullable;
+
 import java.io.File;
 import java.util.Arrays;
 import java.util.List;
@@ -162,6 +164,11 @@ public class ServerTester extends ExternalResource {
     return this;
   }
 
+  public ServerTester addXoo() {
+    addComponents(Xoo.class);
+    return this;
+  }
+
   public ServerTester addPluginJar(File jar) {
     Preconditions.checkArgument(jar.exists() && jar.isFile(), "Plugin JAR file does not exist: " + jar.getAbsolutePath());
     try {
@@ -220,4 +227,30 @@ public class ServerTester extends ExternalResource {
     }
   }
 
+  public static class Xoo implements Language {
+
+    public static final String KEY = "xoo";
+    public static final String NAME = "Xoo";
+    public static final String FILE_SUFFIX = ".xoo";
+
+    private static final String[] XOO_SUFFIXES = {
+      FILE_SUFFIX
+    };
+
+    @Override
+    public String getKey() {
+      return KEY;
+    }
+
+    @Override
+    public String getName() {
+      return NAME;
+    }
+
+    @Override
+    public String[] getFileSuffixes() {
+      return XOO_SUFFIXES;
+    }
+  }
+
 }