]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7135 WS api/measures/component_tree fix leaves strategy and qualifiers together
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 29 Jan 2016 11:21:26 +0000 (12:21 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 29 Jan 2016 11:21:26 +0000 (12:21 +0100)
server/sonar-server/src/main/java/org/sonar/server/component/ws/TreeAction.java
server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeAction.java
server/sonar-server/src/main/java/org/sonar/server/measure/ws/ComponentTreeDataLoader.java
server/sonar-server/src/test/java/org/sonar/server/component/ws/TreeActionTest.java
server/sonar-server/src/test/java/org/sonar/server/measure/ws/ComponentTreeActionTest.java

index af421eb21b8ecda78392c9533593f4af3ebc77dc..83619f1b501ce9df56972187390ff1b6f469199f 100644 (file)
@@ -275,9 +275,9 @@ public class TreeAction implements ComponentsWsAction {
       return requestQualifiers;
     }
 
-    Sets.SetView<String> intersectQualifiers = Sets.intersection(newHashSet(childrenQualifiers), newHashSet(requestQualifiers));
+    Sets.SetView<String> qualifiersIntersection = Sets.intersection(newHashSet(childrenQualifiers), newHashSet(requestQualifiers));
 
-    return new ArrayList<>(intersectQualifiers);
+    return new ArrayList<>(qualifiersIntersection);
   }
 
   private static TreeWsRequest toTreeWsRequest(Request request) {
index c1e084147842c2e38fb57399a1edec6baa4e56c1..37fbaec12c1e0ea6578e94903554eb63cdda787f 100644 (file)
@@ -242,6 +242,7 @@ 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 metricSortValue = componentTreeWsRequest.getMetricSort();
     checkRequest(!componentTreeWsRequest.getMetricKeys().isEmpty(), "The '%s' parameter must contain at least one metric key", PARAM_METRIC_KEYS);
     checkRequest(metricSortValue == null ^ componentTreeWsRequest.getSort().contains(METRIC_SORT),
index 79d26ae7666ab47c2a4c38fae93b8939885eb71b..3bb6254614a0721d3e73ae7cc092ccd74e0bda9b 100644 (file)
@@ -31,6 +31,7 @@ import com.google.common.collect.Sets;
 import com.google.common.collect.Table;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -296,10 +297,9 @@ public class ComponentTreeDataLoader {
       return requestQualifiers;
     }
 
-    // intersection of request and children qualifiers
-    childrenQualifiers.retainAll(requestQualifiers);
+    Sets.SetView<String> qualifiersIntersection = Sets.intersection(new HashSet<>(childrenQualifiers), new HashSet<Object>(requestQualifiers));
 
-    return childrenQualifiers;
+    return new ArrayList<>(qualifiersIntersection);
   }
 
   private ComponentTreeQuery toComponentTreeQuery(ComponentTreeWsRequest wsRequest, SnapshotDto baseSnapshot) {
index bcb08222ea4d4cae58d79494c13c5ecd271b4ee1..b2616105467caea506a91779e012759565c7ca19 100644 (file)
@@ -89,7 +89,7 @@ public class TreeActionTest {
     userSession.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
     ws = new WsActionTester(new TreeAction(dbClient, new ComponentFinder(dbClient), resourceTypes, userSession, Mockito.mock(I18n.class)));
     resourceTypes.setChildrenQualifiers(Qualifiers.MODULE, Qualifiers.FILE, Qualifiers.DIRECTORY);
-    resourceTypes.setLeavesQualifiers(Qualifiers.FILE);
+    resourceTypes.setLeavesQualifiers(Qualifiers.FILE, Qualifiers.UNIT_TEST_FILE);
   }
 
   @Test
index 2c55552ce10095957fb4edfd7968646f43819d07..b466058fdaa08a99e4586056d3d1581416cec912 100644 (file)
@@ -75,6 +75,8 @@ import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_ADDITIO
 import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_BASE_COMPONENT_ID;
 import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_METRIC_KEYS;
 import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_METRIC_SORT;
+import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_QUALIFIERS;
+import static org.sonarqube.ws.client.measure.MeasuresWsParameters.PARAM_STRATEGY;
 
 @Category(DbTests.class)
 public class ComponentTreeActionTest {
@@ -99,6 +101,8 @@ public class ComponentTreeActionTest {
   @Before
   public void setUp() {
     userSession.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
+    resourceTypes.setChildrenQualifiers(Qualifiers.MODULE, Qualifiers.FILE, Qualifiers.DIRECTORY);
+    resourceTypes.setLeavesQualifiers(Qualifiers.FILE, Qualifiers.UNIT_TEST_FILE);
   }
 
   @Test
@@ -237,6 +241,8 @@ public class ComponentTreeActionTest {
       .setParam(Param.SORT, NAME_SORT + ", " + METRIC_SORT)
       .setParam(PARAM_METRIC_SORT, "coverage")
       .setParam(PARAM_METRIC_KEYS, "coverage")
+      .setParam(PARAM_STRATEGY, "leaves")
+      .setParam(PARAM_QUALIFIERS, "FIL,UTS")
       .setParam(Param.PAGE, "2")
       .setParam(Param.PAGE_SIZE, "3"));
 
@@ -349,6 +355,19 @@ public class ComponentTreeActionTest {
       .setParam(Param.SORT, METRIC_SORT));
   }
 
+  @Test
+  public void fail_when_paging_parameter_is_too_big() {
+    componentDb.insertProjectAndSnapshot(newProjectDto("project-uuid"));
+    insertNclocMetric();
+    expectedException.expect(BadRequestException.class);
+    expectedException.expectMessage("The 'ps' parameter must be less than 500");
+
+    call(ws.newRequest()
+      .setParam(PARAM_BASE_COMPONENT_ID, "project-uuid")
+      .setParam(PARAM_METRIC_KEYS, "ncloc")
+      .setParam(Param.PAGE_SIZE, "2540"));
+  }
+
   private static ComponentTreeWsResponse call(TestRequest request) {
     TestResponse testResponse = request
       .setMediaType(MediaTypes.PROTOBUF)