Browse Source

SONAR-9516 add integration tests on permission templates WS

including ES resiliency tests
tags/6.6-RC1
Simon Brandhof 7 years ago
parent
commit
6182f01a60

+ 3
- 1
server/sonar-server/src/main/java/org/sonar/server/permission/ws/template/ApplyTemplateAction.java View File

@@ -38,6 +38,7 @@ import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.crea
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createTemplateParameters;
import static org.sonar.server.permission.ws.ProjectWsRef.newWsProjectRef;
import static org.sonar.server.permission.ws.template.WsTemplateRef.newTemplateRef;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_TEMPLATE_ID;
@@ -62,7 +63,8 @@ public class ApplyTemplateAction implements PermissionsWsAction {
.setProjectId(request.param(PARAM_PROJECT_ID))
.setProjectKey(request.param(PARAM_PROJECT_KEY))
.setTemplateId(request.param(PARAM_TEMPLATE_ID))
.setTemplateName(request.param(PARAM_TEMPLATE_NAME));
.setTemplateName(request.param(PARAM_TEMPLATE_NAME))
.setOrganization(request.param(PARAM_ORGANIZATION));
}

@Override

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/permission/ws/template/CreateTemplateAction.java View File

@@ -70,7 +70,7 @@ public class CreateTemplateAction implements PermissionsWsAction {
.setName(request.mandatoryParam(PARAM_NAME))
.setDescription(request.param(PARAM_DESCRIPTION))
.setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN))
.setOrganizationKey(request.param(PARAM_ORGANIZATION));
.setOrganization(request.param(PARAM_ORGANIZATION));
}

