|
25 | 25 | import androidx.annotation.NonNull;
|
26 | 26 | import com.google.android.gms.tasks.Task;
|
27 | 27 | import com.google.android.gms.tasks.TaskCompletionSource;
|
| 28 | +import com.google.common.util.concurrent.MoreExecutors; |
28 | 29 | import com.google.firebase.inject.Provider;
|
29 | 30 | import com.google.firebase.perf.FirebasePerformanceTestBase;
|
30 | 31 | import com.google.firebase.perf.provider.FirebasePerfProvider;
|
|
36 | 37 | import com.google.testing.timing.FakeScheduledExecutorService;
|
37 | 38 | import java.util.HashMap;
|
38 | 39 | import java.util.Map;
|
| 40 | +import java.util.concurrent.ExecutorService; |
39 | 41 | import java.util.concurrent.TimeUnit;
|
40 | 42 | import org.junit.Before;
|
41 | 43 | import org.junit.Test;
|
|
48 | 50 | public final class RemoteConfigManagerTest extends FirebasePerformanceTestBase {
|
49 | 51 |
|
50 | 52 | private static final String FIREPERF_FRC_NAMESPACE_NAME = "fireperf";
|
| 53 | + private static final FirebaseRemoteConfigValue TRUE_VALUE = |
| 54 | + new RemoteConfigValueImplForTest("true"); |
| 55 | + private static final FirebaseRemoteConfigValue FALSE_VALUE = |
| 56 | + new RemoteConfigValueImplForTest("false"); |
51 | 57 |
|
52 | 58 | @Mock private FirebaseRemoteConfig mockFirebaseRemoteConfig;
|
53 | 59 | @Mock private RemoteConfigComponent mockFirebaseRemoteConfigComponent;
|
54 | 60 | @Mock private Provider<RemoteConfigComponent> mockFirebaseRemoteConfigProvider;
|
55 |
| - @Mock private DeviceCacheManager mockCacheManager; |
56 | 61 |
|
| 62 | + private DeviceCacheManager cacheManager; |
| 63 | + private ExecutorService directExecutor; |
57 | 64 | private FakeScheduledExecutorService fakeExecutor;
|
58 | 65 |
|
59 | 66 | @Before
|
60 | 67 | public void setUp() {
|
61 | 68 | initMocks(this);
|
62 | 69 |
|
63 | 70 | fakeExecutor = new FakeScheduledExecutorService();
|
| 71 | + directExecutor = MoreExecutors.newDirectExecutorService(); |
| 72 | + cacheManager = new DeviceCacheManager(directExecutor); |
64 | 73 |
|
65 | 74 | when(mockFirebaseRemoteConfigProvider.get()).thenReturn(mockFirebaseRemoteConfigComponent);
|
66 | 75 | when(mockFirebaseRemoteConfigComponent.get(FIREPERF_FRC_NAMESPACE_NAME))
|
@@ -231,6 +240,29 @@ public void getString_validFrcValue_updatesWithNewValue() {
|
231 | 240 | assertThat(testRemoteConfigManager.getString("some_key3").isAvailable()).isFalse();
|
232 | 241 | }
|
233 | 242 |
|
| 243 | + @Test |
| 244 | + public void syncConfigValues_savesNewlyFetchedValueToDeviceCache() { |
| 245 | + Map<String, FirebaseRemoteConfigValue> configs = new HashMap<>(); |
| 246 | + ConfigurationConstants.ExperimentTTID flag = |
| 247 | + ConfigurationConstants.ExperimentTTID.getInstance(); |
| 248 | + configs.put(flag.getRemoteConfigFlag(), TRUE_VALUE); |
| 249 | + RemoteConfigManager testRemoteConfigManager = setupTestRemoteConfigManager(configs); |
| 250 | + |
| 251 | + assertThat(cacheManager.getBoolean(flag.getDeviceCacheFlag()).isAvailable()).isFalse(); |
| 252 | + |
| 253 | + configs.put(flag.getRemoteConfigFlag(), FALSE_VALUE); |
| 254 | + testRemoteConfigManager.syncConfigValues(configs); |
| 255 | + |
| 256 | + assertThat(cacheManager.getBoolean(flag.getDeviceCacheFlag()).isAvailable()).isTrue(); |
| 257 | + assertThat(cacheManager.getBoolean(flag.getDeviceCacheFlag()).get()).isFalse(); |
| 258 | + |
| 259 | + configs.put(flag.getRemoteConfigFlag(), TRUE_VALUE); |
| 260 | + testRemoteConfigManager.syncConfigValues(configs); |
| 261 | + |
| 262 | + assertThat(cacheManager.getBoolean(flag.getDeviceCacheFlag()).isAvailable()).isTrue(); |
| 263 | + assertThat(cacheManager.getBoolean(flag.getDeviceCacheFlag()).get()).isTrue(); |
| 264 | + } |
| 265 | + |
234 | 266 | @Test
|
235 | 267 | public void getRemoteConfigValueOrDefaultLong_invalidFrcValue_returnsDefaultValue() {
|
236 | 268 | Map<String, FirebaseRemoteConfigValue> configs = createDefaultRcConfigMap();
|
@@ -890,10 +922,10 @@ private RemoteConfigManager setupTestRemoteConfigManager(
|
890 | 922 | when(mockFirebaseRemoteConfig.getAll()).thenReturn(configs);
|
891 | 923 | if (initializeFrc) {
|
892 | 924 | return new RemoteConfigManager(
|
893 |
| - mockCacheManager, fakeExecutor, mockFirebaseRemoteConfig, appStartConfigFetchDelayInMs); |
| 925 | + cacheManager, fakeExecutor, mockFirebaseRemoteConfig, appStartConfigFetchDelayInMs); |
894 | 926 | } else {
|
895 | 927 | return new RemoteConfigManager(
|
896 |
| - mockCacheManager, |
| 928 | + cacheManager, |
897 | 929 | fakeExecutor,
|
898 | 930 | /* firebaseRemoteConfig= */ null,
|
899 | 931 | appStartConfigFetchDelayInMs);
|
|
0 commit comments