From: Duarte Meneses Date: Mon, 23 Apr 2018 12:53:52 +0000 (+0200) Subject: SONAR-10575 Modify flag to include external rules in rules search X-Git-Tag: 7.5~1303 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e5024bac628a177d26cd3f4e2903757ff96b0d1e;p=sonarqube.git SONAR-10575 Modify flag to include external rules in rules search --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java index bdc71f6fdb8..ca1f86174be 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java @@ -95,7 +95,7 @@ public class ActivateRulesAction implements QProfileWsAction { wsSupport.checkCanEdit(dbSession, organization, profile); wsSupport.checkNotBuiltInt(profile); RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request); - ruleQuery.setIsExternal(false); + ruleQuery.setIncludeExternal(false); result = qProfileRules.bulkActivateAndCommit(dbSession, profile, ruleQuery, request.param(PARAM_TARGET_SEVERITY)); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java index f8ee01e8e49..b561083f917 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java @@ -87,7 +87,7 @@ public class DeactivateRulesAction implements QProfileWsAction { OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); wsSupport.checkCanEdit(dbSession, organization, profile); RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request); - ruleQuery.setIsExternal(false); + ruleQuery.setIncludeExternal(false); result = ruleActivator.bulkDeactivateAndCommit(dbSession, profile, ruleQuery); } writeResponse(result, response); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java index d93d6fc5893..c1c2404d838 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java @@ -302,7 +302,7 @@ public class RuleIndex { QueryBuilders.termQuery(FIELD_RULE_IS_TEMPLATE, Boolean.toString(isTemplate))); } - Boolean isExternal = query.isExternal(); + Boolean isExternal = query.includeExternal(); if (isExternal != null) { filters.put(FIELD_RULE_IS_EXTERNAL, QueryBuilders.termQuery(FIELD_RULE_IS_EXTERNAL, Boolean.toString(isExternal))); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleQuery.java b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleQuery.java index 4b79ffcfcd9..b4565b7ed5f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleQuery.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleQuery.java @@ -54,7 +54,7 @@ public class RuleQuery { private String internalKey; private String ruleKey; private OrganizationDto organization; - private Boolean isExternal; + private Boolean includeExternal; @CheckForNull public QProfileDto getQProfile() { @@ -206,13 +206,12 @@ public class RuleQuery { return this; } - @CheckForNull - public Boolean isExternal() { - return isExternal; + public Boolean includeExternal() { + return includeExternal; } - public RuleQuery setIsExternal(@Nullable Boolean b) { - this.isExternal = b; + public RuleQuery setIncludeExternal(@Nullable Boolean b) { + this.includeExternal = b; return this; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java index de3c14b118c..6755309c9bf 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java @@ -43,7 +43,7 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL; +import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE; @@ -72,7 +72,7 @@ public class RuleQueryFactory { */ public RuleQuery createRuleSearchQuery(DbSession dbSession, Request request) { RuleQuery query = createRuleQuery(dbSession, request); - query.setIsExternal(request.mandatoryParamAsBoolean(PARAM_IS_EXTERNAL)); + query.setIncludeExternal(request.mandatoryParamAsBoolean(PARAM_INCLUDE_EXTERNAL)); return query; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java index 50009dc6730..037610d689d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java @@ -36,7 +36,7 @@ public class RulesWsParameters { public static final String PARAM_INHERITANCE = "inheritance"; public static final String PARAM_ACTIVE_SEVERITIES = "active_severities"; public static final String PARAM_IS_TEMPLATE = "is_template"; - public static final String PARAM_IS_EXTERNAL = "is_external"; + public static final String PARAM_INCLUDE_EXTERNAL = "include_external"; public static final String PARAM_TEMPLATE_KEY = "template_key"; public static final String PARAM_ORGANIZATION = "organization"; public static final String PARAM_COMPARE_TO_PROFILE = "compareToProfile"; diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java index ba7039a586f..fcb44a3f5f7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java @@ -84,8 +84,8 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE; +import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; @@ -208,8 +208,8 @@ public class SearchAction implements RulesWsAction { static void defineIsExternalParam(WebService.NewAction action) { action - .createParam(PARAM_IS_EXTERNAL) - .setDescription("Filter external engine rules") + .createParam(PARAM_INCLUDE_EXTERNAL) + .setDescription("Include external engine rules in the results") .setDefaultValue(false) .setBooleanPossibleValues() .setSince("7.2"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java index 5a72e8fb77f..3c81b0748aa 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java @@ -32,13 +32,17 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; +import org.sonar.api.rule.Severity; +import org.sonar.api.rules.RuleType; import org.sonar.api.utils.System2; import org.sonar.api.utils.internal.AlwaysIncreasingSystem2; import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; +import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleMetadataDto; +import org.sonar.db.rule.RuleDto.Scope; import org.sonar.server.es.EsTester; import org.sonar.server.es.Facets; import org.sonar.server.es.SearchIdResult; @@ -46,6 +50,7 @@ import org.sonar.server.es.SearchOptions; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; import static com.google.common.collect.ImmutableSet.of; +import static com.google.common.collect.Sets.newHashSet; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.emptySet; @@ -212,6 +217,30 @@ public class RuleIndexTest { assertThat(results).containsOnly(rule.getId()); } + @Test + public void search_external_rule() { + + RuleDefinitionDto rule = new RuleDefinitionDto() + .setId(123) + .setRuleKey("S001") + .setRepositoryKey("external_xoo") + .setName("xoo:S001") + .setSeverity(Severity.BLOCKER) + .setStatus(RuleStatus.READY) + .setIsTemplate(false) + .setIsExternal(true) + .setType(RuleType.BUG) + .setScope(Scope.ALL) + .setCreatedAt(1500000000000L) + .setUpdatedAt(1600000000000L); + + db.rules().insert(rule); + index(); + + assertThat(underTest.search(new RuleQuery().setQueryText("external_xoo:S001"), new SearchOptions()).getIds()) + .containsExactlyInAnyOrder(rule.getId()); + } + @Test public void search_content_by_query() { RuleDefinitionDto rule1 = createJavaRule(rule -> rule.setRuleKey("123").setDescription("My great rule CWE-123 which makes your code 1000 times better!")); @@ -367,7 +396,7 @@ public class RuleIndexTest { // find all RuleQuery query = new RuleQuery(); - SearchIdResult results = underTest.search(query, new SearchOptions()); + SearchIdResult results = underTest.search(query, new SearchOptions()); assertThat(results.getIds()).hasSize(2); // Only template @@ -385,7 +414,7 @@ public class RuleIndexTest { results = underTest.search(query, new SearchOptions()); assertThat(results.getIds()).containsOnly(ruleIsTemplate.getId(), ruleNoTemplate.getId()); } - + @Test public void search_by_is_external() { RuleDefinitionDto ruleIsNotExternal = createRule(setIsExternal(false)); @@ -398,17 +427,17 @@ public class RuleIndexTest { assertThat(results.getIds()).hasSize(2); // Only external - query = new RuleQuery().setIsExternal(true); + query = new RuleQuery().setIncludeExternal(true); results = underTest.search(query, new SearchOptions()); assertThat(results.getIds()).containsOnly(ruleIsExternal.getId()); // Only not external - query = new RuleQuery().setIsExternal(false); + query = new RuleQuery().setIncludeExternal(false); results = underTest.search(query, new SearchOptions()); assertThat(results.getIds()).containsOnly(ruleIsNotExternal.getId()); // null => no filter - query = new RuleQuery().setIsExternal(null); + query = new RuleQuery().setIncludeExternal(null); results = underTest.search(query, new SearchOptions()); assertThat(results.getIds()).containsOnly(ruleIsExternal.getId(), ruleIsNotExternal.getId()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java index a07e81e4d42..6ed6c4f5f4b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java @@ -57,7 +57,7 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_COMPARE_TO_PROFILE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_EXTERNAL; +import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; @@ -101,7 +101,7 @@ public class RuleQueryFactoryTest { assertThat(result.isAscendingSort()).isTrue(); assertThat(result.getAvailableSinceLong()).isNull(); assertThat(result.getInheritance()).isNull(); - assertThat(result.isExternal()).isNull(); + assertThat(result.includeExternal()).isNull(); assertThat(result.isTemplate()).isNull(); assertThat(result.getLanguages()).isNull(); assertThat(result.getQueryText()).isNull(); @@ -130,7 +130,7 @@ public class RuleQueryFactoryTest { PARAM_AVAILABLE_SINCE, "2016-01-01", PARAM_INHERITANCE, "INHERITED,OVERRIDES", PARAM_IS_TEMPLATE, "true", - PARAM_IS_EXTERNAL, "false", + PARAM_INCLUDE_EXTERNAL, "false", PARAM_LANGUAGES, "java,js", TEXT_QUERY, "S001", PARAM_ORGANIZATION, organization.getKey(), @@ -147,17 +147,17 @@ public class RuleQueryFactoryTest { ASCENDING, "false"); assertResult(result, qualityProfile, compareToQualityProfile); - assertThat(result.isExternal()).isFalse(); + assertThat(result.includeExternal()).isFalse(); } @Test - public void is_external_is_mandatory_for_rule_search_query() { + public void include_external_is_mandatory_for_rule_search_query() { dbTester.qualityProfiles().insert(organization); dbTester.qualityProfiles().insert(organization); Request request = new SimpleGetRequest(); expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("The 'is_external' parameter is missing"); + expectedException.expectMessage("The 'include_external' parameter is missing"); underTest.createRuleSearchQuery(dbTester.getSession(), request); } @@ -174,7 +174,7 @@ public class RuleQueryFactoryTest { PARAM_AVAILABLE_SINCE, "2016-01-01", PARAM_INHERITANCE, "INHERITED,OVERRIDES", PARAM_IS_TEMPLATE, "true", - PARAM_IS_EXTERNAL, "true", + PARAM_INCLUDE_EXTERNAL, "true", PARAM_LANGUAGES, "java,js", TEXT_QUERY, "S001", PARAM_ORGANIZATION, organization.getKey(), @@ -191,7 +191,7 @@ public class RuleQueryFactoryTest { ASCENDING, "false"); assertResult(result, qualityProfile, compareToQualityProfile); - assertThat(result.isExternal()).isNull(); + assertThat(result.includeExternal()).isNull(); } private void assertResult(RuleQuery result, QProfileDto qualityProfile, QProfileDto compareToQualityProfile) { diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/RulesService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/RulesService.java index 298c5e136c1..e1ada3def79 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/RulesService.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/RulesService.java @@ -143,7 +143,7 @@ public class RulesService extends BaseService { .setParam("facets", request.getFacets() == null ? null : request.getFacets().stream().collect(Collectors.joining(","))) .setParam("inheritance", request.getInheritance() == null ? null : request.getInheritance().stream().collect(Collectors.joining(","))) .setParam("is_template", request.getIsTemplate()) - .setParam("is_external", request.getIsExternal()) + .setParam("include_external", request.getIncludeExternal()) .setParam("languages", request.getLanguages() == null ? null : request.getLanguages().stream().collect(Collectors.joining(","))) .setParam("organization", request.getOrganization()) .setParam("p", request.getP()) diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/SearchRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/SearchRequest.java index 38d9d4dac01..9ed5873ccfc 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/SearchRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/rules/SearchRequest.java @@ -39,7 +39,7 @@ public class SearchRequest { private List f; private List facets; private List inheritance; - private String isExternal; + private String includeExternal; private String isTemplate; private List languages; private String organization; @@ -248,13 +248,13 @@ public class SearchRequest { *
  • "no"
  • * */ - public SearchRequest setIsExternal(String isExternal) { - this.isExternal = isExternal; + public SearchRequest setIncludeExternal(String includeExternal) { + this.includeExternal = includeExternal; return this; } - public String getIsExternal() { - return isExternal; + public String getIncludeExternal() { + return includeExternal; } /** diff --git a/tests/src/test/java/org/sonarqube/tests/issue/ExternalIssueTest.java b/tests/src/test/java/org/sonarqube/tests/issue/ExternalIssueTest.java index 4a1f4b91a7b..834f44ec1ff 100644 --- a/tests/src/test/java/org/sonarqube/tests/issue/ExternalIssueTest.java +++ b/tests/src/test/java/org/sonarqube/tests/issue/ExternalIssueTest.java @@ -124,7 +124,7 @@ public class ExternalIssueTest { List rulesList = tester.wsClient().rules() .search(new org.sonarqube.ws.client.rules.SearchRequest() .setRuleKey(key) - .setIsExternal(Boolean.toString(true))) + .setIncludeExternal(Boolean.toString(true))) .getRulesList(); assertThat(rulesList).isEmpty(); @@ -134,7 +134,7 @@ public class ExternalIssueTest { List rulesList = tester.wsClient().rules() .search(new org.sonarqube.ws.client.rules.SearchRequest() .setRuleKey(key) - .setIsExternal(Boolean.toString(true))) + .setIncludeExternal(Boolean.toString(true))) .getRulesList(); assertThat(rulesList).hasSize(1);