summaryrefslogtreecommitdiffstats
path: root/flags
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2023-08-01 16:30:40 +0200
committerHåkon Hallingstad <hakon@yahooinc.com>2023-08-01 16:30:40 +0200
commitae86f6951daa412bbad509ff06998bb66b632cae (patch)
treedab6b9ee612d8de7aa7214af3edfdfc4263cf013 /flags
parentc456d738b06daf9d04b3cb8c43c82e33dcd06860 (diff)
Remove trailing conditionless null-valued rules
Diffstat (limited to 'flags')
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java10
-rw-r--r--flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java24
2 files changed, 34 insertions, 0 deletions
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java b/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
index acda3b9db42..8a5366c65e2 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java
@@ -70,6 +70,16 @@ public class FlagData {
}
}
+ // Remove trailing rules that have no conditions and no value to apply.
+ while (newRules.size() > 0) {
+ Rule lastRule = newRules.get(newRules.size() - 1);
+ if (lastRule.conditions().isEmpty() && lastRule.getValueToApply().isEmpty()) {
+ newRules.remove(newRules.size() - 1);
+ } else {
+ break;
+ }
+ }
+
FetchVector newDefaultFetchVector = defaultFetchVector.without(fetchVector.dimensions());
return new FlagData(id, newDefaultFetchVector, newRules);
diff --git a/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java b/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java
index c7da1abe7e2..4ec0ea0652f 100644
--- a/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java
+++ b/flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java
@@ -5,6 +5,7 @@ import com.yahoo.vespa.flags.FetchVector;
import com.yahoo.vespa.flags.RawFlag;
import org.junit.jupiter.api.Test;
+import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -212,6 +213,29 @@ public class FlagDataTest {
assertTrue(fullyResolved.isEmpty());
}
+ @Test
+ void testRemovalOfSentinelRuleWithNullValue() {
+ FlagData data = FlagData.deserialize("""
+ {
+ "id": "id1",
+ "rules": [
+ {
+ "conditions": [
+ {
+ "type": "whitelist",
+ "dimension": "zone",
+ "values": [ "zone1", "zone2" ]
+ }
+ ],
+ "value": null
+ }
+ ]
+ }""");
+ FlagData flagData = data.partialResolve(vector.with(FetchVector.Dimension.ZONE_ID, "zone3"));
+ assertEquals(flagData, new FlagData(data.id(), new FetchVector(), List.of()));
+ assertTrue(flagData.isEmpty());
+ }
+
private void verify(Optional<String> expectedValue, FetchVector vector) {
FlagData data = FlagData.deserialize(json);
assertEquals("id1", data.id().toString());