Browse Source

fix Request.mandatoryParam not failing on blank parameter value

tags/7.7
Sébastien Lesaint 5 years ago
parent
commit
db18af0468
25 changed files with 134 additions and 131 deletions
  1. 0
    6
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/RequestValidator.java
  2. 0
    2
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/template/CreateTemplateAction.java
  3. 3
    1
      server/sonar-server/src/main/java/org/sonar/server/permission/ws/template/UpdateTemplateAction.java
  4. 0
    2
      server/sonar-server/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java
  5. 4
    10
      server/sonar-server/src/main/java/org/sonar/server/projectanalysis/ws/SetBaselineAction.java
  6. 0
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CopyAction.java
  7. 0
    2
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CreateAction.java
  8. 0
    3
      server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java
  9. 0
    2
      server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java
  10. 0
    1
      server/sonar-server/src/main/java/org/sonar/server/setting/ws/EncryptAction.java
  11. 0
    2
      server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java
  12. 1
    7
      server/sonar-server/src/main/java/org/sonar/server/usertoken/ws/GenerateAction.java
  13. 9
    9
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/CreateTemplateActionTest.java
  14. 12
    12
      server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/UpdateTemplateActionTest.java
  15. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/projectanalysis/ws/CreateEventActionTest.java
  16. 25
    10
      server/sonar-server/src/test/java/org/sonar/server/projectanalysis/ws/SetBaselineActionTest.java
  17. 24
    19
      server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/CopyActionTest.java
  18. 27
    23
      server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/CreateActionTest.java
  19. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/RenameActionTest.java
  20. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java
  21. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java
  22. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java
  23. 19
    7
      server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java
  24. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/usertoken/ws/GenerateActionTest.java
  25. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java

+ 0
- 6
server/sonar-server/src/main/java/org/sonar/server/permission/ws/RequestValidator.java View File

@@ -35,7 +35,6 @@ import org.sonar.server.ws.WsUtils;

import static com.google.common.base.Strings.isNullOrEmpty;
import static java.lang.String.format;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.sonar.server.ws.WsUtils.checkRequest;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PERMISSION;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_PROJECT_KEY_PATTERN;
@@ -43,7 +42,6 @@ import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_Q

public class RequestValidator {
public static final String MSG_TEMPLATE_WITH_SAME_NAME = "A template with the name '%s' already exists (case insensitive).";
private static final String MSG_TEMPLATE_NAME_NOT_BLANK = "The template name must not be blank";
private final PermissionService permissionService;
private final String allProjectsPermissionsOnOneLine;

@@ -69,10 +67,6 @@ public class RequestValidator {
format("It is not possible to add the '%s' permission to group 'Anyone'.", permission));
}

public static void validateTemplateNameFormat(String name) {
checkRequest(!isBlank(name), MSG_TEMPLATE_NAME_NOT_BLANK);
}

