summaryrefslogtreecommitdiffstats
path: root/flags/src/test
diff options
context:
space:
mode:
authorHÃ¥kon Hallingstad <hakon.hallingstad@gmail.com>2019-10-23 11:13:01 +0200
committerGitHub <noreply@github.com>2019-10-23 11:13:01 +0200
commit64d27e4723082ab8e2d7c61a6b61abd3081ea79a (patch)
tree4c301e8d039458c9e84645e3f1c001ffdc9d5d19 /flags/src/test
parentdfec83cec5f464b09b72fc48ff1a5e114523aded (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.java40
-rw-r--r--flags/src/test/java/com/yahoo/vespa/flags/json/SerializationTest.java12
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());