diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2023-08-01 16:30:40 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2023-08-01 16:30:40 +0200 |
commit | ae86f6951daa412bbad509ff06998bb66b632cae (patch) | |
tree | dab6b9ee612d8de7aa7214af3edfdfc4263cf013 /flags | |
parent | c456d738b06daf9d04b3cb8c43c82e33dcd06860 (diff) |
Remove trailing conditionless null-valued rules
Diffstat (limited to 'flags')
-rw-r--r-- | flags/src/main/java/com/yahoo/vespa/flags/json/FlagData.java | 10 | ||||
-rw-r--r-- | flags/src/test/java/com/yahoo/vespa/flags/json/FlagDataTest.java | 24 |
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()); |