@Test public void register_rules_at_startup() throws Exception { verifyRulesInDb(); Result<Rule> searchResult = index.search(new RuleQuery(), new QueryOptions()); assertThat(searchResult.getTotal()).isEqualTo(3); assertThat(searchResult.getHits()).hasSize(3); Rule rule = index.getByKey(RuleTesting.XOO_X1); assertThat(rule.severity()).isEqualTo(Severity.MINOR); assertThat(rule.name()).isEqualTo("x1 name"); assertThat(rule.htmlDescription()).isEqualTo("x1 desc"); assertThat(rule.systemTags()).contains("tag1"); assertThat(rule.params()).hasSize(1); assertThat(rule.param("acceptWhitespace").type()).isEqualTo(RuleParamType.BOOLEAN); assertThat(rule.param("acceptWhitespace").defaultValue()).isEqualTo("false"); assertThat(rule.param("acceptWhitespace").description()) .isEqualTo("Accept whitespaces on the line"); assertThat(rule.debtSubCharacteristicKey()) .isEqualTo(RulesDefinition.SubCharacteristics.INTEGRATION_TESTABILITY); assertThat(rule.debtRemediationFunction().type()) .isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET); assertThat(rule.debtRemediationFunction().coefficient()).isEqualTo("1h"); assertThat(rule.debtRemediationFunction().offset()).isEqualTo("30min"); assertThat(rule.effortToFixDescription()).isEqualTo("x1 effort to fix"); }
BulkChangeResult bulkActivate( RuleQuery ruleQuery, QualityProfileKey profileKey, @Nullable String severity) { BulkChangeResult result = new BulkChangeResult(); RuleIndex ruleIndex = index.get(RuleIndex.class); DbSession dbSession = db.openSession(false); try { Result<Rule> ruleSearchResult = ruleIndex.search(ruleQuery, new QueryOptions().setScroll(true)); Iterator<Rule> rules = ruleSearchResult.scroll(); while (rules.hasNext()) { Rule rule = rules.next(); try { ActiveRuleKey key = ActiveRuleKey.of(profileKey, rule.key()); RuleActivation activation = new RuleActivation(key); activation.setSeverity(severity); List<ActiveRuleChange> changes = activate(dbSession, activation); result.addChanges(changes); result.incrementSucceeded(); } catch (BadRequestException e) { // other exceptions stop the bulk activation result.incrementFailed(); // TODO result.addMessage } } dbSession.commit(); } finally { dbSession.close(); } return result; }
/** * support the use-case: 1. start server 2. stop server 3. drop elasticsearch index: rm -rf * data/es 4. start server -> db is up-to-date (no changes) but rules must be re-indexed */ @Test public void index_even_if_no_changes() throws Exception { verifyRulesInDb(); // clear ES but keep db tester.clearIndexes(); verifyRulesInDb(); Result<Rule> searchResult = index.search(new RuleQuery(), new QueryOptions()); assertThat(searchResult.getTotal()).isEqualTo(0); assertThat(searchResult.getHits()).hasSize(0); // db is not updated (same rules) but es must be reindexed tester.get(Platform.class).executeStartupTasks(); index = tester.get(RuleIndex.class); verifyRulesInDb(); searchResult = index.search(new RuleQuery().setKey("xoo:x1"), new QueryOptions()); assertThat(searchResult.getTotal()).isEqualTo(1); assertThat(searchResult.getHits()).hasSize(1); assertThat(searchResult.getHits().get(0).params()).hasSize(1); }
BulkChangeResult bulkDeactivate(RuleQuery ruleQuery, QualityProfileKey profile) { DbSession dbSession = db.openSession(false); try { RuleIndex ruleIndex = index.get(RuleIndex.class); BulkChangeResult result = new BulkChangeResult(); Result<Rule> ruleSearchResult = ruleIndex.search(ruleQuery, new QueryOptions().setScroll(true)); Iterator<Rule> rules = ruleSearchResult.scroll(); while (rules.hasNext()) { Rule rule = rules.next(); ActiveRuleKey key = ActiveRuleKey.of(profile, rule.key()); List<ActiveRuleChange> changes = deactivate(dbSession, key); result.addChanges(changes); result.incrementSucceeded(); } dbSession.commit(); return result; } finally { dbSession.close(); } }