From 280ce7ec0ab7b532901190f535ae656ae09c2cc0 Mon Sep 17 00:00:00 2001 From: Daniel Schwarz Date: Tue, 18 Apr 2017 14:03:33 +0200 Subject: [PATCH] SONAR-9132 do not register template rules, if organizations are enabled --- .../org/sonar/server/rule/RegisterRules.java | 10 ++++- .../sonar/server/rule/RegisterRulesTest.java | 39 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java index cf11ebf815e..234e1e693ac 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java @@ -52,6 +52,7 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto.Format; import org.sonar.db.rule.RuleParamDto; import org.sonar.db.rule.RuleRepositoryDto; +import org.sonar.server.organization.OrganizationFlags; import org.sonar.server.qualityprofile.ActiveRuleChange; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; @@ -74,9 +75,10 @@ public class RegisterRules implements Startable { private final ActiveRuleIndexer activeRuleIndexer; private final Languages languages; private final System2 system2; + private final OrganizationFlags organizationFlags; public RegisterRules(RuleDefinitionsLoader defLoader, RuleActivator ruleActivator, DbClient dbClient, RuleIndexer ruleIndexer, - ActiveRuleIndexer activeRuleIndexer, Languages languages, System2 system2) { + ActiveRuleIndexer activeRuleIndexer, Languages languages, System2 system2, OrganizationFlags organizationFlags) { this.defLoader = defLoader; this.ruleActivator = ruleActivator; this.dbClient = dbClient; @@ -84,6 +86,7 @@ public class RegisterRules implements Startable { this.activeRuleIndexer = activeRuleIndexer; this.languages = languages; this.system2 = system2; + this.organizationFlags = organizationFlags; } @Override @@ -94,9 +97,14 @@ public class RegisterRules implements Startable { List keysToIndex = new ArrayList<>(); RulesDefinition.Context context = defLoader.load(); + boolean orgsEnabled = organizationFlags.isEnabled(session); for (RulesDefinition.ExtendedRepository repoDef : getRepositories(context)) { if (languages.get(repoDef.language()) != null) { for (RulesDefinition.Rule ruleDef : repoDef.rules()) { + if (ruleDef.template() && orgsEnabled) { + LOG.info("Template rule {} will not be imported, because organizations are enabled.", RuleKey.of(ruleDef.repository().key(), ruleDef.key())); + continue; + } boolean relevantForIndex = registerRule(ruleDef, allRules, session); if (relevantForIndex) { keysToIndex.add(RuleKey.of(ruleDef.repository().key(), ruleDef.key())); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java index 0a676943fa5..47009c005b1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesTest.java @@ -33,6 +33,8 @@ import org.sonar.api.server.debt.DebtRemediationFunction; import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; +import org.sonar.api.utils.log.LogTester; +import org.sonar.api.utils.log.LoggerLevel; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; @@ -43,6 +45,8 @@ import org.sonar.db.rule.RuleParamDto; import org.sonar.db.rule.RuleRepositoryDto; import org.sonar.server.es.EsTester; import org.sonar.server.es.SearchOptions; +import org.sonar.server.organization.OrganizationFlags; +import org.sonar.server.organization.TestOrganizationFlags; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; import org.sonar.server.rule.index.RuleIndex; @@ -75,6 +79,8 @@ public class RegisterRulesTest { public DbTester dbTester = DbTester.create(system); @org.junit.Rule public EsTester esTester = new EsTester(new RuleIndexDefinition(new MapSettings())); + @org.junit.Rule + public LogTester logTester = new LogTester(); private RuleActivator ruleActivator = mock(RuleActivator.class); private DbClient dbClient = dbTester.getDbClient(); @@ -82,6 +88,7 @@ public class RegisterRulesTest { private ActiveRuleIndexer activeRuleIndexer; private RuleIndex ruleIndex; private OrganizationDto defaultOrganization; + private OrganizationFlags organizationFlags = TestOrganizationFlags.standalone(); @Before public void before() { @@ -456,12 +463,29 @@ public class RegisterRulesTest { assertThat(result.getSystemTags()).isEmpty(); } + @Test + public void ignore_template_rules_if_organizations_are_enabled() { + organizationFlags.enable(dbTester.getSession()); + execute(new RepositoryWithOneTemplateRule()); + + List rules = dbClient.ruleDao().selectAllDefinitions(dbTester.getSession()); + assertThat(rules).hasSize(0); + } + + @Test + public void log_ignored_template_rules_if_organizations_are_enabled() { + organizationFlags.enable(dbTester.getSession()); + execute(new RepositoryWithOneTemplateRule()); + + assertThat(logTester.logs(LoggerLevel.INFO)).contains("Template rule test:rule1 will not be imported, because organizations are enabled."); + } + private void execute(RulesDefinition... defs) { RuleDefinitionsLoader loader = new RuleDefinitionsLoader(mock(DeprecatedRulesDefinitionLoader.class), mock(CommonRuleDefinitionsImpl.class), defs); Languages languages = mock(Languages.class); when(languages.get("java")).thenReturn(mock(Language.class)); - RegisterRules task = new RegisterRules(loader, ruleActivator, dbClient, ruleIndexer, activeRuleIndexer, languages, system); + RegisterRules task = new RegisterRules(loader, ruleActivator, dbClient, ruleIndexer, activeRuleIndexer, languages, system, organizationFlags); task.start(); // Execute a commit to refresh session state as the task is using its own session dbTester.getSession().commit(); @@ -563,6 +587,7 @@ public class RegisterRulesTest { } static class FbContribRepository implements RulesDefinition { + @Override public void define(Context context) { NewExtendedRepository repo = context.extendRepository("findbugs", "java"); @@ -572,4 +597,16 @@ public class RegisterRulesTest { repo.done(); } } + + static class RepositoryWithOneTemplateRule implements RulesDefinition { + @Override + public void define(Context context) { + RulesDefinition.NewRepository repo = context.createRepository("test", "java"); + repo.createRule("rule1") + .setName("Rule One") + .setHtmlDescription("Description of Rule One") + .setTemplate(true); + repo.done(); + } + } } -- 2.39.5