private void verify(Consumer<TestRequest> requestPopulator, RuleDefinitionDto... expectedRules) { TestRequest request = ws.newRequest(); requestPopulator.accept(request); Rules.SearchResponse response = request .executeProtobuf(Rules.SearchResponse.class); assertThat(response.getP()).isEqualTo(1); RuleKey[] expectedRuleKeys = stream(expectedRules).map(RuleDefinitionDto::getKey).collect(MoreCollectors.toList()).toArray(new RuleKey[0]); assertThat(response.getRulesList()) .extracting(r -> RuleKey.parse(r.getKey())) .containsExactlyInAnyOrder(expectedRuleKeys); assertThat(response.getTotal()).isEqualTo(expectedRules.length); assertThat(response.getRulesCount()).isEqualTo(expectedRules.length); }
@Test public void return_empty_result() { Rules.SearchResponse response = ws.newRequest() .setParam(WebService.Param.FIELDS, "actives") .executeProtobuf(Rules.SearchResponse.class); assertThat(response.getTotal()).isEqualTo(0L); assertThat(response.getP()).isEqualTo(1); assertThat(response.getRulesCount()).isEqualTo(0); }
@Override public List<LoadedActiveRule> load(String qualityProfileKey) { List<LoadedActiveRule> ruleList = new LinkedList<>(); int page = 1; int pageSize = 500; long loaded = 0; while (true) { GetRequest getRequest = new GetRequest(getUrl(qualityProfileKey, page, pageSize)); SearchResponse response = loadFromStream(wsClient.call(getRequest).contentStream()); List<LoadedActiveRule> pageRules = readPage(response); ruleList.addAll(pageRules); loaded += response.getPs(); if (response.getTotal() <= loaded) { break; } page++; } return ruleList; }
@Override public List<LoadedActiveRule> load(String qualityProfileKey, @Nullable MutableBoolean fromCache) { List<LoadedActiveRule> ruleList = new LinkedList<>(); int page = 1; int pageSize = 500; int loaded = 0; while (true) { WSLoaderResult<InputStream> result = wsLoader.loadStream(getUrl(qualityProfileKey, page, pageSize)); SearchResponse response = loadFromStream(result.get()); List<LoadedActiveRule> pageRules = readPage(response); ruleList.addAll(pageRules); loaded += response.getPs(); if (response.getTotal() <= loaded) { break; } page++; if (fromCache != null) { fromCache.setValue(result.isFromCache()); } } return ruleList; }
@Override public List<LoadedActiveRule> load(String qualityProfileKey) { List<LoadedActiveRule> ruleList = new LinkedList<>(); int page = 1; int pageSize = 500; long loaded = 0; while (true) { GetRequest getRequest = new GetRequest(getUrl(qualityProfileKey, page, pageSize)); SearchResponse response = loadFromStream(wsClient.call(getRequest).contentStream()); List<LoadedActiveRule> pageRules = readPage(response); ruleList.addAll(pageRules); loaded += response.getPs(); if (response.getTotal() <= loaded) { break; } page++; } return ruleList; }
.setParam("qprofile", profile.getKee()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull();
.executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull();
@Test public void search_debt_rules_with_default_linear_offset_and_overridden_linear_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) .setRemediationGapMultiplier("1h") .setRemediationBaseEffort(null)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDebtRemFnOffset()).isEmpty(); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR.name()); }
@Test public void search_debt_rules_with_default_linear_offset_and_overridden_constant_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()) .setRemediationGapMultiplier(null) .setRemediationBaseEffort("5min")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEmpty(); assertThat(searchedRule.getDebtRemFnOffset()).isEqualTo("5min"); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()); }
@Test public void search_debt_rules_with_default_and_overridden_debt_values() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setRemediationGapMultiplier("2h") .setRemediationBaseEffort("25min")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "debtRemFn,debtOverloaded,defaultDebtRemFn") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getDefaultDebtRemFnCoeff()).isEqualTo("1h"); assertThat(searchedRule.getDefaultDebtRemFnOffset()).isEqualTo("15min"); assertThat(searchedRule.getDefaultDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDefaultRemFnBaseEffort()).isEqualTo("15min"); assertThat(searchedRule.getDefaultRemFnGapMultiplier()).isEqualTo("1h"); assertThat(searchedRule.getDefaultRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); assertThat(searchedRule.getDebtOverloaded()).isTrue(); assertThat(searchedRule.getDebtRemFnCoeff()).isEqualTo("2h"); assertThat(searchedRule.getDebtRemFnOffset()).isEqualTo("25min"); assertThat(searchedRule.getDebtRemFnType()).isEqualTo(DebtRemediationFunction.Type.LINEAR_OFFSET.name()); }
@Test public void search_all_active_rules() { OrganizationDto organization = db.organizations().insert(); QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule.getId(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); indexRules(); SearchResponse result = ws.newRequest() .setParam("q", rule.getName()) .setParam("activation", "true") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getKey()).isEqualTo(rule.getRepositoryKey() + ":" + rule.getRuleKey()); assertThat(searchedRule.getName()).isEqualTo(rule.getName()); }
@Test public void search_custom_rules_from_template_key() { RuleDefinitionDto templateRule = db.rules().insert(r -> r.setLanguage("java") .setIsTemplate(true)); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setTemplateId(templateRule.getId())); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "templateKey") .setParam("template_key", templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getKey()).isEqualTo(rule.getRepositoryKey() + ":" + rule.getRuleKey()); assertThat(searchedRule.getTemplateKey()).isEqualTo(templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()); }
@Test public void search_template_rules() { RuleDefinitionDto templateRule = db.rules().insert(r -> r.setLanguage("java") .setIsTemplate(true)); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java") .setTemplateId(templateRule.getId())); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "isTemplate") .setParam("is_template", "true") .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getIsTemplate()).isTrue(); assertThat(searchedRule.getKey()).isEqualTo(templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()); }
@Test public void return_lang_key_field_when_language_name_is_not_available() { OrganizationDto organization = db.organizations().insert(); String unknownLanguage = "unknown_" + randomAlphanumeric(5); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(unknownLanguage)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "langName") .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); Rule searchedRule = result.getRules(0); assertThat(searchedRule).isNotNull(); assertThat(searchedRule.getLangName()).isEqualTo(unknownLanguage); }
@Test public void do_not_return_external_rule() { db.rules().insert(r -> r.setIsExternal(true)); indexRules(); SearchResponse result = ws.newRequest().executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isZero(); assertThat(result.getRulesCount()).isZero(); }