private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
@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()); }
private static SearchResponse loadFromStream(InputStream is) { try { return SearchResponse.parseFrom(is); } catch (IOException e) { throw new IllegalStateException("Failed to load quality profiles", e); } finally { IOUtils.closeQuietly(is); } }
private static void readPage(Rules.Builder rulesBuilder, Map<String, ActiveRules.Builder> activeRulesBuildersByQProfile, SearchResponse response) { Builder ruleBuilder = Rules.Rule.newBuilder(); for (Rule r : response.getRulesList()) { RuleKey ruleKey = RuleKey.parse(r.getKey()); for (Map.Entry<String, ActiveList> entry : response.getActives().getActives().entrySet()) { RuleKey ruleKey = RuleKey.parse(entry.getKey()); for (org.sonarqube.ws.Rules.Active ar : entry.getValue().getActiveListList()) { for (Entry<String, org.sonarqube.ws.Rules.QProfile> entry : response.getQProfiles().getQProfiles().entrySet()) { if (!activeRulesBuildersByQProfile.containsKey(entry.getValue().getName())) { activeRulesBuildersByQProfile.put(entry.getValue().getName(), ActiveRules.newBuilder());
private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
.setParam("template_key", request.getTemplateKey()) .setParam("types", request.getTypes() == null ? null : request.getTypes().stream().collect(Collectors.joining(","))), SearchResponse.parser());
private static List<LoadedActiveRule> readPage(SearchResponse response) { List<LoadedActiveRule> loadedRules = new LinkedList<>(); List<Rule> rulesList = response.getRulesList(); Map<String, ActiveList> actives = response.getActives().getActives();
@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; }
private static SearchResponse loadFromStream(WsResponse response) { try (InputStream is = response.contentStream()) { return SearchResponse.parseFrom(is); } catch (IOException e) { throw new IllegalStateException("Failed to load rules", e); } }
private static SearchResponse loadFromStream(InputStream is) { try { return SearchResponse.parseFrom(is); } catch (IOException e) { throw new IllegalStateException("Failed to load quality profiles", e); } finally { IOUtils.closeQuietly(is); } }
private static SearchResponse loadFromStream(InputStream is) { try { return SearchResponse.parseFrom(is); } catch (IOException e) { throw new IllegalStateException("Failed to load quality profiles", e); } finally { IOUtils.closeQuietly(is); } }
private SearchResponse buildResponse(DbSession dbSession, SearchRequest request, SearchOptions context, SearchResult result, RuleQuery query) { SearchResponse.Builder responseBuilder = SearchResponse.newBuilder(); writeStatistics(responseBuilder, result, context); doContextResponse(dbSession, request, result, responseBuilder, query); if (!context.getFacets().isEmpty()) { writeFacets(responseBuilder, request, context, result); } return responseBuilder.build(); }
assertThat(result.getRulesList()) .extracting(Rule::getKey) .containsExactlyInAnyOrder( rule1.getKey().toString()); assertThat(result.getFacets().getFacetsList().stream().filter(f -> "languages".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet languages") assertThat(result.getFacets().getFacetsList().stream().filter(f -> "tags".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet tags") assertThat(result.getFacets().getFacetsList().stream().filter(f -> "repositories".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet repositories") assertThat(result.getFacets().getFacetsList().stream().filter(f -> "severities".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet severities") assertThat(result.getFacets().getFacetsList().stream().filter(f -> "statuses".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet statuses") assertThat(result.getFacets().getFacetsList().stream().filter(f -> "types".equals(f.getProperty())).findAny().get().getValuesList()) .extracting(Common.FacetValue::getVal, Common.FacetValue::getCount) .as("Facet types")
.setParam("qprofile", profile.getKee()) .executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString())).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString()).getActiveListList()).hasSize(1); Rules.Active activeList = result.getActives().getActives().get(rule.getKey().toString()).getActiveList(0); assertThat(activeList.getParamsCount()).isEqualTo(2); assertThat(activeList.getParamsList()).extracting("key", "value").containsExactlyInAnyOrder(
Builder rules = SearchResponse.newBuilder(); Actives.Builder actives = Actives.newBuilder(); rules.setPs(numberOfRules); rules.setTotal(total); return new ByteArrayInputStream(rules.build().toByteArray());
.setParam("template_key", request.getTemplateKey()) .setParam("types", request.getTypes() == null ? null : request.getTypes().stream().collect(Collectors.joining(","))), SearchResponse.parser());
.executeProtobuf(SearchResponse.class); assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getRulesCount()).isEqualTo(1); assertThat(result.getActives()).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString())).isNotNull(); assertThat(result.getActives().getActives().get(rule.getKey().toString()).getActiveListList()).hasSize(1); Rules.Active activeList = result.getActives().getActives().get(rule.getKey().toString()).getActiveList(0); assertThat(activeList.getParamsCount()).isEqualTo(2); assertThat(activeList.getParamsList()).extracting("key", "value").containsExactlyInAnyOrder(
@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()); }