public static void validateQualifier(@Nullable String qualifier, ResourceTypes resourceTypes) {
if (qualifier == null) {
return;

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

@@ -118,8 +118,6 @@ public class CreateTemplateAction implements PermissionsWsAction {
}

private void validateTemplateNameForCreation(DbSession dbSession, OrganizationDto org, String name) {
RequestValidator.validateTemplateNameFormat(name);

PermissionTemplateDto permissionTemplateWithSameName = dbClient.permissionTemplateDao()
.selectByName(dbSession, org.getUuid(), name);
checkRequest(permissionTemplateWithSameName == null, format(MSG_TEMPLATE_WITH_SAME_NAME, name));

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

@@ -34,12 +34,14 @@ import org.sonar.server.permission.ws.PermissionsWsAction;
import org.sonar.server.permission.ws.RequestValidator;
import org.sonar.server.permission.ws.WsParameters;
import org.sonar.server.user.UserSession;
import org.sonar.server.ws.WsUtils;
import org.sonarqube.ws.Permissions.PermissionTemplate;
import org.sonarqube.ws.Permissions.UpdateTemplateWsResponse;

import static com.google.common.base.MoreObjects.firstNonNull;
import static java.lang.String.format;
import static java.util.Objects.requireNonNull;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
import static org.sonar.server.permission.ws.RequestValidator.MSG_TEMPLATE_WITH_SAME_NAME;
import static org.sonar.server.permission.ws.template.PermissionTemplateDtoToPermissionTemplateResponse.toPermissionTemplateResponse;
@@ -141,7 +143,7 @@ public class UpdateTemplateAction implements PermissionsWsAction {
}

private void validateTemplateNameForUpdate(DbSession dbSession, String organizationUuid, String name, long id) {
RequestValidator.validateTemplateNameFormat(name);
WsUtils.checkRequest(!isBlank(name), "The template name must not be blank");

PermissionTemplateDto permissionTemplateWithSameName = dbClient.permissionTemplateDao().selectByName(dbSession, organizationUuid, name);
checkRequest(permissionTemplateWithSameName == null || permissionTemplateWithSameName.getId() == id,

+ 0
- 2
server/sonar-server/src/main/java/org/sonar/server/projectanalysis/ws/CreateEventAction.java View File

@@ -47,7 +47,6 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static java.lang.String.format;
import static java.util.Optional.ofNullable;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.sonar.db.event.EventValidator.MAX_NAME_LENGTH;
import static org.sonar.server.projectanalysis.ws.EventCategory.OTHER;
import static org.sonar.server.projectanalysis.ws.EventCategory.VERSION;
@@ -163,7 +162,6 @@ public class CreateEventAction implements ProjectAnalysesWsAction {
}

private EventDto toDbEvent(CreateEventRequest request, SnapshotDto analysis) {
checkArgument(isNotBlank(request.getName()), "A non empty name is required");
return new EventDto()
.setUuid(uuidFactory.create())
.setAnalysisUuid(analysis.getUuid())

+ 4
- 10
server/sonar-server/src/main/java/org/sonar/server/projectanalysis/ws/SetBaselineAction.java View File

@@ -38,6 +38,7 @@ import org.sonar.server.user.UserSession;

import static com.google.common.base.Preconditions.checkArgument;
import static java.lang.String.format;
import static org.apache.commons.lang.StringUtils.trimToNull;
import static org.sonar.server.component.ComponentFinder.ParamNames.PROJECT_ID_AND_KEY;
import static org.sonar.server.projectanalysis.ws.ProjectAnalysesWsParameters.PARAM_ANALYSIS;
import static org.sonar.server.projectanalysis.ws.ProjectAnalysesWsParameters.PARAM_BRANCH;
@@ -90,10 +91,9 @@ public class SetBaselineAction implements ProjectAnalysesWsAction {
}

private void doHandle(Request request) {
String projectKey = mandatoryNonEmptyParam(request, PARAM_PROJECT);
String branchKey = request.param(PARAM_BRANCH);
checkArgument(branchKey == null || !branchKey.isEmpty(), "The '%s' parameter must not be empty", PARAM_BRANCH);
String analysisUuid = mandatoryNonEmptyParam(request, PARAM_ANALYSIS);
String projectKey = request.mandatoryParam(PARAM_PROJECT);
String branchKey = trimToNull(request.param(PARAM_BRANCH));
String analysisUuid = request.mandatoryParam(PARAM_ANALYSIS);

try (DbSession dbSession = dbClient.openSession(false)) {
ComponentDto projectBranch = getProjectBranch(dbSession, projectKey, branchKey);
@@ -104,12 +104,6 @@ public class SetBaselineAction implements ProjectAnalysesWsAction {
}
}

private static String mandatoryNonEmptyParam(Request request, String param) {
String value = request.mandatoryParam(param);
checkArgument(!value.isEmpty(), "The '%s' parameter must not be empty", param);
return value;
}

private ComponentDto getProjectBranch(DbSession dbSession, String projectKey, @Nullable String branchKey) {
if (branchKey == null) {
return componentFinder.getByUuidOrKey(dbSession, null, projectKey, PROJECT_ID_AND_KEY);

+ 0
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CopyAction.java View File

@@ -29,7 +29,6 @@ import org.sonar.db.qualitygate.QualityGateDto;
import org.sonar.server.qualitygate.QualityGateUpdater;
import org.sonar.server.user.UserSession;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.server.qualitygate.ws.QualityGatesWs.parseId;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
@@ -79,8 +78,6 @@ public class CopyAction implements QualityGatesWsAction {
Long id = parseId(request, PARAM_ID);
String destinationName = request.mandatoryParam(PARAM_NAME);

checkArgument(!destinationName.isEmpty(), "The 'name' parameter is empty");

try (DbSession dbSession = dbClient.openSession(false)) {

OrganizationDto organization = wsSupport.getOrganization(dbSession, request);

+ 0
- 2
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/CreateAction.java View File

@@ -31,7 +31,6 @@ import org.sonar.server.qualitygate.QualityGateUpdater;
import org.sonar.server.user.UserSession;
import org.sonarqube.ws.Qualitygates.CreateResponse;

import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.ACTION_CREATE;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
@@ -80,7 +79,6 @@ public class CreateAction implements QualityGatesWsAction {
userSession.checkPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organizationDto.getUuid());

String name = request.mandatoryParam(PARAM_NAME);
checkArgument(!name.isEmpty(), "The 'name' parameter is empty");

QualityGateDto newQualityGate = qualityGateUpdater.create(dbSession, organizationDto, name);
CreateResponse.Builder createResponse = CreateResponse.newBuilder()

+ 0
- 3
server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java View File

@@ -30,11 +30,9 @@ import org.sonar.db.qualitygate.QualityGateDto;
import org.sonarqube.ws.Qualitygates.QualityGate;

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Strings.isNullOrEmpty;
import static org.sonar.server.qualitygate.ws.CreateAction.NAME_MAXIMUM_LENGTH;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.util.Validation.CANT_BE_EMPTY_MESSAGE;
import static org.sonar.server.ws.WsUtils.writeProtobuf;

public class RenameAction implements QualityGatesWsAction {
@@ -86,7 +84,6 @@ public class RenameAction implements QualityGatesWsAction {
private QualityGateDto rename(DbSession dbSession, OrganizationDto organization, long id, String name) {
QGateWithOrgDto qualityGate = wsSupport.getByOrganizationAndId(dbSession, organization, id);
wsSupport.checkCanEdit(qualityGate);
checkArgument(!isNullOrEmpty(name), CANT_BE_EMPTY_MESSAGE, "Name");
checkNotAlreadyExists(dbSession, organization, qualityGate, name);
qualityGate.setName(name);
dbClient.qualityGateDao().update(qualityGate, dbSession);

+ 0
- 2
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java View File

@@ -19,7 +19,6 @@
*/
package org.sonar.server.qualityprofile.ws;

import org.apache.commons.lang.StringUtils;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
@@ -88,7 +87,6 @@ public class RenameAction implements QProfileWsAction {
}

private void doHandle(String newName, String profileKey) {
checkRequest(StringUtils.isNotBlank(newName), "Name must be set");
checkRequest(newName.length() <= MAXIMUM_NAME_LENGTH, "Name is too long (>%d characters)", MAXIMUM_NAME_LENGTH);
userSession.checkLoggedIn();


+ 0
- 1
server/sonar-server/src/main/java/org/sonar/server/setting/ws/EncryptAction.java View File

@@ -61,7 +61,6 @@ public class EncryptAction implements SettingsWsAction {
userSession.checkIsSystemAdministrator();

String value = request.mandatoryParam(PARAM_VALUE);
checkRequest(!value.isEmpty(), "Parameter '%s' must not be empty", PARAM_VALUE);

Encryption encryption = settings.getEncryption();
checkRequest(encryption.hasSecretKey(), "No secret key available");

+ 0
- 2
server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java View File

@@ -59,7 +59,6 @@ import org.sonar.server.user.UserSession;

import static com.google.common.base.Preconditions.checkArgument;
import static java.lang.String.format;
import static org.apache.commons.lang.StringUtils.isNotEmpty;
import static org.sonar.server.setting.ws.SettingsWsParameters.PARAM_BRANCH;
import static org.sonar.server.setting.ws.SettingsWsParameters.PARAM_COMPONENT;
import static org.sonar.server.setting.ws.SettingsWsParameters.PARAM_FIELD_VALUES;
@@ -301,7 +300,6 @@ public class SetAction implements SettingsWsAction {
.setComponent(request.param(PARAM_COMPONENT))
.setBranch(request.param(PARAM_BRANCH))
.setPullRequest(request.param(PARAM_PULL_REQUEST));
checkArgument(isNotEmpty(set.getKey()), "Setting key is mandatory and must not be empty");
checkArgument(set.getValues() != null, "Setting values must not be null");
checkArgument(set.getFieldValues() != null, "Setting fields values must not be null");
return set;

+ 1
- 7
server/sonar-server/src/main/java/org/sonar/server/usertoken/ws/GenerateAction.java View File

@@ -86,7 +86,7 @@ public class GenerateAction implements UserTokensWsAction {

private UserTokens.GenerateWsResponse doHandle(Request request) {
try (DbSession dbSession = dbClient.openSession(false)) {
String name = getName(request);
String name = request.mandatoryParam(PARAM_NAME).trim();
UserDto user = userTokenSupport.getUser(dbSession, request);
checkTokenDoesNotAlreadyExists(dbSession, user, name);

@@ -111,12 +111,6 @@ public class GenerateAction implements UserTokensWsAction {
checkRequest(userTokenDto == null, "A user token for login '%s' and name '%s' already exists", user.getLogin(), name);
}

private static String getName(Request request) {
String name = request.mandatoryParam(PARAM_NAME).trim();
checkRequest(!name.isEmpty(), "The '%s' parameter must not be blank", PARAM_NAME);
return name;
}

private UserTokenDto insertTokenInDb(DbSession dbSession, UserDto user, String name, String tokenHash) {
UserTokenDto userTokenDto = new UserTokenDto()
.setUserUuid(user.getUuid())

+ 9
- 9
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/CreateTemplateActionTest.java View File

@@ -48,7 +48,7 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void create_full_permission_template() throws Exception {
public void create_full_permission_template() {
loginAsAdmin(db.getDefaultOrganization());

TestResponse result = newRequest("Finance", "Permissions for financially related projects", ".*\\.finance\\..*");
@@ -66,7 +66,7 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void create_minimalist_permission_template() throws Exception {
public void create_minimalist_permission_template() {
loginAsAdmin(db.getDefaultOrganization());

newRequest("Finance", null, null);
@@ -81,7 +81,7 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void fail_if_name_not_provided() throws Exception {
public void fail_if_name_not_provided() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(IllegalArgumentException.class);
@@ -90,17 +90,17 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void fail_if_name_empty() throws Exception {
public void fail_if_name_empty() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(BadRequestException.class);
expectedException.expectMessage("The template name must not be blank");
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing");

newRequest("", null, null);
}

@Test
public void fail_if_regexp_if_not_valid() throws Exception {
public void fail_if_regexp_if_not_valid() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(BadRequestException.class);
@@ -110,7 +110,7 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void fail_if_name_already_exists_in_database_case_insensitive() throws Exception {
public void fail_if_name_already_exists_in_database_case_insensitive() {
loginAsAdmin(db.getDefaultOrganization());
PermissionTemplateDto template = db.permissionTemplates().insertTemplate(db.getDefaultOrganization());

@@ -121,7 +121,7 @@ public class CreateTemplateActionTest extends BasePermissionWsTest<CreateTemplat
}

@Test
public void fail_if_not_admin() throws Exception {
public void fail_if_not_admin() {
userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization());

expectedException.expect(ForbiddenException.class);

+ 12
- 12
server/sonar-server/src/test/java/org/sonar/server/permission/ws/template/UpdateTemplateActionTest.java View File

@@ -67,7 +67,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void update_all_permission_template_fields() throws Exception {
public void update_all_permission_template_fields() {
loginAsAdmin(db.getDefaultOrganization());

String result = call(template.getUuid(), "Finance", "Permissions for financially related projects", ".*\\.finance\\..*");
@@ -85,7 +85,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void update_with_the_same_values() throws Exception {
public void update_with_the_same_values() {
loginAsAdmin(db.getDefaultOrganization());

call(template.getUuid(), template.getName(), template.getDescription(), template.getKeyPattern());
@@ -97,7 +97,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void update_name_only() throws Exception {
public void update_name_only() {
loginAsAdmin(db.getDefaultOrganization());

call(template.getUuid(), "Finance", null, null);
@@ -109,7 +109,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_key_is_not_found() throws Exception {
public void fail_if_key_is_not_found() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(NotFoundException.class);
@@ -119,7 +119,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_name_already_exists_in_another_template() throws Exception {
public void fail_if_name_already_exists_in_another_template() {
loginAsAdmin(db.getDefaultOrganization());
PermissionTemplateDto anotherTemplate = addTemplateToDefaultOrganization();

@@ -130,7 +130,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_key_is_not_provided() throws Exception {
public void fail_if_key_is_not_provided() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(IllegalArgumentException.class);
@@ -139,7 +139,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_name_empty() throws Exception {
public void fail_if_name_empty() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(BadRequestException.class);
@@ -149,7 +149,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_name_has_just_whitespaces() throws Exception {
public void fail_if_name_has_just_whitespaces() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(BadRequestException.class);
@@ -159,7 +159,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_regexp_if_not_valid() throws Exception {
public void fail_if_regexp_if_not_valid() {
loginAsAdmin(db.getDefaultOrganization());

expectedException.expect(BadRequestException.class);
@@ -169,7 +169,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_name_already_exists_in_database_case_insensitive() throws Exception {
public void fail_if_name_already_exists_in_database_case_insensitive() {
loginAsAdmin(db.getDefaultOrganization());
PermissionTemplateDto anotherTemplate = addTemplateToDefaultOrganization();

@@ -181,7 +181,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_not_logged_in() throws Exception {
public void fail_if_not_logged_in() {
expectedException.expect(UnauthorizedException.class);
userSession.anonymous();

@@ -189,7 +189,7 @@ public class UpdateTemplateActionTest extends BasePermissionWsTest<UpdateTemplat
}

@Test
public void fail_if_not_admin() throws Exception {
public void fail_if_not_admin() {
userSession.logIn().addPermission(SCAN, db.getDefaultOrganization());

expectedException.expect(ForbiddenException.class);

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/projectanalysis/ws/CreateEventActionTest.java View File

@@ -212,7 +212,7 @@ public class CreateEventActionTest {
logInAsProjectAdministrator(project);

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("A non empty name is required");
expectedException.expectMessage("The 'name' parameter is missing");

call(OTHER.name(), " ", analysis.getUuid());
}

+ 25
- 10
server/sonar-server/src/test/java/org/sonar/server/projectanalysis/ws/SetBaselineActionTest.java View File

@@ -73,7 +73,8 @@ public class SetBaselineActionTest {
private WsActionTester ws = new WsActionTester(new SetBaselineAction(dbClient, userSession, TestComponentFinder.from(db)));

@Test
public void set_baseline_on_main_branch() {
@UseDataProvider("nullOrEmpty")
public void set_baseline_on_main_branch(@Nullable String branchName) {
ComponentDto project = ComponentTesting.newPrivateProjectDto(db.organizations().insert());
BranchDto branch = new BranchDto()
.setBranchType(BranchType.LONG)
@@ -85,12 +86,21 @@ public class SetBaselineActionTest {
SnapshotDto analysis = db.components().insertSnapshot(project);
logInAsProjectAdministrator(project);

call(ImmutableMap.of(PARAM_PROJECT, project.getKey(), PARAM_ANALYSIS, analysis.getUuid()));
call(project.getKey(), branchName, analysis.getUuid());

BranchDto loaded = dbClient.branchDao().selectByUuid(dbSession, branch.getUuid()).get();
assertThat(loaded.getManualBaseline()).isEqualTo(analysis.getUuid());
}

@DataProvider
public static Object[][] nullOrEmpty() {
return new Object[][] {
{null},
{""},
{" "},
};
}

@Test
public void set_baseline_on_long_living_branch() {
ComponentDto project = ComponentTesting.newPrivateProjectDto(db.organizations().insert());
@@ -138,10 +148,9 @@ public class SetBaselineActionTest {

return new Object[][] {
{builder.put(PARAM_PROJECT, null).map, "The 'project' parameter is missing"},
{builder.put(PARAM_PROJECT, "").map, "The 'project' parameter must not be empty"},
{builder.put(PARAM_BRANCH, "").map, "The 'branch' parameter must not be empty"},
{builder.put(PARAM_PROJECT, "").map, "The 'project' parameter is missing"},
{builder.put(PARAM_ANALYSIS, null).map, "The 'analysis' parameter is missing"},
{builder.put(PARAM_ANALYSIS, "").map, "The 'analysis' parameter must not be empty"},
{builder.put(PARAM_ANALYSIS, "").map, "The 'analysis' parameter is missing"},
};
}

@@ -276,11 +285,17 @@ public class SetBaselineActionTest {
httpRequest.execute();
}

private void call(String projectKey, String branchKey, String analysisUuid) {
call(ImmutableMap.of(
PARAM_PROJECT, projectKey,
PARAM_BRANCH, branchKey,
PARAM_ANALYSIS, analysisUuid));
private void call(String projectKey, @Nullable String branchKey, String analysisUuid) {
if (branchKey == null) {
call(ImmutableMap.of(
PARAM_PROJECT, projectKey,
PARAM_ANALYSIS, analysisUuid));
} else {
call(ImmutableMap.of(
PARAM_PROJECT, projectKey,
PARAM_BRANCH, branchKey,
PARAM_ANALYSIS, analysisUuid));
}
}

private static class MapBuilder {

+ 24
- 19
server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/CopyActionTest.java View File

@@ -19,9 +19,14 @@
*/
package org.sonar.server.qualitygate.ws;

import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactoryFast;
@@ -38,10 +43,12 @@ import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.qualitygate.QualityGateUpdater;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Qualitygates.QualityGate;

import static java.lang.String.format;
import static java.util.Optional.ofNullable;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.tuple;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
@@ -50,6 +57,7 @@ import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ID;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ORGANIZATION;

@RunWith(DataProviderRunner.class)
public class CopyActionTest {

@Rule
@@ -248,34 +256,31 @@ public class CopyActionTest {
}

@Test
public void fail_when_name_parameter_is_missing() {
@UseDataProvider("nullOrEmpty")
public void fail_when_name_parameter_is_missing(@Nullable String nameParameter) {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization);

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing");

ws.newRequest()
TestRequest request = ws.newRequest()
.setParam(PARAM_ID, qualityGate.getId().toString())
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
}

@Test
public void fail_when_name_parameter_is_empty() {
OrganizationDto organization = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, organization);
QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization);
.setParam(PARAM_ORGANIZATION, organization.getKey());
ofNullable(nameParameter).ifPresent(t -> request.setParam(PARAM_NAME, t));

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is empty");
expectedException.expectMessage("The 'name' parameter is missing");

ws.newRequest()
.setParam(PARAM_ID, qualityGate.getId().toString())
.setParam(PARAM_NAME, "")
.setParam(PARAM_ORGANIZATION, organization.getKey())
.execute();
request.execute();
}

@DataProvider
public static Object[][] nullOrEmpty() {
return new Object[][] {
{null},
{""},
{" "}
};
}

@Test

+ 27
- 23
server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/CreateActionTest.java View File

@@ -19,16 +19,15 @@
*/
package org.sonar.server.qualitygate.ws;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ORGANIZATION;

import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
import java.util.Optional;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.core.util.UuidFactoryFast;
@@ -44,9 +43,16 @@ import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.qualitygate.QualityGateUpdater;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.Qualitygates.CreateResponse;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_GATES;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_NAME;
import static org.sonar.server.qualitygate.ws.QualityGatesWsParameters.PARAM_ORGANIZATION;

@RunWith(DataProviderRunner.class)
public class CreateActionTest {

@Rule
@@ -184,30 +190,28 @@ public class CreateActionTest {
}

@Test
public void fail_when_name_parameter_is_empty() {
@UseDataProvider("nullOrEmpty")
public void fail_when_name_parameter_is_empty(@Nullable String nameParameter) {
OrganizationDto org = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, org);

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is empty");

ws.newRequest()
.setParam(PARAM_NAME, "")
.setParam(PARAM_ORGANIZATION, org.getKey())
.execute();
}

@Test
public void fail_when_name_parameter_is_missing() {
OrganizationDto org = db.organizations().insert();
userSession.addPermission(ADMINISTER_QUALITY_GATES, org);
TestRequest request = ws.newRequest()
.setParam(PARAM_ORGANIZATION, org.getKey());
Optional.ofNullable(nameParameter).ifPresent(t -> request.setParam(PARAM_NAME, ""));

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing");

ws.newRequest()
.setParam(PARAM_ORGANIZATION, org.getKey())
.execute();
request.execute();
}

@DataProvider
public static Object[][] nullOrEmpty() {
return new Object[][] {
{null},
{""},
{" "}
};
}

private CreateResponse executeRequest(Optional<OrganizationDto> organization, String qualitGateName) {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/RenameActionTest.java View File

@@ -154,7 +154,7 @@ public class RenameActionTest {
QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization);

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Name can't be empty");
expectedException.expectMessage("The 'name' parameter is missing");

ws.newRequest()
.setParam("id", qualityGate.getId().toString())

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java View File

@@ -219,8 +219,8 @@ public class RenameActionTest {
public void fail_if_blank_renaming() {
String qualityProfileKey = createNewValidQualityProfileKey();

expectedException.expect(BadRequestException.class);
expectedException.expectMessage("Name must be set");
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing");

call(qualityProfileKey, " ");
}

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/setting/ws/EncryptActionTest.java View File

@@ -116,8 +116,8 @@ public class EncryptActionTest {
public void fail_if_value_is_empty() {
logInAsSystemAdministrator();

expectedException.expect(BadRequestException.class);
expectedException.expectMessage("Parameter 'value' must not be empty");
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'value' parameter is missing");

call(" ");
}

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java View File

@@ -434,7 +434,7 @@ public class SetActionTest {
@Test
public void fail_when_empty_key_value() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Setting key is mandatory and must not be empty");
expectedException.expectMessage("The 'key' parameter is missing");

callForGlobalSetting(" ", "my value");
}

+ 19
- 7
server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java View File

@@ -20,6 +20,7 @@
package org.sonar.server.user.ws;

import java.util.Optional;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -47,6 +48,7 @@ import org.sonar.server.organization.TestDefaultOrganizationProvider;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.user.index.UserIndexDefinition;
import org.sonar.server.user.index.UserIndexer;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.TestResponse;
import org.sonar.server.ws.WsActionTester;

@@ -284,12 +286,22 @@ public class DeactivateActionTest {
public void fail_if_login_is_blank() {
logInAsSystemAdministrator();

expectedException.expect(NotFoundException.class);
expectedException.expectMessage("User '' doesn't exist");
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'login' parameter is missing");

deactivate("");
}

@Test
public void fail_if_login_is_missing() {
logInAsSystemAdministrator();

expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'login' parameter is missing");

deactivate(null);
}

@Test
public void fail_to_deactivate_last_administrator_of_default_organization() {
UserDto admin = db.users().insertUser();
@@ -364,11 +376,11 @@ public class DeactivateActionTest {
userSession.logIn().setSystemAdministrator();
}

private TestResponse deactivate(String login) {
return ws.newRequest()
.setMethod("POST")
.setParam("login", login)
.execute();
private TestResponse deactivate(@Nullable String login) {
TestRequest request = ws.newRequest()
.setMethod("POST");
Optional.ofNullable(login).ifPresent(t -> request.setParam("login", login));
return request.execute();
}

private void verifyThatUserExists(String login) {

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/usertoken/ws/GenerateActionTest.java View File

@@ -110,8 +110,8 @@ public class GenerateActionTest {
UserDto user = db.users().insertUser();
logInAsSystemAdministrator();

expectedException.expect(BadRequestException.class);
expectedException.expectMessage("The 'name' parameter must not be blank");
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing");

newRequest(user.getLogin(), " ");
}

+ 1
- 1
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java View File

@@ -77,7 +77,7 @@ public abstract class Request {
*/
public String mandatoryParam(String key) {
String value = param(key);
checkArgument(value != null, format(MSG_PARAMETER_MISSING, key));
checkArgument(value != null && !value.isEmpty(), format(MSG_PARAMETER_MISSING, key));
return value;
}


Loading…
Cancel
Save