Skip to content

Commit 281d406

Browse files
committed
Merge branch 'feature/rule-based-segment' into rbs-excluded-segments
2 parents c966192 + 1fae45f commit 281d406

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

client/src/main/java/io/split/client/utils/RuleBasedSegmentProcessor.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ public static RuleBasedSegmentsToUpdate processRuleBasedSegmentChanges(RuleBased
2222
List<String> toRemove = new ArrayList<>();
2323
Set<String> segments = new HashSet<>();
2424
for (RuleBasedSegment ruleBasedSegment : ruleBasedSegments) {
25-
if (ruleBasedSegment.excluded == null)
26-
{
27-
ruleBasedSegment.excluded = createEmptyExcluded();
28-
}
25+
ruleBasedSegment.excluded = checkExcluded(ruleBasedSegment.excluded);
2926
if (ruleBasedSegment.status != Status.ACTIVE) {
3027
// archive.
3128
toRemove.add(ruleBasedSegment.name);
@@ -49,4 +46,16 @@ private static Excluded createEmptyExcluded() {
4946
return excluded;
5047
}
5148

49+
private static Excluded checkExcluded(Excluded excluded) {
50+
if (excluded == null) {
51+
excluded = createEmptyExcluded();
52+
}
53+
if (excluded.segments == null) {
54+
excluded.segments = new ArrayList<>();
55+
}
56+
if (excluded.keys == null) {
57+
excluded.keys = new ArrayList<>();
58+
}
59+
return excluded;
60+
}
5261
}

client/src/test/java/io/split/engine/experiments/ParsedRuleBasedSegmentTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,37 @@ public void worksWithoutExcluded() {
5252
RuleBasedSegmentsToUpdate toUpdate = processRuleBasedSegmentChanges(parser, change.ruleBasedSegments.d);
5353
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedKeys().isEmpty());
5454
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedSegments().isEmpty());
55+
56+
load = "{\"ff\":{\"s\":-1,\"t\":-1,\"d\":[]},\"rbs\":{\"s\":-1,\"t\":1457726098069,\"d\":[{ \"changeNumber\": 123, \"trafficTypeName\": \"user\", \"name\": \"some_name\","
57+
+ "\"status\": \"ACTIVE\",\"excluded\":{\"segments\":[\"segment1\"]},\"conditions\": [{\"contitionType\": \"ROLLOUT\","
58+
+ "\"label\": \"some_label\", \"matcherGroup\": { \"matchers\": [{ \"matcherType\": \"ALL_KEYS\", \"negate\": false}],"
59+
+ "\"combiner\": \"AND\"}}]}]}}";
60+
change = Json.fromJson(load, SplitChange.class);
61+
toUpdate = processRuleBasedSegmentChanges(parser, change.ruleBasedSegments.d);
62+
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedKeys().isEmpty());
63+
64+
load = "{\"ff\":{\"s\":-1,\"t\":-1,\"d\":[]},\"rbs\":{\"s\":-1,\"t\":1457726098069,\"d\":[{ \"changeNumber\": 123, \"trafficTypeName\": \"user\", \"name\": \"some_name\","
65+
+ "\"status\": \"ACTIVE\",\"excluded\":{\"segments\":[\"segment1\"], \"keys\":null},\"conditions\": [{\"contitionType\": \"ROLLOUT\","
66+
+ "\"label\": \"some_label\", \"matcherGroup\": { \"matchers\": [{ \"matcherType\": \"ALL_KEYS\", \"negate\": false}],"
67+
+ "\"combiner\": \"AND\"}}]}]}}";
68+
change = Json.fromJson(load, SplitChange.class);
69+
toUpdate = processRuleBasedSegmentChanges(parser, change.ruleBasedSegments.d);
70+
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedKeys().isEmpty());
71+
72+
load = "{\"ff\":{\"s\":-1,\"t\":-1,\"d\":[]},\"rbs\":{\"s\":-1,\"t\":1457726098069,\"d\":[{ \"changeNumber\": 123, \"trafficTypeName\": \"user\", \"name\": \"some_name\","
73+
+ "\"status\": \"ACTIVE\",\"excluded\":{\"keys\":[\"key1\"]},\"conditions\": [{\"contitionType\": \"ROLLOUT\","
74+
+ "\"label\": \"some_label\", \"matcherGroup\": { \"matchers\": [{ \"matcherType\": \"ALL_KEYS\", \"negate\": false}],"
75+
+ "\"combiner\": \"AND\"}}]}]}}";
76+
change = Json.fromJson(load, SplitChange.class);
77+
toUpdate = processRuleBasedSegmentChanges(parser, change.ruleBasedSegments.d);
78+
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedSegments().isEmpty());
79+
80+
load = "{\"ff\":{\"s\":-1,\"t\":-1,\"d\":[]},\"rbs\":{\"s\":-1,\"t\":1457726098069,\"d\":[{ \"changeNumber\": 123, \"trafficTypeName\": \"user\", \"name\": \"some_name\","
81+
+ "\"status\": \"ACTIVE\",\"excluded\":{\"segments\":null, \"keys\":[\"key1\"]},\"conditions\": [{\"contitionType\": \"ROLLOUT\","
82+
+ "\"label\": \"some_label\", \"matcherGroup\": { \"matchers\": [{ \"matcherType\": \"ALL_KEYS\", \"negate\": false}],"
83+
+ "\"combiner\": \"AND\"}}]}]}}";
84+
change = Json.fromJson(load, SplitChange.class);
85+
toUpdate = processRuleBasedSegmentChanges(parser, change.ruleBasedSegments.d);
86+
Assert.assertTrue(toUpdate.getToAdd().get(0).excludedSegments().isEmpty());
5587
}
5688
}

0 commit comments

Comments
 (0)