aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server-common
diff options
context:
space:
mode:
authorPierre <pierre.guillot@sonarsource.com>2020-09-24 14:21:10 +0200
committersonartech <sonartech@sonarsource.com>2020-10-05 20:07:42 +0000
commit13d76f2a2c2e5b42b3d74bf1ad0c4dbbeca14608 (patch)
treece8c16540053ae25ed9ad8b31072ba204a4a34fc /server/sonar-server-common
parent68c364f416ced3893457300257c1c5df1eef8ce7 (diff)
downloadsonarqube-13d76f2a2c2e5b42b3d74bf1ad0c4dbbeca14608.tar.gz
sonarqube-13d76f2a2c2e5b42b3d74bf1ad0c4dbbeca14608.zip
SONAR-13903 Remove use of organizations in Quality Profiles and Active Rules
Diffstat (limited to 'server/sonar-server-common')
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java14
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java3
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java2
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java13
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java12
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java102
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java61
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java75
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java15
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java73
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java10
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java6
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java7
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java2
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java126
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java60
-rw-r--r--server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java4
17 files changed, 91 insertions, 494 deletions
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java
index 66afd4feda8..115887d2a7e 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
@@ -288,21 +289,12 @@ public class BulkIndexer {
return false;
}
BulkRequestKey that = (BulkRequestKey) o;
- if (!docType.equals(that.docType)) {
- return false;
- }
- if (!index.equals(that.index)) {
- return false;
- }
- return requestType.equals(that.requestType);
+ return Objects.equals(docType, that.docType) && Objects.equals(index, that.index) && Objects.equals(requestType, that.requestType);
}
@Override
public int hashCode() {
- int result = requestType.hashCode();
- result = 31 * result + index.hashCode();
- result = 31 * result + docType.hashCode();
- return result;
+ return Objects.hash(requestType, index, docType);
}
@Override
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java
index 903f8f4dca8..87d32d64f5a 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java
@@ -126,7 +126,8 @@ public class EsClient implements Closeable {
return new ProxySearchRequestBuilder(nativeClient()).setIndices(index.getName());
}
- public SearchRequestBuilder prepareSearch(IndexMainType indexType) {
+ public SearchRequestBuilder
+ prepareSearch(IndexMainType indexType) {
return new ProxySearchRequestBuilder(nativeClient())
.setIndices(indexType.getIndex().getName())
.setTypes(indexType.getType());
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java b/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java
index 3b958ef838b..207913fe827 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java
@@ -44,7 +44,7 @@ public class DefaultOrganizationProviderImpl implements DefaultOrganizationProvi
return cache;
}
- private static DefaultOrganization getDefaultOrganization(DbClient dbClient) {
+ public static DefaultOrganization getDefaultOrganization(DbClient dbClient) {
try (DbSession dbSession = dbClient.openSession(false)) {
Optional<String> uuid = dbClient.internalPropertiesDao().selectByKey(dbSession, InternalProperties.DEFAULT_ORGANIZATION);
checkState(uuid.isPresent() && !uuid.get().isEmpty(), "No Default organization uuid configured");
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java
index 1b4752ab9c4..ab64116df6a 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java
@@ -54,12 +54,10 @@ public class DefaultRuleFinder implements ServerRuleFinder {
private final DbClient dbClient;
private final RuleDao ruleDao;
- private final DefaultOrganizationProvider defaultOrganizationProvider;
- public DefaultRuleFinder(DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) {
+ public DefaultRuleFinder(DbClient dbClient) {
this.dbClient = dbClient;
this.ruleDao = dbClient.ruleDao();
- this.defaultOrganizationProvider = defaultOrganizationProvider;
}
@Override
@@ -78,10 +76,7 @@ public class DefaultRuleFinder implements ServerRuleFinder {
@CheckForNull
public org.sonar.api.rules.Rule findByKey(RuleKey key) {
try (DbSession dbSession = dbClient.openSession(false)) {
- String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid();
- OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid)
- .orElseThrow(() -> new IllegalStateException(String.format("Cannot find default organization '%s'", defaultOrganizationUuid)));
- Optional<RuleDto> rule = ruleDao.selectByKey(dbSession, defaultOrganization.getUuid(), key);
+ Optional<RuleDto> rule = ruleDao.selectByKey(dbSession, key);
if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED) {
return toRule(rule.get(), ruleDao.selectRuleParamsByRuleKey(dbSession, rule.get().getKey()));
} else {
@@ -99,7 +94,7 @@ public class DefaultRuleFinder implements ServerRuleFinder {
@Override
public final org.sonar.api.rules.Rule find(org.sonar.api.rules.RuleQuery query) {
try (DbSession dbSession = dbClient.openSession(false)) {
- List<RuleDto> rules = ruleDao.selectByQuery(dbSession, defaultOrganizationProvider.get().getUuid(), query);
+ List<RuleDto> rules = ruleDao.selectByQuery(dbSession, query);
if (!rules.isEmpty()) {
RuleDto rule = rules.get(0);
return toRule(rule, ruleDao.selectRuleParamsByRuleKey(dbSession, rule.getKey()));
@@ -111,7 +106,7 @@ public class DefaultRuleFinder implements ServerRuleFinder {
@Override
public final Collection<org.sonar.api.rules.Rule> findAll(org.sonar.api.rules.RuleQuery query) {
try (DbSession dbSession = dbClient.openSession(false)) {
- List<RuleDto> rules = ruleDao.selectByQuery(dbSession, defaultOrganizationProvider.get().getUuid(), query);
+ List<RuleDto> rules = ruleDao.selectByQuery(dbSession, query);
if (rules.isEmpty()) {
return Collections.emptyList();
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java
index ab65bcb66b8..970f42b73c8 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java
@@ -21,10 +21,12 @@ package org.sonar.server.rule.index;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
@@ -196,6 +198,15 @@ public class RuleDoc extends BaseDoc {
return this;
}
+ public Set<String> getTags() {
+ return getField(RuleIndexDefinition.FIELD_RULE_TAGS);
+ }
+
+ public RuleDoc setTags(Set<String> tags) {
+ setField(RuleIndexDefinition.FIELD_RULE_TAGS, tags);
+ return this;
+ }
+
@CheckForNull
public RuleStatus status() {
return RuleStatus.valueOf(getField(RuleIndexDefinition.FIELD_RULE_STATUS));
@@ -287,6 +298,7 @@ public class RuleDoc extends BaseDoc {
.setStatus(dto.getStatus().toString())
.setType(dto.getTypeAsRuleType())
.setCreatedAt(dto.getCreatedAt())
+ .setTags(Sets.union(dto.getTags(), dto.getSystemTags()))
.setUpdatedAt(dto.getUpdatedAt());
if (dto.getTemplateRuleKey() != null && dto.getTemplateRepository() != null) {
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java
deleted file mode 100644
index 361f9120c5c..00000000000
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2020 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.rule.index;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.sonar.db.rule.RuleExtensionForIndexingDto;
-import org.sonar.db.rule.RuleForIndexingDto;
-import org.sonar.server.es.BaseDoc;
-
-import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION;
-
-public class RuleExtensionDoc extends BaseDoc {
-
- public RuleExtensionDoc(Map<String, Object> fields) {
- super(TYPE_RULE_EXTENSION, fields);
- }
-
- public RuleExtensionDoc() {
- super(TYPE_RULE_EXTENSION, new HashMap<>(4));
- }
-
- @Override
- public String getId() {
- return idOf(getRuleUuid(), getScope());
- }
-
- public String getRuleUuid() {
- return ruleUuidAsString();
- }
-
- private String ruleUuidAsString() {
- return getField(RuleIndexDefinition.FIELD_RULE_UUID);
- }
-
- public RuleExtensionDoc setRuleUuid(String ruleUuid) {
- String parent = ruleUuid;
- setField(RuleIndexDefinition.FIELD_RULE_UUID, parent);
- setParent(parent);
- return this;
- }
-
- public RuleExtensionScope getScope() {
- return RuleExtensionScope.parse(getField(RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE));
- }
-
- public RuleExtensionDoc setScope(RuleExtensionScope scope) {
- setField(RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE, scope.getScope());
- return this;
- }
-
- public Set<String> getTags() {
- return getField(RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS);
- }
-
- public RuleExtensionDoc setTags(Set<String> tags) {
- setField(RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS, tags);
- return this;
- }
-
- public static RuleExtensionDoc of(RuleForIndexingDto rule) {
- return new RuleExtensionDoc()
- .setRuleUuid(rule.getUuid())
- .setScope(RuleExtensionScope.system())
- .setTags(rule.getSystemTags());
- }
-
- public static RuleExtensionDoc of(RuleExtensionForIndexingDto rule) {
- return new RuleExtensionDoc()
- .setRuleUuid(rule.getRuleUuid())
- .setScope(RuleExtensionScope.organization(rule.getOrganizationUuid()))
- .setTags(rule.getTagsAsSet());
- }
-
- public static String idOf(String ruleUuid, RuleExtensionScope scope) {
- return ruleUuid + "|" + scope.getScope();
- }
-
- @Override
- public String toString() {
- return ReflectionToStringBuilder.toString(this);
- }
-}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java
deleted file mode 100644
index 919046bdf02..00000000000
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2020 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.server.rule.index;
-
-import java.util.Optional;
-import javax.annotation.Nullable;
-import org.sonar.db.organization.OrganizationDto;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-public class RuleExtensionScope {
-
- private static final String FAKE_UUID_FOR_SYSTEM = "system";
-
- private final Optional<String> organizationUuid;
-
- private RuleExtensionScope(@Nullable String organizationUuid) {
- this.organizationUuid = Optional.ofNullable(organizationUuid);
- }
-
- public static RuleExtensionScope system() {
- return new RuleExtensionScope(null);
- }
-
- public static RuleExtensionScope organization(OrganizationDto organization) {
- return organization(organization.getUuid());
- }
-
- public static RuleExtensionScope organization(String organizationUuid) {
- checkArgument(!FAKE_UUID_FOR_SYSTEM.equals(organizationUuid), "The organization uuid '%s' is reserved for to store system tags in the rules index.", FAKE_UUID_FOR_SYSTEM);
- return new RuleExtensionScope(organizationUuid);
- }
-
- public String getScope() {
- return organizationUuid.orElse(FAKE_UUID_FOR_SYSTEM);
- }
-
- public static RuleExtensionScope parse(String scope) {
- if (FAKE_UUID_FOR_SYSTEM.equals(scope)) {
- return system();
- }
- return new RuleExtensionScope(scope);
- }
-}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java
index fa61b365c6b..e30b69aed3c 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java
@@ -20,7 +20,6 @@
package org.sonar.server.rule.index;
import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -39,14 +38,12 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.join.aggregations.JoinAggregationBuilders;
import org.elasticsearch.join.query.HasParentQueryBuilder;
import org.elasticsearch.join.query.JoinQueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.BucketOrder;
-import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
@@ -57,7 +54,6 @@ import org.sonar.api.rule.Severity;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.System2;
import org.sonar.core.util.stream.MoreCollectors;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.server.es.EsClient;
import org.sonar.server.es.EsUtils;
@@ -93,8 +89,6 @@ import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_ACTIVE_RULE_
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_ACTIVE_RULE_SEVERITY;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_CREATED_AT;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_CWE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_HTML_DESCRIPTION;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_INTERNAL_KEY;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_IS_EXTERNAL;
@@ -109,12 +103,12 @@ import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SANS_TO
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SEVERITY;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SONARSOURCE_SECURITY;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_STATUS;
+import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TAGS;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TEMPLATE_KEY;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TYPE;
import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_UPDATED_AT;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_ACTIVE_RULE;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION;
/**
* The unique entry-point to interact with Elasticsearch index "rules".
@@ -153,8 +147,7 @@ public class RuleIndex {
}
public SearchIdResult<String> search(RuleQuery query, SearchOptions options) {
- SearchRequestBuilder esSearch = client
- .prepareSearch(TYPE_RULE);
+ SearchRequestBuilder esSearch = client.prepareSearch(TYPE_RULE);
QueryBuilder qb = buildQuery(query);
Map<String, QueryBuilder> filters = buildFilters(query);
@@ -216,13 +209,13 @@ public class RuleIndex {
BoolQueryBuilder textQuery = boolQuery();
JavaTokenizer.split(queryString)
.stream().map(token -> boolQuery().should(
- matchQuery(
- SEARCH_GRAMS_ANALYZER.subField(FIELD_RULE_NAME),
- StringUtils.left(token, DefaultIndexSettings.MAXIMUM_NGRAM_LENGTH)).boost(20f))
- .should(
- matchPhraseQuery(
- ENGLISH_HTML_ANALYZER.subField(FIELD_RULE_HTML_DESCRIPTION),
- token).boost(3f)))
+ matchQuery(
+ SEARCH_GRAMS_ANALYZER.subField(FIELD_RULE_NAME),
+ StringUtils.left(token, DefaultIndexSettings.MAXIMUM_NGRAM_LENGTH)).boost(20f))
+ .should(
+ matchPhraseQuery(
+ ENGLISH_HTML_ANALYZER.subField(FIELD_RULE_HTML_DESCRIPTION),
+ token).boost(3f)))
.forEach(textQuery::must);
qb.should(textQuery.boost(20f));
}
@@ -316,8 +309,7 @@ public class RuleIndex {
}
if (isNotEmpty(query.getTags())) {
- filters.put(FIELD_RULE_EXTENSION_TAGS,
- buildTagsFilter(query.getTags(), query.getOrganization()));
+ filters.put(FIELD_RULE_TAGS, buildTagsFilter(query.getTags()));
}
Collection<RuleType> types = query.getTypes();
@@ -387,14 +379,11 @@ public class RuleIndex {
return filters;
}
- private static BoolQueryBuilder buildTagsFilter(Collection<String> tags, OrganizationDto organization) {
+ private static BoolQueryBuilder buildTagsFilter(Collection<String> tags) {
BoolQueryBuilder q = boolQuery();
- tags.stream()
- .map(tag -> boolQuery()
- .filter(QueryBuilders.termQuery(FIELD_RULE_EXTENSION_TAGS, tag))
- .filter(termsQuery(FIELD_RULE_EXTENSION_SCOPE, RuleExtensionScope.system().getScope(), RuleExtensionScope.organization(organization).getScope())))
- .map(childQuery -> JoinQueryBuilders.hasChildQuery(TYPE_RULE_EXTENSION.getName(), childQuery, ScoreMode.None))
- .forEach(q::should);
+ for (String tag : tags) {
+ q.should(boolQuery().filter(QueryBuilders.termQuery(FIELD_RULE_TAGS, tag)));
+ }
return q;
}
@@ -460,23 +449,8 @@ public class RuleIndex {
}
if (options.getFacets().contains(FACET_TAGS) || options.getFacets().contains(FACET_OLD_DEFAULT)) {
Collection<String> tags = query.getTags();
- checkArgument(query.getOrganization() != null, "Cannot use tags facet, if no organization is specified.", query.getTags());
-
- Function<TermsAggregationBuilder, AggregationBuilder> childFeature = termsAggregation -> {
-
- FilterAggregationBuilder scopeAggregation = AggregationBuilders.filter(
- "scope_filter_for_" + FACET_TAGS,
- termsQuery(FIELD_RULE_EXTENSION_SCOPE,
- RuleExtensionScope.system().getScope(),
- RuleExtensionScope.organization(query.getOrganization()).getScope()))
- .subAggregation(termsAggregation);
-
- return JoinAggregationBuilders.children("children_for_" + termsAggregation.getName(), TYPE_RULE_EXTENSION.getName())
- .subAggregation(scopeAggregation);
- };
-
aggregations.put(FACET_TAGS,
- stickyFacetBuilder.buildStickyFacet(FIELD_RULE_EXTENSION_TAGS, FACET_TAGS, MAX_FACET_SIZE, childFeature,
+ stickyFacetBuilder.buildStickyFacet(FIELD_RULE_TAGS, FACET_TAGS, MAX_FACET_SIZE,
(tags == null) ? (new String[0]) : tags.toArray()));
}
if (options.getFacets().contains(FACET_TYPES)) {
@@ -619,24 +593,15 @@ public class RuleIndex {
esSearch.setSize(options.getLimit());
}
- public List<String> listTags(@Nullable OrganizationDto organization, @Nullable String query, int size) {
+ public List<String> listTags(@Nullable String query, int size) {
int maxPageSize = 500;
checkArgument(size <= maxPageSize, "Page size must be lower than or equals to " + maxPageSize);
if (size <= 0) {
return emptyList();
}
- ImmutableList.Builder<String> scopes = ImmutableList.<String>builder()
- .add(RuleExtensionScope.system().getScope());
- if (organization != null) {
- scopes.add(RuleExtensionScope.organization(organization).getScope());
- }
- TermsQueryBuilder scopeFilter = QueryBuilders.termsQuery(
- FIELD_RULE_EXTENSION_SCOPE,
- scopes.build().toArray(new String[0]));
-
TermsAggregationBuilder termsAggregation = AggregationBuilders.terms(AGGREGATION_NAME_FOR_TAGS)
- .field(FIELD_RULE_EXTENSION_TAGS)
+ .field(FIELD_RULE_TAGS)
.size(size)
.order(BucketOrder.key(true))
.minDocCount(1);
@@ -647,8 +612,8 @@ public class RuleIndex {
.ifPresent(termsAggregation::includeExclude);
SearchRequestBuilder request = client
- .prepareSearch(TYPE_RULE_EXTENSION.getMainType())
- .setQuery(boolQuery().filter(scopeFilter))
+ .prepareSearch(TYPE_RULE.getMainType())
+ .setQuery(matchAllQuery())
.setSize(0)
.addAggregation(termsAggregation);
@@ -656,7 +621,7 @@ public class RuleIndex {
return EsUtils.termsKeys(esResponse.getAggregations().get(AGGREGATION_NAME_FOR_TAGS));
}
- private static boolean isNotEmpty(@Nullable Collection list) {
+ private static boolean isNotEmpty(@Nullable Collection<?> list) {
return list != null && !list.isEmpty();
}
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java
index daf8a1a1cd0..e6893a77ca0 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java
@@ -64,6 +64,7 @@ public class RuleIndexDefinition implements IndexDefinition {
public static final String FIELD_RULE_OWASP_TOP_10 = "owaspTop10";
public static final String FIELD_RULE_SANS_TOP_25 = "sansTop25";
public static final String FIELD_RULE_SONARSOURCE_SECURITY = "sonarsourceSecurity";
+ public static final String FIELD_RULE_TAGS = "tags";
public static final Set<String> SORT_FIELDS = ImmutableSet.of(
FIELD_RULE_NAME,
@@ -71,14 +72,6 @@ public class RuleIndexDefinition implements IndexDefinition {
FIELD_RULE_CREATED_AT,
FIELD_RULE_KEY);
- // Rule extension fields
- public static final IndexRelationType TYPE_RULE_EXTENSION = IndexType.relation(TYPE_RULE, "ruleExtension");
- /**
- * The uuid of a {@link RuleExtensionScope}
- */
- public static final String FIELD_RULE_EXTENSION_SCOPE = "ruleExt_scope";
- public static final String FIELD_RULE_EXTENSION_TAGS = "ruleExt_tags";
-
// Active rule fields
public static final IndexRelationType TYPE_ACTIVE_RULE = IndexType.relation(TYPE_RULE, "activeRule");
public static final String FIELD_ACTIVE_RULE_UUID = "activeRule_uuid";
@@ -137,6 +130,7 @@ public class RuleIndexDefinition implements IndexDefinition {
ruleMapping.keywordFieldBuilder(FIELD_RULE_SEVERITY).disableNorms().build();
ruleMapping.keywordFieldBuilder(FIELD_RULE_STATUS).disableNorms().build();
ruleMapping.keywordFieldBuilder(FIELD_RULE_LANGUAGE).disableNorms().build();
+ ruleMapping.keywordFieldBuilder(FIELD_RULE_TAGS).build();
ruleMapping.createBooleanField(FIELD_RULE_IS_TEMPLATE);
ruleMapping.createBooleanField(FIELD_RULE_IS_EXTERNAL);
@@ -158,10 +152,5 @@ public class RuleIndexDefinition implements IndexDefinition {
.keywordFieldBuilder(FIELD_ACTIVE_RULE_PROFILE_UUID).disableNorms().build()
.keywordFieldBuilder(FIELD_ACTIVE_RULE_INHERITANCE).disableNorms().build()
.keywordFieldBuilder(FIELD_ACTIVE_RULE_SEVERITY).disableNorms().build();
-
- // Rule extension
- index.createTypeMapping(TYPE_RULE_EXTENSION)
- .keywordFieldBuilder(FIELD_RULE_EXTENSION_SCOPE).disableNorms().build()
- .keywordFieldBuilder(FIELD_RULE_EXTENSION_TAGS).build();
}
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java
index e7447d060f8..3ac59206b3c 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java
@@ -33,8 +33,6 @@ import org.sonar.core.util.stream.MoreCollectors;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.es.EsQueueDto;
-import org.sonar.db.es.RuleExtensionId;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.rule.RuleForIndexingDto;
import org.sonar.server.es.BulkIndexer;
import org.sonar.server.es.BulkIndexer.Size;
@@ -47,14 +45,11 @@ import org.sonar.server.es.ResilientIndexer;
import org.sonar.server.rule.HotspotRuleDescription;
import org.sonar.server.security.SecurityStandards;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Stream.concat;
import static org.sonar.core.util.stream.MoreCollectors.toHashSet;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION;
import static org.sonar.server.security.SecurityStandards.SQ_CATEGORY_KEYS_ORDERING;
public class RuleIndexer implements ResilientIndexer {
@@ -70,7 +65,7 @@ public class RuleIndexer implements ResilientIndexer {
@Override
public Set<IndexType> getIndexTypes() {
- return ImmutableSet.of(TYPE_RULE, TYPE_RULE_EXTENSION);
+ return ImmutableSet.of(TYPE_RULE);
}
@Override
@@ -79,27 +74,15 @@ public class RuleIndexer implements ResilientIndexer {
BulkIndexer bulk = createBulkIndexer(Size.LARGE, IndexingListener.FAIL_ON_ERROR);
bulk.start();
- // index all definitions and system extensions
+ // index all definitions
if (uninitializedIndexTypes.contains(TYPE_RULE)) {
- dbClient.ruleDao().scrollIndexingRules(dbSession, dto -> {
- bulk.add(ruleDocOf(dto).toIndexRequest());
- bulk.add(RuleExtensionDoc.of(dto).toIndexRequest());
- });
- }
-
- // index all organization extensions
- if (uninitializedIndexTypes.contains(TYPE_RULE_EXTENSION)) {
- dbClient.ruleDao().scrollIndexingRuleExtensions(dbSession, dto -> bulk.add(RuleExtensionDoc.of(dto).toIndexRequest()));
+ dbClient.ruleDao().scrollIndexingRules(dbSession, dto -> bulk.add(ruleDocOf(dto).toIndexRequest()));
}
bulk.stop();
}
}
- public void commitAndIndex(DbSession dbSession, String ruleUuid) {
- commitAndIndex(dbSession, singletonList(ruleUuid));
- }
-
public void commitAndIndex(DbSession dbSession, Collection<String> ruleUuids) {
List<EsQueueDto> items = ruleUuids.stream()
.map(RuleIndexer::createQueueDtoForRule)
@@ -113,8 +96,8 @@ public class RuleIndexer implements ResilientIndexer {
/**
* Commit a change on a rule and its extension on the given organization
*/
- public void commitAndIndex(DbSession dbSession, String ruleUuid, OrganizationDto organization) {
- List<EsQueueDto> items = asList(createQueueDtoForRule(ruleUuid), createQueueDtoForRuleExtension(ruleUuid, organization));
+ public void commitAndIndex(DbSession dbSession, String ruleUuid) {
+ List<EsQueueDto> items = asList(createQueueDtoForRule(ruleUuid));
dbClient.esQueueDao().insert(dbSession, items);
dbSession.commit();
postCommit(dbSession, items);
@@ -133,7 +116,6 @@ public class RuleIndexer implements ResilientIndexer {
if (!items.isEmpty()) {
ListMultimap<String, EsQueueDto> itemsByType = groupItemsByIndexTypeFormat(items);
doIndexRules(dbSession, itemsByType.get(TYPE_RULE.format())).ifPresent(result::add);
- doIndexRuleExtensions(dbSession, itemsByType.get(TYPE_RULE_EXTENSION.format())).ifPresent(result::add);
}
return result;
}
@@ -154,49 +136,17 @@ public class RuleIndexer implements ResilientIndexer {
dbClient.ruleDao().scrollIndexingRulesByKeys(dbSession, ruleUuids,
r -> {
bulkIndexer.add(ruleDocOf(r).toIndexRequest());
- bulkIndexer.add(RuleExtensionDoc.of(r).toIndexRequest());
ruleUuids.remove(r.getUuid());
});
- // the remaining items reference rows that don't exist in db. They must
- // be deleted from index.
+ // the remaining items reference rows that don't exist in db. They must be deleted from index.
ruleUuids.forEach(ruleUuid -> {
bulkIndexer.addDeletion(TYPE_RULE, ruleUuid, ruleUuid);
- bulkIndexer.addDeletion(TYPE_RULE_EXTENSION, RuleExtensionDoc.idOf(ruleUuid, RuleExtensionScope.system()), ruleUuid);
});
return Optional.of(bulkIndexer.stop());
}
- private Optional<IndexingResult> doIndexRuleExtensions(DbSession dbSession, List<EsQueueDto> items) {
- if (items.isEmpty()) {
- return Optional.empty();
- }
-
- BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, new OneToOneResilientIndexingListener(dbClient, dbSession, items));
- bulkIndexer.start();
-
- Set<RuleExtensionId> docIds = items
- .stream()
- .map(RuleIndexer::explodeRuleExtensionDocId)
- .collect(toHashSet(items.size()));
-
- dbClient.ruleDao().scrollIndexingRuleExtensionsByIds(dbSession, docIds,
- // only index requests, no deletion requests.
- // Deactivated users are not deleted but updated.
- r -> {
- RuleExtensionId docId = new RuleExtensionId(r.getOrganizationUuid(), r.getRuleUuid());
- docIds.remove(docId);
- bulkIndexer.add(RuleExtensionDoc.of(r).toIndexRequest());
- });
-
- // the remaining items reference rows that don't exist in db. They must
- // be deleted from index.
- docIds.forEach(docId -> bulkIndexer.addDeletion(TYPE_RULE_EXTENSION, docId.getId(), docId.getRuleUuid()));
-
- return Optional.of(bulkIndexer.stop());
- }
-
private static RuleDoc ruleDocOf(RuleForIndexingDto dto) {
SecurityStandards securityStandards = SecurityStandards.fromSecurityStandards(dto.getSecurityStandards());
if (!securityStandards.getIgnoredSQCategories().isEmpty()) {
@@ -234,19 +184,8 @@ public class RuleIndexer implements ResilientIndexer {
return items.stream().collect(MoreCollectors.index(EsQueueDto::getDocType));
}
- private static RuleExtensionId explodeRuleExtensionDocId(EsQueueDto esQueueDto) {
- checkArgument(TYPE_RULE_EXTENSION.format().equals(esQueueDto.getDocType()));
- return new RuleExtensionId(esQueueDto.getDocId());
- }
-
private static EsQueueDto createQueueDtoForRule(String ruleUuid) {
String docId = ruleUuid;
return EsQueueDto.create(TYPE_RULE.format(), docId, null, docId);
}
-
- private static EsQueueDto createQueueDtoForRuleExtension(String ruleUuid, OrganizationDto organization) {
- String docId = RuleExtensionDoc.idOf(ruleUuid, RuleExtensionScope.organization(organization));
- return EsQueueDto.create(TYPE_RULE_EXTENSION.format(), docId, null, ruleUuid);
- }
-
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java
index 57f42918eec..fc5fefcfeab 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java
@@ -53,7 +53,6 @@ public class RuleQuery {
private boolean ascendingSort = true;
private String internalKey;
private String ruleKey;
- private OrganizationDto organization;
private boolean includeExternal;
private Collection<String> owaspTop10;
private Collection<String> sansTop25;
@@ -279,15 +278,6 @@ public class RuleQuery {
return ruleKey;
}
- public OrganizationDto getOrganization() {
- return organization;
- }
-
- public RuleQuery setOrganization(OrganizationDto o) {
- this.organization = o;
- return this;
- }
-
@CheckForNull
public QProfileDto getCompareToQProfile() {
return compareToQProfile;
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java
index 58ae6cc54e2..a3e706a2308 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java
@@ -30,7 +30,6 @@ import org.junit.Test;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
import org.sonar.db.es.EsQueueDto;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.qualityprofile.ActiveRuleDto;
import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.db.rule.RuleDefinitionDto;
@@ -63,9 +62,8 @@ public class ActiveRuleIndexerTest {
public void before() {
rule1 = db.rules().insert();
rule2 = db.rules().insert();
- OrganizationDto org = db.organizations().insert();
- profile1 = db.qualityProfiles().insert(org);
- profile2 = db.qualityProfiles().insert(org);
+ profile1 = db.qualityProfiles().insert();
+ profile2 = db.qualityProfiles().insert();
}
@Test
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java
index b1d8498dee0..5769006c1f6 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java
@@ -29,7 +29,6 @@ import org.sonar.api.utils.System2;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
-import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleDto.Scope;
@@ -46,7 +45,6 @@ public class DefaultRuleFinderTest {
private DbClient dbClient = dbTester.getDbClient();
private DbSession session = dbTester.getSession();
- private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
private RuleDto rule1 = new RuleDto()
.setName("Check Header")
@@ -84,7 +82,7 @@ public class DefaultRuleFinderTest {
.setScope(Scope.MAIN)
.setStatus(RuleStatus.READY);
- private DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient, defaultOrganizationProvider);
+ private DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient);
@Before
public void setup() {
@@ -131,8 +129,7 @@ public class DefaultRuleFinderTest {
public void findByKey_populates_system_tags_but_not_tags() {
RuleDefinitionDto ruleDefinition = dbTester.rules()
.insert(t -> t.setSystemTags(ImmutableSet.of(randomAlphanumeric(5), randomAlphanumeric(6))));
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.rules().insertRule(organization);
+ dbTester.rules().insertRule();
Rule rule = underTest.findByKey(ruleDefinition.getKey());
assertThat(rule.getSystemTags())
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java
index e123607d8e3..33cc879982a 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java
@@ -61,7 +61,7 @@ public class RuleIndexDefinitionTest {
.isEqualTo(IndexType.main(Index.withRelations("rules"), "rule"));
assertThat(ruleIndex.getRelationsStream())
.extracting(IndexType.IndexRelationType::getName)
- .containsOnly("activeRule", "ruleExtension");
+ .containsOnly("activeRule");
// no cluster by default
assertThat(ruleIndex.getSetting("index.number_of_shards")).isEqualTo("2");
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java
index 2dc3371373c..be13bf85728 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java
@@ -31,10 +31,8 @@ import org.junit.rules.ExpectedException;
import org.sonar.api.impl.utils.AlwaysIncreasingSystem2;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
-import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.System2;
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.RuleMetadataDto;
@@ -67,7 +65,6 @@ import static org.sonar.db.rule.RuleTesting.setIsExternal;
import static org.sonar.db.rule.RuleTesting.setIsTemplate;
import static org.sonar.db.rule.RuleTesting.setLanguage;
import static org.sonar.db.rule.RuleTesting.setName;
-import static org.sonar.db.rule.RuleTesting.setOrganization;
import static org.sonar.db.rule.RuleTesting.setRepositoryKey;
import static org.sonar.db.rule.RuleTesting.setRuleKey;
import static org.sonar.db.rule.RuleTesting.setSecurityStandards;
@@ -86,7 +83,6 @@ import static org.sonar.server.rule.index.RuleIndex.FACET_TAGS;
import static org.sonar.server.rule.index.RuleIndex.FACET_TYPES;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_ACTIVE_RULE;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION;
import static org.sonar.server.security.SecurityStandards.SANS_TOP_25_INSECURE_INTERACTION;
import static org.sonar.server.security.SecurityStandards.SANS_TOP_25_RISKY_RESOURCE;
@@ -293,21 +289,19 @@ public class RuleIndexTest {
@Test
public void filter_by_tags() {
- OrganizationDto organization = db.organizations().insert();
-
RuleDefinitionDto rule1 = createRule(setSystemTags("tag1s"));
- createRuleMetadata(rule1, organization, setTags("tag1"));
+ createRuleMetadata(rule1, setTags("tag1"));
RuleDefinitionDto rule2 = createRule(setSystemTags("tag2s"));
- createRuleMetadata(rule2, organization, setTags("tag2"));
+ createRuleMetadata(rule2, setTags("tag2"));
index();
- assertThat(es.countDocuments(TYPE_RULE_EXTENSION)).isEqualTo(4);
+ assertThat(es.countDocuments(TYPE_RULE)).isEqualTo(2);
// tag2s in filter
- RuleQuery query = new RuleQuery().setOrganization(organization).setTags(of("tag2s"));
+ RuleQuery query = new RuleQuery().setTags(of("tag2s"));
verifySearch(query, rule2);
// tag2 in filter
- query = new RuleQuery().setOrganization(organization).setTags(of("tag2"));
+ query = new RuleQuery().setTags(of("tag2"));
verifySearch(query, rule2);
// empty list => no filter
@@ -321,14 +315,11 @@ public class RuleIndexTest {
@Test
public void tags_facet_supports_selected_value_with_regexp_special_characters() {
- OrganizationDto organization = db.organizations().insert();
-
RuleDefinitionDto rule = createRule();
- createRuleMetadata(rule, organization, setTags("misra++"));
+ createRuleMetadata(rule, setTags("misra++"));
index();
RuleQuery query = new RuleQuery()
- .setOrganization(organization)
.setTags(singletonList("misra["));
SearchOptions options = new SearchOptions().addFacets(FACET_TAGS);
@@ -507,8 +498,8 @@ public class RuleIndexTest {
@Test
public void compare_to_another_profile() {
String xoo = "xoo";
- QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(xoo));
- QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(xoo));
+ QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(xoo));
+ QProfileDto anotherProfile = db.qualityProfiles().insert(p -> p.setLanguage(xoo));
RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition();
RuleDefinitionDto profileRule1 = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition();
RuleDefinitionDto profileRule2 = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition();
@@ -544,8 +535,8 @@ public class RuleIndexTest {
}
@SafeVarargs
- private final RuleMetadataDto createRuleMetadata(RuleDefinitionDto rule, OrganizationDto organization, Consumer<RuleMetadataDto>... populaters) {
- return db.rules().insertOrUpdateMetadata(rule, organization, populaters);
+ private final RuleMetadataDto createRuleMetadata(RuleDefinitionDto rule, Consumer<RuleMetadataDto>... populaters) {
+ return db.rules().insertOrUpdateMetadata(rule, populaters);
}
@Test
@@ -641,16 +632,16 @@ public class RuleIndexTest {
}
private void index() {
- ruleIndexer.indexOnStartup(Sets.newHashSet(TYPE_RULE, TYPE_RULE_EXTENSION));
+ ruleIndexer.indexOnStartup(Sets.newHashSet(TYPE_RULE));
activeRuleIndexer.indexOnStartup(Sets.newHashSet(TYPE_ACTIVE_RULE));
}
private RuleQuery newRuleQuery() {
- return new RuleQuery().setOrganization(db.getDefaultOrganization());
+ return new RuleQuery();
}
private QProfileDto createJavaProfile() {
- return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage("java"));
+ return db.qualityProfiles().insert(p -> p.setLanguage("java"));
}
@Test
@@ -733,46 +724,24 @@ public class RuleIndexTest {
}
@Test
- public void listTags_should_return_both_system_tags_and_organization_specific_tags() {
- OrganizationDto organization = db.organizations().insert();
-
+ public void listTags_should_return_tags() {
RuleDefinitionDto rule1 = createRule(setSystemTags("sys1", "sys2"));
- createRuleMetadata(rule1, organization, setOrganization(organization), setTags("tag1"));
+ createRuleMetadata(rule1, setTags("tag1"));
RuleDefinitionDto rule2 = createRule(setSystemTags());
- createRuleMetadata(rule2, organization, setOrganization(organization), setTags("tag2"));
-
- index();
-
- assertThat(underTest.listTags(organization, null, 10)).containsOnly("tag1", "tag2", "sys1", "sys2");
- }
-
- @Test
- public void listTags_must_not_return_tags_of_other_organizations() {
- OrganizationDto organization1 = db.organizations().insert();
- RuleDefinitionDto rule1 = createRule(setSystemTags("sys1"));
- createRuleMetadata(rule1, organization1, setOrganization(organization1), setTags("tag1"));
+ createRuleMetadata(rule2, setTags("tag2"));
- OrganizationDto organization2 = db.organizations().insert();
- RuleDefinitionDto rule2 = createRule(setSystemTags("sys2"));
- createRuleMetadata(rule2, organization2, setOrganization(organization2), setTags("tag2"));
-
- OrganizationDto organization3 = db.organizations().insert();
index();
- assertThat(underTest.listTags(organization1, null, 10)).containsOnly("tag1", "sys1", "sys2");
- assertThat(underTest.listTags(organization2, null, 10)).containsOnly("tag2", "sys1", "sys2");
- assertThat(underTest.listTags(organization3, null, 10)).containsOnly("sys1", "sys2");
+ assertThat(underTest.listTags(null, 10)).containsOnly("tag1", "tag2", "sys1", "sys2");
}
@Test
public void fail_to_list_tags_when_size_greater_than_500() {
- OrganizationDto organization = db.organizations().insert();
-
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Page size must be lower than or equals to 500");
- underTest.listTags(organization, null, 501);
+ underTest.listTags(null, 501);
}
@Test
@@ -795,17 +764,15 @@ public class RuleIndexTest {
@Test
public void global_facet_on_repositories_and_tags() {
- OrganizationDto organization = db.organizations().insert();
-
createRule(setRepositoryKey("php"), setSystemTags("sysTag"));
RuleDefinitionDto rule1 = createRule(setRepositoryKey("php"), setSystemTags());
- createRuleMetadata(rule1, organization, setTags("tag1"));
+ createRuleMetadata(rule1, setTags("tag1"));
RuleDefinitionDto rule2 = createRule(setRepositoryKey("javascript"), setSystemTags());
- createRuleMetadata(rule2, organization, setTags("tag1", "tag2"));
+ createRuleMetadata(rule2, setTags("tag1", "tag2"));
index();
// should not have any facet!
- RuleQuery query = new RuleQuery().setOrganization(organization);
+ RuleQuery query = new RuleQuery();
SearchIdResult result1 = underTest.search(query, new SearchOptions());
assertThat(result1.getFacets().getAll()).isEmpty();
@@ -859,9 +826,7 @@ public class RuleIndexTest {
@Test
public void sticky_facets_no_filters() {
setupStickyFacets();
- OrganizationDto organization = db.organizations().insert();
-
- RuleQuery query = new RuleQuery().setOrganization(organization);
+ RuleQuery query = new RuleQuery();
SearchIdResult<String> result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES,
FACET_TAGS, FACET_TYPES)));
@@ -880,12 +845,9 @@ public class RuleIndexTest {
@Test
public void sticky_facets_with_1_filter() {
setupStickyFacets();
- OrganizationDto organization = db.organizations().insert();
-
- RuleQuery query = new RuleQuery().setOrganization(organization).setLanguages(ImmutableList.of("cpp"));
+ RuleQuery query = new RuleQuery().setLanguages(ImmutableList.of("cpp"));
- SearchIdResult<String> result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES,
- FACET_REPOSITORIES, FACET_TAGS)));
+ SearchIdResult<String> result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS)));
assertThat(result.getUuids()).hasSize(3);
assertThat(result.getFacets().getAll()).hasSize(3);
assertThat(result.getFacets().get(FACET_LANGUAGES).keySet()).containsOnly("cpp", "java", "cobol");
@@ -915,12 +877,11 @@ public class RuleIndexTest {
@Test
public void tags_facet_should_find_tags_of_specified_organization() {
- OrganizationDto organization = db.organizations().insert();
RuleDefinitionDto rule = createRule(setSystemTags());
- createRuleMetadata(rule, organization, setTags("bla"));
+ createRuleMetadata(rule, setTags("bla"));
index();
- RuleQuery query = new RuleQuery().setOrganization(organization);
+ RuleQuery query = new RuleQuery();
SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
SearchIdResult<String> result = underTest.search(query, options);
@@ -934,8 +895,7 @@ public class RuleIndexTest {
createRule(setSystemTags(tags));
index();
- RuleQuery query = new RuleQuery()
- .setOrganization(db.getDefaultOrganization());
+ RuleQuery query = new RuleQuery();
SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
SearchIdResult<String> result = underTest.search(query, options);
assertThat(result.getFacets().get(FACET_TAGS).size()).isEqualTo(100);
@@ -951,7 +911,6 @@ public class RuleIndexTest {
index();
RuleQuery query = new RuleQuery()
- .setOrganization(db.getDefaultOrganization())
.setTags(singletonList("tagA"));
SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
SearchIdResult<String> result = underTest.search(query, options);
@@ -965,41 +924,14 @@ public class RuleIndexTest {
}
@Test
- public void tags_facet_should_not_find_tags_of_any_other_organization() {
- OrganizationDto organization1 = db.organizations().insert();
- OrganizationDto organization2 = db.organizations().insert();
- RuleDefinitionDto rule = createRule(setSystemTags());
- createRuleMetadata(rule, organization1, setTags("bla1"));
- createRuleMetadata(rule, organization2, setTags("bla2"));
- index();
-
- RuleQuery query = new RuleQuery().setOrganization(organization2);
- SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
-
- SearchIdResult<String> result = underTest.search(query, options);
- assertThat(result.getFacets().get(FACET_TAGS).entrySet()).extracting(e -> entry(e.getKey(), e.getValue())).containsExactly(
- entry("bla2", 1L));
- }
-
- @Test
public void tags_facet_should_be_available_if_organization_is_specified() {
- OrganizationDto organization = db.organizations().insert();
- RuleQuery query = new RuleQuery().setOrganization(organization);
+ RuleQuery query = new RuleQuery();
SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
SearchIdResult<String> result = underTest.search(query, options);
assertThat(result.getFacets().get(FACET_TAGS)).isNotNull();
}
- @Test
- public void tags_facet_should_be_unavailable_if_no_organization_is_specfified() {
- RuleQuery query = new RuleQuery();
- SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS));
-
- expectedException.expectMessage("Cannot use tags facet, if no organization is specified.");
- underTest.search(query, options);
- }
-
/**
* Facet with 2 filters
* -- lang facet for tag T2
@@ -1011,7 +943,6 @@ public class RuleIndexTest {
setupStickyFacets();
RuleQuery query = new RuleQuery()
- .setOrganization(db.getDefaultOrganization())
.setLanguages(ImmutableList.of("cpp"))
.setTags(ImmutableList.of("T2"));
@@ -1037,7 +968,6 @@ public class RuleIndexTest {
setupStickyFacets();
RuleQuery query = new RuleQuery()
- .setOrganization(db.getDefaultOrganization())
.setLanguages(ImmutableList.of("cpp", "java"))
.setTags(ImmutableList.of("T2"))
.setTypes(asList(BUG, CODE_SMELL));
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java
index 9b9d1915615..21205f37cdf 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java
@@ -44,7 +44,6 @@ import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.rule.RuleDefinitionDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.db.rule.RuleDto.Scope;
-import org.sonar.db.rule.RuleMetadataDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.server.es.EsTester;
import org.sonar.server.security.SecurityStandards;
@@ -53,14 +52,11 @@ import org.sonar.server.security.SecurityStandards.SQCategory;
import static com.google.common.collect.Sets.newHashSet;
import static java.lang.String.format;
import static java.util.Collections.emptyList;
-import static java.util.Collections.emptySet;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toSet;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE;
-import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION;
import static org.sonar.server.security.SecurityStandards.CWES_BY_SQ_CATEGORY;
import static org.sonar.server.security.SecurityStandards.SQ_CATEGORY_KEYS_ORDERING;
@@ -130,50 +126,6 @@ public class RuleIndexerTest {
}
@Test
- public void index_rule_extension_with_long_id() {
- RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setRuleKey(RuleTesting.randomRuleKeyOfMaximumLength()));
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
- OrganizationDto organization = dbTester.organizations().insert();
- RuleMetadataDto metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(ImmutableSet.of("bla"));
- dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata);
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
-
- RuleExtensionDoc doc = new RuleExtensionDoc()
- .setRuleUuid(rule.getUuid())
- .setScope(RuleExtensionScope.organization(organization.getUuid()));
- assertThat(
- es.client()
- .prepareSearch(TYPE_RULE_EXTENSION.getMainType())
- .setQuery(termQuery("_id", doc.getId()))
- .get()
- .getHits()
- .getHits()[0]
- .getId()).isEqualTo(doc.getId());
- }
-
- @Test
- public void delete_rule_extension_from_index_when_setting_rule_tags_to_empty() {
- RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setRuleKey(RuleTesting.randomRuleKeyOfMaximumLength()));
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
- OrganizationDto organization = dbTester.organizations().insert();
- RuleMetadataDto metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(ImmutableSet.of("bla"));
- dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata);
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
-
- // index tags
- RuleExtensionDoc doc = new RuleExtensionDoc()
- .setRuleUuid(rule.getUuid())
- .setScope(RuleExtensionScope.organization(organization.getUuid()));
- assertThat(es.getIds(TYPE_RULE_EXTENSION)).contains(doc.getId());
-
- // update db table "rules_metadata" with empty tags and delete tags from index
- metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(emptySet());
- dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata);
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
- assertThat(es.getIds(TYPE_RULE_EXTENSION)).doesNotContain(doc.getId());
- }
-
- @Test
public void index_long_rule_description() {
String description = IntStream.range(0, 100000).map(i -> i % 100).mapToObj(Integer::toString).collect(joining(" "));
RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setDescription(description));
@@ -194,7 +146,7 @@ public class RuleIndexerTest {
.setSecurityStandards(standards)
.setDescription(VALID_HOTSPOT_RULE_DESCRIPTION));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
@@ -230,7 +182,7 @@ public class RuleIndexerTest {
.setType(RuleType.SECURITY_HOTSPOT)
.setDescription(description));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
@@ -253,7 +205,7 @@ public class RuleIndexerTest {
.setType(RuleType.SECURITY_HOTSPOT)
.setDescription(randomAlphabetic(30)));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
@@ -270,7 +222,7 @@ public class RuleIndexerTest {
"<h2>Ask Yourself Whether</h2>\n" +
"foo"));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
@@ -288,7 +240,7 @@ public class RuleIndexerTest {
"<h2>Recommended Secure Coding Practices</h2>\n" +
"foo"));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
@@ -305,7 +257,7 @@ public class RuleIndexerTest {
"<h2>Recommended Secure Coding Practices</h2>\n" +
"foo"));
OrganizationDto organization = dbTester.organizations().insert();
- underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization);
+ underTest.commitAndIndex(dbTester.getSession(), rule.getUuid());
assertThat(logTester.getLogs()).hasSize(1);
assertThat(logTester.logs(LoggerLevel.WARN).get(0))
diff --git a/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java b/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java
index 22bdbf30e74..4c27c0e59cd 100644
--- a/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java
+++ b/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java
@@ -66,11 +66,11 @@ public class TestDefaultOrganizationProvider implements DefaultOrganizationProvi
}
}
- private static final class DbTesterDefaultOrganizationProvider implements DefaultOrganizationProvider {
+ public static final class DbTesterDefaultOrganizationProvider implements DefaultOrganizationProvider {
private final DbTester dbTester;
private DefaultOrganization defaultOrganization = null;
- private DbTesterDefaultOrganizationProvider(DbTester dbTester) {
+ public DbTesterDefaultOrganizationProvider(DbTester dbTester) {
this.dbTester = dbTester;
}