Skip to content

Commit 8521598

Browse files
committed
Added EvaluationOption class
1 parent 96a4355 commit 8521598

File tree

8 files changed

+235
-158
lines changed

8 files changed

+235
-158
lines changed

client/src/main/java/io/split/client/SplitClient.java

Lines changed: 33 additions & 24 deletions
Large diffs are not rendered by default.

client/src/main/java/io/split/client/SplitClientImpl.java

Lines changed: 94 additions & 79 deletions
Large diffs are not rendered by default.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.split.client.dtos;
2+
3+
import java.util.Map;
4+
5+
public class EvaluationOptions {
6+
private Map<String, Object> _properties;
7+
8+
public EvaluationOptions(Map<String, Object> properties) {
9+
_properties = properties;
10+
}
11+
public Map<String, Object> getProperties() {
12+
return _properties;
13+
};
14+
}

client/src/main/java/io/split/inputValidation/ImpressionPropertiesValidator.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,27 @@
11
package io.split.inputValidation;
22

3-
import com.google.gson.Gson;
4-
import com.google.gson.JsonObject;
53
import io.split.client.dtos.KeyImpression;
64
import org.slf4j.Logger;
75
import org.slf4j.LoggerFactory;
86

97
import java.util.HashMap;
10-
import java.util.Iterator;
118
import java.util.Map;
12-
import java.util.Set;
13-
14-
import static com.google.common.collect.Maps.toMap;
15-
import static java.util.stream.Collectors.toList;
169

