import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
+import org.sonar.core.util.stream.Collectors;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.qualityprofile.ActiveRuleDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleDto.Format;
import org.sonar.db.rule.RuleParamDto;
+import org.sonar.db.rule.RuleRepositoryDto;
import org.sonar.server.qualityprofile.ActiveRuleChange;
import org.sonar.server.qualityprofile.RuleActivator;
import org.sonar.server.qualityprofile.index.ActiveRuleIndexer;
List<RuleDto> activeRules = processRemainingDbRules(allRules.values(), session);
List<ActiveRuleChange> changes = removeActiveRulesOnStillExistingRepositories(session, activeRules, context);
session.commit();
+
+ persistRepositories(session, context.repositories());
ruleIndexer.index();
activeRuleIndexer.index(changes);
profiler.stopDebug();
}
}
+ private void persistRepositories(DbSession dbSession, List<RulesDefinition.Repository> repositories) {
+ dbClient.ruleRepositoryDao().truncate(dbSession);
+ List<RuleRepositoryDto> dtos = repositories
+ .stream()
+ .map(r -> new RuleRepositoryDto(r.key(), r.language(), r.name()))
+ .collect(Collectors.toList(repositories.size()));
+ dbClient.ruleRepositoryDao().insert(dbSession, dtos);
+ dbSession.commit();
+ }
+
@Override
public void stop() {
// nothing
import org.sonar.db.DbTester;
import org.sonar.db.rule.RuleDto;
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.qualityprofile.RuleActivator;
public class RegisterRulesTest {
- static final Date DATE1 = DateUtils.parseDateTime("2014-01-01T19:10:03+0100");
- static final Date DATE2 = DateUtils.parseDateTime("2014-02-01T12:10:03+0100");
- static final Date DATE3 = DateUtils.parseDateTime("2014-03-01T12:10:03+0100");
+ private static final Date DATE1 = DateUtils.parseDateTime("2014-01-01T19:10:03+0100");
+ private static final Date DATE2 = DateUtils.parseDateTime("2014-02-01T12:10:03+0100");
+ private static final Date DATE3 = DateUtils.parseDateTime("2014-03-01T12:10:03+0100");
- static final RuleKey RULE_KEY1 = RuleKey.of("fake", "rule1");
- static final RuleKey RULE_KEY2 = RuleKey.of("fake", "rule2");
- static final RuleKey RULE_KEY3 = RuleKey.of("fake", "rule3");
+ private static final RuleKey RULE_KEY1 = RuleKey.of("fake", "rule1");
+ private static final RuleKey RULE_KEY2 = RuleKey.of("fake", "rule2");
+ private static final RuleKey RULE_KEY3 = RuleKey.of("fake", "rule3");
- System2 system = mock(System2.class);;
+ private System2 system = mock(System2.class);;
@org.junit.Rule
public DbTester dbTester = DbTester.create(system);
@org.junit.Rule
public EsTester esTester = new EsTester(new RuleIndexDefinition(new MapSettings()));
- RuleActivator ruleActivator = mock(RuleActivator.class);
-
- DbClient dbClient = dbTester.getDbClient();
-
- RuleIndexer ruleIndexer;
- ActiveRuleIndexer activeRuleIndexer;
-
- RuleIndex ruleIndex;
+ private RuleActivator ruleActivator = mock(RuleActivator.class);
+ private DbClient dbClient = dbTester.getDbClient();
+ private RuleIndexer ruleIndexer;
+ private ActiveRuleIndexer activeRuleIndexer;
+ private RuleIndex ruleIndex;
@Before
public void before() {
// verify index
assertThat(ruleIndex.search(new RuleQuery(), new SearchOptions()).getIds()).containsOnly(RULE_KEY1, RULE_KEY2);
+
+ // verify repositories
+ assertThat(dbClient.ruleRepositoryDao().selectAll(dbTester.getSession())).extracting(RuleRepositoryDto::getKee).containsOnly("fake");
}
@Test
assertThat(rule3).isNotNull();
assertThat(rule3.getStatus()).isEqualTo(RuleStatus.READY);
+ // verify index
assertThat(ruleIndex.search(new RuleQuery(), new SearchOptions()).getIds()).containsOnly(RULE_KEY1, RULE_KEY3);
+
+ // verify repositories
+ assertThat(dbClient.ruleRepositoryDao().selectAll(dbTester.getSession())).extracting(RuleRepositoryDto::getKee).containsOnly("fake");
}
@Test
}
private void execute(RulesDefinition... defs) {
- RuleDefinitionsLoader loader = new RuleDefinitionsLoader(mock(DeprecatedRulesDefinitionLoader.class), new RuleRepositories(), mock(CommonRuleDefinitionsImpl.class), 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));