aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon.hallingstad@gmail.com>2023-05-15 10:47:12 +0200
committerGitHub <noreply@github.com>2023-05-15 10:47:12 +0200
commit66eee692f6fe2f78bdf5f4f9383fadd2774ca931 (patch)
tree5c0b1eb938d9709cfb50221e93579f99483b7fb9
parenta9cf0db43a852ef7f43e275af582786a2be62009 (diff)
parent45993307d0b6d0c52038df02a3ae20cd6af1902b (diff)
Merge pull request #27082 from vespa-engine/hakonhall/validate-deserialization-instead-of-serialization
Validate deserialization instead of serialization
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/UnboundStringFlag.java13
-rw-r--r--flags/src/test/java/com/yahoo/vespa/flags/PermanentFlagsTest.java28
2 files changed, 35 insertions, 6 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/UnboundStringFlag.java b/flags/src/main/java/com/yahoo/vespa/flags/UnboundStringFlag.java
index 9c69e917fa6..a7b90885363 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/UnboundStringFlag.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/UnboundStringFlag.java
@@ -27,12 +27,13 @@ public class UnboundStringFlag extends UnboundFlagImpl<String, StringFlag, Unbou
public UnboundStringFlag(FlagId id, String defaultValue, FetchVector fetchVector, Predicate<String> validator) {
this(id, defaultValue, fetchVector,
- new SimpleFlagSerializer<>(stringValue -> {
- if (!validator.test(stringValue))
- throw new IllegalArgumentException("Invalid value: '" + stringValue + "'");
- return new TextNode(stringValue);
- },
- JsonNode::isTextual, JsonNode::asText));
+ new SimpleFlagSerializer<>(TextNode::new,
+ JsonNode::isTextual,
+ jsonNode -> {
+ if (!validator.test(jsonNode.asText()))
+ throw new IllegalArgumentException("Invalid value: '" + jsonNode.asText() + "'");
+ return jsonNode.asText();
+ }));
}
public UnboundStringFlag(FlagId id, String defaultValue, FetchVector defaultFetchVector,
diff --git a/flags/src/test/java/com/yahoo/vespa/flags/PermanentFlagsTest.java b/flags/src/test/java/com/yahoo/vespa/flags/PermanentFlagsTest.java
index 903b0d899e2..c4fa8ac7e1b 100644
--- a/flags/src/test/java/com/yahoo/vespa/flags/PermanentFlagsTest.java
+++ b/flags/src/test/java/com/yahoo/vespa/flags/PermanentFlagsTest.java
@@ -3,11 +3,15 @@ package com.yahoo.vespa.flags;
import com.yahoo.vespa.flags.custom.HostResources;
import com.yahoo.vespa.flags.custom.SharedHost;
+import com.yahoo.vespa.flags.json.FlagData;
import org.junit.jupiter.api.Test;
import java.util.List;
import static com.yahoo.vespa.flags.FlagsTest.testGeneric;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* @author bjorncs
@@ -21,4 +25,28 @@ class PermanentFlagsTest {
testGeneric(PermanentFlags.SHARED_HOST, sharedHost);
}
+ @Test
+ void wantedDockerTagValidation() {
+ IllegalArgumentException illegalArgumentException = assertThrows(
+ IllegalArgumentException.class,
+ () -> wantedDockerTagFlagData("do.not.work").validate(PermanentFlags.WANTED_DOCKER_TAG.serializer()));
+ assertThat(illegalArgumentException.getMessage(), equalTo("Invalid value: 'do.not.work'"));
+
+ wantedDockerTagFlagData("a").validate(PermanentFlags.WANTED_DOCKER_TAG.serializer());
+ wantedDockerTagFlagData("8.1.2").validate(PermanentFlags.WANTED_DOCKER_TAG.serializer());
+ }
+
+ private static FlagData wantedDockerTagFlagData(String value) {
+ return FlagData.deserialize("""
+ {
+ "id": "wanted-docker-tag",
+ "rules": [
+ {
+ "value": "%s"
+ }
+ ]
+ }
+ """.formatted(value));
+ }
+
}