SONAR-9963 WS api/metrics/update fails properly if domain is longer than 64 characters

This commit is contained in:
Teryk Bellahsene 2017-10-12 17:29:22 +02:00 committed by Teryk Bellahsene
parent e124398d3d
commit 7f61d01d4f
3 changed files with 36 additions and 12 deletions

View 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;
}

View File

@ -26,23 +26,24 @@ import javax.annotation.Nullable;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Strings.isNullOrEmpty;
public class MetricDtoValidator {
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 MetricDtoValidator() {
private MetricValidator() {
// static utility methods only
}
static String validateKey(String key) {
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;
}
static String validateShortName(String name) {
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);
@ -50,7 +51,7 @@ public class MetricDtoValidator {
}
@CheckForNull
static String validateDescription(@Nullable String description) {
public static String checkMetricDescription(@Nullable String description) {
if (description == null) {
return null;
}
@ -60,4 +61,16 @@ public class MetricDtoValidator {
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;
}
}

View 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);
}
}