]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9963 WS api/metrics/update fails properly if domain is longer than 64 characters
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 12 Oct 2017 15:29:22 +0000 (17:29 +0200)
committerTeryk Bellahsene <teryk@users.noreply.github.com>
Mon, 16 Oct 2017 07:27:14 +0000 (09:27 +0200)
server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDto.java
server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricDtoValidator.java [deleted file]
server/sonar-db-dao/src/main/java/org/sonar/db/metric/MetricValidator.java [new file with mode: 0644]
server/sonar-db-dao/src/test/java/org/sonar/db/metric/MetricDtoTest.java

index 7a62894bbb29ad67db45af6570aa9804ab06ae30..0f000cdd33d1200d199c0675251a64eacad4eec9 100644 (file)
@@ -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 (file)
index 96069dd..0000000
+++ /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 (file)
index 0000000..3440c87
--- /dev/null
@@ -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;
+  }
+}
index 41a2cb454cd4f5fd66c80c3a4a694742ce3ae4f6..5058baadda488f0d7038c85352288459423972bd 100644 (file)
@@ -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);
+  }
 }