1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.google.android.libraries.mobiledatadownload.testing; 17 18 import com.google.android.libraries.mobiledatadownload.Flags; 19 import com.google.common.base.Optional; 20 21 /** Default {@link Flags} with simple overrides for ease of testing. */ 22 public final class TestFlags implements Flags { 23 24 public Optional<Boolean> clearStateOnMddDisabled = Optional.absent(); 25 public Optional<Boolean> mddDeleteGroupsRemovedAccounts = Optional.absent(); 26 public Optional<Boolean> broadcastNewlyDownloadedGroups = Optional.absent(); 27 public Optional<Boolean> logFileGroupsWithFilesMissing = Optional.absent(); 28 public Optional<Boolean> deleteFileGroupsWithFilesMissing = Optional.absent(); 29 public Optional<Boolean> dumpMddInfo = Optional.absent(); 30 public Optional<Boolean> enableDebugUi = Optional.absent(); 31 public Optional<Boolean> enableClientErrorLogging = Optional.absent(); 32 public Optional<Integer> fileKeyVersion = Optional.absent(); 33 public Optional<Boolean> testOnlyFileKeyVersion = Optional.absent(); 34 public Optional<Boolean> enableCompressedFile = Optional.absent(); 35 public Optional<Boolean> enableZipFolder = Optional.absent(); 36 public Optional<Boolean> enableDeltaDownload = Optional.absent(); 37 public Optional<Boolean> enableMddGcmService = Optional.absent(); 38 public Optional<Boolean> enableSilentFeedback = Optional.absent(); 39 public Optional<Boolean> migrateToNewFileKey = Optional.absent(); 40 public Optional<Boolean> migrateFileExpirationPolicy = Optional.absent(); 41 public Optional<Boolean> downloadFirstOnWifiThenOnAnyNetwork = Optional.absent(); 42 public Optional<Boolean> logStorageStats = Optional.absent(); 43 public Optional<Boolean> logNetworkStats = Optional.absent(); 44 public Optional<Boolean> removeGroupkeysWithDownloadedFieldNotSet = Optional.absent(); 45 public Optional<Boolean> cacheLastLocation = Optional.absent(); 46 public Optional<Integer> locationCustomParamS2Level = Optional.absent(); 47 public Optional<Integer> locationTaskTimeoutSec = Optional.absent(); 48 public Optional<Boolean> addConfigsFromPhenotype = Optional.absent(); 49 public Optional<Boolean> enableMobileDataDownload = Optional.absent(); 50 public Optional<Integer> mddResetTrigger = Optional.absent(); 51 public Optional<Boolean> mddEnableDownloadPendingGroups = Optional.absent(); 52 public Optional<Boolean> mddEnableVerifyPendingGroups = Optional.absent(); 53 public Optional<Boolean> mddEnableGarbageCollection = Optional.absent(); 54 public Optional<Boolean> mddDeleteUninstalledApps = Optional.absent(); 55 public Optional<Boolean> enableMobstoreFileService = Optional.absent(); 56 public Optional<Boolean> enableDelayedDownload = Optional.absent(); 57 public Optional<Boolean> gcmRescheduleOnlyOncePerProcessStart = Optional.absent(); 58 public Optional<Boolean> gmsMddSwitchToCronet = Optional.absent(); 59 public Optional<Boolean> enableDaysSinceLastMaintenanceTracking = Optional.absent(); 60 public Optional<Boolean> enableSideloading = Optional.absent(); 61 public Optional<Boolean> enableDownloadStageExperimentIdPropagation = Optional.absent(); 62 public Optional<Boolean> enableIsolatedStructureVerification = Optional.absent(); 63 public Optional<Boolean> enableRngBasedDeviceStableSampling = Optional.absent(); 64 public Optional<Boolean> enableFileDownloadDedupByFileKey = Optional.absent(); 65 public Optional<Long> maintenanceGcmTaskPeriod = Optional.absent(); 66 public Optional<Long> chargingGcmTaskPeriod = Optional.absent(); 67 public Optional<Long> cellularChargingGcmTaskPeriod = Optional.absent(); 68 public Optional<Long> wifiChargingGcmTaskPeriod = Optional.absent(); 69 public Optional<Integer> mddDefaultSampleInterval = Optional.absent(); 70 public Optional<Integer> mddDownloadEventsSampleInterval = Optional.absent(); 71 public Optional<Integer> groupStatsLoggingSampleInterval = Optional.absent(); 72 public Optional<Integer> apiLoggingSampleInterval = Optional.absent(); 73 public Optional<Integer> cleanupLogLoggingSampleInterval = Optional.absent(); 74 public Optional<Integer> silentFeedbackSampleInterval = Optional.absent(); 75 public Optional<Integer> storageStatsLoggingSampleInterval = Optional.absent(); 76 public Optional<Integer> networkStatsLoggingSampleInterval = Optional.absent(); 77 public Optional<Integer> mobstoreFileServiceStatsSampleInterval = Optional.absent(); 78 public Optional<Integer> mddAndroidSharingSampleInterval = Optional.absent(); 79 public Optional<Boolean> downloaderEnforceHttps = Optional.absent(); 80 public Optional<Boolean> enforceLowStorageBehavior = Optional.absent(); 81 public Optional<Integer> absFreeSpaceAfterDownload = Optional.absent(); 82 public Optional<Integer> absFreeSpaceAfterDownloadLowStorageAllowed = Optional.absent(); 83 public Optional<Integer> absFreeSpaceAfterDownloadExtremelyLowStorageAllowed = Optional.absent(); 84 public Optional<Float> fractionFreeSpaceAfterDownload = Optional.absent(); 85 public Optional<Integer> timeToWaitForDownloader = Optional.absent(); 86 public Optional<Integer> downloaderMaxThreads = Optional.absent(); 87 public Optional<Integer> downloaderMaxRetryOnChecksumMismatchCount = Optional.absent(); 88 89 private final Flags delegate = new Flags() {}; 90 91 @Override clearStateOnMddDisabled()92 public boolean clearStateOnMddDisabled() { 93 return clearStateOnMddDisabled.or(delegate.clearStateOnMddDisabled()); 94 } 95 96 @Override mddDeleteGroupsRemovedAccounts()97 public boolean mddDeleteGroupsRemovedAccounts() { 98 return mddDeleteGroupsRemovedAccounts.or(delegate.mddDeleteGroupsRemovedAccounts()); 99 } 100 101 @Override broadcastNewlyDownloadedGroups()102 public boolean broadcastNewlyDownloadedGroups() { 103 return broadcastNewlyDownloadedGroups.or(delegate.broadcastNewlyDownloadedGroups()); 104 } 105 106 @Override logFileGroupsWithFilesMissing()107 public boolean logFileGroupsWithFilesMissing() { 108 return logFileGroupsWithFilesMissing.or(delegate.logFileGroupsWithFilesMissing()); 109 } 110 111 @Override deleteFileGroupsWithFilesMissing()112 public boolean deleteFileGroupsWithFilesMissing() { 113 return deleteFileGroupsWithFilesMissing.or(delegate.deleteFileGroupsWithFilesMissing()); 114 } 115 116 @Override dumpMddInfo()117 public boolean dumpMddInfo() { 118 return dumpMddInfo.or(delegate.dumpMddInfo()); 119 } 120 121 @Override enableDebugUi()122 public boolean enableDebugUi() { 123 return enableDebugUi.or(delegate.enableDebugUi()); 124 } 125 126 @Override enableClientErrorLogging()127 public boolean enableClientErrorLogging() { 128 return enableClientErrorLogging.or(delegate.enableClientErrorLogging()); 129 } 130 131 @Override fileKeyVersion()132 public int fileKeyVersion() { 133 return fileKeyVersion.or(delegate.fileKeyVersion()); 134 } 135 136 @Override testOnlyFileKeyVersion()137 public boolean testOnlyFileKeyVersion() { 138 return testOnlyFileKeyVersion.or(delegate.testOnlyFileKeyVersion()); 139 } 140 141 @Override enableCompressedFile()142 public boolean enableCompressedFile() { 143 return enableCompressedFile.or(delegate.enableCompressedFile()); 144 } 145 146 @Override enableZipFolder()147 public boolean enableZipFolder() { 148 return enableZipFolder.or(delegate.enableZipFolder()); 149 } 150 151 @Override enableDeltaDownload()152 public boolean enableDeltaDownload() { 153 return enableDeltaDownload.or(delegate.enableDeltaDownload()); 154 } 155 156 @Override enableMddGcmService()157 public boolean enableMddGcmService() { 158 return enableMddGcmService.or(delegate.enableMddGcmService()); 159 } 160 161 @Override enableSilentFeedback()162 public boolean enableSilentFeedback() { 163 return enableSilentFeedback.or(delegate.enableSilentFeedback()); 164 } 165 166 @Override migrateToNewFileKey()167 public boolean migrateToNewFileKey() { 168 return migrateToNewFileKey.or(delegate.migrateToNewFileKey()); 169 } 170 171 @Override migrateFileExpirationPolicy()172 public boolean migrateFileExpirationPolicy() { 173 return migrateFileExpirationPolicy.or(delegate.migrateFileExpirationPolicy()); 174 } 175 176 @Override downloadFirstOnWifiThenOnAnyNetwork()177 public boolean downloadFirstOnWifiThenOnAnyNetwork() { 178 return downloadFirstOnWifiThenOnAnyNetwork.or(delegate.downloadFirstOnWifiThenOnAnyNetwork()); 179 } 180 181 @Override logStorageStats()182 public boolean logStorageStats() { 183 return logStorageStats.or(delegate.logStorageStats()); 184 } 185 186 @Override logNetworkStats()187 public boolean logNetworkStats() { 188 return logNetworkStats.or(delegate.logNetworkStats()); 189 } 190 191 @Override removeGroupkeysWithDownloadedFieldNotSet()192 public boolean removeGroupkeysWithDownloadedFieldNotSet() { 193 return removeGroupkeysWithDownloadedFieldNotSet.or( 194 delegate.removeGroupkeysWithDownloadedFieldNotSet()); 195 } 196 197 @Override cacheLastLocation()198 public boolean cacheLastLocation() { 199 return cacheLastLocation.or(delegate.cacheLastLocation()); 200 } 201 202 @Override locationCustomParamS2Level()203 public int locationCustomParamS2Level() { 204 return locationCustomParamS2Level.or(delegate.locationCustomParamS2Level()); 205 } 206 207 @Override locationTaskTimeoutSec()208 public int locationTaskTimeoutSec() { 209 return locationTaskTimeoutSec.or(delegate.locationTaskTimeoutSec()); 210 } 211 212 @Override addConfigsFromPhenotype()213 public boolean addConfigsFromPhenotype() { 214 return addConfigsFromPhenotype.or(delegate.addConfigsFromPhenotype()); 215 } 216 217 @Override enableMobileDataDownload()218 public boolean enableMobileDataDownload() { 219 return enableMobileDataDownload.or(delegate.enableMobileDataDownload()); 220 } 221 222 @Override mddResetTrigger()223 public int mddResetTrigger() { 224 return mddResetTrigger.or(delegate.mddResetTrigger()); 225 } 226 227 @Override mddEnableDownloadPendingGroups()228 public boolean mddEnableDownloadPendingGroups() { 229 return mddEnableDownloadPendingGroups.or(delegate.mddEnableDownloadPendingGroups()); 230 } 231 232 @Override mddEnableVerifyPendingGroups()233 public boolean mddEnableVerifyPendingGroups() { 234 return mddEnableVerifyPendingGroups.or(delegate.mddEnableVerifyPendingGroups()); 235 } 236 237 @Override mddEnableGarbageCollection()238 public boolean mddEnableGarbageCollection() { 239 return mddEnableGarbageCollection.or(delegate.mddEnableGarbageCollection()); 240 } 241 242 @Override mddDeleteUninstalledApps()243 public boolean mddDeleteUninstalledApps() { 244 return mddDeleteUninstalledApps.or(delegate.mddDeleteUninstalledApps()); 245 } 246 247 @Override enableMobstoreFileService()248 public boolean enableMobstoreFileService() { 249 return enableMobstoreFileService.or(delegate.enableMobstoreFileService()); 250 } 251 252 @Override enableDelayedDownload()253 public boolean enableDelayedDownload() { 254 return enableDelayedDownload.or(delegate.enableDelayedDownload()); 255 } 256 257 @Override gcmRescheduleOnlyOncePerProcessStart()258 public boolean gcmRescheduleOnlyOncePerProcessStart() { 259 return gcmRescheduleOnlyOncePerProcessStart.or(delegate.gcmRescheduleOnlyOncePerProcessStart()); 260 } 261 262 @Override gmsMddSwitchToCronet()263 public boolean gmsMddSwitchToCronet() { 264 return gmsMddSwitchToCronet.or(delegate.gmsMddSwitchToCronet()); 265 } 266 267 @Override enableDaysSinceLastMaintenanceTracking()268 public boolean enableDaysSinceLastMaintenanceTracking() { 269 return enableDaysSinceLastMaintenanceTracking.or( 270 delegate.enableDaysSinceLastMaintenanceTracking()); 271 } 272 273 @Override enableSideloading()274 public boolean enableSideloading() { 275 return enableSideloading.or(delegate.enableSideloading()); 276 } 277 278 @Override enableDownloadStageExperimentIdPropagation()279 public boolean enableDownloadStageExperimentIdPropagation() { 280 return enableDownloadStageExperimentIdPropagation.or( 281 delegate.enableDownloadStageExperimentIdPropagation()); 282 } 283 284 @Override enableIsolatedStructureVerification()285 public boolean enableIsolatedStructureVerification() { 286 return enableIsolatedStructureVerification.or(delegate.enableIsolatedStructureVerification()); 287 } 288 289 @Override enableRngBasedDeviceStableSampling()290 public boolean enableRngBasedDeviceStableSampling() { 291 return enableRngBasedDeviceStableSampling.or(delegate.enableRngBasedDeviceStableSampling()); 292 } 293 294 @Override enableFileDownloadDedupByFileKey()295 public boolean enableFileDownloadDedupByFileKey() { 296 return enableFileDownloadDedupByFileKey.or(delegate.enableRngBasedDeviceStableSampling()); 297 } 298 299 @Override maintenanceGcmTaskPeriod()300 public long maintenanceGcmTaskPeriod() { 301 return maintenanceGcmTaskPeriod.or(delegate.maintenanceGcmTaskPeriod()); 302 } 303 304 @Override chargingGcmTaskPeriod()305 public long chargingGcmTaskPeriod() { 306 return chargingGcmTaskPeriod.or(delegate.chargingGcmTaskPeriod()); 307 } 308 309 @Override cellularChargingGcmTaskPeriod()310 public long cellularChargingGcmTaskPeriod() { 311 return cellularChargingGcmTaskPeriod.or(delegate.cellularChargingGcmTaskPeriod()); 312 } 313 314 @Override wifiChargingGcmTaskPeriod()315 public long wifiChargingGcmTaskPeriod() { 316 return wifiChargingGcmTaskPeriod.or(delegate.wifiChargingGcmTaskPeriod()); 317 } 318 319 @Override mddDefaultSampleInterval()320 public int mddDefaultSampleInterval() { 321 return mddDefaultSampleInterval.or(delegate.mddDefaultSampleInterval()); 322 } 323 324 @Override mddDownloadEventsSampleInterval()325 public int mddDownloadEventsSampleInterval() { 326 return mddDownloadEventsSampleInterval.or(delegate.mddDownloadEventsSampleInterval()); 327 } 328 329 @Override groupStatsLoggingSampleInterval()330 public int groupStatsLoggingSampleInterval() { 331 return groupStatsLoggingSampleInterval.or(delegate.groupStatsLoggingSampleInterval()); 332 } 333 334 @Override apiLoggingSampleInterval()335 public int apiLoggingSampleInterval() { 336 return apiLoggingSampleInterval.or(delegate.apiLoggingSampleInterval()); 337 } 338 339 @Override cleanupLogLoggingSampleInterval()340 public int cleanupLogLoggingSampleInterval() { 341 return cleanupLogLoggingSampleInterval.or(delegate.cleanupLogLoggingSampleInterval()); 342 } 343 344 @Override silentFeedbackSampleInterval()345 public int silentFeedbackSampleInterval() { 346 return silentFeedbackSampleInterval.or(delegate.silentFeedbackSampleInterval()); 347 } 348 349 @Override storageStatsLoggingSampleInterval()350 public int storageStatsLoggingSampleInterval() { 351 return storageStatsLoggingSampleInterval.or(delegate.storageStatsLoggingSampleInterval()); 352 } 353 354 @Override networkStatsLoggingSampleInterval()355 public int networkStatsLoggingSampleInterval() { 356 return networkStatsLoggingSampleInterval.or(delegate.networkStatsLoggingSampleInterval()); 357 } 358 359 @Override mobstoreFileServiceStatsSampleInterval()360 public int mobstoreFileServiceStatsSampleInterval() { 361 return mobstoreFileServiceStatsSampleInterval.or( 362 delegate.mobstoreFileServiceStatsSampleInterval()); 363 } 364 365 @Override mddAndroidSharingSampleInterval()366 public int mddAndroidSharingSampleInterval() { 367 return mddAndroidSharingSampleInterval.or(delegate.mddAndroidSharingSampleInterval()); 368 } 369 370 @Override downloaderEnforceHttps()371 public boolean downloaderEnforceHttps() { 372 return downloaderEnforceHttps.or(delegate.downloaderEnforceHttps()); 373 } 374 375 @Override enforceLowStorageBehavior()376 public boolean enforceLowStorageBehavior() { 377 return enforceLowStorageBehavior.or(delegate.enforceLowStorageBehavior()); 378 } 379 380 @Override absFreeSpaceAfterDownload()381 public int absFreeSpaceAfterDownload() { 382 return absFreeSpaceAfterDownload.or(delegate.absFreeSpaceAfterDownload()); 383 } 384 385 @Override absFreeSpaceAfterDownloadLowStorageAllowed()386 public int absFreeSpaceAfterDownloadLowStorageAllowed() { 387 return absFreeSpaceAfterDownloadLowStorageAllowed.or( 388 delegate.absFreeSpaceAfterDownloadLowStorageAllowed()); 389 } 390 391 @Override absFreeSpaceAfterDownloadExtremelyLowStorageAllowed()392 public int absFreeSpaceAfterDownloadExtremelyLowStorageAllowed() { 393 return absFreeSpaceAfterDownloadExtremelyLowStorageAllowed.or( 394 delegate.absFreeSpaceAfterDownloadExtremelyLowStorageAllowed()); 395 } 396 397 @Override fractionFreeSpaceAfterDownload()398 public float fractionFreeSpaceAfterDownload() { 399 return fractionFreeSpaceAfterDownload.or(delegate.fractionFreeSpaceAfterDownload()); 400 } 401 402 @Override timeToWaitForDownloader()403 public int timeToWaitForDownloader() { 404 return timeToWaitForDownloader.or(delegate.timeToWaitForDownloader()); 405 } 406 407 @Override downloaderMaxThreads()408 public int downloaderMaxThreads() { 409 return downloaderMaxThreads.or(delegate.downloaderMaxThreads()); 410 } 411 412 @Override downloaderMaxRetryOnChecksumMismatchCount()413 public int downloaderMaxRetryOnChecksumMismatchCount() { 414 return downloaderMaxRetryOnChecksumMismatchCount.or( 415 delegate.downloaderMaxRetryOnChecksumMismatchCount()); 416 } 417 } 418