1710
public class ImpressionPropertiesValidator {
1811
private static final Logger _log = LoggerFactory.getLogger(ImpressionPropertiesValidator.class);
1912

20-
public static ImpressionPropertiesValidatorResult propertiesAreValid(JsonObject properties) {
13+
public static ImpressionPropertiesValidatorResult propertiesAreValid(Map<String, Object> properties) {
2114
int size = 1024; // We assume 1kb events without properties (750 bytes avg measured)
2215

2316
if (properties == null) {
2417
return new ImpressionPropertiesValidatorResult(true);
2518
}
26-
Map<String, Object> propertiesMap = new Gson().fromJson(properties, Map.class);
27-
if (propertiesMap.size() > 300) {
19+
if (properties.size() > 300) {
2820
_log.warn("Impression properties has more than 300 properties. Some of them will be trimmed when processed");
2921
}
3022

3123
Map<String, Object> result = new HashMap<>();
32-
for (Map.Entry<String, Object> entry : propertiesMap.entrySet()) {
24+
for (Map.Entry<String, Object> entry : properties.entrySet()) {
3325
if (entry.getKey() == null || entry.getKey().isEmpty()) {
3426
continue;
3527
}

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

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,11 +2093,17 @@ public void impressionPropertiesTest() {
20932093
);
20942094

20952095
List<ParsedCondition> conditions = Lists.newArrayList(age_equal_to_0_should_be_on);
2096-
ParsedSplit parsedSplit = ParsedSplit.createParsedSplitForTests(test, 123, false, Treatments.OFF, conditions, null, 1, 1, new HashSet<>(), true);
2096+
ParsedSplit parsedSplit = ParsedSplit.createParsedSplitForTests(test, 123, false, Treatments.OFF, conditions, null, 1, 1, new HashSet<>(Arrays.asList("set")), true);
2097+
Map<String, ParsedSplit> parsedSplits = new HashMap<>();
2098+
parsedSplits.put(test, parsedSplit);
20972099

20982100
SplitCacheConsumer splitCacheConsumer = mock(SplitCacheConsumer.class);
20992101
SegmentCacheConsumer segmentCacheConsumer = mock(SegmentCacheConsumer.class);
21002102
when(splitCacheConsumer.get(test)).thenReturn(parsedSplit);
2103+
when(splitCacheConsumer.fetchMany(Arrays.asList(test))).thenReturn(parsedSplits);
2104+
Map<String, HashSet<String>> splits = new HashMap<>();
2105+
splits.put("set", new HashSet<>(Arrays.asList(test)));
2106+
when(splitCacheConsumer.getNamesByFlagSets(Arrays.asList("set"))).thenReturn(splits);
21012107

21022108
SDKReadinessGates gates = mock(SDKReadinessGates.class);
21032109
ImpressionsManager impressionsManager = mock(ImpressionsManager.class);
@@ -2109,23 +2115,47 @@ public void impressionPropertiesTest() {
21092115
config,
21102116
gates,
21112117
new EvaluatorImp(splitCacheConsumer, segmentCacheConsumer), TELEMETRY_STORAGE, TELEMETRY_STORAGE,
2112-
flagSetsFilter
2118+
new FlagSetsFilterImpl(new HashSet<>())
21132119
);
2114-
21152120
Map<String, Object> attributes = ImmutableMap.<String, Object>of("age", -20, "acv", "1000000");
2116-
String properties = "{\"prop2\":\"val2\",\"prop1\":\"val1\"}";
2121+
EvaluationOptions properties = new EvaluationOptions(new HashMap<String, Object>()
2122+
{{
2123+
put("prop2", "val2");
2124+
put("prop1", "val1");
2125+
}});
2126+
Map<String, String> result = new HashMap<>();
2127+
result.put(test, Treatments.ON);
2128+
List<String> split_names = Arrays.asList(test);
21172129

21182130
assertEquals("on", client.getTreatment("pato@codigo.com", test, attributes, properties));
2131+
assertEquals("on", client.getTreatmentWithConfig("bilal1@codigo.com", test, attributes, properties).treatment());
2132+
assertEquals("on", client.getTreatments("bilal2@codigo.com", Arrays.asList(test), attributes, properties).get(test));
2133+
assertEquals("on", client.getTreatmentsWithConfig("bilal3@codigo.com", Arrays.asList(test), attributes, properties).get(test).treatment());
2134+
assertEquals("on", client.getTreatmentsByFlagSet("bilal4@codigo.com", "set", attributes, properties).get(test));
2135+
assertEquals("on", client.getTreatmentsByFlagSets("bilal5@codigo.com", Arrays.asList("set"), attributes, properties).get(test));
2136+
assertEquals("on", client.getTreatmentsWithConfigByFlagSet("bilal6@codigo.com", "set", attributes, properties).get(test).treatment());
2137+
assertEquals("on", client.getTreatmentsWithConfigByFlagSets("bilal7@codigo.com", Arrays.asList("set"), attributes, properties).get(test).treatment());
2138+
assertEquals("on", client.getTreatment(new Key("bilal8@codigo.com", "bilal8@codigo.com"), test, attributes, properties));
2139+
assertEquals("on", client.getTreatmentWithConfig(new Key("bilal9@codigo.com", "bilal9@codigo.com"), test, attributes, properties).treatment());
2140+
assertEquals("on", client.getTreatments(new Key("bilal10@codigo.com", "bilal10@codigo.com"), Arrays.asList(test), attributes, properties).get(test));
2141+
assertEquals("on", client.getTreatmentsWithConfig(new Key("bilal11@codigo.com", "bilal11@codigo.com"), Arrays.asList(test), attributes, properties).get(test).treatment());
2142+
assertEquals("on", client.getTreatmentsByFlagSet(new Key("bilal12@codigo.com", "bilal12@codigo.com"), "set", attributes, properties).get(test));
2143+
assertEquals("on", client.getTreatmentsByFlagSets(new Key("bilal13@codigo.com", "bilal13@codigo.com"), Arrays.asList("set"), attributes, properties).get(test));
2144+
assertEquals("on", client.getTreatmentsWithConfigByFlagSet(new Key("bilal14@codigo.com", "bilal14@codigo.com"), "set", attributes, properties).get(test).treatment());
2145+
assertEquals("on", client.getTreatmentsWithConfigByFlagSets(new Key("bilal15@codigo.com", "bilal15@codigo.com"), Arrays.asList("set"), attributes, properties).get(test).treatment());
21192146

21202147
ArgumentCaptor<List> impressionCaptor = ArgumentCaptor.forClass(List.class);
2121-
verify(impressionsManager).track(impressionCaptor.capture());
2122-
2148+
verify(impressionsManager, times(16)).track(impressionCaptor.capture());
21232149
assertNotNull(impressionCaptor.getValue());
2124-
assertEquals(1, impressionCaptor.getValue().size());
2125-
DecoratedImpression impression = (DecoratedImpression) impressionCaptor.getValue().get(0);
21262150

2127-
assertEquals("foolabel", impression.impression().appliedRule());
2128-
assertEquals(attributes, impression.impression().attributes());
2129-
assertEquals(properties, impression.impression().properties());
2151+
DecoratedImpression impression = (DecoratedImpression) impressionCaptor.getAllValues().get(0).get(0);
2152+
assertEquals("pato@codigo.com", impression.impression().key());
2153+
assertEquals("{\"prop2\":\"val2\",\"prop1\":\"val1\"}", impression.impression().properties());
2154+
2155+
for (int i=1; i<=15; i++) {
2156+
impression = (DecoratedImpression) impressionCaptor.getAllValues().get(i).get(0);
2157+
assertEquals("bilal" + i + "@codigo.com", impression.impression().key());
2158+
assertEquals("{\"prop2\":\"val2\",\"prop1\":\"val1\"}", impression.impression().properties());
2159+
}
21302160
}
21312161
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.split.SSEMockServer;
44
import io.split.SplitMockServer;
55
import io.split.client.api.SplitView;
6+
import io.split.client.dtos.EvaluationOptions;
67
import io.split.client.impressions.ImpressionsManager;
78
import io.split.client.utils.CustomDispatcher;
89
import io.split.storages.enums.OperationMode;
@@ -1061,9 +1062,13 @@ public MockResponse dispatch(RecordedRequest request) {
10611062
SplitClient client = factory.client();
10621063
client.blockUntilReady();
10631064

1064-
Assert.assertEquals("off", client.getTreatment("user1", "without_impression_toggle", new HashMap<>(), "{\"prop1\": \"val1\"}"));
1065-
Assert.assertEquals("off", client.getTreatment("user2", "impression_toggle_on", new HashMap<>(), "{\"prop1\": \"val1\", \"prop2\": \"val2\"}"));
1066-
Assert.assertEquals("off", client.getTreatment("user3", "impression_toggle_on", new HashMap<>()));
1065+
Assert.assertEquals("off", client.getTreatment("user1", "without_impression_toggle", new HashMap<>(), new EvaluationOptions(new HashMap<String, Object>() {{ put("prop1", "val1"); }})));
1066+
Assert.assertEquals("off", client.getTreatment("user2", "impression_toggle_on", new HashMap<>(), new EvaluationOptions(new HashMap<String, Object>()
1067+
{{
1068+
put("prop1", "val1");
1069+
put("prop2", "val2");
1070+
}})));
1071+
Assert.assertEquals("off", client.getTreatment("user3", "impression_toggle_on", new EvaluationOptions(null)));
10671072
client.destroy();
10681073
boolean check1 = false, check2 = false, check3 = false;
10691074
for (int i=0; i < allRequests.size(); i++ ) {

client/src/test/java/io/split/inputValidation/ImpressionPropertiesValidatorTest.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,35 @@
22

33
import com.google.gson.JsonObject;
44
import com.google.gson.JsonParser;
5+
import io.split.grammar.Treatments;
56
import org.junit.Assert;
67
import org.junit.Test;
78

9+
import java.util.HashMap;
10+
import java.util.Map;
11+
812
public class ImpressionPropertiesValidatorTest {
913
@Test
1014
public void propertiesAreValidWorks() {
11-
String properties = "{\"prop1\": 1, \"prop2\": 2L, \"prop3\": 7.56, \"prop4\": \"something\", \"prop5\": true, \"prop6\": null}";
12-
JsonObject propertiesJson = new JsonParser().parse(properties).getAsJsonObject();
13-
ImpressionPropertiesValidator.ImpressionPropertiesValidatorResult result = ImpressionPropertiesValidator.propertiesAreValid(propertiesJson);
15+
Map<String, Object> properties = new HashMap<String, Object>()
16+
{{
17+
put("prop1", 1);
18+
put("prop2", 2L);
19+
put("prop3", 7.56);
20+
put("prop4", "something");
21+
put("prop5", true);
22+
put("prop6", null);
23+
}};
24+
ImpressionPropertiesValidator.ImpressionPropertiesValidatorResult result = ImpressionPropertiesValidator.propertiesAreValid(properties);
1425
Assert.assertTrue(result.getSuccess());
15-
Assert.assertEquals(1065, result.getSize());
26+
Assert.assertEquals(1063, result.getSize());
1627
Assert.assertEquals(6, result.getValue().size());
1728

1829
// when properties size is > Event.MAX_PROPERTIES_LENGTH_BYTES
1930
for (int i = 7; i <= (32 * 1024); i++) {
20-
propertiesJson.addProperty("prop" + i, "something-" + i);
31+
properties.put("prop" + i, "something-" + i);
2132
}
22-
result = ImpressionPropertiesValidator.propertiesAreValid(propertiesJson);
33+
result = ImpressionPropertiesValidator.propertiesAreValid(properties);
2334
Assert.assertFalse(result.getSuccess());
2435
}
2536
}

testing/src/main/java/io/split/client/testing/SplitClientForTest.java

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.split.client.SplitClient;
44
import io.split.client.api.Key;
55
import io.split.client.api.SplitResult;
6+
import io.split.client.dtos.EvaluationOptions;
67
import io.split.grammar.Treatments;
78
import io.split.telemetry.domain.enums.MethodEnum;
89

@@ -193,126 +194,126 @@ public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(Key key, List<
193194
}
194195

195196
@Override
196-
public String getTreatment(String key, String featureFlagName, String properties) {
197+
public String getTreatment(String key, String featureFlagName, EvaluationOptions evaluationOptions) {
197198
return null;
198199
}
199200

200201
@Override
201-
public String getTreatment(String key, String featureFlagName, Map<String, Object> attributes, String properties) {
202+
public String getTreatment(String key, String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
202203
return null;
203204
}
204205

205206
@Override
206-
public String getTreatment(Key key, String featureFlagName, Map<String, Object> attributes, String properties) {
207+
public String getTreatment(Key key, String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
207208
return null;
208209
}
209210

210211
@Override
211-
public Map<String, String> getTreatments(String key, List<String> featureFlagNames, String properties) {
212+
public Map<String, String> getTreatments(String key, List<String> featureFlagNames, EvaluationOptions evaluationOptions) {
212213
return new HashMap<>();
213214
}
214215

215216
@Override
216-
public Map<String, String> getTreatments(String key, List<String> featureFlagNames, Map<String, Object> attributes, String properties) {
217+
public Map<String, String> getTreatments(String key, List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
217218
return new HashMap<>();
218219
}
219220

220221
@Override
221-
public Map<String, String> getTreatments(Key key, List<String> featureFlagNames, Map<String, Object> attributes, String properties) {
222+
public Map<String, String> getTreatments(Key key, List<String> featureFlagNames, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
222223
return new HashMap<>();
223224
}
224225

225226
@Override
226-
public SplitResult getTreatmentWithConfig(String key, String featureFlagName, String properties) {
227+
public SplitResult getTreatmentWithConfig(String key, String featureFlagName, EvaluationOptions evaluationOptions) {
227228
return null;
228229
}
229230

230231
@Override
231-
public SplitResult getTreatmentWithConfig(Key key, String featureFlagName, Map<String, Object> attributes, String properties) {
232+
public SplitResult getTreatmentWithConfig(Key key, String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
232233
return null;
233234
}
234235

235236
@Override
236-
public SplitResult getTreatmentWithConfig(String key, String featureFlagName, Map<String, Object> attributes, String properties) {
237+
public SplitResult getTreatmentWithConfig(String key, String featureFlagName, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
237238
return null;
238239
}
239240

240241
@Override
241242
public Map<String, SplitResult> getTreatmentsWithConfig(String key, List<String> featureFlagNames, Map<String, Object> attributes,
242-
String properties) {
243+
EvaluationOptions evaluationOptions) {
243244
return new HashMap<>();
244245
}
245246

246247
@Override
247-
public Map<String, SplitResult> getTreatmentsWithConfig(String key, List<String> featureFlagNames, String properties) {
248+
public Map<String, SplitResult> getTreatmentsWithConfig(String key, List<String> featureFlagNames, EvaluationOptions evaluationOptions) {
248249
return new HashMap<>();
249250
}
250251

251252
@Override
252-
public Map<String, String> getTreatmentsByFlagSet(String key, String flagSet, Map<String, Object> attributes, String properties) {
253+
public Map<String, String> getTreatmentsByFlagSet(String key, String flagSet, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
253254
return new HashMap<>();
254255
}
255256

256257
@Override
257-
public Map<String, String> getTreatmentsByFlagSets(String key, List<String> flagSets, String properties) {
258+
public Map<String, String> getTreatmentsByFlagSets(String key, List<String> flagSets, EvaluationOptions evaluationOptions) {
258259
return new HashMap<>();
259260
}
260261

261262
@Override
262-
public Map<String, String> getTreatmentsByFlagSets(String key, List<String> flagSets, Map<String, Object> attributes, String properties) {
263+
public Map<String, String> getTreatmentsByFlagSets(String key, List<String> flagSets, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
263264
return new HashMap<>();
264265
}
265266

266267
@Override
267-
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String key, String flagSet, String properties) {
268+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String key, String flagSet, EvaluationOptions evaluationOptions) {
268269
return new HashMap<>();
269270
}
270271

271272
@Override
272-
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String key, String flagSet, Map<String, Object> attributes, String properties) {
273+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String key, String flagSet, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
273274
return new HashMap<>();
274275
}
275276

276277
@Override
277-
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String key, List<String> flagSets, String properties) {
278+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String key, List<String> flagSets, EvaluationOptions evaluationOptions) {
278279
return new HashMap<>();
279280
}
280281

281282
@Override
282283
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String key, List<String> flagSets, Map<String, Object> attributes,
283-
String properties) {
284+
EvaluationOptions evaluationOptions) {
284285
return new HashMap<>();
285286
}
286287

287288
@Override
288-
public Map<String, String> getTreatmentsByFlagSet(String key, String flagSet, String properties) {
289+
public Map<String, String> getTreatmentsByFlagSet(String key, String flagSet, EvaluationOptions evaluationOptions) {
289290
return new HashMap<>();
290291
}
291292

292293
@Override
293294
public Map<String, SplitResult> getTreatmentsWithConfig(Key key, List<String> featureFlagNames, Map<String, Object> attributes,
294-
String properties) {
295+
EvaluationOptions evaluationOptions) {
295296
return new HashMap<>();
296297
}
297298

298299
@Override
299-
public Map<String, String> getTreatmentsByFlagSet(Key key, String flagSet, Map<String, Object> attributes, String properties) {
300+
public Map<String, String> getTreatmentsByFlagSet(Key key, String flagSet, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
300301
return new HashMap<>();
301302
}
302303

303304
@Override
304-
public Map<String, String> getTreatmentsByFlagSets(Key key, List<String> flagSets, Map<String, Object> attributes, String properties) {
305+
public Map<String, String> getTreatmentsByFlagSets(Key key, List<String> flagSets, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
305306
return new HashMap<>();
306307
}
307308

308309
@Override
309-
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(Key key, String flagSet, Map<String, Object> attributes, String properties) {
310+
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(Key key, String flagSet, Map<String, Object> attributes, EvaluationOptions evaluationOptions) {
310311
return new HashMap<>();
311312
}
312313

313314
@Override
314315
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(Key key, List<String> flagSets, Map<String, Object> attributes,
315-
String properties) {
316+
EvaluationOptions evaluationOptions) {
316317
return new HashMap<>();
317318
}
318319

0 commit comments

Comments
 (0)