aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2023-05-11 14:49:39 +0200
committerHåkon Hallingstad <hakon@yahooinc.com>2023-05-11 14:49:39 +0200
commit7785e76e2b1bb466e962e5021df452048d07928b (patch)
tree44d7f32094162b17feb3960bb6940860834e3b56
parent579fb87fca4711b98a68aecb8b2efaacbeb2910f (diff)
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/FlagsTest.java1
-rw-r--r--flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java19
3 files changed, 27 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/FlagsTest.java b/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java
index 3edde140de8..52db6399a88 100644
--- a/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java
+++ b/flags/src/test/java/com/yahoo/vespa/flags/FlagsTest.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.flags;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.node.BooleanNode;
+import com.yahoo.vespa.flags.json.FlagData;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
diff --git a/flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java b/flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java
index 2cc19917793..eccc546ebfc 100644
--- a/flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java
+++ b/flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.flags.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
+import com.yahoo.vespa.flags.PermanentFlags;
import com.yahoo.vespa.flags.json.wire.WireCondition;
import com.yahoo.vespa.flags.json.wire.WireFlagData;
import org.junit.jupiter.api.Test;
@@ -14,6 +15,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
@@ -142,4 +144,21 @@ public class SerializationTest {
assertThat(FlagData.deserialize(json).serializeToJson(), equalTo("{\"id\":\"id3\",\"rules\":[{\"conditions\":[{\"type\":\"whitelist\",\"dimension\":\"zone\"}]}]}"));
}
+
+ @Test
+ void validation() {
+ FlagData data = FlagData.deserialize("""
+ {
+ "id": "wanted-docker-tag",
+ "rules": [
+ {
+ "value": "do.not.work"
+ }
+ ]
+ }
+ """);
+ IllegalArgumentException illegalArgumentException =
+ assertThrows(IllegalArgumentException.class, () -> data.validate(PermanentFlags.WANTED_DOCKER_TAG.serializer()));
+ assertThat(illegalArgumentException.getMessage(), equalTo("Invalid value: 'do.not.work'"));
+ }
}