From 40fcc3b5a45a441fd9a08ed84fd53d6209e056e2 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Thu, 26 Jul 2018 23:24:40 +0200 Subject: [PATCH] SONAR-11077 ignore unsupported characteristics in WS api/ce/submit --- .../java/org/sonar/db/ce/CeTaskCharacteristicDto.java | 7 +++++++ .../main/java/org/sonar/server/ce/ws/SubmitAction.java | 5 ++++- .../java/org/sonar/server/ce/ws/SubmitActionTest.java | 10 +++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskCharacteristicDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskCharacteristicDto.java index 1be8ca7416f..01d6512d2ae 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskCharacteristicDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskCharacteristicDto.java @@ -19,11 +19,18 @@ */ package org.sonar.db.ce; +import java.util.HashSet; +import java.util.Set; + +import static java.util.Arrays.asList; +import static java.util.Collections.unmodifiableSet; + public class CeTaskCharacteristicDto { public static final String BRANCH_KEY = "branch"; public static final String BRANCH_TYPE_KEY = "branchType"; public static final String PULL_REQUEST = "pullRequest"; + public static final Set SUPPORTED_KEYS = unmodifiableSet(new HashSet<>(asList(BRANCH_KEY, BRANCH_TYPE_KEY, PULL_REQUEST))); private String uuid; private String taskUuid; diff --git a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/SubmitAction.java b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/SubmitAction.java index d4754b76a9b..e37e0aec33a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ce/ws/SubmitAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ce/ws/SubmitAction.java @@ -28,6 +28,7 @@ import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.ce.task.CeTask; +import org.sonar.db.ce.CeTaskCharacteristicDto; import org.sonar.server.ce.queue.ReportSubmitter; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.ws.WsUtils; @@ -133,7 +134,9 @@ public class SubmitAction implements CeWsAction { String[] pair = StringUtils.split(param, "=", 2); checkRequest(pair.length == 2, "Parameter '%s' must be a key-value pair with the format 'key=value'.", PARAM_ANALYSIS_CHARACTERISTIC); checkRequest(!characteristics.containsKey(pair[0]), "Key '%s' was provided twice with parameters '%s'", pair[0], PARAM_ANALYSIS_CHARACTERISTIC); - characteristics.put(pair[0], pair[1]); + if (CeTaskCharacteristicDto.SUPPORTED_KEYS.contains(pair[0])) { + characteristics.put(pair[0], pair[1]); + } } return characteristics; } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java index 95b97a3eb44..59813b50e21 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ce/ws/SubmitActionTest.java @@ -21,7 +21,6 @@ package org.sonar.server.ce.ws; import com.google.common.base.Strings; import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -94,11 +93,11 @@ public class SubmitActionTest { } @Test - public void submit_task_with_multiple_characteristics() { + public void submit_task_with_characteristics() { when(reportSubmitter.submit(eq(organizationKey), eq("my_project"), isNull(), eq("My Project"), anyMap(), any())).thenReturn(A_CE_TASK); - String[] characteristics = {"branch=branch1", "key=value1=value2"}; + String[] characteristics = {"branch=foo", "pullRequest=123", "unsupported=bar"}; Ce.SubmitResponse submitResponse = tester.newRequest() .setParam("projectKey", "my_project") .setParam("projectName", "My Project") @@ -109,9 +108,10 @@ public class SubmitActionTest { assertThat(submitResponse.getTaskId()).isEqualTo("TASK_1"); verify(reportSubmitter).submit(eq(organizationKey), eq("my_project"), isNull(), eq("My Project"), - map.capture(), any(InputStream.class)); + map.capture(), any()); - assertThat(map.getValue()).containsOnly(entry("branch", "branch1"), entry("key", "value1=value2")); + // unsupported characteristics are ignored + assertThat(map.getValue()).containsExactly(entry("branch", "foo"), entry("pullRequest", "123")); } @Test -- 2.39.5