From cd96c0a157c55c2c9cbc15a4fcbff3c8a1cbfcea Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 11 Jul 2025 12:03:19 -0700 Subject: [PATCH] Fixed RBS cache contains method --- .../memory/RuleBasedSegmentCacheInMemoryImp.java | 2 +- ...UserCustomRuleBasedSegmentAdapterConsumer.java | 2 +- .../RuleBasedSegmentCacheInMemoryImplTest.java | 6 ++++++ ...CustomRuleBasedSegmentAdapterConsumerTest.java | 15 +++++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/client/src/main/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImp.java b/client/src/main/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImp.java index 53730cf9..660811ca 100644 --- a/client/src/main/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImp.java +++ b/client/src/main/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImp.java @@ -104,6 +104,6 @@ public Set getSegments() { @Override public boolean contains(Set ruleBasedSegmentNames) { - return getSegments().containsAll(ruleBasedSegmentNames); + return _concurrentMap.keySet().containsAll(ruleBasedSegmentNames); } } \ No newline at end of file diff --git a/client/src/main/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumer.java b/client/src/main/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumer.java index 438b7bf8..b04e4976 100644 --- a/client/src/main/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumer.java +++ b/client/src/main/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumer.java @@ -96,7 +96,7 @@ private List stringsToParsedRuleBasedSegments(List ruleBasedSegmentNames) { - return getSegments().containsAll(ruleBasedSegmentNames); + return _userStorageWrapper.getKeysByPrefix(PrefixAdapter.buildGetAllRuleBasedSegment()).containsAll(ruleBasedSegmentNames); } } \ No newline at end of file diff --git a/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java b/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java index 32487bf5..492cc8ae 100644 --- a/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java +++ b/client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java @@ -16,6 +16,8 @@ import com.google.common.collect.Lists; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; public class RuleBasedSegmentCacheInMemoryImplTest extends TestCase { @@ -31,6 +33,8 @@ public void testAddAndDeleteSegment(){ ruleBasedSegmentCache.update(Lists.newArrayList(parsedRuleBasedSegment), null, 123); assertEquals(123, ruleBasedSegmentCache.getChangeNumber()); assertEquals(parsedRuleBasedSegment, ruleBasedSegmentCache.get("sample_rule_based_segment")); + assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment")))); + assertFalse(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment", "123")))); ruleBasedSegmentCache.update(null, Lists.newArrayList("sample_rule_based_segment"), 124); assertEquals(124, ruleBasedSegmentCache.getChangeNumber()); @@ -62,5 +66,7 @@ public void testMultipleSegment(){ ruleBasedSegmentCache.update(Lists.newArrayList(parsedRuleBasedSegment1, parsedRuleBasedSegment2), null, 123); assertEquals(Lists.newArrayList("another_rule_based_segment", "sample_rule_based_segment"), ruleBasedSegmentCache.ruleBasedSegmentNames()); assertEquals(Sets.newHashSet("segment2", "segment1", "employees"), ruleBasedSegmentCache.getSegments()); + assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment", "another_rule_based_segment")))); + assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment")))); } } \ No newline at end of file diff --git a/client/src/test/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumerTest.java b/client/src/test/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumerTest.java index f1f39a73..b9baee95 100644 --- a/client/src/test/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumerTest.java +++ b/client/src/test/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumerTest.java @@ -1,6 +1,7 @@ package io.split.storages.pluggable.adapters; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import io.split.client.dtos.*; import io.split.client.utils.Json; import io.split.engine.ConditionsTestUtil; @@ -16,10 +17,14 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.*; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import java.util.stream.Stream; import static io.split.TestHelper.makeRuleBasedSegment; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class UserCustomRuleBasedSegmentAdapterConsumerTest { @@ -66,10 +71,16 @@ public void testGetChangeNumberWithGsonFailing() { public void testGetRuleBasedSegment() { RuleBasedSegmentParser ruleBasedSegmentParser = new RuleBasedSegmentParser(); RuleBasedSegment ruleBasedSegment = getRuleBasedSegment(RULE_BASED_SEGMENT_NAME); + ParsedRuleBasedSegment expected = ruleBasedSegmentParser.parse(ruleBasedSegment); + ConcurrentMap rbsCollection = Maps.newConcurrentMap(); + rbsCollection.put(RULE_BASED_SEGMENT_NAME, expected); Mockito.when(_userStorageWrapper.get(PrefixAdapter.buildRuleBasedSegmentKey(RULE_BASED_SEGMENT_NAME))).thenReturn(getRuleBasedSegmentAsJson(ruleBasedSegment)); + Mockito.when(_userStorageWrapper.getKeysByPrefix("SPLITIO.rbsegment*")).thenReturn(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME))); ParsedRuleBasedSegment result = _userCustomRuleBasedSegmentAdapterConsumer.get(RULE_BASED_SEGMENT_NAME); - ParsedRuleBasedSegment expected = ruleBasedSegmentParser.parse(ruleBasedSegment); Assert.assertEquals(expected, result); + assertTrue(_userCustomRuleBasedSegmentAdapterConsumer.contains(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME)))); + assertFalse(_userCustomRuleBasedSegmentAdapterConsumer.contains(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME, "123")))); + } @Test @@ -135,7 +146,7 @@ public void testGetSegments() { Mockito.when(_userStorageWrapper.getMany(Mockito.anyObject())). thenReturn(getManyExpected); HashSet segmentResult = (HashSet) _userCustomRuleBasedSegmentAdapterConsumer.getSegments(); - Assert.assertTrue(segmentResult.contains("employee")); + assertTrue(segmentResult.contains("employee")); } @Test