aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2017-11-06 11:25:35 +0100
committerGuillaume Jambet <guillaume.jambet@gmail.com>2017-11-08 13:51:31 +0100
commitcfed131070e85a90c1e41af492235b8cf488a8eb (patch)
tree4953dae05ca16ceb0a0aac21092dc2789e701be2 /server
parente9de4d178493dc10e411e9135159319e8e6873cb (diff)
downloadsonarqube-cfed131070e85a90c1e41af492235b8cf488a8eb.tar.gz
sonarqube-cfed131070e85a90c1e41af492235b8cf488a8eb.zip
SONAR-10040 add maximum value to ws API
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java1
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java1
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchMembersAction.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java13
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java4
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java7
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchMembersActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java1
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/ws/ws/WebServicesWsTest/list_including_internals.json216
14 files changed, 135 insertions, 128 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java
index e54d06826cf..3d2d55203ca 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/ActivityAction.java
@@ -294,8 +294,6 @@ public class ActivityAction implements CeWsAction {
checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getQuery() == null, "%s and %s must not be set at the same time",
PARAM_COMPONENT_ID, PARAM_COMPONENT_QUERY);
- checkRequest(activityWsRequest.getPageSize() <= MAX_PAGE_SIZE, "The '%s' parameter must be less than %d", Param.PAGE_SIZE, MAX_PAGE_SIZE);
-
return activityWsRequest;
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java
index 0fc4dd804aa..5e742a29e82 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java
@@ -296,7 +296,6 @@ public class TreeAction implements ComponentsWsAction {
.setAsc(request.mandatoryParamAsBoolean(Param.ASCENDING))
.setPage(request.mandatoryParamAsInt(Param.PAGE))
.setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE));
- checkRequest(treeWsRequest.getPageSize() <= MAX_SIZE, "The '%s' parameter must be less than %d", Param.PAGE_SIZE, MAX_SIZE);
String searchQuery = treeWsRequest.getQuery();
checkRequest(searchQuery == null || searchQuery.length() >= QUERY_MINIMUM_LENGTH,
"The '%s' parameter must have at least %d characters", Param.TEXT_QUERY, QUERY_MINIMUM_LENGTH);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java b/server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java
index 188fce832df..892d64fc303 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java
@@ -308,7 +308,6 @@ public class ComponentTreeAction implements MeasuresWsAction {
.setPage(request.mandatoryParamAsInt(Param.PAGE))
.setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE))
.setQuery(request.param(Param.TEXT_QUERY));
- checkRequest(componentTreeWsRequest.getPageSize() <= MAX_SIZE, "The '%s' parameter must be less than %d", Param.PAGE_SIZE, MAX_SIZE);
String searchQuery = componentTreeWsRequest.getQuery();
checkRequest(searchQuery == null || searchQuery.length() >= QUERY_MINIMUM_LENGTH,
"The '%s' parameter must have at least %d characters", Param.TEXT_QUERY, QUERY_MINIMUM_LENGTH);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchMembersAction.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchMembersAction.java
index 1d87cfaac36..deb4db66886 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchMembersAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchMembersAction.java
@@ -160,8 +160,6 @@ public class SearchMembersAction implements OrganizationsWsAction {
private static SearchOptions buildSearchOptions(Request request) {
int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE);
- checkArgument(pageSize <= SearchOptions.MAX_LIMIT, "Page size must lower than or equal to %s", SearchOptions.MAX_LIMIT);
-
return new SearchOptions().setPage(request.mandatoryParamAsInt(Param.PAGE), pageSize);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java
index cdb9f246679..abde10c79bf 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java
@@ -41,7 +41,6 @@ import org.sonar.db.qualityprofile.QProfileDto;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Comparator.comparing;
import static org.sonar.api.utils.Paging.forPageIndex;
import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01;
@@ -99,7 +98,6 @@ public class ProjectsAction implements QProfileWsAction {
String query = request.param(Param.TEXT_QUERY);
int page = request.mandatoryParamAsInt(Param.PAGE);
int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE);
- checkArgument(pageSize <= MAX_PAGE_SIZE, "The '%s' parameter must be less than %s", Param.PAGE_SIZE, MAX_PAGE_SIZE);
List<ProjectQprofileAssociationDto> projects = loadAllProjects(profileKey, session, selected, query).stream()
.sorted(comparing(ProjectQprofileAssociationDto::getProjectName)
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java b/server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java
index 8f91b4d0279..126bfd341f6 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java
@@ -22,7 +22,6 @@ package org.sonar.server.ws.ws;
import com.google.common.collect.Ordering;
import java.util.Comparator;
import java.util.List;
-import java.util.Set;
import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
@@ -31,6 +30,7 @@ import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.util.stream.MoreCollectors;
import static com.google.common.base.Preconditions.checkState;
+import static java.util.Optional.ofNullable;
public class ListAction implements WebServicesWsAction {
private WebService.Context context;
@@ -134,14 +134,9 @@ public class ListAction implements WebServicesWsAction {
writer.prop("deprecatedKey", param.deprecatedKey());
writer.prop("deprecatedKeySince", param.deprecatedKeySince());
writer.prop("maxValuesAllowed", param.maxValuesAllowed());
- Set<String> possibleValues = param.possibleValues();
- if (possibleValues != null) {
- writer.name("possibleValues").beginArray().values(possibleValues).endArray();
- }
- Integer maximumLength = param.maximumLength();
- if (maximumLength != null) {
- writer.prop("maximumLength", maximumLength);
- }
+ ofNullable(param.possibleValues()).ifPresent(possibleValues -> writer.name("possibleValues").beginArray().values(possibleValues).endArray());
+ ofNullable(param.maximumLength()).ifPresent(maximumLength -> writer.prop("maximumLength", maximumLength));
+ ofNullable(param.maximumValue()).ifPresent(maximumValue -> writer.prop("maximumValue", maximumValue));
writer.endObject();
}
diff --git a/server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json b/server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json
index 2734b17d98c..ade270b1dbd 100644
--- a/server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json
+++ b/server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json
@@ -29,6 +29,12 @@
],
"params": [
{
+ "key": "maximum_value",
+ "maximumValue": 12,
+ "required": false,
+ "internal": false
+ },
+ {
"key": "name",
"required": false,
"internal": false
diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java
index 856ef29b1d6..0f97dde5b8a 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java
@@ -395,8 +395,8 @@ public class ActivityActionTest {
@Test
public void fail_if_page_size_greater_than_1000() {
- expectedException.expect(BadRequestException.class);
- expectedException.expectMessage("The 'ps' parameter must be less than 1000");
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("'ps' value (1001) must be less than 1000");
ws.newRequest()
.setParam(Param.PAGE_SIZE, "1001")
diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java
index dc8ffbf335d..4efbd778940 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java
@@ -386,8 +386,8 @@ public class TreeActionTest {
@Test
public void fail_when_page_size_above_500() {
- expectedException.expect(BadRequestException.class);
- expectedException.expectMessage("The 'ps' parameter must be less than 500");
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("'ps' value (501) must be less than 500");
componentDb.insertComponent(newPrivateProjectDto(db.getDefaultOrganization(), "project-uuid"));
db.commit();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java
index 52911d542b7..0b9e192bea0 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java
@@ -71,7 +71,6 @@ import static org.sonar.api.utils.DateUtils.parseDateTime;
import static org.sonar.api.web.UserRole.USER;
import static org.sonar.db.component.ComponentTesting.newDirectory;
import static org.sonar.db.component.ComponentTesting.newFileDto;
-import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto;
import static org.sonar.db.component.ComponentTesting.newProjectCopy;
import static org.sonar.db.component.SnapshotTesting.newAnalysis;
import static org.sonar.db.measure.MeasureTesting.newMeasureDto;
@@ -765,14 +764,14 @@ public class ComponentTreeActionTest {
db.components().insertSnapshot(project);
insertNclocMetric();
- expectedException.expect(BadRequestException.class);
- expectedException.expectMessage("The 'ps' parameter must be less than 500");
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("'ps' value (2540) must be less than 500");
ws.newRequest()
.setParam(PARAM_COMPONENT, project.getKey())
.setParam(PARAM_METRIC_KEYS, "ncloc")
.setParam(Param.PAGE_SIZE, "2540")
- .executeProtobuf(ComponentTreeWsResponse.class);
+ .execute();
}
@Test
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchMembersActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchMembersActionTest.java
index 584dadca43b..4b9608912d7 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchMembersActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchMembersActionTest.java
@@ -268,7 +268,7 @@ public class SearchMembersActionTest {
request.setPageSize(501);
expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Page size must lower than or equal to 500");
+ expectedException.expectMessage("'ps' value (501) must be less than 500");
call();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java
index 7051702e9e4..477ef473107 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java
@@ -200,7 +200,7 @@ public class ProjectsActionTest {
@Test
public void fail_if_page_size_greater_than_500() throws Exception {
expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("The 'ps' parameter must be less than 500");
+ expectedException.expectMessage("'ps' value (501) must be less than 500");
newRequest().setParam(PARAM_KEY, xooP1.getKee()).setParam(Param.PAGE_SIZE, "501").execute();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java
index dd8110eb008..d9e1fc2fc4f 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java
@@ -125,6 +125,7 @@ public class WebServicesWsTest {
.setDefaultValue("BLOCKER");
create.createParam("name");
create.createParam("internal").setInternal(true);
+ create.createParam("maximum_value").setMaximumValue(12);
newController.createAction("internal_action")
.setDescription("Internal Action Description")
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/ws/WebServicesWsTest/list_including_internals.json b/server/sonar-server/src/test/resources/org/sonar/server/ws/ws/WebServicesWsTest/list_including_internals.json
index e4e70d2d40f..dddcd8edbe6 100644
--- a/server/sonar-server/src/test/resources/org/sonar/server/ws/ws/WebServicesWsTest/list_including_internals.json
+++ b/server/sonar-server/src/test/resources/org/sonar/server/ws/ws/WebServicesWsTest/list_including_internals.json
@@ -1,101 +1,115 @@
-{"webServices": [
- {
- "path": "api/metric",
- "since": "3.2",
- "description": "Metrics",
- "actions": [
- {
- "key": "create",
- "description": "Create metric",
- "since": "4.1",
- "internal": false,
- "post": true,
- "hasResponseExample": true,
- "params": [
- {
- "key": "name",
- "required": false,
- "internal": false
- },
- {
- "key": "severity",
- "description": "Severity",
- "required": false,
- "internal": false,
- "defaultValue": "BLOCKER",
- "exampleValue": "INFO",
- "possibleValues": ["BLOCKER", "INFO"]
- },
- {
- "key": "internal",
- "required": false,
- "internal": true
- }
- ]
- },
- {
- "key": "internal_action",
- "since": "5.3",
- "internal": true,
- "post": false,
- "hasResponseExample": true
- },
- {
- "key": "show",
- "since": "3.2",
- "internal": false,
- "post": false,
- "hasResponseExample": true
- }
- ]
- },
- {
- "path": "api/webservices",
- "description": "Get information on the web api supported on this instance.",
- "since": "4.2",
- "actions": [
- {
- "key": "list",
- "since": "4.2",
- "description": "List web services",
- "internal": false,
- "post": false,
- "hasResponseExample": true,
- "params": [
- {
- "key": "include_internals",
- "description": "Include web services that are implemented for internal use only. Their forward-compatibility is not assured",
- "required": false,
- "internal": false,
- "defaultValue": "false",
- "possibleValues": ["true", "false", "yes", "no"]
- }
- ]
- },
- {
- "key": "response_example",
- "since": "4.4",
- "description": "Display web service response example",
- "internal": false,
- "post": false,
- "hasResponseExample": true,
- "params": [
- {
- "key": "action",
- "required": true,
- "internal": false,
- "description": "Action of the web service",
- "exampleValue": "search"
- },
- {
- "key": "controller",
- "required": true,
- "internal": false,
- "description": "Controller of the web service",
- "exampleValue": "api/issues"
- }
- ]
- }
- ]
- }
-]}
+{
+ "webServices": [
+ {
+ "path": "api/metric",
+ "since": "3.2",
+ "description": "Metrics",
+ "actions": [
+ {
+ "key": "create",
+ "description": "Create metric",
+ "since": "4.1",
+ "internal": false,
+ "post": true,
+ "hasResponseExample": true,
+ "params": [
+ {
+ "key": "maximum_value",
+ "maximumValue": 12
+ },
+ {
+ "key": "name",
+ "required": false,
+ "internal": false
+ },
+ {
+ "key": "severity",
+ "description": "Severity",
+ "required": false,
+ "internal": false,
+ "defaultValue": "BLOCKER",
+ "exampleValue": "INFO",
+ "possibleValues": [
+ "BLOCKER",
+ "INFO"
+ ]
+ },
+ {
+ "key": "internal",
+ "required": false,
+ "internal": true
+ }
+ ]
+ },
+ {
+ "key": "internal_action",
+ "since": "5.3",
+ "internal": true,
+ "post": false,
+ "hasResponseExample": true
+ },
+ {
+ "key": "show",
+ "since": "3.2",
+ "internal": false,
+ "post": false,
+ "hasResponseExample": true
+ }
+ ]
+ },
+ {
+ "path": "api/webservices",
+ "description": "Get information on the web api supported on this instance.",
+ "since": "4.2",
+ "actions": [
+ {
+ "key": "list",
+ "since": "4.2",
+ "description": "List web services",
+ "internal": false,
+ "post": false,
+ "hasResponseExample": true,
+ "params": [
+ {
+ "key": "include_internals",
+ "description": "Include web services that are implemented for internal use only. Their forward-compatibility is not assured",
+ "required": false,
+ "internal": false,
+ "defaultValue": "false",
+ "possibleValues": [
+ "true",
+ "false",
+ "yes",
+ "no"
+ ]
+ }
+ ]
+ },
+ {
+ "key": "response_example",
+ "since": "4.4",
+ "description": "Display web service response example",
+ "internal": false,
+ "post": false,
+ "hasResponseExample": true,
+ "params": [
+ {
+ "key": "action",
+ "required": true,
+ "internal": false,
+ "description": "Action of the web service",
+ "exampleValue": "search"
+ },
+ {
+ "key": "controller",
+ "required": true,
+ "internal": false,
+ "description": "Controller of the web service",
+ "exampleValue": "api/issues"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}