diff options
3 files changed, 25 insertions, 19 deletions
diff --git a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java b/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java index 4f2d5ae13d4..75a66d581a0 100644 --- a/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java +++ b/configserver-flags/src/test/java/com/yahoo/vespa/configserver/flags/db/FlagsDbImplTest.java @@ -11,12 +11,10 @@ import com.yahoo.vespa.flags.json.Rule; import com.yahoo.vespa.flags.json.WhitelistCondition; import org.junit.Test; -import java.util.List; import java.util.Map; import java.util.Optional; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertEquals; @@ -32,7 +30,7 @@ public class FlagsDbImplTest { MockCurator curator = new MockCurator(); FlagsDbImpl db = new FlagsDbImpl(curator); - var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME, List.of("host1"), Optional.empty()); + var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME).setValues("host1"); Condition condition1 = WhitelistCondition.create(params); Rule rule1 = new Rule(Optional.of(JsonNodeRawFlag.fromJson("13")), condition1); FlagId flagId = new FlagId("id"); diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/Condition.java b/flags/src/main/java/com/yahoo/vespa/flags/json/Condition.java index 96dbc8197c1..93ccb773de6 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/json/Condition.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/json/Condition.java @@ -33,13 +33,20 @@ public interface Condition extends Predicate<FetchVector> { class CreateParams { private final FetchVector.Dimension dimension; - private final List<String> values; - private final Optional<String> predicate; + private List<String> values = List.of(); + private Optional<String> predicate = Optional.empty(); - public CreateParams(FetchVector.Dimension dimension, List<String> values, Optional<String> predicate) { - this.dimension = Objects.requireNonNull(dimension); - this.values = Objects.requireNonNull(values); - this.predicate = Objects.requireNonNull(predicate); + public CreateParams(FetchVector.Dimension dimension) { this.dimension = Objects.requireNonNull(dimension); } + + public CreateParams setValues(String... values) { return setValues(List.of(values)); } + public CreateParams setValues(List<String> values) { + this.values = List.copyOf(values); + return this; + } + + public CreateParams setPredicate(String predicate) { + this.predicate = Optional.of(predicate); + return this; } public FetchVector.Dimension dimension() { return dimension; } @@ -53,11 +60,15 @@ public interface Condition extends Predicate<FetchVector> { Objects.requireNonNull(wireCondition.dimension); FetchVector.Dimension dimension = DimensionHelper.fromWire(wireCondition.dimension); + var params = new CreateParams(dimension); - List<String> values = wireCondition.values == null ? List.of() : wireCondition.values; - Optional<String> predicate = Optional.ofNullable(wireCondition.predicate); + if (wireCondition.values != null) { + params.setValues(wireCondition.values); + } - var params = new CreateParams(dimension, values, predicate); + if (wireCondition.predicate != null) { + params.setPredicate(wireCondition.predicate); + } switch (type) { case WHITELIST: return WhitelistCondition.create(params); 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 618bc86baaf..b46828b6691 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,6 @@ package com.yahoo.vespa.flags.json; import com.yahoo.vespa.flags.FetchVector; import org.junit.Test; -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; @@ -18,7 +15,7 @@ public class ConditionTest { @Test public void testWhitelist() { String hostname1 = "host1"; - var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME, List.of(hostname1), Optional.empty()); + var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME).setValues(hostname1); Condition condition = WhitelistCondition.create(params); assertFalse(condition.test(new FetchVector())); assertFalse(condition.test(new FetchVector().with(FetchVector.Dimension.APPLICATION_ID, "foo"))); @@ -29,7 +26,7 @@ public class ConditionTest { @Test public void testBlacklist() { String hostname1 = "host1"; - var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME, List.of(hostname1), Optional.empty()); + var params = new Condition.CreateParams(FetchVector.Dimension.HOSTNAME).setValues(hostname1); Condition condition = BlacklistCondition.create(params); assertTrue(condition.test(new FetchVector())); assertTrue(condition.test(new FetchVector().with(FetchVector.Dimension.APPLICATION_ID, "foo"))); @@ -47,7 +44,7 @@ public class ConditionTest { // 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")); + var params = new Condition.CreateParams(FetchVector.Dimension.VESPA_VERSION).setPredicate(">=7.1.2"); Condition condition = RelationalCondition.create(params); assertFalse(condition.test(new FetchVector())); } @@ -59,7 +56,7 @@ public class ConditionTest { } private boolean vespaVersionCondition(String vespaVersion, String predicate) { - var params = new Condition.CreateParams(FetchVector.Dimension.VESPA_VERSION, List.of(), Optional.of(predicate)); + var params = new Condition.CreateParams(FetchVector.Dimension.VESPA_VERSION).setPredicate(predicate); Condition condition = RelationalCondition.create(params); return condition.test(new FetchVector().with(FetchVector.Dimension.VESPA_VERSION, vespaVersion)); } |