From: Teryk Bellahsene Date: Thu, 12 Oct 2017 15:29:22 +0000 (+0200) Subject: SONAR-9963 WS api/metrics/update fails properly if domain is longer than 64 characters X-Git-Tag: 6.7-RC1~274 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7f61d01d4fee20274e53f93c8fcbfd29f6f273be;p=sonarqube.git SONAR-9963 WS api/metrics/update fails properly if domain is longer than 64 characters --- diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java index 7a62894bbb2..0f000cdd33d 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java @@ -25,9 +25,10 @@ import javax.annotation.Nullable; import static org.sonar.api.measures.Metric.ValueType.DATA; import static org.sonar.api.measures.Metric.ValueType.DISTRIB; import static org.sonar.api.measures.Metric.ValueType.STRING; -import static org.sonar.db.metric.MetricDtoValidator.validateDescription; -import static org.sonar.db.metric.MetricDtoValidator.validateKey; -import static org.sonar.db.metric.MetricDtoValidator.validateShortName; +import static org.sonar.db.metric.MetricValidator.checkMetricDescription; +import static org.sonar.db.metric.MetricValidator.checkMetricDomain; +import static org.sonar.db.metric.MetricValidator.checkMetricKey; +import static org.sonar.db.metric.MetricValidator.checkMetricName; public class MetricDto { @@ -77,7 +78,7 @@ public class MetricDto { } public MetricDto setKey(String key) { - this.kee = validateKey(key); + this.kee = checkMetricKey(key); return this; } @@ -86,7 +87,7 @@ public class MetricDto { } public MetricDto setShortName(String shortName) { - this.shortName = validateShortName(shortName); + this.shortName = checkMetricName(shortName); return this; } @@ -108,7 +109,7 @@ public class MetricDto { } public MetricDto setDescription(@Nullable String description) { - this.description = validateDescription(description); + this.description = checkMetricDescription(description); return this; } @@ -118,7 +119,7 @@ public class MetricDto { } public MetricDto setDomain(@Nullable String domain) { - this.domain = domain; + this.domain = checkMetricDomain(domain); return this; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java deleted file mode 100644 index 96069dd6a07..00000000000 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.sonar.db.metric; - -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Strings.isNullOrEmpty; - -public class MetricDtoValidator { - private static final int MAX_KEY_LENGTH = 64; - private static final int MAX_NAME_LENGTH = 64; - private static final int MAX_DESCRIPTION_LENGTH = 255; - - private MetricDtoValidator() { - // static utility methods only - } - - static String validateKey(String key) { - checkArgument(!isNullOrEmpty(key), "Metric key cannot be empty"); - checkArgument(key.length() <= MAX_NAME_LENGTH, "Metric key length (%s) is longer than the maximum authorized (%s). '%s' was provided.", - key.length(), MAX_KEY_LENGTH, key); - return key; - } - - static String validateShortName(String name) { - checkArgument(!isNullOrEmpty(name), "Metric name cannot be empty"); - checkArgument(name.length() <= MAX_NAME_LENGTH, "Metric name length (%s) is longer than the maximum authorized (%s). '%s' was provided.", - name.length(), MAX_NAME_LENGTH, name); - return name; - } - - @CheckForNull - static String validateDescription(@Nullable String description) { - if (description == null) { - return null; - } - - checkArgument(description.length() <= MAX_DESCRIPTION_LENGTH, "Metric description length (%s) is longer than the maximum authorized (%s). '%s' was provided.", - description.length(), MAX_DESCRIPTION_LENGTH, description); - - return description; - } -} diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java new file mode 100644 index 00000000000..3440c871aad --- /dev/null +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java @@ -0,0 +1,76 @@ +/* + * 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.sonar.db.metric; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Strings.isNullOrEmpty; + +public class MetricValidator { + private static final int MAX_KEY_LENGTH = 64; + private static final int MAX_NAME_LENGTH = 64; + private static final int MAX_DOMAIN_LENGTH = 64; + private static final int MAX_DESCRIPTION_LENGTH = 255; + + private MetricValidator() { + // static utility methods only + } + + public static String checkMetricKey(String key) { + checkArgument(!isNullOrEmpty(key), "Metric key cannot be empty"); + checkArgument(key.length() <= MAX_NAME_LENGTH, "Metric key length (%s) is longer than the maximum authorized (%s). '%s' was provided.", + key.length(), MAX_KEY_LENGTH, key); + return key; + } + + public static String checkMetricName(String name) { + checkArgument(!isNullOrEmpty(name), "Metric name cannot be empty"); + checkArgument(name.length() <= MAX_NAME_LENGTH, "Metric name length (%s) is longer than the maximum authorized (%s). '%s' was provided.", + name.length(), MAX_NAME_LENGTH, name); + return name; + } + + @CheckForNull + public static String checkMetricDescription(@Nullable String description) { + if (description == null) { + return null; + } + + checkArgument(description.length() <= MAX_DESCRIPTION_LENGTH, "Metric description length (%s) is longer than the maximum authorized (%s). '%s' was provided.", + description.length(), MAX_DESCRIPTION_LENGTH, description); + + return description; + } + + @CheckForNull + public static String checkMetricDomain(@Nullable String domain) { + if (domain == null) { + return null; + } + + checkArgument(domain.length() <= MAX_DOMAIN_LENGTH, "Metric domain length (%s) is longer than the maximum authorized (%s). '%s' was provided.", + domain.length(), MAX_DOMAIN_LENGTH, domain); + + return domain; + } +} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java index 41a2cb454cd..5058baadda4 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java @@ -109,4 +109,14 @@ public class MetricDtoTest { underTest.setDescription(a256); } + + @Test + public void fail_if_domain_longer_than_64_characters() { + String a65 = repeat("a", 65); + + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("Metric domain length (65) is longer than the maximum authorized (64). '" + a65 + "' was provided."); + + underTest.setDomain(a65); + } }