Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions splitio_android/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@ rootProject.allprojects {
apply plugin: 'com.android.library'

android {
compileSdkVersion 31
compileSdk 31

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
minSdkVersion 16
minSdk 16

consumerProguardFiles 'split-proguard-rules.pro'
}

dependencies {
implementation 'io.split.client:android-client:3.3.0'
implementation 'io.split.client:android-client:3.4.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.13'

testImplementation 'junit:junit:4.13.2'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,12 @@ interface EvaluationWrapper {
SplitResult getTreatmentWithConfig(String matchingKey, String bucketingKey, String splitName, Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfig(String matchingKey, String bucketingKey, List<String> splitNames, Map<String, Object> attributes);

Map<String, String> getTreatmentsByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes);

Map<String, String> getTreatmentsByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes);

Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes);
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class SplitClientConfigHelper {
private static final String SYNC_CONFIG = "syncConfig";
private static final String SYNC_CONFIG_NAMES = "syncConfigNames";
private static final String SYNC_CONFIG_PREFIXES = "syncConfigPrefixes";
private static final String SYNC_CONFIG_SETS = "syncConfigFlagSets";
private static final String IMPRESSIONS_MODE = "impressionsMode";
private static final String SYNC_ENABLED = "syncEnabled";
private static final String USER_CONSENT = "userConsent";
Expand Down Expand Up @@ -152,14 +153,19 @@ static SplitClientConfig fromMap(@NonNull Map<String, Object> configurationMap,
if (syncConfig != null) {
List<String> names = syncConfig.get(SYNC_CONFIG_NAMES);
List<String> prefixes = syncConfig.get(SYNC_CONFIG_PREFIXES);
List<String> flagSets = syncConfig.get(SYNC_CONFIG_SETS);

SyncConfig.Builder syncConfigBuilder = SyncConfig.builder();
if (names != null && !names.isEmpty()) {
syncConfigBuilder.addSplitFilter(SplitFilter.byName(names));
}
if (flagSets != null && !flagSets.isEmpty()) {
syncConfigBuilder.addSplitFilter(SplitFilter.bySet(flagSets));
} else {
if (names != null && !names.isEmpty()) {
syncConfigBuilder.addSplitFilter(SplitFilter.byName(names));
}

if (prefixes != null && !prefixes.isEmpty()) {
syncConfigBuilder.addSplitFilter(SplitFilter.byPrefix(prefixes));
if (prefixes != null && !prefixes.isEmpty()) {
syncConfigBuilder.addSplitFilter(SplitFilter.byPrefix(prefixes));
}
}

builder.syncConfig(syncConfigBuilder.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,46 @@ public Map<String, SplitResult> getTreatmentsWithConfig(String matchingKey, Stri
return client.getTreatmentsWithConfig(splitNames, attributes);
}

@Override
public Map<String, String> getTreatmentsByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes) {
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
if (client == null) {
return new HashMap<>();
}

return client.getTreatmentsByFlagSet(flagSet, attributes);
}

@Override
public Map<String, String> getTreatmentsByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes) {
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
if (client == null) {
return new HashMap<>();
}

return client.getTreatmentsByFlagSets(flagSets, attributes);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSet(String matchingKey, String bucketingKey, String flagSet, Map<String, Object> attributes) {
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
if (client == null) {
return new HashMap<>();
}

return client.getTreatmentsWithConfigByFlagSet(flagSet, attributes);
}

@Override
public Map<String, SplitResult> getTreatmentsWithConfigByFlagSets(String matchingKey, String bucketingKey, List<String> flagSets, Map<String, Object> attributes) {
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
if (client == null) {
return new HashMap<>();
}

return client.getTreatmentsWithConfigByFlagSets(flagSets, attributes);
}

@Override
public boolean setAttribute(String matchingKey, @Nullable String bucketingKey, String attributeName, Object value) {
SplitClient client = getInitializedClient(matchingKey, bucketingKey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ public void configValuesAreMappedCorrectly() {
configValues.put("authServiceEndpoint", "sseAuthServiceEndpoint.split.io");
configValues.put("streamingServiceEndpoint", "streamingServiceEndpoint.split.io");
configValues.put("telemetryServiceEndpoint", "telemetryServiceEndpoint.split.io");
Map<String, List<String>> syncConfigMap = new HashMap<>();
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
configValues.put("syncConfig", syncConfigMap);
configValues.put("impressionsMode", "none");
configValues.put("syncEnabled", false);
configValues.put("userConsent", "declined");
Expand All @@ -73,10 +69,6 @@ public void configValuesAreMappedCorrectly() {
assertEquals("sseAuthServiceEndpoint.split.io", splitClientConfig.authServiceUrl());
assertEquals("streamingServiceEndpoint.split.io", splitClientConfig.streamingServiceUrl());
assertEquals("telemetryServiceEndpoint.split.io", splitClientConfig.telemetryEndpoint());
assertEquals(Arrays.asList("split1", "split2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
assertEquals(SplitFilter.Type.BY_NAME, splitClientConfig.syncConfig().getFilters().get(0).getType());
assertEquals(Arrays.asList("split_", "my_split_"), splitClientConfig.syncConfig().getFilters().get(1).getValues());
assertEquals(SplitFilter.Type.BY_PREFIX, splitClientConfig.syncConfig().getFilters().get(1).getType());
assertEquals(ImpressionsMode.NONE, splitClientConfig.impressionsMode());
assertFalse(splitClientConfig.syncEnabled());
assertEquals(UserConsent.DECLINED, splitClientConfig.userConsent());
Expand Down Expand Up @@ -151,4 +143,39 @@ public void impressionsModeValuesAreMappedCorrectly() {
assertEquals(ImpressionsMode.NONE, noneConfig.impressionsMode());
assertEquals(ImpressionsMode.OPTIMIZED, optimizedConfig.impressionsMode());
}

@Test
public void syncConfigWithoutFlagSetsIsMappedCorrectly() {
Map<String, Object> configValues = new HashMap<>();
Map<String, List<String>> syncConfigMap = new HashMap<>();
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
configValues.put("syncConfig", syncConfigMap);

SplitClientConfig splitClientConfig = SplitClientConfigHelper
.fromMap(configValues, mock(ImpressionListener.class));

assertEquals(2, splitClientConfig.syncConfig().getFilters().size());
assertEquals(Arrays.asList("split1", "split2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
assertEquals(SplitFilter.Type.BY_NAME, splitClientConfig.syncConfig().getFilters().get(0).getType());
assertEquals(Arrays.asList("split_", "my_split_"), splitClientConfig.syncConfig().getFilters().get(1).getValues());
assertEquals(SplitFilter.Type.BY_PREFIX, splitClientConfig.syncConfig().getFilters().get(1).getType());
}

@Test
public void syncConfigWithFlagSetsIsMappedCorrectly() {
Map<String, Object> configValues = new HashMap<>();
Map<String, List<String>> syncConfigMap = new HashMap<>();
syncConfigMap.put("syncConfigNames", Arrays.asList("split1", "split2"));
syncConfigMap.put("syncConfigPrefixes", Arrays.asList("split_", "my_split_"));
syncConfigMap.put("syncConfigFlagSets", Arrays.asList("set_1", "set_2"));
configValues.put("syncConfig", syncConfigMap);

SplitClientConfig splitClientConfig = SplitClientConfigHelper
.fromMap(configValues, mock(ImpressionListener.class));

assertEquals(1, splitClientConfig.syncConfig().getFilters().size());
assertEquals(Arrays.asList("set_1", "set_2"), splitClientConfig.syncConfig().getFilters().get(0).getValues());
assertEquals(SplitFilter.Type.BY_SET, splitClientConfig.syncConfig().getFilters().get(0).getType());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

Expand Down Expand Up @@ -100,6 +101,56 @@ public void testGetTreatmentsWithConfig() {
verify(clientMock).getTreatmentsWithConfig(Arrays.asList("split1", "split2"), Collections.singletonMap("age", 50));
}

@Test
public void testGetTreatmentsByFlagSet() {
SplitClient clientMock = mock(SplitClient.class);
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);

Map<String, Object> attrs = Collections.singletonMap("age", 50);
mSplitWrapper.getTreatmentsByFlagSet("key", null, "flag-set", attrs);

verify(clientMock).getTreatmentsByFlagSet("flag-set", attrs);
}

@Test
public void testGetTreatmentsByFlagSets() {
SplitClient clientMock = mock(SplitClient.class);
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);

Map<String, Object> attrs = Collections.singletonMap("age", 50);
List<String> sets = Arrays.asList("set_1", "set_2");
mSplitWrapper.getTreatmentsByFlagSets("key", null, sets, attrs);

verify(clientMock).getTreatmentsByFlagSets(sets, attrs);
}

@Test
public void testGetTreatmentsWithConfigByFlagSet() {
SplitClient clientMock = mock(SplitClient.class);
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);

Map<String, Object> attrs = Collections.singletonMap("age", 50);
mSplitWrapper.getTreatmentsWithConfigByFlagSet("key", null,"set_1", attrs);

verify(clientMock).getTreatmentsWithConfigByFlagSet("set_1", attrs);
}

@Test
public void testGetTreatmentsWithConfigByFlagSets() {
SplitClient clientMock = mock(SplitClient.class);
when(mSplitFactory.client("key", null)).thenReturn(clientMock);
when(mUsedKeys.contains(new Key("key", null))).thenReturn(true);

Map<String, Object> attrs = Collections.singletonMap("age", 50);
List<String> sets = Arrays.asList("set_1", "set_2");
mSplitWrapper.getTreatmentsWithConfigByFlagSets("key", null, sets, attrs);

verify(clientMock).getTreatmentsWithConfigByFlagSets(sets, attrs);
}

@Test
public void testTrack() {
SplitClient clientMock = mock(SplitClient.class);
Expand Down