diff options
author | HÃ¥kon Hallingstad <hakon.hallingstad@gmail.com> | 2019-10-23 11:13:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-23 11:13:01 +0200 |
commit | 64d27e4723082ab8e2d7c61a6b61abd3081ea79a (patch) | |
tree | 4c301e8d039458c9e84645e3f1c001ffdc9d5d19 /flags/src/test | |
parent | dfec83cec5f464b09b72fc48ff1a5e114523aded (diff) |
Revert "Revert "Support flag conditions based on Vespa release ""
Diffstat (limited to 'flags/src/test')
-rw-r--r-- | flags/src/test/java/com/yahoo/vespa/flags/json/ConditionTest.java | 40 | ||||
-rw-r--r-- | flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java | 12 |
2 files changed, 45 insertions, 7 deletions
diff --git a/flags/src/test/java/com/yahoo/vespa/flags/json/ConditionTest.java b/flags/src/test/java/com/yahoo/vespa/flags/json/ConditionTest.java index d19442ae0f0..618bc86baaf 100644 --- a/flags/src/test/java/com/yahoo/vespa/flags/json/ConditionTest.java +++ b/flags/src/test/java/com/yahoo/vespa/flags/json/ConditionTest.java @@ -4,9 +4,10 @@ package com.yahoo.vespa.flags.json; import com.yahoo.vespa.flags.FetchVector; import org.junit.Test; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.List; +import java.util.Optional; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -17,8 +18,8 @@ public class ConditionTest { @Test public void testWhitelist() { String hostname1 = "host1"; - Condition condition = new Condition(Condition.Type.WHITELIST, FetchVector.Dimension.HOSTNAME, - Stream.of(hostname1).collect(Collectors.toList())); + var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME, List.of(hostname1), Optional.empty()); + Condition condition = WhitelistCondition.create(params); assertFalse(condition.test(new FetchVector())); assertFalse(condition.test(new FetchVector().with(FetchVector.Dimension.APPLICATION_ID, "foo"))); assertFalse(condition.test(new FetchVector().with(FetchVector.Dimension.HOSTNAME, "bar"))); @@ -28,11 +29,38 @@ public class ConditionTest { @Test public void testBlacklist() { String hostname1 = "host1"; - Condition condition = new Condition(Condition.Type.BLACKLIST, FetchVector.Dimension.HOSTNAME, - Stream.of(hostname1).collect(Collectors.toList())); + var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME, List.of(hostname1), Optional.empty()); + Condition condition = BlacklistCondition.create(params); assertTrue(condition.test(new FetchVector())); assertTrue(condition.test(new FetchVector().with(FetchVector.Dimension.APPLICATION_ID, "foo"))); assertTrue(condition.test(new FetchVector().with(FetchVector.Dimension.HOSTNAME, "bar"))); assertFalse(condition.test(new FetchVector().with(FetchVector.Dimension.HOSTNAME, hostname1))); } + + @Test + public void testRelational() { + verifyVespaVersionFor("<", true, false, false); + verifyVespaVersionFor("<=", true, true, false); + verifyVespaVersionFor(">", false, false, true); + verifyVespaVersionFor(">=", false, true, true); + + // Test with empty fetch vector along vespa version dimension (this should never happen as the + // version is always available through Vtag, although Vtag has a dummy version number for e.g. + // locally run unit tests that hasn't set the release Vespa version). + var params = new Condition.CreateParams(FetchVector.Dimension.VESPA_VERSION, List.of(), Optional.of(">=7.1.2")); + Condition condition = RelationalCondition.create(params); + assertFalse(condition.test(new FetchVector())); + } + + private void verifyVespaVersionFor(String operator, boolean whenLess, boolean whenEqual, boolean whenGreater) { + assertEquals(whenLess, vespaVersionCondition("7.2.4", operator + "7.3.4")); + assertEquals(whenEqual, vespaVersionCondition("7.3.4", operator + "7.3.4")); + assertEquals(whenGreater, vespaVersionCondition("7.4.4", operator + "7.3.4")); + } + + private boolean vespaVersionCondition(String vespaVersion, String predicate) { + var params = new Condition.CreateParams(FetchVector.Dimension.VESPA_VERSION, List.of(), Optional.of(predicate)); + Condition condition = RelationalCondition.create(params); + return condition.test(new FetchVector().with(FetchVector.Dimension.VESPA_VERSION, vespaVersion)); + } } 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 b0e4cd0f682..8326b14fcbf 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 @@ -48,6 +48,11 @@ public class SerializationTest { " \"type\": \"blacklist\",\n" + " \"dimension\": \"hostname\",\n" + " \"values\": [ \"h1\" ]\n" + + " },\n" + + " {\n" + + " \"type\": \"relational\",\n" + + " \"dimension\": \"vespa-version\",\n" + + " \"predicate\": \">=7.3.4\"\n" + " }\n" + " ],\n" + " \"value\": true\n" + @@ -66,7 +71,7 @@ public class SerializationTest { assertThat(wireData.id, equalTo("id2")); // rule assertThat(wireData.rules.size(), equalTo(1)); - assertThat(wireData.rules.get(0).andConditions.size(), equalTo(2)); + assertThat(wireData.rules.get(0).andConditions.size(), equalTo(3)); assertThat(wireData.rules.get(0).value.getNodeType(), equalTo(JsonNodeType.BOOLEAN)); assertThat(wireData.rules.get(0).value.asBoolean(), equalTo(true)); // first condition @@ -79,6 +84,11 @@ public class SerializationTest { assertThat(blacklistCondition.type, equalTo("blacklist")); assertThat(blacklistCondition.dimension, equalTo("hostname")); assertThat(blacklistCondition.values, equalTo(List.of("h1"))); + // third condition + WireCondition relationalCondition = wireData.rules.get(0).andConditions.get(2); + assertThat(relationalCondition.type, equalTo("relational")); + assertThat(relationalCondition.dimension, equalTo("vespa-version")); + assertThat(relationalCondition.predicate, equalTo(">=7.3.4")); // attributes assertThat(wireData.defaultFetchVector, notNullValue()); |