diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2023-05-11 14:49:39 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2023-05-11 14:49:39 +0200 |
commit | 7785e76e2b1bb466e962e5021df452048d07928b (patch) | |
tree | 44d7f32094162b17feb3960bb6940860834e3b56 | |
parent | 579fb87fca4711b98a68aecb8b2efaacbeb2910f (diff) |
Validate deserialization instead of serialization
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'")); + } } |