aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java9
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStep.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java11
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java9
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java33
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java13
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java27
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStepTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/es/EsTester.java20
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java13
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java353
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java741
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java32
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java16
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java10
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java11
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java91
-rw-r--r--sonar-db/src/test/java/org/sonar/db/user/GroupTesting.java1
-rw-r--r--sonar-db/src/test/java/org/sonar/db/user/UserTesting.java5
23 files changed, 731 insertions, 693 deletions
diff --git a/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java b/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
index 9b969f78e6f..83b3e813961 100644
--- a/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
+++ b/it/it-tests/src/test/java/it/projectSearch/SearchProjectsTest.java
@@ -40,6 +40,9 @@ import static util.ItUtils.projectDir;
*/
public class SearchProjectsTest {
+ private static final String PROJECT_KEY = "sample";
+ private static final String PROJECT_NAME = "Sample";
+
@ClassRule
public static Orchestrator orchestrator = Category4Suite.ORCHESTRATOR;
@@ -59,11 +62,11 @@ public class SearchProjectsTest {
@Test
public void provisioned_projects_should_be_included_to_results() throws Exception {
- orchestrator.getServer().provisionProject("sample", "sample");
+ orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_NAME);
SearchProjectsWsResponse response = searchProjects(SearchProjectsRequest.builder().build());
- assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly("sample");
+ assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly(PROJECT_KEY);
}
@@ -76,7 +79,7 @@ public class SearchProjectsTest {
}
private void verifyFilterMatches(String filter) throws IOException {
- assertThat(searchProjects(filter).getComponentsList()).extracting(Component::getKey).containsOnly("sample");
+ assertThat(searchProjects(filter).getComponentsList()).extracting(Component::getKey).containsOnly(PROJECT_KEY);
}
private void verifyFilterDoesNotMatch(String filter) throws IOException {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStep.java
index 59b51674be1..090de268077 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStep.java
@@ -29,7 +29,7 @@ public class IndexAnalysisStep implements ComputationStep {
private final TreeRootHolder treeRootHolder;
private final ProjectIndexer[] indexers;
- public IndexAnalysisStep(TreeRootHolder treeRootHolder, ProjectIndexer[] indexers) {
+ public IndexAnalysisStep(TreeRootHolder treeRootHolder, ProjectIndexer... indexers) {
this.treeRootHolder = treeRootHolder;
this.indexers = indexers;
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java
index 73fd9863866..02676cfe2f3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/AuthorizationTypeSupport.java
@@ -21,12 +21,12 @@ package org.sonar.server.permission.index;
import com.google.common.collect.ImmutableMap;
import java.util.Optional;
-import java.util.Set;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.server.ServerSide;
+import org.sonar.db.user.GroupDto;
import org.sonar.server.es.NewIndex;
import org.sonar.server.user.UserSession;
@@ -39,7 +39,6 @@ public class AuthorizationTypeSupport {
public static final String TYPE_AUTHORIZATION = "authorization";
public static final String FIELD_GROUP_IDS = "groupIds";
- public static final String FIELD_GROUP_NAMES = "groupNames";
public static final String FIELD_USER_IDS = "userIds";
public static final String FIELD_UPDATED_AT = "updatedAt";
@@ -75,7 +74,6 @@ public class AuthorizationTypeSupport {
authType.setAttribute("_routing", ImmutableMap.of("required", true));
authType.createDateTimeField(FIELD_UPDATED_AT);
authType.createLongField(FIELD_GROUP_IDS);
- authType.stringFieldBuilder(FIELD_GROUP_NAMES).disableNorms().build();
authType.createLongField(FIELD_USER_IDS);
authType.createBooleanField(FIELD_ALLOW_ANYONE);
authType.setEnableSource(false);
@@ -88,7 +86,6 @@ public class AuthorizationTypeSupport {
*/
public QueryBuilder createQueryFilter() {
Integer userId = userSession.getUserId();
- Set<String> userGroupNames = userSession.getUserGroups();
BoolQueryBuilder filter = boolQuery();
// anyone
@@ -100,8 +97,10 @@ public class AuthorizationTypeSupport {
.ifPresent(id -> filter.should(termQuery(FIELD_USER_IDS, id)));
// groups
- userGroupNames.forEach(
- group -> filter.should(termQuery(FIELD_GROUP_NAMES, group)));
+ userSession.getGroups()
+ .stream()
+ .map(GroupDto::getId)
+ .forEach(groupId -> filter.should(termQuery(FIELD_GROUP_IDS, groupId)));
return QueryBuilders.hasParentQuery(TYPE_AUTHORIZATION,
QueryBuilders.boolQuery().filter(filter));
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java
index fbf8628d64b..70d75733e0c 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexer.java
@@ -24,7 +24,6 @@ import com.google.common.base.Throwables;
import com.google.common.util.concurrent.Uninterruptibles;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -37,6 +36,7 @@ import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.picocontainer.Startable;
+import org.sonar.api.utils.DateUtils;
import org.sonar.core.util.stream.Collectors;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
@@ -68,7 +68,7 @@ public class PermissionIndexer implements ProjectIndexer, Startable {
private final EsClient esClient;
private final Collection<AuthorizationScope> authorizationScopes;
- public PermissionIndexer(DbClient dbClient, EsClient esClient, NeedAuthorizationIndexer[] needAuthorizationIndexers) {
+ public PermissionIndexer(DbClient dbClient, EsClient esClient, NeedAuthorizationIndexer... needAuthorizationIndexers) {
this(dbClient, esClient, Arrays.stream(needAuthorizationIndexers)
.map(NeedAuthorizationIndexer::getAuthorizationScope)
.collect(Collectors.toList(needAuthorizationIndexers.length)));
@@ -175,15 +175,14 @@ public class PermissionIndexer implements ProjectIndexer, Startable {
private static IndexRequest newIndexRequest(PermissionIndexerDao.Dto dto, String indexName) {
Map<String, Object> doc = new HashMap<>();
- doc.put(AuthorizationTypeSupport.FIELD_UPDATED_AT, new Date(dto.getUpdatedAt()));
+ doc.put(AuthorizationTypeSupport.FIELD_UPDATED_AT, DateUtils.longToDate(dto.getUpdatedAt()));
if (dto.isAllowAnyone()) {
doc.put(AuthorizationTypeSupport.FIELD_ALLOW_ANYONE, true);
// no need to feed users and groups
} else {
doc.put(AuthorizationTypeSupport.FIELD_ALLOW_ANYONE, false);
doc.put(AuthorizationTypeSupport.FIELD_GROUP_IDS, dto.getGroupIds());
- doc.put(AuthorizationTypeSupport.FIELD_GROUP_NAMES, dto.getGroupNames());
- doc.put(AuthorizationTypeSupport.FIELD_USER_IDS, dto.getUsers());
+ doc.put(AuthorizationTypeSupport.FIELD_USER_IDS, dto.getUserIds());
}
return new IndexRequest(indexName, TYPE_AUTHORIZATION, dto.getProjectUuid())
.routing(dto.getProjectUuid())
diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java
index f6c41816fa2..483caa18753 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/permission/index/PermissionIndexerDao.java
@@ -44,8 +44,7 @@ public class PermissionIndexerDao {
private final String projectUuid;
private final long updatedAt;
private final String qualifier;
- private final List<Long> users = new ArrayList<>();
- private final List<String> groupNames = new ArrayList<>();
+ private final List<Long> userIds = new ArrayList<>();
private final List<Long> groupIds = new ArrayList<>();
private boolean allowAnyone = false;
@@ -67,24 +66,15 @@ public class PermissionIndexerDao {
return qualifier;
}
- public List<Long> getUsers() {
- return users;
+ public List<Long> getUserIds() {
+ return userIds;
}
- public Dto addUser(Long s) {
- users.add(s);
+ public Dto addUserId(long l) {
+ userIds.add(l);
return this;
}
- public Dto addGroupName(String s) {
- groupNames.add(s);
- return this;
- }
-
- public List<String> getGroupNames() {
- return groupNames;
- }
-
public Dto addGroupId(long id) {
groupIds.add(id);
return this;
@@ -116,7 +106,6 @@ public class PermissionIndexerDao {
" project_authorization.kind as kind, " +
" project_authorization.project as project, " +
" project_authorization.user_id as user_id, " +
- " project_authorization.group_name as group_name, " +
" project_authorization.group_id as group_id, " +
" project_authorization.updated_at as updated_at, " +
" project_authorization.qualifier as qualifier " +
@@ -129,7 +118,6 @@ public class PermissionIndexerDao {
" projects.authorization_updated_at AS updated_at, " +
" projects.qualifier AS qualifier, " +
" user_roles.user_id AS user_id, " +
- " NULL AS group_name, " +
" NULL AS group_id " +
" FROM projects " +
" INNER JOIN user_roles ON user_roles.resource_id = projects.id AND user_roles.role = 'user' " +
@@ -146,7 +134,6 @@ public class PermissionIndexerDao {
" projects.authorization_updated_at AS updated_at, " +
" projects.qualifier AS qualifier, " +
" NULL AS user_id, " +
- " groups.name AS group_name, " +
" groups.id AS group_id " +
" FROM projects " +
" INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role = 'user' " +
@@ -165,7 +152,6 @@ public class PermissionIndexerDao {
" projects.authorization_updated_at AS updated_at, " +
" projects.qualifier AS qualifier, " +
" NULL AS user_id, " +
- " NULL AS group_name, " +
" NULL AS group_id " +
" FROM projects " +
" INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role='user' " +
@@ -229,18 +215,17 @@ public class PermissionIndexerDao {
Dto dto = dtosByProjectUuid.get(projectUuid);
if (dto == null) {
- long updatedAt = rs.getLong(6);
- String qualifier = rs.getString(7);
+ long updatedAt = rs.getLong(5);
+ String qualifier = rs.getString(6);
dto = new Dto(projectUuid, updatedAt, qualifier);
dtosByProjectUuid.put(projectUuid, dto);
}
switch (rowKind) {
case USER:
- dto.addUser(rs.getLong(3));
+ dto.addUserId(rs.getLong(3));
break;
case GROUP:
- dto.addGroupName(rs.getString(4));
- dto.addGroupId(rs.getLong(5));
+ dto.addGroupId(rs.getLong(4));
break;
case ANYONE:
dto.allowAnyone();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java
index 96b0bbe08f8..b7087ef9e90 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java
@@ -21,14 +21,12 @@ package org.sonar.server.batch;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
-import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.config.MapSettings;
import org.sonar.api.resources.Qualifiers;
-import org.sonar.api.security.DefaultGroups;
import org.sonar.api.utils.System2;
import org.sonar.api.web.UserRole;
import org.sonar.db.DbTester;
@@ -321,18 +319,13 @@ public class IssuesActionTest {
private void indexIssues(IssueDoc... issues) {
issueIndexer.index(Arrays.asList(issues).iterator());
for (IssueDoc issue : issues) {
- addIssueAuthorization(issue.projectUuid(), DefaultGroups.ANYONE, null);
+ addIssueAuthorization(issue.projectUuid());
}
}
- private void addIssueAuthorization(String projectUuid, @Nullable String group, @Nullable Long user) {
+ private void addIssueAuthorization(String projectUuid) {
PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(projectUuid, system2.now(), Qualifiers.PROJECT);
- if (group != null) {
- access.addGroupName(group);
- }
- if (user != null) {
- access.addUser(user);
- }
+ access.allowAnyone();
authorizationIndexerTester.allow(access);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java
index 0263b7b56a6..c9a6c9f8f66 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexLoginTest.java
@@ -21,11 +21,16 @@ package org.sonar.server.component.index;
import org.junit.Test;
import org.sonar.db.component.ComponentDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
+
+import static org.sonar.db.user.GroupTesting.newGroupDto;
+import static org.sonar.db.user.UserTesting.newUserDto;
public class ComponentIndexLoginTest extends ComponentIndexTest {
@Test
- public void should_respect_confidentiallity() {
+ public void should_filter_unauthorized_results() {
indexer.index(newProject("sonarqube", "Quality Product"));
// do not give any permissions to that project
@@ -36,31 +41,31 @@ public class ComponentIndexLoginTest extends ComponentIndexTest {
@Test
public void should_find_project_for_which_the_user_has_direct_permission() {
- login();
+ UserDto user = newUserDto();
+ userSession.login(user);
ComponentDto project = newProject("sonarqube", "Quality Product");
indexer.index(project);
- // give the user explicit access
- authorizationIndexerTester.allowOnlyUser(project, TEST_USER_ID);
+ assertNoSearchResults("sonarqube");
+ // give the user explicit access
+ authorizationIndexerTester.allowOnlyUser(project, user);
assertSearchResults("sonarqube", project);
}
@Test
public void should_find_project_for_which_the_user_has_indirect_permission_through_group() {
- login();
+ GroupDto group = newGroupDto();
+ userSession.login().setGroups(group);
ComponentDto project = newProject("sonarqube", "Quality Product");
indexer.index(project);
- // give the user implicit access (though group)
- authorizationIndexerTester.allowOnlyGroup(project, TEST_USER_GROUP);
+ assertNoSearchResults("sonarqube");
+ // give the user implicit access (though group)
+ authorizationIndexerTester.allowOnlyGroup(project, group);
assertSearchResults("sonarqube", project);
}
-
- protected void login() {
- userSession.login("john").setUserId(TEST_USER_ID).setUserGroups(TEST_USER_GROUP);
- }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java
index 2ee73d61a59..a83c6ec35ca 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/component/index/ComponentIndexTest.java
@@ -46,9 +46,6 @@ import static org.sonar.api.resources.Qualifiers.PROJECT;
public abstract class ComponentIndexTest {
- protected static final Integer TEST_USER_ID = 42;
- protected static final String TEST_USER_GROUP = "TestUsers";
-
@Rule
public EsTester es = new EsTester(new ComponentIndexDefinition(new MapSettings()));
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStepTest.java
index 1b74fc8a0a9..0ba86fbce06 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/IndexAnalysisStepTest.java
@@ -45,7 +45,7 @@ public class IndexAnalysisStepTest extends BaseStepTest {
public BatchReportReaderRule reportReader = new BatchReportReaderRule();
private ProjectIndexer componentIndexer = mock(ProjectIndexer.class);
- private IndexAnalysisStep underTest = new IndexAnalysisStep(treeRootHolder, new ProjectIndexer[] {componentIndexer});
+ private IndexAnalysisStep underTest = new IndexAnalysisStep(treeRootHolder, componentIndexer);
@Test
public void call_indexByProjectUuid_of_indexer_for_project() {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/es/EsTester.java b/server/sonar-server/src/test/java/org/sonar/server/es/EsTester.java
index d87bd60caa4..895747c42e2 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/es/EsTester.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/es/EsTester.java
@@ -91,15 +91,19 @@ public class EsTester extends ExternalResource {
client.nativeClient().admin().indices().prepareDelete("_all").get();
}
- public void putDocuments(String index, String type, BaseDoc... docs) throws Exception {
- BulkRequestBuilder bulk = client.prepareBulk().setRefresh(true);
- for (BaseDoc doc : docs) {
- bulk.add(new IndexRequest(index, type, doc.getId())
- .parent(doc.getParent())
- .routing(doc.getRouting())
- .source(doc.getFields()));
+ public void putDocuments(String index, String type, BaseDoc... docs) {
+ try {
+ BulkRequestBuilder bulk = client.prepareBulk().setRefresh(true);
+ for (BaseDoc doc : docs) {
+ bulk.add(new IndexRequest(index, type, doc.getId())
+ .parent(doc.getParent())
+ .routing(doc.getRouting())
+ .source(doc.getFields()));
+ }
+ EsUtils.executeBulkRequest(bulk, "");
+ } catch (Exception e) {
+ throw Throwables.propagate(e);
}
- EsUtils.executeBulkRequest(bulk, "");
}
public long countDocuments(String indexName, String typeName) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java
index e841d468293..7c12fc5388b 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexDebtTest.java
@@ -21,7 +21,6 @@ package org.sonar.server.issue.index;
import java.util.Map;
import java.util.TimeZone;
-import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -30,7 +29,6 @@ import org.sonar.api.issue.Issue;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
-import org.sonar.api.security.DefaultGroups;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.db.component.ComponentDto;
@@ -283,18 +281,13 @@ public class IssueIndexDebtTest {
private void indexIssues(IssueDoc... issues) {
issueIndexer.index(asList(issues).iterator());
for (IssueDoc issue : issues) {
- addIssueAuthorization(issue.projectUuid(), DefaultGroups.ANYONE, null);
+ addIssueAuthorization(issue.projectUuid());
}
}
- private void addIssueAuthorization(String projectUuid, @Nullable String group, @Nullable Long user) {
+ private void addIssueAuthorization(String projectUuid) {
PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(projectUuid, system2.now(), Qualifiers.PROJECT);
- if (group != null) {
- access.addGroupName(group);
- }
- if (user != null) {
- access.addUser(user);
- }
+ access.allowAnyone();
authorizationIndexerTester.allow(access);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java
index 70880468c10..ded89941a5d 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java
@@ -43,6 +43,8 @@ import org.sonar.api.utils.System2;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.es.EsTester;
import org.sonar.server.es.SearchOptions;
import org.sonar.server.es.SearchResult;
@@ -64,7 +66,11 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.api.utils.DateUtils.parseDate;
import static org.sonar.api.utils.DateUtils.parseDateTime;
+import static org.sonar.db.component.ComponentTesting.newFileDto;
+import static org.sonar.db.component.ComponentTesting.newProjectDto;
import static org.sonar.db.organization.OrganizationTesting.newOrganizationDto;
+import static org.sonar.db.user.GroupTesting.newGroupDto;
+import static org.sonar.db.user.UserTesting.newUserDto;
public class IssueIndexTest {
@@ -94,8 +100,8 @@ public class IssueIndexTest {
@Test
public void get_by_key() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
IssueDoc issue = IssueDocTesting.newDoc("ISSUE1", file)
.setEffort(100L);
indexIssues(issue);
@@ -114,8 +120,8 @@ public class IssueIndexTest {
@Test
public void get_by_key_with_attributes() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
IssueDoc issue = IssueDocTesting.newDoc("ISSUE1", file).setAttributes((KeyValueFormat.format(ImmutableMap.of("jira-issue-key", "SONAR-1234"))));
indexIssues(issue);
@@ -125,8 +131,8 @@ public class IssueIndexTest {
@Test(expected = IllegalStateException.class)
public void comments_field_is_not_available() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
IssueDoc issue = IssueDocTesting.newDoc("ISSUE1", file);
indexIssues(issue);
@@ -136,8 +142,8 @@ public class IssueIndexTest {
@Test(expected = IllegalStateException.class)
public void is_new_field_is_not_available() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
IssueDoc issue = IssueDocTesting.newDoc("ISSUE1", file);
indexIssues(issue);
@@ -147,11 +153,11 @@ public class IssueIndexTest {
@Test
public void filter_by_keys() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
+ ComponentDto project = newProjectDto(newOrganizationDto());
indexIssues(
- IssueDocTesting.newDoc("1", ComponentTesting.newFileDto(project, null)),
- IssueDocTesting.newDoc("2", ComponentTesting.newFileDto(project, null)));
+ IssueDocTesting.newDoc("1", newFileDto(project, null)),
+ IssueDocTesting.newDoc("2", newFileDto(project, null)));
assertThat(underTest.search(IssueQuery.builder().issueKeys(newArrayList("1", "2")).build(), new SearchOptions()).getDocs()).hasSize(2);
assertThat(underTest.search(IssueQuery.builder().issueKeys(newArrayList("1")).build(), new SearchOptions()).getDocs()).hasSize(1);
@@ -160,17 +166,17 @@ public class IssueIndexTest {
@Test
public void filter_by_projects() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
+ ComponentDto project = newProjectDto(newOrganizationDto());
ComponentDto module = ComponentTesting.newModuleDto(project);
ComponentDto subModule = ComponentTesting.newModuleDto(module);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", project),
- IssueDocTesting.newDoc("ISSUE2", ComponentTesting.newFileDto(project, null)),
+ IssueDocTesting.newDoc("ISSUE2", newFileDto(project, null)),
IssueDocTesting.newDoc("ISSUE3", module),
- IssueDocTesting.newDoc("ISSUE4", ComponentTesting.newFileDto(module, null)),
+ IssueDocTesting.newDoc("ISSUE4", newFileDto(module, null)),
IssueDocTesting.newDoc("ISSUE5", subModule),
- IssueDocTesting.newDoc("ISSUE6", ComponentTesting.newFileDto(subModule, null)));
+ IssueDocTesting.newDoc("ISSUE6", newFileDto(subModule, null)));
assertThat(underTest.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()).hasSize(6);
assertThat(underTest.search(IssueQuery.builder().projectUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty();
@@ -179,13 +185,13 @@ public class IssueIndexTest {
@Test
public void facets_on_projects() {
OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project = ComponentTesting.newProjectDto(organizationDto, "ABCD");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto, "EFGH");
+ ComponentDto project = newProjectDto(organizationDto, "ABCD");
+ ComponentDto project2 = newProjectDto(organizationDto, "EFGH");
indexIssues(
- IssueDocTesting.newDoc("ISSUE1", ComponentTesting.newFileDto(project, null)),
- IssueDocTesting.newDoc("ISSUE2", ComponentTesting.newFileDto(project, null)),
- IssueDocTesting.newDoc("ISSUE3", ComponentTesting.newFileDto(project2, null)));
+ IssueDocTesting.newDoc("ISSUE1", newFileDto(project, null)),
+ IssueDocTesting.newDoc("ISSUE2", newFileDto(project, null)),
+ IssueDocTesting.newDoc("ISSUE3", newFileDto(project2, null)));
SearchResult<IssueDoc> result = underTest.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("projectUuids")));
assertThat(result.getFacets().getNames()).containsOnly("projectUuids");
@@ -194,10 +200,10 @@ public class IssueIndexTest {
@Test
public void filter_by_modules() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
+ ComponentDto project = newProjectDto(newOrganizationDto());
ComponentDto module = ComponentTesting.newModuleDto(project);
ComponentDto subModule = ComponentTesting.newModuleDto(module);
- ComponentDto file = ComponentTesting.newFileDto(subModule, null);
+ ComponentDto file = newFileDto(subModule, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE3", module),
@@ -227,12 +233,12 @@ public class IssueIndexTest {
@Test
public void filter_by_components_on_contextualized_search() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
+ ComponentDto project = newProjectDto(newOrganizationDto());
ComponentDto module = ComponentTesting.newModuleDto(project);
ComponentDto subModule = ComponentTesting.newModuleDto(module);
- ComponentDto file1 = ComponentTesting.newFileDto(project, null);
- ComponentDto file2 = ComponentTesting.newFileDto(module, null);
- ComponentDto file3 = ComponentTesting.newFileDto(subModule, null);
+ ComponentDto file1 = newFileDto(project, null);
+ ComponentDto file2 = newFileDto(module, null);
+ ComponentDto file3 = newFileDto(subModule, null);
String view = "ABCD";
indexView(view, newArrayList(project.uuid()));
@@ -262,12 +268,12 @@ public class IssueIndexTest {
@Test
public void filter_by_components_on_non_contextualized_search() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto(), "project");
- ComponentDto file1 = ComponentTesting.newFileDto(project, null, "file1");
+ ComponentDto project = newProjectDto(newOrganizationDto(), "project");
+ ComponentDto file1 = newFileDto(project, null, "file1");
ComponentDto module = ComponentTesting.newModuleDto(project).setUuid("module");
- ComponentDto file2 = ComponentTesting.newFileDto(module, null, "file2");
+ ComponentDto file2 = newFileDto(module, null, "file2");
ComponentDto subModule = ComponentTesting.newModuleDto(module).setUuid("subModule");
- ComponentDto file3 = ComponentTesting.newFileDto(subModule, null, "file3");
+ ComponentDto file3 = newFileDto(subModule, null, "file3");
String view = "ABCD";
indexView(view, newArrayList(project.uuid()));
@@ -293,10 +299,10 @@ public class IssueIndexTest {
@Test
public void facets_on_components() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto(), "A");
- ComponentDto file1 = ComponentTesting.newFileDto(project, null, "ABCD");
- ComponentDto file2 = ComponentTesting.newFileDto(project, null, "BCDE");
- ComponentDto file3 = ComponentTesting.newFileDto(project, null, "CDEF");
+ ComponentDto project = newProjectDto(newOrganizationDto(), "A");
+ ComponentDto file1 = newFileDto(project, null, "ABCD");
+ ComponentDto file2 = newFileDto(project, null, "BCDE");
+ ComponentDto file3 = newFileDto(project, null, "CDEF");
indexIssues(
IssueDocTesting.newDoc("ISSUE1", project),
@@ -313,9 +319,9 @@ public class IssueIndexTest {
@Test
public void filter_by_directories() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file1 = ComponentTesting.newFileDto(project, null).setPath("src/main/xoo/F1.xoo");
- ComponentDto file2 = ComponentTesting.newFileDto(project, null).setPath("F2.xoo");
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file1 = newFileDto(project, null).setPath("src/main/xoo/F1.xoo");
+ ComponentDto file2 = newFileDto(project, null).setPath("F2.xoo");
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file1).setDirectoryPath("/src/main/xoo"),
@@ -328,9 +334,9 @@ public class IssueIndexTest {
@Test
public void facets_on_directories() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file1 = ComponentTesting.newFileDto(project, null).setPath("src/main/xoo/F1.xoo");
- ComponentDto file2 = ComponentTesting.newFileDto(project, null).setPath("F2.xoo");
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file1 = newFileDto(project, null).setPath("src/main/xoo/F1.xoo");
+ ComponentDto file2 = newFileDto(project, null).setPath("F2.xoo");
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file1).setDirectoryPath("/src/main/xoo"),
@@ -344,9 +350,9 @@ public class IssueIndexTest {
@Test
public void filter_by_views() {
OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto);
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null);
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto);
+ ComponentDto project1 = newProjectDto(organizationDto);
+ ComponentDto file1 = newFileDto(project1, null);
+ ComponentDto project2 = newProjectDto(organizationDto);
indexIssues(
// Project1 has 2 issues (one on a file and one on the project itself)
IssueDocTesting.newDoc("ISSUE1", project1),
@@ -370,8 +376,8 @@ public class IssueIndexTest {
@Test
public void filter_by_severities() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setSeverity(Severity.INFO),
@@ -384,8 +390,8 @@ public class IssueIndexTest {
@Test
public void facets_on_severities() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setSeverity(Severity.INFO),
@@ -399,8 +405,8 @@ public class IssueIndexTest {
@Test
public void filter_by_statuses() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setStatus(Issue.STATUS_CLOSED),
@@ -414,8 +420,8 @@ public class IssueIndexTest {
@Test
public void facets_on_statuses() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setStatus(Issue.STATUS_CLOSED),
@@ -429,8 +435,8 @@ public class IssueIndexTest {
@Test
public void filter_by_resolutions() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setResolution(Issue.RESOLUTION_FALSE_POSITIVE),
@@ -446,8 +452,8 @@ public class IssueIndexTest {
@Test
public void facets_on_resolutions() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setResolution(Issue.RESOLUTION_FALSE_POSITIVE),
@@ -461,8 +467,8 @@ public class IssueIndexTest {
@Test
public void filter_by_resolved() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setStatus(Issue.STATUS_CLOSED).setResolution(Issue.RESOLUTION_FIXED),
@@ -476,8 +482,8 @@ public class IssueIndexTest {
@Test
public void filter_by_rules() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
RuleKey ruleKey = RuleKey.of("repo", "X1");
indexIssues(IssueDocTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString()));
@@ -488,8 +494,8 @@ public class IssueIndexTest {
@Test
public void filter_by_languages() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
RuleKey ruleKey = RuleKey.of("repo", "X1");
indexIssues(IssueDocTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString()).setLanguage("xoo"));
@@ -501,8 +507,8 @@ public class IssueIndexTest {
@Test
public void facets_on_languages() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
RuleKey ruleKey = RuleKey.of("repo", "X1");
indexIssues(IssueDocTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString()).setLanguage("xoo"));
@@ -514,8 +520,8 @@ public class IssueIndexTest {
@Test
public void filter_by_assignees() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAssignee("steph"),
@@ -529,8 +535,8 @@ public class IssueIndexTest {
@Test
public void facets_on_assignees() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAssignee("steph"),
@@ -545,8 +551,8 @@ public class IssueIndexTest {
@Test
public void facets_on_assignees_supports_dashes() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAssignee("j-b"),
@@ -562,8 +568,8 @@ public class IssueIndexTest {
@Test
public void filter_by_assigned() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAssignee("steph"),
@@ -577,8 +583,8 @@ public class IssueIndexTest {
@Test
public void filter_by_authors() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAuthorLogin("steph"),
@@ -592,8 +598,8 @@ public class IssueIndexTest {
@Test
public void facets_on_authors() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAuthorLogin("steph"),
@@ -608,8 +614,8 @@ public class IssueIndexTest {
@Test
public void filter_by_created_after() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDate("2014-09-20")),
@@ -624,8 +630,8 @@ public class IssueIndexTest {
@Test
public void filter_by_created_before() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDate("2014-09-20")),
@@ -640,8 +646,8 @@ public class IssueIndexTest {
@Test
public void filter_by_created_after_and_before() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDate("2014-09-20")),
@@ -686,8 +692,8 @@ public class IssueIndexTest {
@Test
public void filter_by_create_after_and_before_take_into_account_timezone() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDateTime("2014-09-20T00:00:00+0100")),
@@ -733,8 +739,8 @@ public class IssueIndexTest {
@Test
public void filter_by_created_at() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDate("2014-09-20")));
@@ -873,8 +879,8 @@ public class IssueIndexTest {
}
private SearchOptions fixtureForCreatedAtFacet() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
IssueDoc issue0 = IssueDocTesting.newDoc("ISSUE0", file).setFuncCreationDate(parseDateTime("2011-04-25T00:05:13+0000"));
IssueDoc issue1 = IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDateTime("2014-09-01T12:34:56+0100"));
@@ -891,8 +897,8 @@ public class IssueIndexTest {
@Test
public void paging() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
for (int i = 0; i < 12; i++) {
indexIssues(IssueDocTesting.newDoc("ISSUE" + i, file));
}
@@ -914,8 +920,8 @@ public class IssueIndexTest {
@Test
public void search_with_max_limit() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
List<IssueDoc> issues = newArrayList();
for (int i = 0; i < 500; i++) {
String key = "ISSUE" + i;
@@ -930,8 +936,8 @@ public class IssueIndexTest {
@Test
public void sort_by_status() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setStatus(Issue.STATUS_OPEN),
@@ -953,8 +959,8 @@ public class IssueIndexTest {
@Test
public void sort_by_severity() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setSeverity(Severity.BLOCKER),
@@ -982,8 +988,8 @@ public class IssueIndexTest {
@Test
public void sort_by_assignee() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setAssignee("steph"),
@@ -1004,8 +1010,8 @@ public class IssueIndexTest {
@Test
public void sort_by_creation_date() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCreationDate(parseDateTime("2014-09-23T00:00:00+0100")),
@@ -1026,8 +1032,8 @@ public class IssueIndexTest {
@Test
public void sort_by_update_date() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncUpdateDate(parseDateTime("2014-09-23T00:00:00+0100")),
@@ -1048,8 +1054,8 @@ public class IssueIndexTest {
@Test
public void sort_by_close_date() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file = ComponentTesting.newFileDto(project, null);
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file = newFileDto(project, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE1", file).setFuncCloseDate(parseDateTime("2014-09-23T00:00:00+0100")),
@@ -1073,9 +1079,9 @@ public class IssueIndexTest {
@Test
public void sort_by_file_and_line() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
- ComponentDto file1 = ComponentTesting.newFileDto(project, null, "F1").setPath("src/main/xoo/org/sonar/samples/File.xoo");
- ComponentDto file2 = ComponentTesting.newFileDto(project, null, "F2").setPath("src/main/xoo/org/sonar/samples/File2.xoo");
+ ComponentDto project = newProjectDto(newOrganizationDto());
+ ComponentDto file1 = newFileDto(project, null, "F1").setPath("src/main/xoo/org/sonar/samples/File.xoo");
+ ComponentDto file2 = newFileDto(project, null, "F2").setPath("src/main/xoo/org/sonar/samples/File2.xoo");
indexIssues(
// file F1
@@ -1115,12 +1121,12 @@ public class IssueIndexTest {
@Test
public void default_sort_is_by_creation_date_then_project_then_file_then_line_then_issue_key() {
OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto, "P1");
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null, "F1").setPath("src/main/xoo/org/sonar/samples/File.xoo");
- ComponentDto file2 = ComponentTesting.newFileDto(project1, null, "F2").setPath("src/main/xoo/org/sonar/samples/File2.xoo");
+ ComponentDto project1 = newProjectDto(organizationDto, "P1");
+ ComponentDto file1 = newFileDto(project1, null, "F1").setPath("src/main/xoo/org/sonar/samples/File.xoo");
+ ComponentDto file2 = newFileDto(project1, null, "F2").setPath("src/main/xoo/org/sonar/samples/File2.xoo");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto, "P2");
- ComponentDto file3 = ComponentTesting.newFileDto(project2, null, "F3").setPath("src/main/xoo/org/sonar/samples/File3.xoo");
+ ComponentDto project2 = newProjectDto(organizationDto, "P2");
+ ComponentDto file3 = newFileDto(project2, null, "F3").setPath("src/main/xoo/org/sonar/samples/File3.xoo");
indexIssues(
// file F1 from project P1
@@ -1144,93 +1150,77 @@ public class IssueIndexTest {
@Test
public void authorized_issues_on_groups() {
- OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto).setKey("project1");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto).setKey("project2");
- ComponentDto project3 = ComponentTesting.newProjectDto(organizationDto).setKey("project3");
-
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null).setKey("file1");
- ComponentDto file2 = ComponentTesting.newFileDto(project2, null).setKey("file2");
- ComponentDto file3 = ComponentTesting.newFileDto(project3, null).setKey("file3");
-
- // project1 can be seen by sonar-users
+ OrganizationDto org = newOrganizationDto();
+ ComponentDto project1 = newProjectDto(org);
+ ComponentDto project2 = newProjectDto(org);
+ ComponentDto project3 = newProjectDto(org);
+ ComponentDto file1 = newFileDto(project1, null);
+ ComponentDto file2 = newFileDto(project2, null);
+ ComponentDto file3 = newFileDto(project3, null);
+ GroupDto group1 = newGroupDto();
+ GroupDto group2 = newGroupDto();
+
+ // project1 can be seen by group1
indexIssue(IssueDocTesting.newDoc("ISSUE1", file1));
- authorizationIndexerTester.allowOnlyGroup(project1, "sonar-users");
- // project2 can be seen by sonar-admins
+ authorizationIndexerTester.allowOnlyGroup(project1, group1);
+ // project2 can be seen by group2
indexIssue(IssueDocTesting.newDoc("ISSUE2", file2));
- authorizationIndexerTester.allowOnlyGroup(project2, "sonar-admins");
+ authorizationIndexerTester.allowOnlyGroup(project2, group2);
// project3 can be seen by nobody
indexIssue(IssueDocTesting.newDoc("ISSUE3", file3));
- userSessionRule.login().setUserGroups("sonar-users");
+ userSessionRule.login().setGroups(group1);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1);
- userSessionRule.login().setUserGroups("sonar-admins");
+ userSessionRule.login().setGroups(group2);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1);
- userSessionRule.login().setUserGroups("sonar-users", "sonar-admins");
+ userSessionRule.login().setGroups(group1, group2);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(2);
- userSessionRule.login().setUserGroups("another group");
+ GroupDto otherGroup = newGroupDto();
+ userSessionRule.login().setGroups(otherGroup);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).isEmpty();
- userSessionRule.login().setUserGroups("sonar-users", "sonar-admins");
+ userSessionRule.login().setGroups(group1, group2);
assertThat(underTest.search(IssueQuery.builder().projectUuids(newArrayList(project3.uuid())).build(), new SearchOptions()).getDocs()).isEmpty();
}
@Test
public void authorized_issues_on_user() {
- OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto).setKey("project1");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto).setKey("project2");
- ComponentDto project3 = ComponentTesting.newProjectDto(organizationDto).setKey("project3");
-
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null).setKey("file1");
- ComponentDto file2 = ComponentTesting.newFileDto(project2, null).setKey("file2");
- ComponentDto file3 = ComponentTesting.newFileDto(project3, null).setKey("file3");
+ OrganizationDto org = newOrganizationDto();
+ ComponentDto project1 = newProjectDto(org);
+ ComponentDto project2 = newProjectDto(org);
+ ComponentDto project3 = newProjectDto(org);
+ ComponentDto file1 = newFileDto(project1, null);
+ ComponentDto file2 = newFileDto(project2, null);
+ ComponentDto file3 = newFileDto(project3, null);
+ UserDto user1 = newUserDto();
+ UserDto user2 = newUserDto();
// project1 can be seen by john, project2 by max, project3 cannot be seen by anyone
indexIssue(IssueDocTesting.newDoc("ISSUE1", file1));
- authorizationIndexerTester.allowOnlyUser(project1, 10);
+ authorizationIndexerTester.allowOnlyUser(project1, user1);
indexIssue(IssueDocTesting.newDoc("ISSUE2", file2));
- authorizationIndexerTester.allowOnlyUser(project2, 11);
+ authorizationIndexerTester.allowOnlyUser(project2, user2);
indexIssue(IssueDocTesting.newDoc("ISSUE3", file3));
- userSessionRule.login("john").setUserId(10);
+ userSessionRule.login(user1);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1);
+ assertThat(underTest.search(IssueQuery.builder().projectUuids(newArrayList(project3.key())).build(), new SearchOptions()).getDocs()).hasSize(0);
- userSessionRule.login("max").setUserId(11);
+ userSessionRule.login(user2);
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1);
- userSessionRule.login("another guy").setUserId(33);
+ // another user
+ userSessionRule.login(newUserDto());
assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(0);
-
- userSessionRule.login("john").setUserId(10);
- assertThat(underTest.search(IssueQuery.builder().projectUuids(newArrayList(project3.key())).build(), new SearchOptions()).getDocs()).hasSize(0);
- }
-
- @Test
- public void authorized_issues_on_user_and_group() {
- OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto).setKey("project1");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto).setKey("project2");
-
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null).setKey("file1");
- ComponentDto file2 = ComponentTesting.newFileDto(project2, null).setKey("file2");
-
- // project1 can be seen by user 10 and by sonar-users
- indexIssue(IssueDocTesting.newDoc("ISSUE1", file1));
- indexIssue(IssueDocTesting.newDoc("ISSUE2", file2));
- authorizationIndexerTester.allowOnlyUser(project1, 10);
-
- userSessionRule.login("john").setUserGroups("sonar-users").setUserId(10);
- assertThat(underTest.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1);
}
@Test
public void search_issues_for_batch_return_needed_fields() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto(), "PROJECT");
- ComponentDto file = ComponentTesting.newFileDto(project, null).setPath("src/File.xoo");
+ ComponentDto project = newProjectDto(newOrganizationDto(), "PROJECT");
+ ComponentDto file = newFileDto(project, null).setPath("src/File.xoo");
IssueDoc issue = IssueDocTesting.newDoc("ISSUE", file)
.setRuleKey("squid:S001")
@@ -1265,10 +1255,10 @@ public class IssueIndexTest {
@Test
public void search_issues_for_batch() {
- ComponentDto project = ComponentTesting.newProjectDto(newOrganizationDto());
+ ComponentDto project = newProjectDto(newOrganizationDto());
ComponentDto module = ComponentTesting.newModuleDto(project);
ComponentDto subModule = ComponentTesting.newModuleDto(module);
- ComponentDto file = ComponentTesting.newFileDto(subModule, null);
+ ComponentDto file = newFileDto(subModule, null);
indexIssues(
IssueDocTesting.newDoc("ISSUE3", module),
@@ -1281,7 +1271,7 @@ public class IssueIndexTest {
assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(module))).hasSize(3);
assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(subModule))).hasSize(2);
assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(file))).hasSize(1);
- assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(ComponentTesting.newProjectDto(newOrganizationDto())))).isEmpty();
+ assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(newProjectDto(newOrganizationDto())))).isEmpty();
}
@Test
@@ -1296,30 +1286,33 @@ public class IssueIndexTest {
@Test
public void search_issues_for_batch_return_only_authorized_issues() {
- OrganizationDto organizationDto = newOrganizationDto();
- ComponentDto project1 = ComponentTesting.newProjectDto(organizationDto).setKey("project1");
- ComponentDto project2 = ComponentTesting.newProjectDto(organizationDto).setKey("project2");
-
- ComponentDto file1 = ComponentTesting.newFileDto(project1, null).setKey("file1");
- ComponentDto file2 = ComponentTesting.newFileDto(project2, null).setKey("file2");
-
- // project1 can be seen by sonar-users
+ OrganizationDto org = newOrganizationDto();
+ ComponentDto project1 = newProjectDto(org);
+ ComponentDto project2 = newProjectDto(org);
+ ComponentDto file1 = newFileDto(project1, null);
+ ComponentDto file2 = newFileDto(project2, null);
+ GroupDto allowedGroup = newGroupDto();
+ GroupDto otherGroup = newGroupDto();
+
+ // project1 can be seen by allowedGroup
indexIssue(IssueDocTesting.newDoc("ISSUE1", file1));
+ authorizationIndexerTester.allowOnlyGroup(project1, allowedGroup);
// project3 can be seen by nobody
indexIssue(IssueDocTesting.newDoc("ISSUE3", file2));
- authorizationIndexerTester.allowOnlyGroup(project1, "sonar-users");
- userSessionRule.setUserGroups("sonar-users");
+ userSessionRule.login().setGroups(allowedGroup);
assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(project1))).hasSize(1);
- userSessionRule.setUserGroups("another group");
+ userSessionRule.login().setGroups(otherGroup);
assertThat(Lists.newArrayList(underTest.selectIssuesForBatch(project2))).isEmpty();
}
private void indexIssues(IssueDoc... issues) {
issueIndexer.index(Arrays.asList(issues).iterator());
for (IssueDoc issue : issues) {
- authorizationIndexerTester.allow(new PermissionIndexerDao.Dto(issue.projectUuid(), system2.now(), "TRK").addGroupName("Anyone"));
+ PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(issue.projectUuid(), system2.now(), "TRK");
+ access.allowAnyone();
+ authorizationIndexerTester.allow(access);
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
index 8b08a6eec93..2b126188a8f 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java
@@ -19,18 +19,22 @@
*/
package org.sonar.server.measure.index;
-import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap;
+import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
-import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.config.MapSettings;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.utils.System2;
+import org.sonar.db.component.ComponentDto;
+import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.organization.OrganizationTesting;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.es.EsTester;
import org.sonar.server.es.Facets;
import org.sonar.server.es.SearchIdResult;
@@ -51,7 +55,9 @@ import static org.sonar.api.measures.CoreMetrics.COVERAGE_KEY;
import static org.sonar.api.measures.Metric.Level.ERROR;
import static org.sonar.api.measures.Metric.Level.OK;
import static org.sonar.api.measures.Metric.Level.WARN;
-import static org.sonar.api.security.DefaultGroups.ANYONE;
+import static org.sonar.db.component.ComponentTesting.newProjectDto;
+import static org.sonar.db.user.GroupTesting.newGroupDto;
+import static org.sonar.db.user.UserTesting.newUserDto;
import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.INDEX_PROJECT_MEASURES;
import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.TYPE_PROJECT_MEASURE;
@@ -64,6 +70,15 @@ public class ProjectMeasuresIndexTest {
private static final String DUPLICATION = "duplicated_lines_density";
private static final String NCLOC = "ncloc";
+ private static final OrganizationDto ORG = OrganizationTesting.newOrganizationDto();
+ private static final ComponentDto PROJECT1 = newProjectDto(ORG);
+ private static final ComponentDto PROJECT2 = newProjectDto(ORG);
+ private static final ComponentDto PROJECT3 = newProjectDto(ORG);
+ private static final UserDto USER1 = newUserDto();
+ private static final UserDto USER2 = newUserDto();
+ private static final GroupDto GROUP1 = newGroupDto();
+ private static final GroupDto GROUP2 = newGroupDto();
+
@Rule
public EsTester es = new EsTester(new ProjectMeasuresIndexDefinition(new MapSettings()));
@@ -72,31 +87,27 @@ public class ProjectMeasuresIndexTest {
private ProjectMeasuresIndexer projectMeasureIndexer = new ProjectMeasuresIndexer(System2.INSTANCE, null, es.client());
private PermissionIndexerTester authorizationIndexerTester = new PermissionIndexerTester(es, projectMeasureIndexer);
-
private ProjectMeasuresIndex underTest = new ProjectMeasuresIndex(es.client(), new AuthorizationTypeSupport(userSession));
@Test
- public void empty_search() {
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
-
- assertThat(result).isEmpty();
+ public void return_empty_if_no_projects() {
+ assertNoResults(new ProjectMeasuresQuery());
}
@Test
- public void search_sort_by_name_case_insensitive() {
- addDocs(newDoc("P1", "K1", "Windows"),
- newDoc("P3", "K3", "apachee"),
- newDoc("P2", "K2", "Apache"));
+ public void search_sort_by_case_insensitive_name() {
+ ComponentDto projectA = newProjectDto(ORG).setName("Windows");
+ ComponentDto projectB = newProjectDto(ORG).setName("apachee");
+ ComponentDto projectC = newProjectDto(ORG).setName("Apache");
+ index(newDoc(projectA), newDoc(projectB), newDoc(projectC));
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
-
- assertThat(result).containsExactly("P2", "P3", "P1");
+ assertResults(new ProjectMeasuresQuery(), projectC, projectB, projectA);
}
@Test
public void search_paginate_results() {
IntStream.rangeClosed(1, 9)
- .forEach(i -> addDocs(newDoc("P" + i, "K" + i, "P" + i)));
+ .forEach(i -> index(newDoc(newProjectDto(ORG, "P" + i))));
SearchIdResult<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().setPage(2, 3));
@@ -106,170 +117,147 @@ public class ProjectMeasuresIndexTest {
@Test
public void filter_with_lower_than() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 79d), newMeasure(NCLOC, 10_000d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 10_000d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 81d), newMeasure(NCLOC, 10_000d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 79d, NCLOC, 10_000d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 10_000d),
+ newDoc(PROJECT3, COVERAGE, 81d, NCLOC, 10_000d));
- ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery()
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(COVERAGE, Operator.LT, 80d));
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
- assertThat(result).containsExactly("P1");
+ assertResults(query, PROJECT1);
}
@Test
public void filter_with_lower_than_or_equals() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 79d), newMeasure(NCLOC, 10_000d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 10_000d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 81d), newMeasure(NCLOC, 10_000d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 79d, NCLOC, 10_000d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 10_000d),
+ newDoc(PROJECT3, COVERAGE, 81d, NCLOC, 10_000d));
- ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery()
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(COVERAGE, Operator.LTE, 80d));
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
- assertThat(result).containsExactly("P1", "P2");
+ assertResults(query, PROJECT1, PROJECT2);
}
@Test
public void filter_with_greater_than() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_000d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_001d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_001d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 80d, NCLOC, 30_000d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 30_001d),
+ newDoc(PROJECT3, COVERAGE, 80d, NCLOC, 30_001d));
- assertThat(underTest.search(new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GT, 30_000d)),
- new SearchOptions()).getIds()).containsExactly("P2", "P3");
- assertThat(underTest.search(new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GT, 100_000d)),
- new SearchOptions()).getIds()).isEmpty();
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GT, 30_000d));
+ assertResults(query, PROJECT2, PROJECT3);
+
+ query = new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GT, 100_000d));
+ assertNoResults(query);
}
@Test
public void filter_with_greater_than_or_equals() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_000d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_001d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 30_001d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 80d, NCLOC, 30_000d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 30_001d),
+ newDoc(PROJECT3, COVERAGE, 80d, NCLOC, 30_001d));
+
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GTE, 30_001d));
+ assertResults(query, PROJECT2, PROJECT3);
- assertThat(underTest.search(new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GTE, 30_001d)),
- new SearchOptions()).getIds()).containsExactly("P2", "P3");
- assertThat(underTest.search(new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GTE, 100_000d)),
- new SearchOptions()).getIds()).isEmpty();
+ query = new ProjectMeasuresQuery().addMetricCriterion(new MetricCriterion(NCLOC, Operator.GTE, 100_000d));
+ assertNoResults(query);
}
@Test
public void filter_with_equals() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 79d), newMeasure(NCLOC, 10_000d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 10_000d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 81d), newMeasure(NCLOC, 10_000d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 79d, NCLOC, 10_000d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 10_000d),
+ newDoc(PROJECT3, COVERAGE, 81d, NCLOC, 10_000d));
- ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery()
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(COVERAGE, Operator.EQ, 80d));
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
- assertThat(result).containsExactly("P2");
+ assertResults(query, PROJECT2);
}
@Test
public void filter_on_several_metrics() {
- addDocs(
- newDoc("P1", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 81d), newMeasure(NCLOC, 10_001d))),
- newDoc("P2", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 80d), newMeasure(NCLOC, 10_001d))),
- newDoc("P3", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 79d), newMeasure(NCLOC, 10_000d))));
+ index(
+ newDoc(PROJECT1, COVERAGE, 81d, NCLOC, 10_001d),
+ newDoc(PROJECT2, COVERAGE, 80d, NCLOC, 10_001d),
+ newDoc(PROJECT3, COVERAGE, 79d, NCLOC, 10_000d));
ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(COVERAGE, Operator.LTE, 80d))
.addMetricCriterion(new MetricCriterion(NCLOC, Operator.GT, 10_000d))
.addMetricCriterion(new MetricCriterion(NCLOC, Operator.LT, 11_000d));
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
-
- assertThat(result).containsExactly("P2");
+ assertResults(esQuery, PROJECT2);
}
@Test
public void filter_on_quality_gate_status() {
- addDocs(
- newDoc("P1", "K1", "N1").setQualityGate("OK"),
- newDoc("P2", "K2", "N2").setQualityGate("OK"),
- newDoc("P3", "K3", "N3").setQualityGate("WARN"));
- ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery().setQualityGateStatus(OK);
-
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
+ index(
+ newDoc(PROJECT1).setQualityGate("OK"),
+ newDoc(PROJECT2).setQualityGate("OK"),
+ newDoc(PROJECT3).setQualityGate("WARN"));
- assertThat(result).containsExactly("P1", "P2");
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery().setQualityGateStatus(OK);
+ assertResults(query, PROJECT1, PROJECT2);
}
@Test
public void filter_on_ids() {
- addDocs(
- newDoc("P1", "K1", "N1"),
- newDoc("P2", "K2", "N2"),
- newDoc("P3", "K3", "N3"));
- ProjectMeasuresQuery esQuery = new ProjectMeasuresQuery().setProjectUuids(newHashSet("P1", "P3"));
-
- List<String> result = underTest.search(esQuery, new SearchOptions()).getIds();
+ index(
+ newDoc(PROJECT1),
+ newDoc(PROJECT2),
+ newDoc(PROJECT3));
- assertThat(result).containsExactly("P1", "P3");
+ ProjectMeasuresQuery query = new ProjectMeasuresQuery().setProjectUuids(newHashSet(PROJECT1.uuid(), PROJECT3.uuid()));
+ assertResults(query, PROJECT1, PROJECT3);
}
@Test
public void return_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
- addDocs(10L, null, newDoc("P1", "K1", "Windows"));
- addDocs(10L, "dev", newDoc("P2", "K2", "apachee"));
- addDocs(33L, null, newDoc("P10", "K10", "N10"));
+ indexForUser(USER1, newDoc(PROJECT1), newDoc(PROJECT2));
+ indexForUser(USER2, newDoc(PROJECT3));
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
-
- assertThat(result).containsOnly("P1", "P2");
+ userSession.login(USER1);
+ assertResults(new ProjectMeasuresQuery(), PROJECT1, PROJECT2);
}
@Test
public void return_only_projects_authorized_for_user_groups() throws Exception {
- userSession.setUserGroups("dev");
- addDocs(10L, "dev", newDoc("P1", "K1", "apachee"));
- addDocs(null, ANYONE, newDoc("P2", "K2", "N2"));
- addDocs(null, "admin", newDoc("P10", "K10", "N10"));
-
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
+ indexForGroup(GROUP1, newDoc(PROJECT1), newDoc(PROJECT2));
+ indexForGroup(GROUP2, newDoc(PROJECT3));
- assertThat(result).containsOnly("P1", "P2");
+ userSession.login().setGroups(GROUP1);
+ assertResults(new ProjectMeasuresQuery(), PROJECT1, PROJECT2);
}
@Test
public void return_only_projects_authorized_for_user_and_groups() throws Exception {
- userSession.login("john").setUserId(10).setUserGroups("dev");
- addDocs(10L, null, newDoc("P1", "K1", "Windows"));
- addDocs(null, "dev", newDoc("P2", "K2", "Apache"));
- addDocs(10L, "dev", newDoc("P3", "K3", "apachee"));
- // Current user is not able to see following projects
- addDocs(null, "another group", newDoc("P5", "K5", "N5"));
- addDocs(33L, null, newDoc("P6", "K6", "N6"));
- addDocs((Long) null, null, newDoc("P7", "K7", "N7"));
-
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
+ indexForUser(USER1, newDoc(PROJECT1), newDoc(PROJECT2));
+ indexForGroup(GROUP1, newDoc(PROJECT3));
- assertThat(result).containsOnly("P1", "P2", "P3");
+ userSession.login(USER1).setGroups(GROUP1);
+ assertResults(new ProjectMeasuresQuery(), PROJECT1, PROJECT2, PROJECT3);
}
@Test
- public void anyone_user_can_only_access_projects_authorized_for_anyone() throws Exception {
- userSession.anonymous();
- addDocs(null, ANYONE, newDoc("P1", "K1", "N1"));
- addDocs(10L, null, newDoc("P2", "K2", "Windows"));
- addDocs(null, "admin", newDoc("P3", "K3", "N3"));
-
- List<String> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getIds();
+ public void anonymous_user_can_only_access_projects_authorized_for_anyone() throws Exception {
+ index(newDoc(PROJECT1));
+ indexForUser(USER1, newDoc(PROJECT2));
- assertThat(result).containsOnly("P1");
+ userSession.anonymous();
+ assertResults(new ProjectMeasuresQuery(), PROJECT1);
}
@Test
public void does_not_return_facet_when_no_facets_in_options() throws Exception {
- addDocs(
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 10d), newMeasure(COVERAGE_KEY, 30d), newMeasure(MAINTAINABILITY_RATING, 3d)))
+ index(
+ newDoc(PROJECT1, NCLOC, 10d, COVERAGE_KEY, 30d, MAINTAINABILITY_RATING, 3d)
.setQualityGate(OK.name()));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions()).getFacets();
@@ -279,28 +267,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_ncloc() {
- addDocs(
+ index(
// 3 docs with ncloc<1K
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 999d))),
+ newDoc(NCLOC, 0d),
+ newDoc(NCLOC, 0d),
+ newDoc(NCLOC, 999d),
// 2 docs with ncloc>=1K and ncloc<10K
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 1_000d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 9_999d))),
+ newDoc(NCLOC, 1_000d),
+ newDoc(NCLOC, 9_999d),
// 4 docs with ncloc>=10K and ncloc<100K
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 10_000d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 10_000d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 11_000d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 99_000d))),
+ newDoc(NCLOC, 10_000d),
+ newDoc(NCLOC, 10_000d),
+ newDoc(NCLOC, 11_000d),
+ newDoc(NCLOC, 99_000d),
// 2 docs with ncloc>=100K and ncloc<500K
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 100_000d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 499_000d))),
+ newDoc(NCLOC, 100_000d),
+ newDoc(NCLOC, 499_000d),
// 5 docs with ncloc>= 500K
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 500_000d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 100_000_000d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 500_000d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 1_000_000d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 100_000_000_000d))));
+ newDoc(NCLOC, 500_000d),
+ newDoc(NCLOC, 100_000_000d),
+ newDoc(NCLOC, 500_000d),
+ newDoc(NCLOC, 1_000_000d),
+ newDoc(NCLOC, 100_000_000_000d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(NCLOC)).getFacets();
@@ -314,21 +302,21 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_ncloc_is_sticky() {
- addDocs(
+ index(
// 1 docs with ncloc<1K
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 999d), newMeasure(COVERAGE, 0d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 999d, COVERAGE, 0d, DUPLICATION, 0d),
// 2 docs with ncloc>=1K and ncloc<10K
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 1_000d), newMeasure(COVERAGE, 10d), newMeasure(DUPLICATION, 0d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 9_999d), newMeasure(COVERAGE, 20d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 1_000d, COVERAGE, 10d, DUPLICATION, 0d),
+ newDoc(NCLOC, 9_999d, COVERAGE, 20d, DUPLICATION, 0d),
// 3 docs with ncloc>=10K and ncloc<100K
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 10_000d), newMeasure(COVERAGE, 31d), newMeasure(DUPLICATION, 0d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 11_000d), newMeasure(COVERAGE, 40d), newMeasure(DUPLICATION, 0d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 99_000d), newMeasure(COVERAGE, 50d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 10_000d, COVERAGE, 31d, DUPLICATION, 0d),
+ newDoc(NCLOC, 11_000d, COVERAGE, 40d, DUPLICATION, 0d),
+ newDoc(NCLOC, 99_000d, COVERAGE, 50d, DUPLICATION, 0d),
// 2 docs with ncloc>=100K and ncloc<500K
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 100_000d), newMeasure(COVERAGE, 71d), newMeasure(DUPLICATION, 0d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 499_000d), newMeasure(COVERAGE, 80d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 100_000d, COVERAGE, 71d, DUPLICATION, 0d),
+ newDoc(NCLOC, 499_000d, COVERAGE, 80d, DUPLICATION, 0d),
// 1 docs with ncloc>= 500K
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 501_000d), newMeasure(COVERAGE, 81d), newMeasure(DUPLICATION, 20d))));
+ newDoc(NCLOC, 501_000d, COVERAGE, 81d, DUPLICATION, 20d));
Facets facets = underTest.search(new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(NCLOC, Operator.LT, 10_000d))
@@ -353,27 +341,26 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_ncloc_contains_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
-
// User can see these projects
- addDocs(10L, null,
+ indexForUser(USER1,
// docs with ncloc<1K
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 100d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 999d))),
+ newDoc(NCLOC, 0d),
+ newDoc(NCLOC, 100d),
+ newDoc(NCLOC, 999d),
// docs with ncloc>=1K and ncloc<10K
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 1_000d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 9_999d))));
+ newDoc(NCLOC, 1_000d),
+ newDoc(NCLOC, 9_999d));
// User cannot see these projects
- addDocs(33L, null,
+ indexForUser(USER2,
// doc with ncloc>=10K and ncloc<100K
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 11_000d))),
+ newDoc(NCLOC, 11_000d),
// doc with ncloc>=100K and ncloc<500K
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 499_000d))),
+ newDoc(NCLOC, 499_000d),
// doc with ncloc>= 500K
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 501_000d))));
+ newDoc(NCLOC, 501_000d));
+ userSession.login(USER1);
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(NCLOC)).getFacets();
assertThat(facets.get(NCLOC)).containsExactly(
@@ -386,28 +373,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_coverage() {
- addDocs(
+ index(
// 3 docs with coverage<30%
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 29d))),
+ newDoc(COVERAGE, 0d),
+ newDoc(COVERAGE, 0d),
+ newDoc(COVERAGE, 29d),
// 2 docs with coverage>=30% and coverage<50%
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 30d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 49d))),
+ newDoc(COVERAGE, 30d),
+ newDoc(COVERAGE, 49d),
// 4 docs with coverage>=50% and coverage<70%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 50d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 60d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 60d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 69d))),
+ newDoc(COVERAGE, 50d),
+ newDoc(COVERAGE, 60d),
+ newDoc(COVERAGE, 60d),
+ newDoc(COVERAGE, 69d),
// 2 docs with coverage>=70% and coverage<80%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 70d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 79d))),
+ newDoc(COVERAGE, 70d),
+ newDoc(COVERAGE, 79d),
// 5 docs with coverage>= 80%
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 80d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 80d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 90d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 90.5d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 100d))));
+ newDoc(COVERAGE, 80d),
+ newDoc(COVERAGE, 80d),
+ newDoc(COVERAGE, 90d),
+ newDoc(COVERAGE, 90.5d),
+ newDoc(COVERAGE, 100d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(COVERAGE)).getFacets();
@@ -421,21 +408,21 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_coverage_is_sticky() {
- addDocs(
+ index(
// docs with coverage<30%
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(NCLOC, 999d), newMeasure(COVERAGE, 0d), newMeasure(DUPLICATION, 0d))),
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 1_000d), newMeasure(COVERAGE, 10d), newMeasure(DUPLICATION, 0d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(NCLOC, 9_999d), newMeasure(COVERAGE, 20d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 999d, COVERAGE, 0d, DUPLICATION, 0d),
+ newDoc(NCLOC, 1_000d, COVERAGE, 10d, DUPLICATION, 0d),
+ newDoc(NCLOC, 9_999d, COVERAGE, 20d, DUPLICATION, 0d),
// docs with coverage>=30% and coverage<50%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 10_000d), newMeasure(COVERAGE, 31d), newMeasure(DUPLICATION, 0d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 11_000d), newMeasure(COVERAGE, 40d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 10_000d, COVERAGE, 31d, DUPLICATION, 0d),
+ newDoc(NCLOC, 11_000d, COVERAGE, 40d, DUPLICATION, 0d),
// docs with coverage>=50% and coverage<70%
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 99_000d), newMeasure(COVERAGE, 50d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 99_000d, COVERAGE, 50d, DUPLICATION, 0d),
// docs with coverage>=70% and coverage<80%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 100_000d), newMeasure(COVERAGE, 71d), newMeasure(DUPLICATION, 0d))),
+ newDoc(NCLOC, 100_000d, COVERAGE, 71d, DUPLICATION, 0d),
// docs with coverage>= 80%
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 499_000d), newMeasure(COVERAGE, 80d), newMeasure(DUPLICATION, 15d))),
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(NCLOC, 501_000d), newMeasure(COVERAGE, 810d), newMeasure(DUPLICATION, 20d))));
+ newDoc(NCLOC, 499_000d, COVERAGE, 80d, DUPLICATION, 15d),
+ newDoc(NCLOC, 501_000d, COVERAGE, 810d, DUPLICATION, 20d));
Facets facets = underTest.search(new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(COVERAGE, Operator.LT, 30d))
@@ -460,27 +447,26 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_coverage_contains_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
-
// User can see these projects
- addDocs(10L, null,
+ indexForUser(USER1,
// docs with coverage<30%
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(COVERAGE, 29d))),
+ newDoc(COVERAGE, 0d),
+ newDoc(COVERAGE, 0d),
+ newDoc(COVERAGE, 29d),
// docs with coverage>=30% and coverage<50%
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 30d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(COVERAGE, 49d))));
+ newDoc(COVERAGE, 30d),
+ newDoc(COVERAGE, 49d));
// User cannot see these projects
- addDocs(33L, null,
+ indexForUser(USER2,
// docs with coverage>=50% and coverage<70%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 50d))),
+ newDoc(COVERAGE, 50d),
// docs with coverage>=70% and coverage<80%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 70d))),
+ newDoc(COVERAGE, 70d),
// docs with coverage>= 80%
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(COVERAGE, 80d))));
+ newDoc(COVERAGE, 80d));
+ userSession.login(USER1);
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(COVERAGE)).getFacets();
assertThat(facets.get(COVERAGE)).containsExactly(
@@ -493,28 +479,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_duplicated_lines_density() {
- addDocs(
+ index(
// 3 docs with duplication<3%
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 2.9d))),
+ newDoc(DUPLICATION, 0d),
+ newDoc(DUPLICATION, 0d),
+ newDoc(DUPLICATION, 2.9d),
// 2 docs with duplication>=3% and duplication<5%
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 3d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 4.9d))),
+ newDoc(DUPLICATION, 3d),
+ newDoc(DUPLICATION, 4.9d),
// 4 docs with duplication>=5% and duplication<10%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 5d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 6d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 6d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 9.9d))),
+ newDoc(DUPLICATION, 5d),
+ newDoc(DUPLICATION, 6d),
+ newDoc(DUPLICATION, 6d),
+ newDoc(DUPLICATION, 9.9d),
// 2 docs with duplication>=10% and duplication<20%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 10d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 19.9d))),
+ newDoc(DUPLICATION, 10d),
+ newDoc(DUPLICATION, 19.9d),
// 5 docs with duplication>= 20%
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 20d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 20d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 50d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 80d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 100d))));
+ newDoc(DUPLICATION, 20d),
+ newDoc(DUPLICATION, 20d),
+ newDoc(DUPLICATION, 50d),
+ newDoc(DUPLICATION, 80d),
+ newDoc(DUPLICATION, 100d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(DUPLICATION)).getFacets();
@@ -528,19 +514,19 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_duplicated_lines_density_is_sticky() {
- addDocs(
+ index(
// docs with duplication<3%
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 0d), newMeasure(NCLOC, 999d), newMeasure(COVERAGE, 0d))),
+ newDoc(DUPLICATION, 0d, NCLOC, 999d, COVERAGE, 0d),
// docs with duplication>=3% and duplication<5%
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 3d), newMeasure(NCLOC, 5000d), newMeasure(COVERAGE, 0d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 4.9d), newMeasure(NCLOC, 6000d), newMeasure(COVERAGE, 0d))),
+ newDoc(DUPLICATION, 3d, NCLOC, 5000d, COVERAGE, 0d),
+ newDoc(DUPLICATION, 4.9d, NCLOC, 6000d, COVERAGE, 0d),
// docs with duplication>=5% and duplication<10%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 5d), newMeasure(NCLOC, 11000d), newMeasure(COVERAGE, 0d))),
+ newDoc(DUPLICATION, 5d, NCLOC, 11000d, COVERAGE, 0d),
// docs with duplication>=10% and duplication<20%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 10d), newMeasure(NCLOC, 120000d), newMeasure(COVERAGE, 10d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 19.9d), newMeasure(NCLOC, 130000d), newMeasure(COVERAGE, 20d))),
+ newDoc(DUPLICATION, 10d, NCLOC, 120000d, COVERAGE, 10d),
+ newDoc(DUPLICATION, 19.9d, NCLOC, 130000d, COVERAGE, 20d),
// docs with duplication>= 20%
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 20d), newMeasure(NCLOC, 1000000d), newMeasure(COVERAGE, 40d))));
+ newDoc(DUPLICATION, 20d, NCLOC, 1000000d, COVERAGE, 40d));
Facets facets = underTest.search(new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(DUPLICATION, Operator.LT, 10d))
@@ -565,27 +551,26 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_duplicated_lines_density_contains_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
-
// User can see these projects
- addDocs(10L, null,
+ indexForUser(USER1,
// docs with duplication<3%
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(DUPLICATION, 2.9d))),
+ newDoc(DUPLICATION, 0d),
+ newDoc(DUPLICATION, 0d),
+ newDoc(DUPLICATION, 2.9d),
// docs with duplication>=3% and duplication<5%
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 3d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(DUPLICATION, 4.9d))));
+ newDoc(DUPLICATION, 3d),
+ newDoc(DUPLICATION, 4.9d));
// User cannot see these projects
- addDocs(33L, null,
+ indexForUser(USER2,
// docs with duplication>=5% and duplication<10%
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 5d))),
+ newDoc(DUPLICATION, 5d),
// docs with duplication>=10% and duplication<20%
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 10d))),
+ newDoc(DUPLICATION, 10d),
// docs with duplication>= 20%
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(DUPLICATION, 20d))));
+ newDoc(DUPLICATION, 20d));
+ userSession.login(USER1);
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(DUPLICATION)).getFacets();
assertThat(facets.get(DUPLICATION)).containsExactly(
@@ -598,28 +583,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_maintainability_rating() {
- addDocs(
+ index(
// 3 docs with rating A
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
+ newDoc(MAINTAINABILITY_RATING, 1d),
+ newDoc(MAINTAINABILITY_RATING, 1d),
+ newDoc(MAINTAINABILITY_RATING, 1d),
// 2 docs with rating B
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d))),
+ newDoc(MAINTAINABILITY_RATING, 2d),
+ newDoc(MAINTAINABILITY_RATING, 2d),
// 4 docs with rating C
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d))),
+ newDoc(MAINTAINABILITY_RATING, 3d),
+ newDoc(MAINTAINABILITY_RATING, 3d),
+ newDoc(MAINTAINABILITY_RATING, 3d),
+ newDoc(MAINTAINABILITY_RATING, 3d),
// 2 docs with rating D
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 4d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 4d))),
+ newDoc(MAINTAINABILITY_RATING, 4d),
+ newDoc(MAINTAINABILITY_RATING, 4d),
// 5 docs with rating E
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))));
+ newDoc(MAINTAINABILITY_RATING, 5d),
+ newDoc(MAINTAINABILITY_RATING, 5d),
+ newDoc(MAINTAINABILITY_RATING, 5d),
+ newDoc(MAINTAINABILITY_RATING, 5d),
+ newDoc(MAINTAINABILITY_RATING, 5d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(MAINTAINABILITY_RATING)).getFacets();
@@ -633,25 +618,25 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_maintainability_rating_is_sticky() {
- addDocs(
+ index(
// docs with rating A
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d), newMeasure(NCLOC, 100d), newMeasure(COVERAGE, 0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d), newMeasure(NCLOC, 200d), newMeasure(COVERAGE, 0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d), newMeasure(NCLOC, 999d), newMeasure(COVERAGE, 0d))),
+ newDoc(MAINTAINABILITY_RATING, 1d, NCLOC, 100d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 1d, NCLOC, 200d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 1d, NCLOC, 999d, COVERAGE, 0d),
// docs with rating B
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d), newMeasure(NCLOC, 2000d), newMeasure(COVERAGE, 0d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d), newMeasure(NCLOC, 5000d), newMeasure(COVERAGE, 0d))),
+ newDoc(MAINTAINABILITY_RATING, 2d, NCLOC, 2000d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 2d, NCLOC, 5000d, COVERAGE, 0d),
// docs with rating C
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d), newMeasure(NCLOC, 20000d), newMeasure(COVERAGE, 0d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d), newMeasure(NCLOC, 30000d), newMeasure(COVERAGE, 0d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d), newMeasure(NCLOC, 40000d), newMeasure(COVERAGE, 0d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d), newMeasure(NCLOC, 50000d), newMeasure(COVERAGE, 0d))),
+ newDoc(MAINTAINABILITY_RATING, 3d, NCLOC, 20000d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 3d, NCLOC, 30000d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 3d, NCLOC, 40000d, COVERAGE, 0d),
+ newDoc(MAINTAINABILITY_RATING, 3d, NCLOC, 50000d, COVERAGE, 0d),
// docs with rating D
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 4d), newMeasure(NCLOC, 120000d), newMeasure(COVERAGE, 0d))),
+ newDoc(MAINTAINABILITY_RATING, 4d, NCLOC, 120000d, COVERAGE, 0d),
// docs with rating E
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d), newMeasure(NCLOC, 600000d), newMeasure(COVERAGE, 40d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d), newMeasure(NCLOC, 700000d), newMeasure(COVERAGE, 50d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d), newMeasure(NCLOC, 800000d), newMeasure(COVERAGE, 60d))));
+ newDoc(MAINTAINABILITY_RATING, 5d, NCLOC, 600000d, COVERAGE, 40d),
+ newDoc(MAINTAINABILITY_RATING, 5d, NCLOC, 700000d, COVERAGE, 50d),
+ newDoc(MAINTAINABILITY_RATING, 5d, NCLOC, 800000d, COVERAGE, 60d));
Facets facets = underTest.search(new ProjectMeasuresQuery()
.addMetricCriterion(new MetricCriterion(MAINTAINABILITY_RATING, Operator.LT, 3d))
@@ -676,27 +661,26 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_maintainability_rating_contains_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
-
// User can see these projects
- addDocs(10L, null,
+ indexForUser(USER1,
// 3 docs with rating A
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 1d))),
+ newDoc(MAINTAINABILITY_RATING, 1d),
+ newDoc(MAINTAINABILITY_RATING, 1d),
+ newDoc(MAINTAINABILITY_RATING, 1d),
// 2 docs with rating B
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 2d))));
+ newDoc(MAINTAINABILITY_RATING, 2d),
+ newDoc(MAINTAINABILITY_RATING, 2d));
// User cannot see these projects
- addDocs(33L, null,
+ indexForUser(USER2,
// docs with rating C
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 3d))),
+ newDoc(MAINTAINABILITY_RATING, 3d),
// docs with rating D
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 4d))),
+ newDoc(MAINTAINABILITY_RATING, 4d),
// docs with rating E
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(MAINTAINABILITY_RATING, 5d))));
+ newDoc(MAINTAINABILITY_RATING, 5d));
+ userSession.login(USER1);
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(MAINTAINABILITY_RATING)).getFacets();
assertThat(facets.get(MAINTAINABILITY_RATING)).containsExactly(
@@ -709,28 +693,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_reliability_rating() {
- addDocs(
+ index(
// 3 docs with rating A
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 1d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 1d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 1d))),
+ newDoc(RELIABILITY_RATING, 1d),
+ newDoc(RELIABILITY_RATING, 1d),
+ newDoc(RELIABILITY_RATING, 1d),
// 2 docs with rating B
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 2d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 2d))),
+ newDoc(RELIABILITY_RATING, 2d),
+ newDoc(RELIABILITY_RATING, 2d),
// 4 docs with rating C
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 3d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 3d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 3d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 3d))),
+ newDoc(RELIABILITY_RATING, 3d),
+ newDoc(RELIABILITY_RATING, 3d),
+ newDoc(RELIABILITY_RATING, 3d),
+ newDoc(RELIABILITY_RATING, 3d),
// 2 docs with rating D
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 4d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 4d))),
+ newDoc(RELIABILITY_RATING, 4d),
+ newDoc(RELIABILITY_RATING, 4d),
// 5 docs with rating E
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 5d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 5d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 5d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 5d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(RELIABILITY_RATING, 5d))));
+ newDoc(RELIABILITY_RATING, 5d),
+ newDoc(RELIABILITY_RATING, 5d),
+ newDoc(RELIABILITY_RATING, 5d),
+ newDoc(RELIABILITY_RATING, 5d),
+ newDoc(RELIABILITY_RATING, 5d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(RELIABILITY_RATING)).getFacets();
@@ -744,28 +728,28 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_security_rating() {
- addDocs(
+ index(
// 3 docs with rating A
- newDoc("P11", "K1", "N1").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 1.0d))),
- newDoc("P12", "K1", "N1").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 1.0d))),
- newDoc("P13", "K1", "N1").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 1.0d))),
+ newDoc(SECURITY_RATING, 1.0d),
+ newDoc(SECURITY_RATING, 1.0d),
+ newDoc(SECURITY_RATING, 1.0d),
// 2 docs with rating B
- newDoc("P21", "K2", "N2").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 2.0d))),
- newDoc("P22", "K2", "N2").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 2.0d))),
+ newDoc(SECURITY_RATING, 2.0d),
+ newDoc(SECURITY_RATING, 2.0d),
// 4 docs with rating C
- newDoc("P31", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 3.0d))),
- newDoc("P32", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 3.0d))),
- newDoc("P33", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 3.0d))),
- newDoc("P34", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 3.0d))),
+ newDoc(SECURITY_RATING, 3.0d),
+ newDoc(SECURITY_RATING, 3.0d),
+ newDoc(SECURITY_RATING, 3.0d),
+ newDoc(SECURITY_RATING, 3.0d),
// 2 docs with rating D
- newDoc("P41", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 4.0d))),
- newDoc("P42", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 4.0d))),
+ newDoc(SECURITY_RATING, 4.0d),
+ newDoc(SECURITY_RATING, 4.0d),
// 5 docs with rating E
- newDoc("P51", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 5.0d))),
- newDoc("P52", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 5.0d))),
- newDoc("P53", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 5.0d))),
- newDoc("P54", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 5.0d))),
- newDoc("P55", "K3", "N3").setMeasures(newArrayList(newMeasure(SECURITY_RATING, 5.0d))));
+ newDoc(SECURITY_RATING, 5.0d),
+ newDoc(SECURITY_RATING, 5.0d),
+ newDoc(SECURITY_RATING, 5.0d),
+ newDoc(SECURITY_RATING, 5.0d),
+ newDoc(SECURITY_RATING, 5.0d));
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(SECURITY_RATING)).getFacets();
@@ -779,19 +763,19 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_quality_gate() {
- addDocs(
+ index(
// 2 docs with QG OK
- newDoc("P11", "K1", "N1").setQualityGate(OK.name()),
- newDoc("P12", "K1", "N1").setQualityGate(OK.name()),
+ newDoc().setQualityGate(OK.name()),
+ newDoc().setQualityGate(OK.name()),
// 3 docs with QG WARN
- newDoc("P21", "K1", "N1").setQualityGate(WARN.name()),
- newDoc("P22", "K1", "N1").setQualityGate(WARN.name()),
- newDoc("P23", "K1", "N1").setQualityGate(WARN.name()),
+ newDoc().setQualityGate(WARN.name()),
+ newDoc().setQualityGate(WARN.name()),
+ newDoc().setQualityGate(WARN.name()),
// 4 docs with QG ERROR
- newDoc("P31", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P32", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P33", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P34", "K1", "N1").setQualityGate(ERROR.name()));
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()));
LinkedHashMap<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(ALERT_STATUS_KEY)).getFacets().get(ALERT_STATUS_KEY);
@@ -803,19 +787,19 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_quality_gate_is_sticky() {
- addDocs(
+ index(
// 2 docs with QG OK
- newDoc("P11", "K1", "N1").setQualityGate(OK.name()).setMeasures(newArrayList(newMeasure(NCLOC, 10d), newMeasure(COVERAGE, 0d))),
- newDoc("P12", "K1", "N1").setQualityGate(OK.name()).setMeasures(newArrayList(newMeasure(NCLOC, 10d), newMeasure(COVERAGE, 0d))),
+ newDoc(NCLOC, 10d, COVERAGE, 0d).setQualityGate(OK.name()),
+ newDoc(NCLOC, 10d, COVERAGE, 0d).setQualityGate(OK.name()),
// 3 docs with QG WARN
- newDoc("P21", "K1", "N1").setQualityGate(WARN.name()).setMeasures(newArrayList(newMeasure(NCLOC, 100d), newMeasure(COVERAGE, 0d))),
- newDoc("P22", "K1", "N1").setQualityGate(WARN.name()).setMeasures(newArrayList(newMeasure(NCLOC, 100d), newMeasure(COVERAGE, 0d))),
- newDoc("P23", "K1", "N1").setQualityGate(WARN.name()).setMeasures(newArrayList(newMeasure(NCLOC, 100d), newMeasure(COVERAGE, 0d))),
+ newDoc(NCLOC, 100d, COVERAGE, 0d).setQualityGate(WARN.name()),
+ newDoc(NCLOC, 100d, COVERAGE, 0d).setQualityGate(WARN.name()),
+ newDoc(NCLOC, 100d, COVERAGE, 0d).setQualityGate(WARN.name()),
// 4 docs with QG ERROR
- newDoc("P31", "K1", "N1").setQualityGate(ERROR.name()).setMeasures(newArrayList(newMeasure(NCLOC, 100d), newMeasure(COVERAGE, 0d))),
- newDoc("P32", "K1", "N1").setQualityGate(ERROR.name()).setMeasures(newArrayList(newMeasure(NCLOC, 5000d), newMeasure(COVERAGE, 40d))),
- newDoc("P33", "K1", "N1").setQualityGate(ERROR.name()).setMeasures(newArrayList(newMeasure(NCLOC, 12000d), newMeasure(COVERAGE, 50d))),
- newDoc("P34", "K1", "N1").setQualityGate(ERROR.name()).setMeasures(newArrayList(newMeasure(NCLOC, 13000d), newMeasure(COVERAGE, 60d))));
+ newDoc(NCLOC, 100d, COVERAGE, 0d).setQualityGate(ERROR.name()),
+ newDoc(NCLOC, 5000d, COVERAGE, 40d).setQualityGate(ERROR.name()),
+ newDoc(NCLOC, 12000d, COVERAGE, 50d).setQualityGate(ERROR.name()),
+ newDoc(NCLOC, 13000d, COVERAGE, 60d).setQualityGate(ERROR.name()));
Facets facets = underTest.search(new ProjectMeasuresQuery()
.setQualityGateStatus(ERROR)
@@ -838,26 +822,25 @@ public class ProjectMeasuresIndexTest {
@Test
public void facet_quality_gate_contains_only_projects_authorized_for_user() throws Exception {
- userSession.login("john").setUserId(10);
-
// User can see these projects
- addDocs(10L, null,
+ indexForUser(USER1,
// 2 docs with QG OK
- newDoc("P11", "K1", "N1").setQualityGate(OK.name()),
- newDoc("P12", "K1", "N1").setQualityGate(OK.name()),
+ newDoc().setQualityGate(OK.name()),
+ newDoc().setQualityGate(OK.name()),
// 3 docs with QG WARN
- newDoc("P21", "K1", "N1").setQualityGate(WARN.name()),
- newDoc("P22", "K1", "N1").setQualityGate(WARN.name()),
- newDoc("P23", "K1", "N1").setQualityGate(WARN.name()));
+ newDoc().setQualityGate(WARN.name()),
+ newDoc().setQualityGate(WARN.name()),
+ newDoc().setQualityGate(WARN.name()));
// User cannot see these projects
- addDocs(33L, null,
+ indexForUser(USER2,
// 4 docs with QG ERROR
- newDoc("P31", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P32", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P33", "K1", "N1").setQualityGate(ERROR.name()),
- newDoc("P34", "K1", "N1").setQualityGate(ERROR.name()));
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()),
+ newDoc().setQualityGate(ERROR.name()));
+ userSession.login(USER1);
LinkedHashMap<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(ALERT_STATUS_KEY)).getFacets().get(ALERT_STATUS_KEY);
assertThat(result).containsExactly(
@@ -866,38 +849,78 @@ public class ProjectMeasuresIndexTest {
entry(OK.name(), 2L));
}
- private void addDocs(ProjectMeasuresDoc... docs) {
- addDocs(null, ANYONE, docs);
+ private void index(ProjectMeasuresDoc... docs) {
+ es.putDocuments(INDEX_PROJECT_MEASURES, TYPE_PROJECT_MEASURE, docs);
+ for (ProjectMeasuresDoc doc : docs) {
+ PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), System.currentTimeMillis(), Qualifiers.PROJECT);
+ access.allowAnyone();
+ authorizationIndexerTester.allow(access);
+ }
}
- private void addDocs(@Nullable Long authorizeUser, @Nullable String authorizedGroup, ProjectMeasuresDoc... docs) {
- try {
- es.putDocuments(INDEX_PROJECT_MEASURES, TYPE_PROJECT_MEASURE, docs);
-
- for (ProjectMeasuresDoc doc : docs) {
- PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), System.currentTimeMillis(), Qualifiers.PROJECT);
- if (authorizedGroup != null) {
- access.addGroupName(authorizedGroup);
- }
- if (authorizeUser != null) {
- access.addUser(authorizeUser);
- }
- authorizationIndexerTester.allow(access);
+ private void indexForUser(UserDto user, ProjectMeasuresDoc... docs) {
+ es.putDocuments(INDEX_PROJECT_MEASURES, TYPE_PROJECT_MEASURE, docs);
+ for (ProjectMeasuresDoc doc : docs) {
+ PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), System.currentTimeMillis(), Qualifiers.PROJECT);
+ access.addUserId(user.getId());
+ authorizationIndexerTester.allow(access);
+ }
+ }
- }
- } catch (Exception e) {
- Throwables.propagate(e);
+ private void indexForGroup(GroupDto group, ProjectMeasuresDoc... docs) {
+ es.putDocuments(INDEX_PROJECT_MEASURES, TYPE_PROJECT_MEASURE, docs);
+ for (ProjectMeasuresDoc doc : docs) {
+ PermissionIndexerDao.Dto access = new PermissionIndexerDao.Dto(doc.getId(), System.currentTimeMillis(), Qualifiers.PROJECT);
+ access.addGroupId(group.getId());
+ authorizationIndexerTester.allow(access);
}
}
- private static ProjectMeasuresDoc newDoc(String uuid, String key, String name) {
+ private static ProjectMeasuresDoc newDoc(ComponentDto project) {
return new ProjectMeasuresDoc()
- .setId(uuid)
- .setKey(key)
- .setName(name);
+ .setId(project.uuid())
+ .setKey(project.key())
+ .setName(project.name());
+ }
+
+ private static ProjectMeasuresDoc newDoc() {
+ return newDoc(newProjectDto(ORG));
+ }
+
+ private static ProjectMeasuresDoc newDoc(ComponentDto project, String metric1, Object value1) {
+ return newDoc(project).setMeasures(newArrayList(newMeasure(metric1, value1)));
+ }
+
+ private static ProjectMeasuresDoc newDoc(ComponentDto project, String metric1, Object value1, String metric2, Object value2) {
+ return newDoc(project).setMeasures(newArrayList(newMeasure(metric1, value1), newMeasure(metric2, value2)));
+ }
+
+ private static ProjectMeasuresDoc newDoc(ComponentDto project, String metric1, Object value1, String metric2, Object value2, String metric3, Object value3) {
+ return newDoc(project).setMeasures(newArrayList(newMeasure(metric1, value1), newMeasure(metric2, value2), newMeasure(metric3, value3)));
}
- private Map<String, Object> newMeasure(String key, Object value) {
+ private static Map<String, Object> newMeasure(String key, Object value) {
return ImmutableMap.of("key", key, "value", value);
}
+
+ private static ProjectMeasuresDoc newDoc(String metric1, Object value1) {
+ return newDoc(newProjectDto(ORG), metric1, value1);
+ }
+
+ private static ProjectMeasuresDoc newDoc(String metric1, Object value1, String metric2, Object value2) {
+ return newDoc(newProjectDto(ORG), metric1, value1, metric2, value2);
+ }
+
+ private static ProjectMeasuresDoc newDoc(String metric1, Object value1, String metric2, Object value2, String metric3, Object value3) {
+ return newDoc(newProjectDto(ORG), metric1, value1, metric2, value2, metric3, value3);
+ }
+
+ private void assertResults(ProjectMeasuresQuery query, ComponentDto... expectedProjects) {
+ List<String> result = underTest.search(query, new SearchOptions()).getIds();
+ assertThat(result).containsExactly(Arrays.stream(expectedProjects).map(ComponentDto::uuid).toArray(String[]::new));
+ }
+
+ private void assertNoResults(ProjectMeasuresQuery query) {
+ assertResults(query);
+ }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java
index 2a73cb62fcd..582db411919 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerDaoTest.java
@@ -87,30 +87,30 @@ public class PermissionIndexerDaoTest {
assertThat(dtos).hasSize(4);
PermissionIndexerDao.Dto project1Authorization = getByProjectUuid(project1.uuid(), dtos);
- assertThat(project1Authorization.getGroupNames()).containsOnly(group.getName());
+ assertThat(project1Authorization.getGroupIds()).containsOnly(group.getId());
assertThat(project1Authorization.isAllowAnyone()).isTrue();
- assertThat(project1Authorization.getUsers()).containsOnly(user1.getId());
+ assertThat(project1Authorization.getUserIds()).containsOnly(user1.getId());
assertThat(project1Authorization.getUpdatedAt()).isNotNull();
assertThat(project1Authorization.getQualifier()).isEqualTo(PROJECT);
PermissionIndexerDao.Dto view1Authorization = getByProjectUuid(view1.uuid(), dtos);
- assertThat(view1Authorization.getGroupNames()).containsOnly(group.getName());
+ assertThat(view1Authorization.getGroupIds()).containsOnly(group.getId());
assertThat(view1Authorization.isAllowAnyone()).isTrue();
- assertThat(view1Authorization.getUsers()).containsOnly(user1.getId());
+ assertThat(view1Authorization.getUserIds()).containsOnly(user1.getId());
assertThat(view1Authorization.getUpdatedAt()).isNotNull();
assertThat(view1Authorization.getQualifier()).isEqualTo(VIEW);
PermissionIndexerDao.Dto project2Authorization = getByProjectUuid(project2.uuid(), dtos);
- assertThat(project2Authorization.getGroupNames()).isEmpty();
+ assertThat(project2Authorization.getGroupIds()).isEmpty();
assertThat(project2Authorization.isAllowAnyone()).isTrue();
- assertThat(project2Authorization.getUsers()).containsOnly(user1.getId(), user2.getId());
+ assertThat(project2Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId());
assertThat(project2Authorization.getUpdatedAt()).isNotNull();
assertThat(project2Authorization.getQualifier()).isEqualTo(PROJECT);
PermissionIndexerDao.Dto view2Authorization = getByProjectUuid(view2.uuid(), dtos);
- assertThat(view2Authorization.getGroupNames()).isEmpty();
+ assertThat(view2Authorization.getGroupIds()).isEmpty();
assertThat(view2Authorization.isAllowAnyone()).isTrue();
- assertThat(view2Authorization.getUsers()).containsOnly(user1.getId(), user2.getId());
+ assertThat(view2Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId());
assertThat(view2Authorization.getUpdatedAt()).isNotNull();
assertThat(view2Authorization.getQualifier()).isEqualTo(VIEW);
}
@@ -125,30 +125,30 @@ public class PermissionIndexerDaoTest {
assertThat(dtos).hasSize(4);
PermissionIndexerDao.Dto project1Authorization = dtos.get(project1.uuid());
- assertThat(project1Authorization.getGroupNames()).containsOnly(group.getName());
+ assertThat(project1Authorization.getGroupIds()).containsOnly(group.getId());
assertThat(project1Authorization.isAllowAnyone()).isTrue();
- assertThat(project1Authorization.getUsers()).containsOnly(user1.getId());
+ assertThat(project1Authorization.getUserIds()).containsOnly(user1.getId());
assertThat(project1Authorization.getUpdatedAt()).isNotNull();
assertThat(project1Authorization.getQualifier()).isEqualTo(PROJECT);
PermissionIndexerDao.Dto view1Authorization = dtos.get(view1.uuid());
- assertThat(view1Authorization.getGroupNames()).containsOnly(group.getName());
+ assertThat(view1Authorization.getGroupIds()).containsOnly(group.getId());
assertThat(view1Authorization.isAllowAnyone()).isTrue();
- assertThat(view1Authorization.getUsers()).containsOnly(user1.getId());
+ assertThat(view1Authorization.getUserIds()).containsOnly(user1.getId());
assertThat(view1Authorization.getUpdatedAt()).isNotNull();
assertThat(view1Authorization.getQualifier()).isEqualTo(VIEW);
PermissionIndexerDao.Dto project2Authorization = dtos.get(project2.uuid());
- assertThat(project2Authorization.getGroupNames()).isEmpty();
+ assertThat(project2Authorization.getGroupIds()).isEmpty();
assertThat(project2Authorization.isAllowAnyone()).isTrue();
- assertThat(project2Authorization.getUsers()).containsOnly(user1.getId(), user2.getId());
+ assertThat(project2Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId());
assertThat(project2Authorization.getUpdatedAt()).isNotNull();
assertThat(project2Authorization.getQualifier()).isEqualTo(PROJECT);
PermissionIndexerDao.Dto view2Authorization = dtos.get(view2.uuid());
- assertThat(view2Authorization.getGroupNames()).isEmpty();
+ assertThat(view2Authorization.getGroupIds()).isEmpty();
assertThat(view2Authorization.isAllowAnyone()).isTrue();
- assertThat(view2Authorization.getUsers()).containsOnly(user1.getId(), user2.getId());
+ assertThat(view2Authorization.getUserIds()).containsOnly(user1.getId(), user2.getId());
assertThat(view2Authorization.getUpdatedAt()).isNotNull();
assertThat(view2Authorization.getQualifier()).isEqualTo(VIEW);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java
index 60bb699a576..3f55fab877f 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTest.java
@@ -60,7 +60,7 @@ public class PermissionIndexerTest {
private FooIndex fooIndex = new FooIndex(esTester.client(), new AuthorizationTypeSupport(userSession));
private FooIndexer fooIndexer = new FooIndexer(esTester.client());
private PermissionIndexer underTest = new PermissionIndexer(
- dbTester.getDbClient(), esTester.client(), new NeedAuthorizationIndexer[] {fooIndexer});
+ dbTester.getDbClient(), esTester.client(), fooIndexer);
@Before
public void setUp() throws Exception {
@@ -253,7 +253,7 @@ public class PermissionIndexerTest {
}
private void verifyAuthorized(ComponentDto project, UserDto user, GroupDto group) {
- logIn(user).setUserGroups(group.getName());
+ logIn(user).setGroups(group);
verifyAuthorized(project, true);
}
@@ -263,7 +263,7 @@ public class PermissionIndexerTest {
}
private void verifyNotAuthorized(ComponentDto project, UserDto user, GroupDto group) {
- logIn(user).setUserGroups(group.getName());
+ logIn(user).setGroups(group);
verifyAuthorized(project, false);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java
index 29dfa966ab8..2481374bdf8 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/PermissionIndexerTester.java
@@ -23,6 +23,8 @@ package org.sonar.server.permission.index;
import java.util.Arrays;
import java.util.stream.Stream;
import org.sonar.db.component.ComponentDto;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import org.sonar.server.es.EsTester;
import static java.util.Arrays.asList;
@@ -32,27 +34,27 @@ public class PermissionIndexerTester {
private final PermissionIndexer permissionIndexer;
public PermissionIndexerTester(EsTester esTester, NeedAuthorizationIndexer indexer, NeedAuthorizationIndexer... others) {
- NeedAuthorizationIndexer[] indexers = Stream.concat(Stream.of(indexer), Arrays.stream(others)).toArray(i -> new NeedAuthorizationIndexer[i]);
+ NeedAuthorizationIndexer[] indexers = Stream.concat(Stream.of(indexer), Arrays.stream(others)).toArray(NeedAuthorizationIndexer[]::new);
this.permissionIndexer = new PermissionIndexer(null, esTester.client(), indexers);
}
public PermissionIndexerTester allowOnlyAnyone(ComponentDto project) {
- PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), System.currentTimeMillis(), project.qualifier())
- .addGroupName("Anyone");
+ PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), System.currentTimeMillis(), project.qualifier());
+ dto.allowAnyone();
permissionIndexer.index(asList(dto));
return this;
}
- public PermissionIndexerTester allowOnlyUser(ComponentDto project, long userId) {
+ public PermissionIndexerTester allowOnlyUser(ComponentDto project, UserDto user) {
PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), System.currentTimeMillis(), project.qualifier())
- .addUser(userId);
+ .addUserId(user.getId());
permissionIndexer.index(asList(dto));
return this;
}
- public PermissionIndexerTester allowOnlyGroup(ComponentDto project, String groupName) {
+ public PermissionIndexerTester allowOnlyGroup(ComponentDto project, GroupDto group) {
PermissionIndexerDao.Dto dto = new PermissionIndexerDao.Dto(project.uuid(), System.currentTimeMillis(), project.qualifier())
- .addGroupName(groupName);
+ .addGroupId(group.getId());
permissionIndexer.index(asList(dto));
return this;
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java b/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java
index 418f7877b92..745c18c15d2 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java
@@ -19,8 +19,11 @@
*/
package org.sonar.server.tester;
+import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.Collections;
+import java.util.Set;
+import org.sonar.api.security.DefaultGroups;
import org.sonar.db.user.GroupDto;
public class AnonymousMockUserSession extends AbstractMockUserSession<AnonymousMockUserSession> {
@@ -58,4 +61,9 @@ public class AnonymousMockUserSession extends AbstractMockUserSession<AnonymousM
public Collection<GroupDto> getGroups() {
return Collections.emptyList();
}
+
+ @Override
+ public Set<String> getUserGroups() {
+ return Sets.newHashSet(DefaultGroups.ANYONE);
+ }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java
index ebf2acd7833..cdc79c89ceb 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java
@@ -23,6 +23,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.sonar.api.security.DefaultGroups;
import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
@@ -100,4 +104,10 @@ public class MockUserSession extends AbstractMockUserSession<MockUserSession> {
this.groups = asList(groups);
return this;
}
+
+ @Override
+ public Set<String> getUserGroups() {
+ return Stream.concat(Stream.of(DefaultGroups.ANYONE),groups.stream().map(GroupDto::getName))
+ .collect(Collectors.toSet());
+ }
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java
index 877582c215e..66d0c4fb50a 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java
@@ -20,17 +20,20 @@
package org.sonar.server.tester;
import org.junit.Test;
-import org.sonar.server.user.UserSession;
+import org.sonar.db.user.GroupDto;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.db.user.GroupTesting.newGroupDto;
public class MockUserSessionTest {
@Test
public void set_mock_session() {
- MockUserSession mock = new MockUserSession("simon").setUserGroups("sonar-users");
+ GroupDto group = newGroupDto();
+ MockUserSession mock = new MockUserSession("foo").setGroups(group);
- assertThat(mock.getLogin()).isEqualTo("simon");
- assertThat(mock.getUserGroups()).containsOnly("sonar-users", "Anyone");
+ assertThat(mock.getLogin()).isEqualTo("foo");
+ assertThat(mock.getGroups()).extracting(GroupDto::getId).containsOnly(group.getId());
+ assertThat(mock.getUserGroups()).containsOnly(group.getName(), "Anyone");
assertThat(mock.globalPermissions()).isEmpty();
assertThat(mock.isLoggedIn()).isTrue();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
index b86e7ab2e21..5f0b6cd9501 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
@@ -214,8 +214,12 @@ public class UserSessionRule implements TestRule, UserSession {
return this;
}
- public UserSessionRule setUserGroups(@Nullable String... userGroups) {
- ensureAbstractMockUserSession().setUserGroups(userGroups);
+ /**
+ * Groups that user is member of. User must be logged in. An exception
+ * is thrown if session is anonymous.
+ */
+ public UserSessionRule setGroups(GroupDto... groups) {
+ ensureMockUserSession().setGroups(groups);
return this;
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java
index ad95f214a91..2b2982ab26c 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerTest.java
@@ -36,11 +36,21 @@ import org.sonar.db.issue.IssueDto;
import org.sonar.db.issue.IssueTesting;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.rule.RuleDto;
+import org.sonar.db.rule.RuleTesting;
import org.sonar.server.es.EsTester;
+import org.sonar.server.es.SearchOptions;
+import org.sonar.server.es.SearchResult;
+import org.sonar.server.issue.IssueQuery;
+import org.sonar.server.issue.index.IssueDoc;
+import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.issue.index.IssueIndexDefinition;
+import org.sonar.server.issue.index.IssueIndexer;
+import org.sonar.server.permission.index.AuthorizationTypeSupport;
+import org.sonar.server.permission.index.PermissionIndexer;
import org.sonar.server.tester.UserSessionRule;
import static com.google.common.collect.Lists.newArrayList;
+import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
public class ViewIndexerTest {
@@ -58,7 +68,8 @@ public class ViewIndexerTest {
private DbClient dbClient = dbTester.getDbClient();
private DbSession dbSession = dbTester.getSession();
- //private PermissionIndexer permissionIndexer = new PermissionIndexer(dbClient, esTester.client(), new NeedAuthorizationIndexer[]{underTest});
+ private IssueIndexer issueIndexer = new IssueIndexer(system2, dbClient, esTester.client());
+ private PermissionIndexer permissionIndexer = new PermissionIndexer(dbClient, esTester.client(), issueIndexer);
private ViewIndexer underTest = (ViewIndexer) new ViewIndexer(system2, dbClient, esTester.client());
@Test
@@ -124,45 +135,45 @@ public class ViewIndexerTest {
assertThat(view.projects()).containsOnly("KLMN", "JKLM");
}
-// @Test
-// public void clear_views_lookup_cache_on_index_view_uuid() {
-// IssueIndex issueIndex = new IssueIndex(esTester.client(), System2.INSTANCE, userSessionRule, new AuthorizationTypeSupport(userSessionRule));
-// IssueIndexer issueIndexer = new IssueIndexer(system2, dbClient, esTester.client());
-//
-// String viewUuid = "ABCD";
-//
-// RuleDto rule = RuleTesting.newXooX1();
-// dbClient.ruleDao().insert(dbSession, rule);
-// ComponentDto project1 = addProjectWithIssue(rule, dbTester.organizations().insert());
-// issueIndexer.indexAll();
-// permissionIndexer.indexProjectsByUuids(dbSession, project1.uuid());
-//
-// OrganizationDto organizationDto = dbTester.organizations().insert();
-// ComponentDto view = ComponentTesting.newView(organizationDto, "ABCD");
-// ComponentDto techProject1 = ComponentTesting.newProjectCopy("CDEF", project1, view);
-// dbClient.componentDao().insert(dbSession, view, techProject1);
-// dbSession.commit();
-//
-// // First view indexation
-// underTest.index(viewUuid);
-//
-// // Execute issue query on view -> 1 issue on view
-// SearchResult<IssueDoc> docs = issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions());
-// assertThat(docs.getDocs()).hasSize(1);
-//
-// // Add a project to the view and index it again
-// ComponentDto project2 = addProjectWithIssue(rule, organizationDto);
-// issueIndexer.indexAll();
-// permissionIndexer.indexProjectsByUuids(dbSession, project2.uuid());
-//
-// ComponentDto techProject2 = ComponentTesting.newProjectCopy("EFGH", project2, view);
-// dbClient.componentDao().insert(dbSession, techProject2);
-// dbSession.commit();
-// underTest.index(viewUuid);
-//
-// // Execute issue query on view -> issue of project2 are well taken into account : the cache has been cleared
-// assertThat(issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()).getDocs()).hasSize(2);
-// }
+ @Test
+ public void clear_views_lookup_cache_on_index_view_uuid() {
+ IssueIndex issueIndex = new IssueIndex(esTester.client(), System2.INSTANCE, userSessionRule, new AuthorizationTypeSupport(userSessionRule));
+ IssueIndexer issueIndexer = new IssueIndexer(system2, dbClient, esTester.client());
+
+ String viewUuid = "ABCD";
+
+ RuleDto rule = RuleTesting.newXooX1();
+ dbClient.ruleDao().insert(dbSession, rule);
+ ComponentDto project1 = addProjectWithIssue(rule, dbTester.organizations().insert());
+ issueIndexer.indexAll();
+ permissionIndexer.indexProjectsByUuids(dbSession, asList(project1.uuid()));
+
+ OrganizationDto organizationDto = dbTester.organizations().insert();
+ ComponentDto view = ComponentTesting.newView(organizationDto, "ABCD");
+ ComponentDto techProject1 = ComponentTesting.newProjectCopy("CDEF", project1, view);
+ dbClient.componentDao().insert(dbSession, view, techProject1);
+ dbSession.commit();
+
+ // First view indexation
+ underTest.index(viewUuid);
+
+ // Execute issue query on view -> 1 issue on view
+ SearchResult<IssueDoc> docs = issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions());
+ assertThat(docs.getDocs()).hasSize(1);
+
+ // Add a project to the view and index it again
+ ComponentDto project2 = addProjectWithIssue(rule, organizationDto);
+ issueIndexer.indexAll();
+ permissionIndexer.indexProjectsByUuids(dbSession, asList(project2.uuid()));
+
+ ComponentDto techProject2 = ComponentTesting.newProjectCopy("EFGH", project2, view);
+ dbClient.componentDao().insert(dbSession, techProject2);
+ dbSession.commit();
+ underTest.index(viewUuid);
+
+ // Execute issue query on view -> issue of project2 are well taken into account : the cache has been cleared
+ assertThat(issueIndex.search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()).getDocs()).hasSize(2);
+ }
private ComponentDto addProjectWithIssue(RuleDto rule, OrganizationDto org) {
ComponentDto project = ComponentTesting.newProjectDto(org);
diff --git a/sonar-db/src/test/java/org/sonar/db/user/GroupTesting.java b/sonar-db/src/test/java/org/sonar/db/user/GroupTesting.java
index 9291bffa9fb..3065bc65405 100644
--- a/sonar-db/src/test/java/org/sonar/db/user/GroupTesting.java
+++ b/sonar-db/src/test/java/org/sonar/db/user/GroupTesting.java
@@ -32,6 +32,7 @@ public class GroupTesting {
public static GroupDto newGroupDto() {
GroupDto group = new GroupDto()
+ .setId(nextLong())
.setOrganizationUuid(randomAlphanumeric(40))
.setName(randomAlphanumeric(255))
.setDescription(randomAlphanumeric(200))
diff --git a/sonar-db/src/test/java/org/sonar/db/user/UserTesting.java b/sonar-db/src/test/java/org/sonar/db/user/UserTesting.java
index 9b401afe6cc..24f9b0f17a0 100644
--- a/sonar-db/src/test/java/org/sonar/db/user/UserTesting.java
+++ b/sonar-db/src/test/java/org/sonar/db/user/UserTesting.java
@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
import static java.util.Collections.singletonList;
import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
+import static org.apache.commons.lang.math.RandomUtils.nextInt;
import static org.apache.commons.lang.math.RandomUtils.nextLong;
public class UserTesting {
@@ -33,6 +34,7 @@ public class UserTesting {
public static UserDto newUserDto(String login, String name, @Nullable String email) {
return new UserDto()
+ .setId((long)nextInt())
.setActive(true)
.setLocal(true)
.setName(name)
@@ -49,6 +51,7 @@ public class UserTesting {
public static UserDto newLocalUser(String login, String name, @Nullable String email) {
return new UserDto()
+ .setId((long)nextInt())
.setActive(true)
.setLocal(true)
.setName(name)
@@ -65,6 +68,7 @@ public class UserTesting {
public static UserDto newExternalUser(String login, String name, @Nullable String email) {
return new UserDto()
+ .setId((long)nextInt())
.setActive(true)
.setLocal(false)
.setName(name)
@@ -79,6 +83,7 @@ public class UserTesting {
public static UserDto newDisabledUser(String login) {
return new UserDto()
+ .setId((long)nextInt())
.setLogin(login)
.setActive(false)
.setCreatedAt(nextLong())