private static CreateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplateDto) {
@@ -106,7 +106,7 @@ public class CreateTemplateAction implements PermissionsWsAction {

private CreateTemplateWsResponse doHandle(CreateTemplateWsRequest request) {
try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto org = wsSupport.findOrganization(dbSession, request.getOrganizationKey());
OrganizationDto org = wsSupport.findOrganization(dbSession, request.getOrganization());
checkGlobalAdmin(userSession, org.getUuid());

validateTemplateNameForCreation(dbSession, org, request.getName());

+ 5
- 5
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/AddGroupWsRequest.java View File

@@ -27,7 +27,7 @@ import static java.util.Objects.requireNonNull;
public class AddGroupWsRequest {
private String permission;
private String groupId;
private String organizationKey;
private String organization;
private String groupName;
private String projectId;
private String projectKey;
@@ -52,12 +52,12 @@ public class AddGroupWsRequest {
}

@CheckForNull
public String getOrganizationKey() {
return organizationKey;
public String getOrganization() {
return organization;
}

public AddGroupWsRequest setOrganizationKey(@Nullable String s) {
this.organizationKey = s;
public AddGroupWsRequest setOrganization(@Nullable String s) {
this.organization = s;
return this;
}


+ 5
- 5
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/CreateTemplateWsRequest.java View File

@@ -28,7 +28,7 @@ public class CreateTemplateWsRequest {
private String description;
private String name;
private String projectKeyPattern;
private String organizationKey;
private String organization;

@CheckForNull
public String getDescription() {
@@ -60,12 +60,12 @@ public class CreateTemplateWsRequest {
}

@CheckForNull
public String getOrganizationKey() {
return organizationKey;
public String getOrganization() {
return organization;
}

public CreateTemplateWsRequest setOrganizationKey(@Nullable String s) {
this.organizationKey = s;
public CreateTemplateWsRequest setOrganization(@Nullable String s) {
this.organization = s;
return this;
}
}

+ 12
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/PermissionsService.java View File

@@ -65,6 +65,7 @@ public class PermissionsService extends BaseService {

public void addGroup(AddGroupWsRequest request) {
call(new PostRequest(path("add_group"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_PROJECT_ID, request.getProjectId())
.setParam(PARAM_PROJECT_KEY, request.getProjectKey())
@@ -92,6 +93,7 @@ public class PermissionsService extends BaseService {

public void addUserToTemplate(AddUserToTemplateWsRequest request) {
call(new PostRequest(path("add_user_to_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_USER_LOGIN, request.getLogin())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
@@ -100,6 +102,7 @@ public class PermissionsService extends BaseService {

public void addProjectCreatorToTemplate(AddProjectCreatorToTemplateWsRequest request) {
call(new PostRequest(path("add_project_creator_to_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
.setParam(PARAM_TEMPLATE_NAME, request.getTemplateName()));
@@ -107,6 +110,7 @@ public class PermissionsService extends BaseService {

public void applyTemplate(ApplyTemplateWsRequest request) {
call(new PostRequest(path("apply_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PROJECT_ID, request.getProjectId())
.setParam(PARAM_PROJECT_KEY, request.getProjectKey())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
@@ -115,6 +119,7 @@ public class PermissionsService extends BaseService {

public void bulkApplyTemplate(BulkApplyTemplateWsRequest request) {
call(new PostRequest(path("bulk_apply_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
.setParam(PARAM_TEMPLATE_NAME, request.getTemplateName())
.setParam("q", request.getQuery())
@@ -123,6 +128,7 @@ public class PermissionsService extends BaseService {

public CreateTemplateWsResponse createTemplate(CreateTemplateWsRequest request) {
PostRequest post = new PostRequest(path("create_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_NAME, request.getName())
.setParam(PARAM_DESCRIPTION, request.getDescription())
.setParam(PARAM_PROJECT_KEY_PATTERN, request.getProjectKeyPattern());
@@ -131,12 +137,14 @@ public class PermissionsService extends BaseService {

public void deleteTemplate(DeleteTemplateWsRequest request) {
call(new PostRequest(path("delete_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
.setParam(PARAM_TEMPLATE_NAME, request.getTemplateName()));
}

public void removeGroup(RemoveGroupWsRequest request) {
call(new PostRequest(path("remove_group"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_GROUP_ID, request.getGroupId())
.setParam(PARAM_GROUP_NAME, request.getGroupName())
@@ -146,6 +154,7 @@ public class PermissionsService extends BaseService {

public void removeGroupFromTemplate(RemoveGroupFromTemplateWsRequest request) {
call(new PostRequest(path("remove_group_from_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_GROUP_ID, request.getGroupId())
.setParam(PARAM_GROUP_NAME, request.getGroupName())
@@ -156,6 +165,7 @@ public class PermissionsService extends BaseService {
public void removeProjectCreatorFromTemplate(RemoveProjectCreatorFromTemplateWsRequest request) {
call(
new PostRequest(path("remove_project_creator_from_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
.setParam(PARAM_TEMPLATE_NAME, request.getTemplateName()));
@@ -171,6 +181,7 @@ public class PermissionsService extends BaseService {

public void removeUserFromTemplate(RemoveUserFromTemplateWsRequest request) {
call(new PostRequest(path("remove_user_from_template"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_USER_LOGIN, request.getLogin())
.setParam(PARAM_TEMPLATE_ID, request.getTemplateId())
@@ -216,6 +227,7 @@ public class PermissionsService extends BaseService {

public UsersWsResponse users(UsersWsRequest request) {
return call(new GetRequest(path("users"))
.setParam(PARAM_ORGANIZATION, request.getOrganization())
.setParam(PARAM_PERMISSION, request.getPermission())
.setParam(PARAM_PROJECT_ID, request.getProjectId())
.setParam(PARAM_PROJECT_KEY, request.getProjectKey())

+ 11
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/RemoveGroupFromTemplateWsRequest.java View File

@@ -25,6 +25,7 @@ import javax.annotation.Nullable;
import static java.util.Objects.requireNonNull;

public class RemoveGroupFromTemplateWsRequest {
private String organization;
private String permission;
private String groupId;
private String groupName;
@@ -40,6 +41,16 @@ public class RemoveGroupFromTemplateWsRequest {
return this;
}

@CheckForNull
public String getOrganization() {
return organization;
}

public RemoveGroupFromTemplateWsRequest setOrganization(@Nullable String s) {
this.organization = s;
return this;
}

@CheckForNull
public String getGroupId() {
return groupId;

+ 11
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/RemoveGroupWsRequest.java View File

@@ -23,12 +23,23 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

public class RemoveGroupWsRequest {
private String organization;
private String groupId;
private String groupName;
private String permission;
private String projectId;
private String projectKey;

@CheckForNull
public String getOrganization() {
return organization;
}

public RemoveGroupWsRequest setOrganization(@Nullable String s) {
this.organization = s;
return this;
}

@CheckForNull
public String getGroupId() {
return groupId;

+ 11
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/permission/UsersWsRequest.java View File

@@ -23,6 +23,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

public class UsersWsRequest {
private String organization;
private String permission;
private String projectId;
private String projectKey;
@@ -30,6 +31,16 @@ public class UsersWsRequest {
private Integer page;
private Integer pageSize;

@CheckForNull
public String getOrganization() {
return organization;
}

public UsersWsRequest setOrganization(@Nullable String s) {
this.organization = s;
return this;
}

@CheckForNull
public String getPermission() {
return permission;

+ 40
- 14
sonar-ws/src/test/java/org/sonarqube/ws/client/permission/PermissionsServiceTest.java View File

@@ -34,6 +34,7 @@ import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_G
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_GROUP_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_NAME;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_ID;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY;
@@ -44,6 +45,7 @@ import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_T
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_USER_LOGIN;

public class PermissionsServiceTest {
private static final String ORGANIZATION_VALUE = "organization value";
private static final String PERMISSION_VALUE = "permission value";
private static final String PROJECT_ID_VALUE = "project id value";
private static final String PROJECT_KEY_VALUE = "project key value";
@@ -100,6 +102,7 @@ public class PermissionsServiceTest {
@Test
public void addGroup_does_POST_on_Ws_add_group() {
underTest.addGroup(new AddGroupWsRequest()
.setOrganization(ORGANIZATION_VALUE)
.setPermission(PERMISSION_VALUE)
.setProjectId(PROJECT_ID_VALUE)
.setProjectKey(PROJECT_KEY_VALUE)
@@ -110,6 +113,7 @@ public class PermissionsServiceTest {
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("add_group")
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_PERMISSION, PERMISSION_VALUE)
.hasParam(PARAM_PROJECT_ID, PROJECT_ID_VALUE)
.hasParam(PARAM_PROJECT_KEY, PROJECT_KEY_VALUE)
@@ -127,7 +131,7 @@ public class PermissionsServiceTest {
.setPermission(PERMISSION_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -145,16 +149,18 @@ public class PermissionsServiceTest {
public void addUser_does_POST_on_Ws_add_user() {
underTest.addUser(new AddUserWsRequest()
.setLogin(LOGIN_VALUE)
.setOrganization(ORGANIZATION_VALUE)
.setPermission(PERMISSION_VALUE)
.setProjectId(PROJECT_ID_VALUE)
.setProjectKey(PROJECT_KEY_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("add_user")
.hasParam(PARAM_USER_LOGIN, LOGIN_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_PERMISSION, PERMISSION_VALUE)
.hasParam(PARAM_PROJECT_ID, PROJECT_ID_VALUE)
.hasParam(PARAM_PROJECT_KEY, PROJECT_KEY_VALUE)
@@ -164,16 +170,18 @@ public class PermissionsServiceTest {
@Test
public void addUserToTemplate_does_POST_on_Ws_add_user_to_template() {
underTest.addUserToTemplate(new AddUserToTemplateWsRequest()
.setOrganization(ORGANIZATION_VALUE)
.setPermission(PERMISSION_VALUE)
.setLogin(LOGIN_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("add_user_to_template")
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_PERMISSION, PERMISSION_VALUE)
.hasParam(PARAM_USER_LOGIN, LOGIN_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
@@ -184,16 +192,18 @@ public class PermissionsServiceTest {
@Test
public void applyTemplate_does_POST_on_Ws_apply_template() {
underTest.applyTemplate(new ApplyTemplateWsRequest()
.setOrganization(ORGANIZATION_VALUE)
.setProjectId(PROJECT_ID_VALUE)
.setProjectKey(PROJECT_KEY_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("apply_template")
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_PROJECT_ID, PROJECT_ID_VALUE)
.hasParam(PARAM_PROJECT_KEY, PROJECT_KEY_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
@@ -204,6 +214,7 @@ public class PermissionsServiceTest {
@Test
public void bulk_apply_template() {
underTest.bulkApplyTemplate(new BulkApplyTemplateWsRequest()
.setOrganization(ORGANIZATION_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
.setQualifier(QUALIFIER_VALUE)
@@ -213,6 +224,7 @@ public class PermissionsServiceTest {
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("bulk_apply_template")
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam("q", QUERY_VALUE)
@@ -223,15 +235,17 @@ public class PermissionsServiceTest {
@Test
public void createTemplate_does_POST_on_Ws_create_template() {
underTest.createTemplate(new CreateTemplateWsRequest()
.setOrganization(ORGANIZATION_VALUE)
.setName(NAME_VALUE)
.setDescription(DESCRIPTION_VALUE)
.setProjectKeyPattern(PROJECT_KEY_PATTERN_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isSameAs(WsPermissions.CreateTemplateWsResponse.parser());
PostRequest postRequest = serviceTester.getPostRequest();
serviceTester.assertThat(postRequest)
.hasPath("create_template")
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.hasParam(PARAM_NAME, NAME_VALUE)
.hasParam(PARAM_DESCRIPTION, DESCRIPTION_VALUE)
.hasParam(PARAM_PROJECT_KEY_PATTERN, PROJECT_KEY_PATTERN_VALUE)
@@ -243,7 +257,8 @@ public class PermissionsServiceTest {
underTest.deleteTemplate(new DeleteTemplateWsRequest()
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
.setOrganization(ORGANIZATION_VALUE)
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -251,6 +266,7 @@ public class PermissionsServiceTest {
.hasPath("delete_template")
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}

@@ -262,7 +278,8 @@ public class PermissionsServiceTest {
.setGroupName(GROUP_NAME_VALUE)
.setProjectId(PROJECT_ID_VALUE)
.setProjectKey(PROJECT_KEY_VALUE)
);
.setOrganization(ORGANIZATION_VALUE)
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -273,6 +290,7 @@ public class PermissionsServiceTest {
.hasParam(PARAM_GROUP_NAME, GROUP_NAME_VALUE)
.hasParam(PARAM_PROJECT_ID, PROJECT_ID_VALUE)
.hasParam(PARAM_PROJECT_KEY, PROJECT_KEY_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}

@@ -284,7 +302,8 @@ public class PermissionsServiceTest {
.setGroupName(GROUP_NAME_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
.setOrganization(ORGANIZATION_VALUE)
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -295,6 +314,7 @@ public class PermissionsServiceTest {
.hasParam(PARAM_GROUP_NAME, GROUP_NAME_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}

@@ -305,7 +325,7 @@ public class PermissionsServiceTest {
.setLogin(LOGIN_VALUE)
.setProjectId(PROJECT_ID_VALUE)
.setProjectKey(PROJECT_KEY_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -325,7 +345,8 @@ public class PermissionsServiceTest {
.setLogin(LOGIN_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
.setOrganization(ORGANIZATION_VALUE)
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -335,6 +356,7 @@ public class PermissionsServiceTest {
.hasParam(PARAM_USER_LOGIN, LOGIN_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}

@@ -358,7 +380,7 @@ public class PermissionsServiceTest {
.setPage(PAGE_VALUE)
.setPageSize(PAGE_SIZE_VALUE)
.setQuery(QUERY_VALUE)
);
);

assertThat(serviceTester.getGetParser()).isSameAs(WsPermissions.SearchProjectPermissionsWsResponse.parser());
GetRequest getRequest = serviceTester.getGetRequest();
@@ -377,7 +399,7 @@ public class PermissionsServiceTest {
public void searchTemplates_does_GET_on_Ws_search_templates() {
underTest.searchTemplates(new SearchTemplatesWsRequest()
.setQuery(QUERY_VALUE)
);
);

assertThat(serviceTester.getGetParser()).isSameAs(WsPermissions.SearchTemplatesWsResponse.parser());
GetRequest getRequest = serviceTester.getGetRequest();
@@ -393,7 +415,7 @@ public class PermissionsServiceTest {
.setQualifier(QUALIFIER_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isNull();
PostRequest postRequest = serviceTester.getPostRequest();
@@ -412,7 +434,7 @@ public class PermissionsServiceTest {
.setId(TEMPLATE_ID_VALUE)
.setName(TEMPLATE_NAME_VALUE)
.setProjectKeyPattern(PROJECT_KEY_PATTERN_VALUE)
);
);

assertThat(serviceTester.getPostParser()).isSameAs(WsPermissions.UpdateTemplateWsResponse.parser());
PostRequest postRequest = serviceTester.getPostRequest();
@@ -431,6 +453,7 @@ public class PermissionsServiceTest {
.setPermission(PERMISSION_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
.setOrganization(ORGANIZATION_VALUE)
.build());

assertThat(serviceTester.getPostParser()).isNull();
@@ -440,6 +463,7 @@ public class PermissionsServiceTest {
.hasParam(PARAM_PERMISSION, PERMISSION_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}

@@ -449,6 +473,7 @@ public class PermissionsServiceTest {
.setPermission(PERMISSION_VALUE)
.setTemplateId(TEMPLATE_ID_VALUE)
.setTemplateName(TEMPLATE_NAME_VALUE)
.setOrganization(ORGANIZATION_VALUE)
.build());

assertThat(serviceTester.getPostParser()).isNull();
@@ -458,6 +483,7 @@ public class PermissionsServiceTest {
.hasParam(PARAM_PERMISSION, PERMISSION_VALUE)
.hasParam(PARAM_TEMPLATE_ID, TEMPLATE_ID_VALUE)
.hasParam(PARAM_TEMPLATE_NAME, TEMPLATE_NAME_VALUE)
.hasParam(PARAM_ORGANIZATION, ORGANIZATION_VALUE)
.andNoOtherParam();
}
}

+ 2
- 2
tests/src/test/java/org/sonarqube/tests/Category1Suite.java View File

@@ -20,7 +20,7 @@
package org.sonarqube.tests;

import com.sonar.orchestrator.Orchestrator;
import org.sonarqube.tests.projectAdministration.ProjectVisibilityTest;
import org.sonarqube.tests.projectAdministration.ProjectVisibilityPageTest;
import org.sonarqube.tests.user.UsersPageTest;
import org.sonarqube.tests.authorisation.ExecuteAnalysisPermissionTest;
import org.sonarqube.tests.authorisation.IssuePermissionTest;
@@ -63,7 +63,7 @@ import static util.ItUtils.xooPlugin;
@Suite.SuiteClasses({
// administration
UsersPageTest.class,
ProjectVisibilityTest.class,
ProjectVisibilityPageTest.class,
// project administration
ProjectBulkDeletionPageTest.class,
ProjectAdministrationTest.class,

+ 3
- 1
tests/src/test/java/org/sonarqube/tests/Category6Suite.java View File

@@ -25,6 +25,7 @@ import java.net.InetAddress;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.sonarqube.tests.authorisation.PermissionTemplateTest;
import org.sonarqube.tests.issue.IssueTagsTest;
import org.sonarqube.tests.issue.OrganizationIssueAssignTest;
import org.sonarqube.tests.organization.BillingTest;
@@ -73,7 +74,8 @@ import static util.ItUtils.xooPlugin;
RulesWsTest.class,
ProjectDeletionTest.class,
ProjectProvisioningTest.class,
ProjectKeyUpdateTest.class
ProjectKeyUpdateTest.class,
PermissionTemplateTest.class
})
public class Category6Suite {


+ 7
- 0
tests/src/test/java/org/sonarqube/tests/UserTester.java View File

@@ -87,6 +87,13 @@ public class UserTester {
return user;
}

@SafeVarargs
public final User generateMember(Organizations.Organization organization, Consumer<CreateRequest.Builder>... populators) {
User user = generate(populators);
session.wsClient().organizations().addMember(organization.getKey(), user.getLogin());
return user;
}

public UsersService service() {
return session.wsClient().users();
}

+ 170
- 0
tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplateTest.java View File

@@ -0,0 +1,170 @@
/*
* SonarQube
* Copyright (C) 2009-2017 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonarqube.tests.authorisation;

import com.sonar.orchestrator.Orchestrator;
import java.util.Optional;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.DisableOnDebug;
import org.junit.rules.TestRule;
import org.junit.rules.Timeout;
import org.sonarqube.tests.Category6Suite;
import org.sonarqube.tests.Tester;
import org.sonarqube.ws.Organizations.Organization;
import org.sonarqube.ws.WsPermissions;
import org.sonarqube.ws.WsProjects.CreateWsResponse.Project;
import org.sonarqube.ws.WsUsers;
import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.component.SearchProjectsRequest;
import org.sonarqube.ws.client.permission.AddUserToTemplateWsRequest;
import org.sonarqube.ws.client.permission.ApplyTemplateWsRequest;
import org.sonarqube.ws.client.permission.CreateTemplateWsRequest;
import org.sonarqube.ws.client.permission.PermissionsService;
import org.sonarqube.ws.client.permission.UsersWsRequest;

import static org.assertj.core.api.Assertions.assertThat;

public class PermissionTemplateTest {
@ClassRule
public static final Orchestrator orchestrator = Category6Suite.ORCHESTRATOR;

@Rule
public TestRule safeguard = new DisableOnDebug(Timeout.seconds(300));
@Rule
public Tester tester = new Tester(orchestrator)
.setElasticsearchHttpPort(Category6Suite.SEARCH_HTTP_PORT);

@After
public void tearDown() throws Exception {
unlockWritesOnProjectIndices();
}

@Test
public void apply_permission_template_on_project() {
Organization organization = tester.organizations().generate();
Project project = tester.projects().generate(organization, p -> p.setVisibility("private"));
WsUsers.CreateWsResponse.User user = tester.users().generateMember(organization);
WsUsers.CreateWsResponse.User anotherUser = tester.users().generateMember(organization);

assertThatUserDoesNotHavePermission(user, organization, project);
assertThatUserDoesNotHavePermission(anotherUser, organization, project);
assertThat(userHasAccessToIndexedProject(user, organization, project)).isTrue();
assertThat(userHasAccessToIndexedProject(anotherUser, organization, project)).isTrue();

// create permission template that gives read permission to "user"
createAndApplyTemplate(organization, project, user);

assertThatUserHasPermission(user, organization, project);
assertThatUserDoesNotHavePermission(anotherUser, organization, project);
assertThat(userHasAccessToIndexedProject(user, organization, project)).isTrue();
assertThat(userHasAccessToIndexedProject(anotherUser, organization, project)).isFalse();
}

@Test
public void indexing_errors_are_recovered_when_applying_permission_template_on_project() throws Exception {
Organization organization = tester.organizations().generate();
Project project = tester.projects().generate(organization, p -> p.setVisibility("private"));
WsUsers.CreateWsResponse.User user = tester.users().generateMember(organization);
WsUsers.CreateWsResponse.User anotherUser = tester.users().generateMember(organization);

lockWritesOnProjectIndices();

createAndApplyTemplate(organization, project, user);

assertThatUserHasPermission(user, organization, project);
assertThatUserDoesNotHavePermission(anotherUser, organization, project);
assertThat(userHasAccessToIndexedProject(user, organization, project)).isTrue();
// inconsistent, should be false. Waiting for ES to be updated.
assertThat(userHasAccessToIndexedProject(user, organization, project)).isTrue();

unlockWritesOnProjectIndices();

boolean recovered = false;
while (!recovered) {
Thread.sleep(1_000L);
recovered = !userHasAccessToIndexedProject(anotherUser, organization, project);
}
}

private void lockWritesOnProjectIndices() throws Exception {
tester.elasticsearch().lockWrites("issues");
tester.elasticsearch().lockWrites("projectmeasures");
tester.elasticsearch().lockWrites("components");
}

private void unlockWritesOnProjectIndices() throws Exception {
tester.elasticsearch().unlockWrites("issues");
tester.elasticsearch().unlockWrites("projectmeasures");
tester.elasticsearch().unlockWrites("components");
}

/**
* Gives the read access only to the specified user. All other users and groups
* loose their ability to see the project.
*/
private void createAndApplyTemplate(Organization organization, Project project, WsUsers.CreateWsResponse.User user) {
String templateName = "For user";
PermissionsService service = tester.wsClient().permissions();
service.createTemplate(new CreateTemplateWsRequest()
.setOrganization(organization.getKey())
.setName(templateName)
.setDescription("Give admin permissions to single user"));
service.addUserToTemplate(new AddUserToTemplateWsRequest()
.setOrganization(organization.getKey())
.setLogin(user.getLogin())
.setPermission("user")
.setTemplateName(templateName));
service.applyTemplate(new ApplyTemplateWsRequest()
.setOrganization(organization.getKey())
.setProjectKey(project.getKey())
.setTemplateName(templateName));
}

private void assertThatUserHasPermission(WsUsers.CreateWsResponse.User user, Organization organization, Project project) {
assertThat(hasAdminPermission(user, organization, project)).isTrue();
}

private void assertThatUserDoesNotHavePermission(WsUsers.CreateWsResponse.User user, Organization organization, Project project) {
assertThat(hasAdminPermission(user, organization, project)).isFalse();
}

private boolean userHasAccessToIndexedProject(WsUsers.CreateWsResponse.User user, Organization organization, Project project) {
SearchProjectsRequest request = SearchProjectsRequest.builder().setOrganization(organization.getKey()).build();
WsClient userSession = tester.as(user.getLogin()).wsClient();
return userSession.components().searchProjects(request)
.getComponentsList().stream()
.anyMatch(c -> c.getKey().equals(project.getKey()));
}

private boolean hasAdminPermission(WsUsers.CreateWsResponse.User user, Organization organization, Project project) {
UsersWsRequest request = new UsersWsRequest()
.setOrganization(organization.getKey())
.setProjectKey(project.getKey())
.setPermission("user");
WsPermissions.UsersWsResponse response = tester.wsClient().permissions().users(request);
Optional<WsPermissions.User> found = response.getUsersList().stream()
.filter(u -> user.getLogin().equals(u.getLogin()))
.findFirst();
return found.isPresent();
}
}

tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectVisibilityTest.java → tests/src/test/java/org/sonarqube/tests/projectAdministration/ProjectVisibilityPageTest.java View File

@@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.projectDir;

public class ProjectVisibilityTest {
public class ProjectVisibilityPageTest {

@ClassRule
public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR;

Loading…
Cancel
Save