Skip to content

Commit 3fe5be3

Browse files
committed
Added integration test
1 parent 6218697 commit 3fe5be3

File tree

2 files changed

+367
-0
lines changed

2 files changed

+367
-0
lines changed

client/src/test/java/io/split/client/SplitClientIntegrationTest.java

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,6 +1101,80 @@ public MockResponse dispatch(RecordedRequest request) {
11011101
Assert.assertTrue(check2);
11021102
}
11031103

1104+
@Test
1105+
public void getTreatmentWithPrerequisites() throws Exception {
1106+
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/splits_prereq.json")), StandardCharsets.UTF_8);
1107+
List<RecordedRequest> allRequests = new ArrayList<>();
1108+
Dispatcher dispatcher = new Dispatcher() {
1109+
@Override
1110+
public MockResponse dispatch(RecordedRequest request) {
1111+
allRequests.add(request);
1112+
switch (request.getPath()) {
1113+
case "/api/splitChanges?s=1.3&since=-1&rbSince=-1":
1114+
return new MockResponse().setResponseCode(200).setBody(splits);
1115+
case "/api/splitChanges?s=1.3&since=1585948850109&rbSince=1585948850109":
1116+
return new MockResponse().setResponseCode(200).setBody("{\"ff\":{\"d\": [], \"s\":1585948850109, \"t\":1585948850109},\"rbs\":{\"d\":[],\"t\":1585948850109,\"s\":1585948850109}}");
1117+
case "/api/segmentChanges/segment-test?since=-1":
1118+
return new MockResponse().setResponseCode(200).setBody("{\"name\":\"segment-test\",\"added\":[\"user-1\"],\"removed\":[],\"since\":-1,\"till\":-1}");
1119+
case "/api/testImpressions/bulk":
1120+
return new MockResponse().setResponseCode(200);
1121+
case "/api/testImpressions/count":
1122+
return new MockResponse().setResponseCode(200);
1123+
case "/v1/keys/ss":
1124+
return new MockResponse().setResponseCode(200);
1125+
case "/v1/metrics/usage":
1126+
return new MockResponse().setResponseCode(200);
1127+
case "/v1/metrics/config":
1128+
return new MockResponse().setResponseCode(200);
1129+
}
1130+
return new MockResponse().setResponseCode(404);
1131+
}
1132+
};
1133+
1134+
MockWebServer splitServer = new MockWebServer();
1135+
splitServer.setDispatcher(dispatcher);
1136+
splitServer.start();
1137+
String serverURL = String.format("http://%s:%s", splitServer.getHostName(), splitServer.getPort());
1138+
1139+
SplitClientConfig config = SplitClientConfig.builder()
1140+
.setBlockUntilReadyTimeout(10000)
1141+
.endpoint(serverURL, serverURL)
1142+
.telemetryURL(serverURL + "/v1")
1143+
.authServiceURL(String.format("%s/api/auth/enabled", serverURL))
1144+
.streamingEnabled(false)
1145+
.featuresRefreshRate(5)
1146+
.impressionsMode(ImpressionsManager.Mode.DEBUG)
1147+
.build();
1148+
1149+
SplitFactory factory = SplitFactoryBuilder.build("fake-api-token", config);
1150+
SplitClient client = factory.client();
1151+
client.blockUntilReady();
1152+
1153+
Assert.assertEquals("on", client.getTreatment("bilal@split.io", "test_prereq", new HashMap<String, Object>() {{
1154+
put("email", "bilal@@split.io");
1155+
}}));
1156+
Assert.assertEquals("def_treatment", client.getTreatment("bilal@split.io", "test_prereq"));
1157+
Assert.assertEquals("def_treatment", client.getTreatment("mauro@split.io", "test_prereq", new HashMap<String, Object>() {{
1158+
put("email", "mauro@@split.io");
1159+
}}));
1160+
Assert.assertEquals("on", client.getTreatment("pato@split.io", "test_prereq", new HashMap<String, Object>() {{
1161+
put("email", "pato@@split.io");
1162+
}}));
1163+
1164+
Assert.assertEquals("on_whitelist", client.getTreatment("bilal@split.io", "prereq_chain", new HashMap<String, Object>() {{
1165+
put("email", "bilal@@split.io");
1166+
}}));
1167+
Assert.assertEquals("on", client.getTreatment("pato@split.io", "prereq_chain", new HashMap<String, Object>() {{
1168+
put("email", "pato@@split.io");
1169+
}}));
1170+
Assert.assertEquals("on_default", client.getTreatment("mauro@split.io", "prereq_chain", new HashMap<String, Object>() {{
1171+
put("email", "mauro@@split.io");
1172+
}}));
1173+
1174+
client.destroy();
1175+
splitServer.shutdown();
1176+
}
1177+
11041178
private SSEMockServer buildSSEMockServer(SSEMockServer.SseEventQueue eventQueue) {
11051179
return new SSEMockServer(eventQueue, (token, version, channel) -> {
11061180
if (!"1.1".equals(version)) {
Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
{"ff": {
2+
"d": [
3+
{
4+
"trafficTypeName": "user",
5+
"name": "test_prereq",
6+
"prerequisites": [
7+
{ "n": "feature_segment", "ts": ["off", "def_test"] },
8+
{ "n": "rbs_flag", "ts": ["on"] }
9+
],
10+
"trafficAllocation": 100,
11+
"trafficAllocationSeed": 1582960494,
12+
"seed": 1842944006,
13+
"status": "ACTIVE",
14+
"killed": false,
15+
"defaultTreatment": "def_treatment",
16+
"changeNumber": 1582741588594,
17+
"algo": 2,
18+
"configurations": {},
19+
"conditions": [
20+
{
21+
"conditionType": "ROLLOUT",
22+
"matcherGroup": {
23+
"combiner": "AND",
24+
"matchers": [
25+
{
26+
"keySelector": {
27+
"trafficType": "user",
28+
"attribute": null
29+
},
30+
"matcherType": "ALL_KEYS",
31+
"negate": false,
32+
"userDefinedSegmentMatcherData": null,
33+
"whitelistMatcherData": null,
34+
"unaryNumericMatcherData": null,
35+
"betweenMatcherData": null,
36+
"booleanMatcherData": null,
37+
"dependencyMatcherData": null,
38+
"stringMatcherData": null
39+
}
40+
]
41+
},
42+
"partitions": [
43+
{
44+
"treatment": "on",
45+
"size": 100
46+
},
47+
{
48+
"treatment": "off",
49+
"size": 0
50+
}
51+
],
52+
"label": "default rule"
53+
}
54+
]
55+
},
56+
{
57+
"name":"feature_segment",
58+
"trafficTypeId":"u",
59+
"trafficTypeName":"User",
60+
"trafficAllocation": 100,
61+
"trafficAllocationSeed": 1582960494,
62+
"seed":-1177551240,
63+
"status":"ACTIVE",
64+
"killed":false,
65+
"defaultTreatment":"def_test",
66+
"changeNumber": 1582741588594,
67+
"algo": 2,
68+
"configurations": {},
69+
"conditions":[
70+
{
71+
"matcherGroup":{
72+
"combiner":"AND",
73+
"matchers":[
74+
{
75+
"matcherType":"IN_SEGMENT",
76+
"negate":false,
77+
"userDefinedSegmentMatcherData":{
78+
"segmentName":"segment-test"
79+
},
80+
"whitelistMatcherData":null
81+
}
82+
]
83+
},
84+
"partitions":[
85+
{
86+
"treatment":"on",
87+
"size":100
88+
},
89+
{
90+
"treatment":"off",
91+
"size":0
92+
}
93+
],
94+
"label": "default label"
95+
}
96+
]
97+
},
98+
{
99+
"changeNumber": 10,
100+
"trafficTypeName": "user",
101+
"name": "rbs_flag",
102+
"trafficAllocation": 100,
103+
"trafficAllocationSeed": 1828377380,
104+
"seed": -286617921,
105+
"status": "ACTIVE",
106+
"killed": false,
107+
"defaultTreatment": "off",
108+
"algo": 2,
109+
"conditions": [
110+
{
111+
"conditionType": "ROLLOUT",
112+
"matcherGroup": {
113+
"combiner": "AND",
114+
"matchers": [
115+
{
116+
"keySelector": {
117+
"trafficType": "user"
118+
},
119+
"matcherType": "IN_RULE_BASED_SEGMENT",
120+
"negate": false,
121+
"userDefinedSegmentMatcherData": {
122+
"segmentName": "sample_rule_based_segment"
123+
}
124+
}
125+
]
126+
},
127+
"partitions": [
128+
{
129+
"treatment": "on",
130+
"size": 100
131+
},
132+
{
133+
"treatment": "off",
134+
"size": 0
135+
}
136+
],
137+
"label": "in rule based segment sample_rule_based_segment"
138+
},
139+
{
140+
"conditionType": "ROLLOUT",
141+
"matcherGroup": {
142+
"combiner": "AND",
143+
"matchers": [
144+
{
145+
"keySelector": {
146+
"trafficType": "user"
147+
},
148+
"matcherType": "ALL_KEYS",
149+
"negate": false
150+
}
151+
]
152+
},
153+
"partitions": [
154+
{
155+
"treatment": "on",
156+
"size": 0
157+
},
158+
{
159+
"treatment": "off",
160+
"size": 100
161+
}
162+
],
163+
"label": "default rule"
164+
}
165+
],
166+
"configurations": {},
167+
"sets": [],
168+
"impressionsDisabled": false
169+
},
170+
{
171+
"trafficTypeName": "user",
172+
"name": "prereq_chain",
173+
"prerequisites": [
174+
{ "n": "test_prereq", "ts": ["on"] }
175+
],
176+
"trafficAllocation": 100,
177+
"trafficAllocationSeed": -2092979940,
178+
"seed": 105482719,
179+
"status": "ACTIVE",
180+
"killed": false,
181+
"defaultTreatment": "on_default",
182+
"changeNumber": 1585948850109,
183+
"algo": 2,
184+
"configurations": {},
185+
"conditions": [
186+
{
187+
"conditionType": "WHITELIST",
188+
"matcherGroup": {
189+
"combiner": "AND",
190+
"matchers": [
191+
{
192+
"keySelector": null,
193+
"matcherType": "WHITELIST",
194+
"negate": false,
195+
"userDefinedSegmentMatcherData": null,
196+
"whitelistMatcherData": {
197+
"whitelist": [
198+
"bilal@split.io"
199+
]
200+
},
201+
"unaryNumericMatcherData": null,
202+
"betweenMatcherData": null,
203+
"booleanMatcherData": null,
204+
"dependencyMatcherData": null,
205+
"stringMatcherData": null
206+
}
207+
]
208+
},
209+
"partitions": [
210+
{
211+
"treatment": "on_whitelist",
212+
"size": 100
213+
}
214+
],
215+
"label": "whitelisted"
216+
},
217+
{
218+
"conditionType": "ROLLOUT",
219+
"matcherGroup": {
220+
"combiner": "AND",
221+
"matchers": [
222+
{
223+
"keySelector": {
224+
"trafficType": "user",
225+
"attribute": null
226+
},
227+
"matcherType": "ALL_KEYS",
228+
"negate": false,
229+
"userDefinedSegmentMatcherData": null,
230+
"whitelistMatcherData": null,
231+
"unaryNumericMatcherData": null,
232+
"betweenMatcherData": null,
233+
"booleanMatcherData": null,
234+
"dependencyMatcherData": null,
235+
"stringMatcherData": null
236+
}
237+
]
238+
},
239+
"partitions": [
240+
{
241+
"treatment": "on",
242+
"size": 100
243+
},
244+
{
245+
"treatment": "off",
246+
"size": 0
247+
},
248+
{
249+
"treatment": "V1",
250+
"size": 0
251+
}
252+
],
253+
"label": "default rule"
254+
}
255+
]
256+
}
257+
],
258+
"s": -1,
259+
"t": 1585948850109
260+
}, "rbs":{"d": [
261+
{
262+
"changeNumber": 5,
263+
"name": "sample_rule_based_segment",
264+
"status": "ACTIVE",
265+
"trafficTypeName": "user",
266+
"excluded":{
267+
"keys":["mauro@split.io","gaston@split.io"],
268+
"segments":[]
269+
},
270+
"conditions": [
271+
{
272+
"matcherGroup": {
273+
"combiner": "AND",
274+
"matchers": [
275+
{
276+
"keySelector": {
277+
"trafficType": "user",
278+
"attribute": "email"
279+
},
280+
"matcherType": "ENDS_WITH",
281+
"negate": false,
282+
"whitelistMatcherData": {
283+
"whitelist": [
284+
"@split.io"
285+
]
286+
}
287+
}
288+
]
289+
}
290+
}
291+
]
292+
}], "s": -1, "t": 1585948850109}
293+
}

0 commit comments

Comments
 (0)