Skip to content

Commit 1b234ae

Browse files
authored
Merge pull request #183 from splitio/evaluator-integration-tests
Evaluator integration tests
2 parents 8a4b97e + bd5195d commit 1b234ae

File tree

2 files changed

+152
-2
lines changed

2 files changed

+152
-2
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package io.split.engine.evaluator;
2+
3+
import com.google.common.collect.Lists;
4+
import io.split.cache.InMemoryCacheImp;
5+
import io.split.cache.SplitCache;
6+
import io.split.client.dtos.ConditionType;
7+
import io.split.client.dtos.MatcherCombiner;
8+
import io.split.client.dtos.Partition;
9+
import io.split.engine.experiments.ParsedCondition;
10+
import io.split.engine.experiments.ParsedSplit;
11+
import io.split.engine.matchers.AttributeMatcher;
12+
import io.split.engine.matchers.CombiningMatcher;
13+
import io.split.engine.matchers.strings.EndsWithAnyOfMatcher;
14+
import io.split.engine.matchers.strings.WhitelistMatcher;
15+
import org.junit.Assert;
16+
import org.junit.Test;
17+
18+
import java.util.List;
19+
20+
public class EvaluatorIntegrationTest {
21+
private static final String DEFAULT_TREATMENT_VALUE = "defaultTreatment";
22+
private static final String TRAFFIC_TYPE_VALUE = "tt";
23+
private static final String TEST_LABEL_VALUE_WHITELIST = "test label whitelist";
24+
private static final String TEST_LABEL_VALUE_ROLL_OUT = "test label roll out";
25+
private static final String ON_TREATMENT = "on";
26+
27+
@Test
28+
public void evaluateFeatureWithWhitelistShouldReturnOn() {
29+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
30+
31+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("test_1", null, "split_3", null);
32+
Assert.assertEquals(ON_TREATMENT, result.treatment);
33+
Long changeNumberExpected = 223366554L;
34+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
35+
Assert.assertEquals(TEST_LABEL_VALUE_WHITELIST, result.label);
36+
}
37+
38+
@Test
39+
public void evaluateFeatureWithWhitelistShouldReturnDefault() {
40+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
41+
42+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("test_2", null, "split_3", null);
43+
Assert.assertEquals(DEFAULT_TREATMENT_VALUE, result.treatment);
44+
Long changeNumberExpected = 223366554L;
45+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
46+
Assert.assertEquals(Labels.DEFAULT_RULE, result.label);
47+
}
48+
49+
@Test
50+
public void evaluateFeatureWithWhitelistWhenSplitIsKilledShouldReturnDefaultTreatment() {
51+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
52+
53+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("test_1", null, "split_2", null);
54+
Assert.assertEquals(DEFAULT_TREATMENT_VALUE, result.treatment);
55+
Long changeNumberExpected = 223366552L;
56+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
57+
Assert.assertEquals(Labels.KILLED, result.label);
58+
}
59+
60+
@Test
61+
public void evaluateFeatureWithRollOutShouldReturnDefault() {
62+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
63+
64+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("@mail2.com", null, "split_1", null);
65+
Assert.assertEquals(DEFAULT_TREATMENT_VALUE, result.treatment);
66+
Long changeNumberExpected = 223366551L;
67+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
68+
Assert.assertEquals(Labels.DEFAULT_RULE, result.label);
69+
}
70+
71+
@Test
72+
public void evaluateFeatureWithRollOutShouldReturnOn() {
73+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
74+
75+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("mauro@test.io", null, "split_1", null);
76+
Assert.assertEquals(ON_TREATMENT, result.treatment);
77+
Long changeNumberExpected = 223366551L;
78+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
79+
Assert.assertEquals(TEST_LABEL_VALUE_ROLL_OUT, result.label);
80+
}
81+
82+
@Test
83+
public void evaluateFeatureWithRollOutShouldReturnDefaultOutOfSplit() {
84+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 20);
85+
86+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("mauro@test.io", null, "split_test", null);
87+
Assert.assertEquals(DEFAULT_TREATMENT_VALUE, result.treatment);
88+
Long changeNumberExpected = 223366555L;
89+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
90+
Assert.assertEquals(Labels.NOT_IN_SPLIT, result.label);
91+
}
92+
93+
@Test
94+
public void evaluateFeatureWithRollOutWhenTrafficAllocationIs50ShouldReturnOn() {
95+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 50);
96+
97+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("mauro@test.io", null, "split_test", null);
98+
Assert.assertEquals(ON_TREATMENT, result.treatment);
99+
Long changeNumberExpected = 223366555L;
100+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
101+
Assert.assertEquals(TEST_LABEL_VALUE_ROLL_OUT, result.label);
102+
}
103+
104+
@Test
105+
public void evaluateFeatureWithRollOutWhenSplitIsKilledShouldReturnDefault() {
106+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
107+
108+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("mauro@test.io", null, "split_2", null);
109+
Assert.assertEquals(DEFAULT_TREATMENT_VALUE, result.treatment);
110+
Long changeNumberExpected = 223366552L;
111+
Assert.assertEquals(changeNumberExpected, result.changeNumber);
112+
Assert.assertEquals(Labels.KILLED, result.label);
113+
}
114+
115+
@Test
116+
public void evaluateFeatureWhenSplitNotExistsShouldReturnControl() {
117+
Evaluator evaluator = buildEvaluatorAndLoadCache(false, 100);
118+
119+
EvaluatorImp.TreatmentLabelAndChangeNumber result = evaluator.evaluateFeature("mauro@test.io", null, "test", null);
120+
Assert.assertEquals("control", result.treatment);
121+
Assert.assertEquals(Labels.DEFINITION_NOT_FOUND, result.label);
122+
}
123+
124+
private Evaluator buildEvaluatorAndLoadCache(boolean killed, int trafficAllocation) {
125+
SplitCache splitCache = new InMemoryCacheImp();
126+
Evaluator evaluator = new EvaluatorImp(splitCache);
127+
128+
Partition partition = new Partition();
129+
partition.treatment = ON_TREATMENT;
130+
partition.size = 100;
131+
132+
List<Partition> partitions = Lists.newArrayList(partition);
133+
134+
AttributeMatcher whiteListMatcher = AttributeMatcher.vanilla(new WhitelistMatcher(Lists.newArrayList("test_1", "admin")));
135+
AttributeMatcher endsWithMatcher = AttributeMatcher.vanilla(new EndsWithAnyOfMatcher(Lists.newArrayList("@test.io", "@mail.io")));
136+
137+
CombiningMatcher whitelistCombiningMatcher = new CombiningMatcher(MatcherCombiner.AND, Lists.newArrayList(whiteListMatcher));
138+
CombiningMatcher endsWithCombiningMatcher = new CombiningMatcher(MatcherCombiner.AND, Lists.newArrayList(endsWithMatcher));
139+
140+
ParsedCondition whitelistCondition = new ParsedCondition(ConditionType.WHITELIST, whitelistCombiningMatcher, partitions, TEST_LABEL_VALUE_WHITELIST);
141+
ParsedCondition rollOutCondition = new ParsedCondition(ConditionType.ROLLOUT, endsWithCombiningMatcher, partitions, TEST_LABEL_VALUE_ROLL_OUT);
142+
143+
List<ParsedCondition> conditions = Lists.newArrayList(whitelistCondition, rollOutCondition);
144+
145+
splitCache.put(new ParsedSplit("split_1", 0, false, DEFAULT_TREATMENT_VALUE, conditions, TRAFFIC_TYPE_VALUE, 223366551, 100, 0, 2, null));
146+
splitCache.put(new ParsedSplit("split_2", 0, true, DEFAULT_TREATMENT_VALUE, conditions, TRAFFIC_TYPE_VALUE, 223366552, 100, 0, 2, null));
147+
splitCache.put(new ParsedSplit("split_3", 0, false, DEFAULT_TREATMENT_VALUE, conditions, TRAFFIC_TYPE_VALUE, 223366554, 100, 0, 2, null));
148+
splitCache.put(new ParsedSplit("split_test", 0, killed, DEFAULT_TREATMENT_VALUE, conditions, TRAFFIC_TYPE_VALUE, 223366555, trafficAllocation, 0, 2, null));
149+
150+
return evaluator;
151+
}
152+
}

client/src/test/java/io/split/engine/evaluator/EvaluatorTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.split.client.dtos.ConditionType;
44
import io.split.client.dtos.Partition;
5-
import io.split.engine.SDKReadinessGates;
65
import io.split.cache.SplitCache;
76
import io.split.engine.experiments.ParsedCondition;
87
import io.split.engine.experiments.ParsedSplit;
@@ -37,7 +36,6 @@ public class EvaluatorTest {
3736

3837
@Before
3938
public void before() {
40-
SDKReadinessGates gates = Mockito.mock(SDKReadinessGates.class);
4139
_splitCache = Mockito.mock(SplitCache.class);
4240
_evaluator = new EvaluatorImp(_splitCache);
4341
_matcher = Mockito.mock(CombiningMatcher.class);

0 commit comments

Comments
 (0)