update e164 experiments to use account enrollment percentage

This commit is contained in:
adel-signal 2024-11-04 13:00:25 -08:00 committed by GitHub
parent 7633a9b07a
commit 45fad7a6a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 5 deletions

View File

@ -41,12 +41,11 @@ public class ExperimentEnrollmentManager {
.getConfiguration().getExperimentEnrollmentConfiguration(experimentName); .getConfiguration().getExperimentEnrollmentConfiguration(experimentName);
return maybeConfiguration return maybeConfiguration
.map(config -> isAccountEnrolled(accountUuid, config) .map(config -> isAccountEnrolled(accountUuid, config, experimentName).orElse(false))
.orElse(isEnrolled(accountUuid, config.getEnrollmentPercentage(), experimentName)) .orElse(false);
).orElse(false);
} }
Optional<Boolean> isAccountEnrolled(final UUID accountUuid, DynamicExperimentEnrollmentConfiguration config) { private Optional<Boolean> isAccountEnrolled(final UUID accountUuid, DynamicExperimentEnrollmentConfiguration config, String experimentName) {
if (config.getExcludedUuids().contains(accountUuid)) { if (config.getExcludedUuids().contains(accountUuid)) {
return Optional.of(false); return Optional.of(false);
} }
@ -55,6 +54,10 @@ public class ExperimentEnrollmentManager {
return Optional.of(r < config.getUuidSelector().getUuidEnrollmentPercentage()); return Optional.of(r < config.getUuidSelector().getUuidEnrollmentPercentage());
} }
if (isEnrolled(accountUuid, config.getEnrollmentPercentage(), experimentName)) {
return Optional.of(true);
}
return Optional.empty(); return Optional.empty();
} }
@ -64,7 +67,7 @@ public class ExperimentEnrollmentManager {
.getConfiguration().getExperimentEnrollmentConfiguration(experimentName); .getConfiguration().getExperimentEnrollmentConfiguration(experimentName);
return maybeConfiguration return maybeConfiguration
.flatMap(config -> isAccountEnrolled(accountUuid, config)) .flatMap(config -> isAccountEnrolled(accountUuid, config, experimentName))
.orElse(isEnrolled(e164, experimentName)); .orElse(isEnrolled(e164, experimentName));
} }

View File

@ -133,6 +133,7 @@ class ExperimentEnrollmentManagerTest {
when(preRegistrationExperimentEnrollmentConfiguration.getExcludedE164s()).thenReturn(Collections.emptySet()); when(preRegistrationExperimentEnrollmentConfiguration.getExcludedE164s()).thenReturn(Collections.emptySet());
when(preRegistrationExperimentEnrollmentConfiguration.getExcludedCountryCodes()).thenReturn(Collections.emptySet()); when(preRegistrationExperimentEnrollmentConfiguration.getExcludedCountryCodes()).thenReturn(Collections.emptySet());
// test UUID enrollment is prioritized
when(uuidSelector.getUuids()).thenReturn(Set.of(ACCOUNT_UUID)); when(uuidSelector.getUuids()).thenReturn(Set.of(ACCOUNT_UUID));
when(uuidSelector.getUuidEnrollmentPercentage()).thenReturn(100); when(uuidSelector.getUuidEnrollmentPercentage()).thenReturn(100);
assertTrue(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME)); assertTrue(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
@ -140,7 +141,14 @@ class ExperimentEnrollmentManagerTest {
assertFalse(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME)); assertFalse(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
assertFalse(experimentEnrollmentManager.isEnrolled(ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME)); assertFalse(experimentEnrollmentManager.isEnrolled(ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
// test fallback from UUID enrollment to general enrollment percentage
when(uuidSelector.getUuids()).thenReturn(Collections.emptySet()); when(uuidSelector.getUuids()).thenReturn(Collections.emptySet());
when(experimentEnrollmentConfiguration.getEnrollmentPercentage()).thenReturn(100);
assertTrue(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
assertTrue(experimentEnrollmentManager.isEnrolled(ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
// test fallback from UUID/general enrollment to e164 enrollment
when(experimentEnrollmentConfiguration.getEnrollmentPercentage()).thenReturn(0);
assertTrue(experimentEnrollmentManager.isEnrolled(ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME)); assertTrue(experimentEnrollmentManager.isEnrolled(ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
assertFalse(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME)); assertFalse(experimentEnrollmentManager.isEnrolled(NOT_ENROLLED_164, account.getUuid(), E164_AND_UUID_EXPERIMENT_NAME));
when(preRegistrationExperimentEnrollmentConfiguration.getEnrollmentPercentage()).thenReturn(100); when(preRegistrationExperimentEnrollmentConfiguration.getEnrollmentPercentage()).thenReturn(100);