call ThreadLocalRandom.current at point of use only

This commit is contained in:
Jonathan Klabunde Tomer 2025-05-29 16:15:05 -07:00 committed by GitHub
parent bbee80dbd0
commit 36439b5252
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 6 deletions

View File

@ -10,6 +10,8 @@ import java.util.Optional;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Supplier;
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicExperimentEnrollmentConfiguration;
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicE164ExperimentEnrollmentConfiguration;
@ -19,18 +21,18 @@ import org.whispersystems.textsecuregcm.util.Util;
public class ExperimentEnrollmentManager {
private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
private final Random random;
private final Supplier<Random> random;
public ExperimentEnrollmentManager(
final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager) {
this(dynamicConfigurationManager, ThreadLocalRandom.current());
this(dynamicConfigurationManager, ThreadLocalRandom::current);
}
@VisibleForTesting
ExperimentEnrollmentManager(
final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager,
final Random random) {
final Supplier<Random> random) {
this.dynamicConfigurationManager = dynamicConfigurationManager;
this.random = random;
}
@ -50,7 +52,7 @@ public class ExperimentEnrollmentManager {
return Optional.of(false);
}
if (config.getUuidSelector().getUuids().contains(accountUuid)) {
final int r = random.nextInt(100);
final int r = random.get().nextInt(100);
return Optional.of(r < config.getUuidSelector().getUuidEnrollmentPercentage());
}

View File

@ -56,10 +56,11 @@ class ExperimentEnrollmentManagerTest {
@BeforeEach
void setUp() {
final DynamicConfigurationManager dynamicConfigurationManager = mock(DynamicConfigurationManager.class);
@SuppressWarnings("unchecked")
final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager = mock(DynamicConfigurationManager.class);
final DynamicConfiguration dynamicConfiguration = mock(DynamicConfiguration.class);
random = spy(new Random());
experimentEnrollmentManager = new ExperimentEnrollmentManager(dynamicConfigurationManager, random);
experimentEnrollmentManager = new ExperimentEnrollmentManager(dynamicConfigurationManager, () -> random);
uuidSelector = mock(DynamicExperimentEnrollmentConfiguration.UuidSelector.class);
when(uuidSelector.getUuidEnrollmentPercentage()).thenReturn(100);