Skip to content

Commit da867f9

Browse files
authored
Merge pull request #583 from splitio/fix-rbscache-contains
Fixed RBS cache contains method
2 parents 37ee1c8 + cd96c0a commit da867f9

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

client/src/main/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,6 @@ public Set<String> getSegments() {
104104

105105
@Override
106106
public boolean contains(Set<String> ruleBasedSegmentNames) {
107-
return getSegments().containsAll(ruleBasedSegmentNames);
107+
return _concurrentMap.keySet().containsAll(ruleBasedSegmentNames);
108108
}
109109
}

client/src/main/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private List<ParsedRuleBasedSegment> stringsToParsedRuleBasedSegments(List<Strin
9696

9797
@Override
9898
public boolean contains(Set<String> ruleBasedSegmentNames) {
99-
return getSegments().containsAll(ruleBasedSegmentNames);
99+
return _userStorageWrapper.getKeysByPrefix(PrefixAdapter.buildGetAllRuleBasedSegment()).containsAll(ruleBasedSegmentNames);
100100
}
101101

102102
}

client/src/test/java/io/split/storages/memory/RuleBasedSegmentCacheInMemoryImplTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import com.google.common.collect.Lists;
1717

1818
import java.util.ArrayList;
19+
import java.util.Arrays;
20+
import java.util.HashSet;
1921
import java.util.List;
2022

2123
public class RuleBasedSegmentCacheInMemoryImplTest extends TestCase {
@@ -31,6 +33,8 @@ public void testAddAndDeleteSegment(){
3133
ruleBasedSegmentCache.update(Lists.newArrayList(parsedRuleBasedSegment), null, 123);
3234
assertEquals(123, ruleBasedSegmentCache.getChangeNumber());
3335
assertEquals(parsedRuleBasedSegment, ruleBasedSegmentCache.get("sample_rule_based_segment"));
36+
assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment"))));
37+
assertFalse(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment", "123"))));
3438

3539
ruleBasedSegmentCache.update(null, Lists.newArrayList("sample_rule_based_segment"), 124);
3640
assertEquals(124, ruleBasedSegmentCache.getChangeNumber());
@@ -62,5 +66,7 @@ public void testMultipleSegment(){
6266
ruleBasedSegmentCache.update(Lists.newArrayList(parsedRuleBasedSegment1, parsedRuleBasedSegment2), null, 123);
6367
assertEquals(Lists.newArrayList("another_rule_based_segment", "sample_rule_based_segment"), ruleBasedSegmentCache.ruleBasedSegmentNames());
6468
assertEquals(Sets.newHashSet("segment2", "segment1", "employees"), ruleBasedSegmentCache.getSegments());
69+
assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment", "another_rule_based_segment"))));
70+
assertTrue(ruleBasedSegmentCache.contains(new HashSet<>(Arrays.asList("sample_rule_based_segment"))));
6571
}
6672
}

client/src/test/java/io/split/storages/pluggable/adapters/UserCustomRuleBasedSegmentAdapterConsumerTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.split.storages.pluggable.adapters;
22

33
import com.google.common.collect.Lists;
4+
import com.google.common.collect.Maps;
45
import io.split.client.dtos.*;
56
import io.split.client.utils.Json;
67
import io.split.engine.ConditionsTestUtil;
@@ -16,10 +17,14 @@
1617
import java.lang.reflect.Field;
1718
import java.lang.reflect.Modifier;
1819
import java.util.*;
20+
import java.util.concurrent.ConcurrentMap;
21+
import java.util.concurrent.atomic.AtomicLong;
1922
import java.util.stream.Collectors;
2023
import java.util.stream.Stream;
2124

2225
import static io.split.TestHelper.makeRuleBasedSegment;
26+
import static org.junit.Assert.assertFalse;
27+
import static org.junit.Assert.assertTrue;
2328

2429
public class UserCustomRuleBasedSegmentAdapterConsumerTest {
2530

@@ -66,10 +71,16 @@ public void testGetChangeNumberWithGsonFailing() {
6671
public void testGetRuleBasedSegment() {
6772
RuleBasedSegmentParser ruleBasedSegmentParser = new RuleBasedSegmentParser();
6873
RuleBasedSegment ruleBasedSegment = getRuleBasedSegment(RULE_BASED_SEGMENT_NAME);
74+
ParsedRuleBasedSegment expected = ruleBasedSegmentParser.parse(ruleBasedSegment);
75+
ConcurrentMap<String, ParsedRuleBasedSegment> rbsCollection = Maps.newConcurrentMap();
76+
rbsCollection.put(RULE_BASED_SEGMENT_NAME, expected);
6977
Mockito.when(_userStorageWrapper.get(PrefixAdapter.buildRuleBasedSegmentKey(RULE_BASED_SEGMENT_NAME))).thenReturn(getRuleBasedSegmentAsJson(ruleBasedSegment));
78+
Mockito.when(_userStorageWrapper.getKeysByPrefix("SPLITIO.rbsegment*")).thenReturn(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME)));
7079
ParsedRuleBasedSegment result = _userCustomRuleBasedSegmentAdapterConsumer.get(RULE_BASED_SEGMENT_NAME);
71-
ParsedRuleBasedSegment expected = ruleBasedSegmentParser.parse(ruleBasedSegment);
7280
Assert.assertEquals(expected, result);
81+
assertTrue(_userCustomRuleBasedSegmentAdapterConsumer.contains(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME))));
82+
assertFalse(_userCustomRuleBasedSegmentAdapterConsumer.contains(new HashSet<>(Arrays.asList(RULE_BASED_SEGMENT_NAME, "123"))));
83+
7384
}
7485

7586
@Test
@@ -135,7 +146,7 @@ public void testGetSegments() {
135146
Mockito.when(_userStorageWrapper.getMany(Mockito.anyObject())).
136147
thenReturn(getManyExpected);
137148
HashSet<String> segmentResult = (HashSet<String>) _userCustomRuleBasedSegmentAdapterConsumer.getSegments();
138-
Assert.assertTrue(segmentResult.contains("employee"));
149+
assertTrue(segmentResult.contains("employee"));
139150
}
140151

141152
@Test

0 commit comments

Comments
 (0)