1 /* 2 * Copyright (C) 2023 The Android Open Source Project 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 17 package com.android.ondevicepersonalization.services; 18 19 import static com.android.adservices.shared.common.flags.ModuleSharedFlags.BACKGROUND_JOB_SAMPLING_LOGGING_RATE; 20 import static com.android.adservices.shared.common.flags.ModuleSharedFlags.DEFAULT_JOB_SCHEDULING_LOGGING_SAMPLING_RATE; 21 import static com.android.ondevicepersonalization.services.Flags.APP_REQUEST_FLOW_DEADLINE_SECONDS; 22 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS; 23 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORTING_ENABLED; 24 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS; 25 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORTING_THRESHOLD; 26 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORTING_URL_PATH; 27 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_RETRY_LIMIT; 28 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_TIMEOUT_SECONDS; 29 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_AGGREGATED_ERROR_REPORT_TTL_DAYS; 30 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING_PAYLOAD; 31 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_APP_INSTALL_HISTORY_TTL_MILLIS; 32 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_CALLER_APP_ALLOW_LIST; 33 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_CLIENT_ERROR_LOGGING_ENABLED; 34 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ENCRYPTION_KEY_MAX_AGE_SECONDS; 35 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ENCRYPTION_KEY_URL; 36 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ISOLATED_SERVICE_ALLOW_LIST; 37 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_IS_FEATURE_ENABLED_API_ENABLED; 38 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB; 39 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_MODULE_JOB_POLICY; 40 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_OUTPUT_DATA_ALLOW_LIST; 41 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_PLUGIN_PROCESS_RUNNER_ENABLED; 42 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED; 43 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB; 44 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB; 45 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB; 46 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB; 47 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_SPE_PILOT_JOB_ENABLED; 48 import static com.android.ondevicepersonalization.services.Flags.DEFAULT_TRUSTED_PARTNER_APPS_LIST; 49 import static com.android.ondevicepersonalization.services.Flags.DOWNLOAD_FLOW_DEADLINE_SECONDS; 50 import static com.android.ondevicepersonalization.services.Flags.ENABLE_PERSONALIZATION_STATUS_OVERRIDE; 51 import static com.android.ondevicepersonalization.services.Flags.EXAMPLE_STORE_FLOW_DEADLINE_SECONDS; 52 import static com.android.ondevicepersonalization.services.Flags.GLOBAL_KILL_SWITCH; 53 import static com.android.ondevicepersonalization.services.Flags.IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED; 54 import static com.android.ondevicepersonalization.services.Flags.PERSONALIZATION_STATUS_OVERRIDE_VALUE; 55 import static com.android.ondevicepersonalization.services.Flags.RENDER_FLOW_DEADLINE_SECONDS; 56 import static com.android.ondevicepersonalization.services.Flags.WEB_TRIGGER_FLOW_DEADLINE_SECONDS; 57 import static com.android.ondevicepersonalization.services.Flags.WEB_VIEW_FLOW_DEADLINE_SECONDS; 58 import static com.android.ondevicepersonalization.services.FlagsConstants.APP_INSTALL_HISTORY_TTL; 59 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS; 60 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_HTTP_RETRY_LIMIT; 61 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_HTTP_TIMEOUT_SECONDS; 62 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS; 63 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_PATH; 64 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORTING_THRESHOLD; 65 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_AGGREGATED_ERROR_REPORT_TTL_DAYS; 66 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING; 67 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_APP_REQUEST_FLOW_DEADLINE_SECONDS; 68 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_CALLER_APP_ALLOW_LIST; 69 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_DOWNLOAD_FLOW_DEADLINE_SECONDS; 70 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENABLE_AGGREGATED_ERROR_REPORTING; 71 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE; 72 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENCRYPTION_KEY_MAX_AGE_SECONDS; 73 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ENCRYPTION_KEY_URL; 74 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_EXAMPLE_STORE_FLOW_DEADLINE_SECONDS; 75 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_GLOBAL_KILL_SWITCH; 76 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ISOLATED_SERVICE_ALLOW_LIST; 77 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ISOLATED_SERVICE_DEBUGGING_ENABLED; 78 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED; 79 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_IS_FEATURE_ENABLED_API_ENABLED; 80 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOB_SAMPLING_LOGGING_RATE; 81 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_ENABLE_CLIENT_ERROR_LOGGING; 82 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_JOB_SCHEDULING_LOGGING_ENABLED; 83 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_JOB_SCHEDULING_LOGGING_SAMPLING_RATE; 84 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_MODULE_JOB_POLICY; 85 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_SPE_PILOT_JOB_ENABLED; 86 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_OUTPUT_DATA_ALLOW_LIST; 87 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE; 88 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_PLUGIN_PROCESS_RUNNER_ENABLED; 89 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_RENDER_FLOW_DEADLINE_SECONDS; 90 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED; 91 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB; 92 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB; 93 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB; 94 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB; 95 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB; 96 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_TRUSTED_PARTNER_APPS_LIST; 97 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_WEB_TRIGGER_FLOW_DEADLINE_SECONDS; 98 import static com.android.ondevicepersonalization.services.FlagsConstants.KEY_WEB_VIEW_FLOW_DEADLINE_SECONDS; 99 100 import static com.google.common.truth.Truth.assertThat; 101 102 import android.provider.DeviceConfig; 103 104 import androidx.test.ext.junit.runners.AndroidJUnit4; 105 106 import com.android.modules.utils.build.SdkLevel; 107 import com.android.modules.utils.testing.TestableDeviceConfig; 108 109 import org.junit.Before; 110 import org.junit.Ignore; 111 import org.junit.Rule; 112 import org.junit.Test; 113 import org.junit.runner.RunWith; 114 115 import java.util.function.Supplier; 116 117 /** Unit tests for {@link com.android.ondevicepersonalization.services.PhFlags} */ 118 @RunWith(AndroidJUnit4.class) 119 @Ignore("b/375661140") 120 public class PhFlagsTest { 121 @Rule 122 public final TestableDeviceConfig.TestableDeviceConfigRule mDeviceConfigRule = 123 new TestableDeviceConfig.TestableDeviceConfigRule(); 124 125 /** 126 * Get necessary permissions to access Setting.Config API and set up context 127 */ 128 @Before setUpContext()129 public void setUpContext() throws Exception { 130 PhFlagsTestUtil.setUpDeviceConfigPermissions(); 131 } 132 133 @Test testGetGlobalKillSwitch()134 public void testGetGlobalKillSwitch() { 135 // Without any overriding, the value is the hard coded constant. 136 DeviceConfig.setProperty( 137 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 138 KEY_GLOBAL_KILL_SWITCH, 139 Boolean.toString(GLOBAL_KILL_SWITCH), 140 /* makeDefault */ false); 141 assertThat(FlagsFactory.getFlags().getGlobalKillSwitch()).isEqualTo(GLOBAL_KILL_SWITCH); 142 143 // Now overriding with the value from PH. 144 final boolean phOverridingValue = true; 145 DeviceConfig.setProperty( 146 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 147 KEY_GLOBAL_KILL_SWITCH, 148 Boolean.toString(phOverridingValue), 149 /* makeDefault */ false); 150 151 Flags phFlags = FlagsFactory.getFlags(); 152 assertThat(phFlags.getGlobalKillSwitch()).isEqualTo(phOverridingValue); 153 } 154 155 @Test testIsPersonalizationStatusOverrideEnabled()156 public void testIsPersonalizationStatusOverrideEnabled() { 157 PhFlagsTestUtil.disableGlobalKillSwitch(); 158 DeviceConfig.setProperty( 159 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 160 KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE, 161 Boolean.toString(ENABLE_PERSONALIZATION_STATUS_OVERRIDE), 162 /* makeDefault */ false); 163 assertThat(FlagsFactory.getFlags().isPersonalizationStatusOverrideEnabled()).isEqualTo( 164 ENABLE_PERSONALIZATION_STATUS_OVERRIDE); 165 166 final boolean phOverridingValue = true; 167 DeviceConfig.setProperty( 168 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 169 KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE, 170 Boolean.toString(phOverridingValue), 171 /* makeDefault */ false); 172 173 Flags phFlags = FlagsFactory.getFlags(); 174 assertThat(phFlags.isPersonalizationStatusOverrideEnabled()).isEqualTo(phOverridingValue); 175 } 176 177 @Test testGetPersonalizationStatusOverrideValue()178 public void testGetPersonalizationStatusOverrideValue() { 179 PhFlagsTestUtil.disableGlobalKillSwitch(); 180 DeviceConfig.setProperty( 181 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 182 KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE, 183 Boolean.toString(PERSONALIZATION_STATUS_OVERRIDE_VALUE), 184 /* makeDefault */ false); 185 assertThat(FlagsFactory.getFlags().getPersonalizationStatusOverrideValue()).isEqualTo( 186 PERSONALIZATION_STATUS_OVERRIDE_VALUE); 187 188 final boolean phOverridingValue = true; 189 DeviceConfig.setProperty( 190 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 191 KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE, 192 Boolean.toString(phOverridingValue), 193 /* makeDefault */ false); 194 195 Flags phFlags = FlagsFactory.getFlags(); 196 assertThat(phFlags.getPersonalizationStatusOverrideValue()).isEqualTo(phOverridingValue); 197 } 198 199 @Test testWebTriggerFlowDeadlineSeconds()200 public void testWebTriggerFlowDeadlineSeconds() { 201 assertThat(FlagsFactory.getFlags().getWebTriggerFlowDeadlineSeconds()) 202 .isEqualTo(WEB_TRIGGER_FLOW_DEADLINE_SECONDS); 203 204 final int test_deadline = 10; 205 206 DeviceConfig.setProperty( 207 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 208 KEY_WEB_TRIGGER_FLOW_DEADLINE_SECONDS, 209 String.valueOf(test_deadline), 210 /* makeDefault */ false); 211 212 assertThat(FlagsFactory.getFlags().getWebTriggerFlowDeadlineSeconds()) 213 .isEqualTo(test_deadline); 214 215 DeviceConfig.setProperty( 216 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 217 KEY_WEB_TRIGGER_FLOW_DEADLINE_SECONDS, 218 String.valueOf(WEB_TRIGGER_FLOW_DEADLINE_SECONDS), 219 /* makeDefault */ false); 220 } 221 222 @Test testWebViewFlowDeadlineSeconds()223 public void testWebViewFlowDeadlineSeconds() { 224 assertThat(FlagsFactory.getFlags().getWebViewFlowDeadlineSeconds()) 225 .isEqualTo(WEB_VIEW_FLOW_DEADLINE_SECONDS); 226 227 final int test_deadline = 10; 228 229 DeviceConfig.setProperty( 230 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 231 KEY_WEB_VIEW_FLOW_DEADLINE_SECONDS, 232 String.valueOf(test_deadline), 233 /* makeDefault */ false); 234 235 assertThat(FlagsFactory.getFlags().getWebViewFlowDeadlineSeconds()) 236 .isEqualTo(test_deadline); 237 238 DeviceConfig.setProperty( 239 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 240 KEY_WEB_VIEW_FLOW_DEADLINE_SECONDS, 241 String.valueOf(WEB_VIEW_FLOW_DEADLINE_SECONDS), 242 /* makeDefault */ false); 243 } 244 245 @Test testRenderFlowDeadlineSeconds()246 public void testRenderFlowDeadlineSeconds() { 247 assertThat(FlagsFactory.getFlags().getRenderFlowDeadlineSeconds()) 248 .isEqualTo(RENDER_FLOW_DEADLINE_SECONDS); 249 250 final int test_deadline = 10; 251 252 DeviceConfig.setProperty( 253 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 254 KEY_RENDER_FLOW_DEADLINE_SECONDS, 255 String.valueOf(test_deadline), 256 /* makeDefault */ false); 257 258 assertThat(FlagsFactory.getFlags().getRenderFlowDeadlineSeconds()) 259 .isEqualTo(test_deadline); 260 261 DeviceConfig.setProperty( 262 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 263 KEY_RENDER_FLOW_DEADLINE_SECONDS, 264 String.valueOf(RENDER_FLOW_DEADLINE_SECONDS), 265 /* makeDefault */ false); 266 } 267 268 @Test testAppRequestFlowDeadlineSeconds()269 public void testAppRequestFlowDeadlineSeconds() { 270 assertThat(FlagsFactory.getFlags().getAppRequestFlowDeadlineSeconds()) 271 .isEqualTo(APP_REQUEST_FLOW_DEADLINE_SECONDS); 272 273 final int test_deadline = 10; 274 275 DeviceConfig.setProperty( 276 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 277 KEY_APP_REQUEST_FLOW_DEADLINE_SECONDS, 278 String.valueOf(test_deadline), 279 /* makeDefault */ false); 280 281 assertThat(FlagsFactory.getFlags().getAppRequestFlowDeadlineSeconds()) 282 .isEqualTo(test_deadline); 283 284 DeviceConfig.setProperty( 285 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 286 KEY_APP_REQUEST_FLOW_DEADLINE_SECONDS, 287 String.valueOf(APP_REQUEST_FLOW_DEADLINE_SECONDS), 288 /* makeDefault */ false); 289 } 290 291 @Test testExampleStoreFlowDeadlineSeconds()292 public void testExampleStoreFlowDeadlineSeconds() { 293 assertThat(FlagsFactory.getFlags().getExampleStoreFlowDeadlineSeconds()) 294 .isEqualTo(EXAMPLE_STORE_FLOW_DEADLINE_SECONDS); 295 296 final int test_deadline = 10; 297 298 DeviceConfig.setProperty( 299 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 300 KEY_EXAMPLE_STORE_FLOW_DEADLINE_SECONDS, 301 String.valueOf(test_deadline), 302 /* makeDefault */ false); 303 304 assertThat(FlagsFactory.getFlags().getExampleStoreFlowDeadlineSeconds()) 305 .isEqualTo(test_deadline); 306 307 DeviceConfig.setProperty( 308 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 309 KEY_EXAMPLE_STORE_FLOW_DEADLINE_SECONDS, 310 String.valueOf(EXAMPLE_STORE_FLOW_DEADLINE_SECONDS), 311 /* makeDefault */ false); 312 } 313 314 @Test testDownloadFlowDeadlineSeconds()315 public void testDownloadFlowDeadlineSeconds() { 316 assertThat(FlagsFactory.getFlags().getExampleStoreFlowDeadlineSeconds()) 317 .isEqualTo(DOWNLOAD_FLOW_DEADLINE_SECONDS); 318 319 final int test_deadline = 10; 320 321 DeviceConfig.setProperty( 322 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 323 KEY_DOWNLOAD_FLOW_DEADLINE_SECONDS, 324 String.valueOf(test_deadline), 325 /* makeDefault */ false); 326 327 assertThat(FlagsFactory.getFlags().getDownloadFlowDeadlineSeconds()) 328 .isEqualTo(test_deadline); 329 330 DeviceConfig.setProperty( 331 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 332 KEY_DOWNLOAD_FLOW_DEADLINE_SECONDS, 333 String.valueOf(DOWNLOAD_FLOW_DEADLINE_SECONDS), 334 /* makeDefault */ false); 335 } 336 337 @Test testGetTrustedPartnerAppsList()338 public void testGetTrustedPartnerAppsList() { 339 DeviceConfig.setProperty( 340 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 341 KEY_TRUSTED_PARTNER_APPS_LIST, 342 DEFAULT_TRUSTED_PARTNER_APPS_LIST, 343 /* makeDefault */ false); 344 345 if (SdkLevel.isAtLeastU()) { 346 assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList()) 347 .isEqualTo(DEFAULT_TRUSTED_PARTNER_APPS_LIST); 348 } else { 349 assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList()) 350 .isEqualTo(""); 351 } 352 353 final String testTrustedPartnerAppsList = 354 "trusted_test_app_1, trusted_test_app_2, trusted_test_app_3"; 355 356 DeviceConfig.setProperty( 357 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 358 KEY_TRUSTED_PARTNER_APPS_LIST, 359 testTrustedPartnerAppsList, 360 /* makeDefault */ false); 361 362 if (SdkLevel.isAtLeastU()) { 363 assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList()) 364 .isEqualTo(testTrustedPartnerAppsList); 365 } else { 366 assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList()) 367 .isEqualTo(""); 368 } 369 } 370 371 @Test testSharedIsolatedProcessFeature()372 public void testSharedIsolatedProcessFeature() { 373 DeviceConfig.setProperty( 374 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 375 KEY_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED, 376 Boolean.toString(DEFAULT_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED), 377 /* makeDefault */ false); 378 379 if (SdkLevel.isAtLeastU()) { 380 assertThat(FlagsFactory.getFlags().isSharedIsolatedProcessFeatureEnabled()) 381 .isEqualTo(DEFAULT_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED); 382 } else { 383 assertThat(FlagsFactory.getFlags().isSharedIsolatedProcessFeatureEnabled()) 384 .isFalse(); 385 } 386 387 final boolean testIsolatedProcessFeatureEnabled = 388 !DEFAULT_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED; 389 390 DeviceConfig.setProperty( 391 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 392 KEY_SHARED_ISOLATED_PROCESS_FEATURE_ENABLED, 393 Boolean.toString(testIsolatedProcessFeatureEnabled), 394 /* makeDefault */ false); 395 396 if (SdkLevel.isAtLeastU()) { 397 assertThat(FlagsFactory.getFlags().isSharedIsolatedProcessFeatureEnabled()) 398 .isEqualTo(testIsolatedProcessFeatureEnabled); 399 } else { 400 assertThat(FlagsFactory.getFlags().isSharedIsolatedProcessFeatureEnabled()) 401 .isFalse(); 402 } 403 } 404 405 @Test testGetCallerAppAllowList()406 public void testGetCallerAppAllowList() { 407 DeviceConfig.setProperty( 408 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 409 KEY_CALLER_APP_ALLOW_LIST, 410 DEFAULT_CALLER_APP_ALLOW_LIST, 411 /* makeDefault */ false); 412 413 assertThat(FlagsFactory.getFlags().getCallerAppAllowList()) 414 .isEqualTo(DEFAULT_CALLER_APP_ALLOW_LIST); 415 416 final String testCallerAppAllowList = 417 "com.example.odpclient"; 418 419 DeviceConfig.setProperty( 420 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 421 KEY_CALLER_APP_ALLOW_LIST, 422 testCallerAppAllowList, 423 /* makeDefault */ false); 424 425 assertThat(FlagsFactory.getFlags().getCallerAppAllowList()) 426 .isEqualTo(testCallerAppAllowList); 427 } 428 429 @Test testIsolatedServiceDebuggingEnabled()430 public void testIsolatedServiceDebuggingEnabled() { 431 DeviceConfig.setProperty( 432 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 433 KEY_ISOLATED_SERVICE_DEBUGGING_ENABLED, 434 Boolean.toString(false), 435 /* makeDefault */ false); 436 437 assertThat(FlagsFactory.getFlags().isIsolatedServiceDebuggingEnabled()) 438 .isEqualTo(false); 439 440 DeviceConfig.setProperty( 441 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 442 KEY_ISOLATED_SERVICE_DEBUGGING_ENABLED, 443 Boolean.toString(true), 444 /* makeDefault */ false); 445 446 assertThat(FlagsFactory.getFlags().isIsolatedServiceDebuggingEnabled()) 447 .isEqualTo(true); 448 } 449 450 @Test testIsArtImageLoadingOptimizationEnabled()451 public void testIsArtImageLoadingOptimizationEnabled() { 452 assertThat(FlagsFactory.getFlags().isArtImageLoadingOptimizationEnabled()) 453 .isEqualTo(IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED); 454 455 boolean testValue = !IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED; 456 457 DeviceConfig.setProperty( 458 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 459 KEY_IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED, 460 String.valueOf(testValue), 461 /* makeDefault */ false); 462 463 assertThat(FlagsFactory.getFlags().isArtImageLoadingOptimizationEnabled()) 464 .isEqualTo(testValue); 465 466 DeviceConfig.setProperty( 467 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 468 KEY_IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED, 469 String.valueOf(IS_ART_IMAGE_LOADING_OPTIMIZATION_ENABLED), 470 /* makeDefault */ false); 471 } 472 473 @Test testGetIsolatedServiceAllowList()474 public void testGetIsolatedServiceAllowList() { 475 DeviceConfig.setProperty( 476 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 477 KEY_ISOLATED_SERVICE_ALLOW_LIST, 478 DEFAULT_ISOLATED_SERVICE_ALLOW_LIST, 479 /* makeDefault */ false); 480 481 assertThat(FlagsFactory.getFlags().getIsolatedServiceAllowList()) 482 .isEqualTo(DEFAULT_ISOLATED_SERVICE_ALLOW_LIST); 483 484 final String testIsolatedServiceAllowList = 485 "com.example.odpsamplenetwork"; 486 487 DeviceConfig.setProperty( 488 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 489 KEY_ISOLATED_SERVICE_ALLOW_LIST, 490 testIsolatedServiceAllowList, 491 /* makeDefault */ false); 492 493 assertThat(FlagsFactory.getFlags().getIsolatedServiceAllowList()) 494 .isEqualTo(testIsolatedServiceAllowList); 495 } 496 497 @Test testGetOutputDataAllowList()498 public void testGetOutputDataAllowList() { 499 DeviceConfig.setProperty( 500 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 501 KEY_OUTPUT_DATA_ALLOW_LIST, 502 DEFAULT_OUTPUT_DATA_ALLOW_LIST, 503 /* makeDefault */ false); 504 505 assertThat(FlagsFactory.getFlags().getOutputDataAllowList()) 506 .isEqualTo(DEFAULT_OUTPUT_DATA_ALLOW_LIST); 507 508 final String testOutputDataAllowList = 509 "com.example.odpclient;com.example.odpsamplenetwork"; 510 511 DeviceConfig.setProperty( 512 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 513 KEY_OUTPUT_DATA_ALLOW_LIST, 514 testOutputDataAllowList, 515 /* makeDefault */ false); 516 517 assertThat(FlagsFactory.getFlags().getOutputDataAllowList()) 518 .isEqualTo(testOutputDataAllowList); 519 } 520 521 @Test testGetEnableClientErrorLogging()522 public void testGetEnableClientErrorLogging() { 523 DeviceConfig.setProperty( 524 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 525 KEY_ODP_ENABLE_CLIENT_ERROR_LOGGING, 526 Boolean.toString(DEFAULT_CLIENT_ERROR_LOGGING_ENABLED), 527 /* makeDefault= */ false); 528 assertThat(FlagsFactory.getFlags().getEnableClientErrorLogging()) 529 .isEqualTo(DEFAULT_CLIENT_ERROR_LOGGING_ENABLED); 530 531 // Overriding the value in device config. 532 boolean overrideEnable = !DEFAULT_CLIENT_ERROR_LOGGING_ENABLED; 533 DeviceConfig.setProperty( 534 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 535 KEY_ODP_ENABLE_CLIENT_ERROR_LOGGING, 536 Boolean.toString(overrideEnable), 537 /* makeDefault= */ false); 538 assertThat(FlagsFactory.getFlags().getEnableClientErrorLogging()) 539 .isEqualTo(overrideEnable); 540 } 541 542 @Test testGetBackgroundJobsLoggingEnabled()543 public void testGetBackgroundJobsLoggingEnabled() { 544 assertThat(FlagsFactory.getFlags().getBackgroundJobsLoggingEnabled()) 545 .isEqualTo(true); 546 } 547 548 @Test testGetBackgroundJobSamplingLoggingRate()549 public void testGetBackgroundJobSamplingLoggingRate() { 550 int defaultValue = BACKGROUND_JOB_SAMPLING_LOGGING_RATE; 551 552 // Override the value in device config. 553 int overrideRate = defaultValue + 1; 554 DeviceConfig.setProperty( 555 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 556 KEY_ODP_BACKGROUND_JOB_SAMPLING_LOGGING_RATE, 557 Integer.toString(overrideRate), 558 /* makeDefault= */ false); 559 assertThat(FlagsFactory.getFlags().getBackgroundJobSamplingLoggingRate()) 560 .isEqualTo(overrideRate); 561 } 562 563 @Test testGetJobSchedulingLoggingEnabled()564 public void testGetJobSchedulingLoggingEnabled() { 565 // read a stable flag value and verify it's equal to the default value. 566 boolean stableValue = FlagsFactory.getFlags().getJobSchedulingLoggingEnabled(); 567 568 // override the value in device config. 569 boolean overrideEnabled = !stableValue; 570 DeviceConfig.setProperty( 571 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 572 KEY_ODP_JOB_SCHEDULING_LOGGING_ENABLED, 573 Boolean.toString(overrideEnabled), 574 /* makeDefault= */ false); 575 576 // the flag value remains stable 577 assertThat(FlagsFactory.getFlags().getJobSchedulingLoggingEnabled()) 578 .isEqualTo(overrideEnabled); 579 } 580 581 @Test testGetJobSchedulingLoggingSamplingRate()582 public void testGetJobSchedulingLoggingSamplingRate() { 583 int defaultValue = DEFAULT_JOB_SCHEDULING_LOGGING_SAMPLING_RATE; 584 585 // Override the value in device config. 586 int overrideRate = defaultValue + 1; 587 DeviceConfig.setProperty( 588 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 589 KEY_ODP_JOB_SCHEDULING_LOGGING_SAMPLING_RATE, 590 Integer.toString(overrideRate), 591 /* makeDefault= */ false); 592 assertThat(FlagsFactory.getFlags().getJobSchedulingLoggingSamplingRate()) 593 .isEqualTo(overrideRate); 594 } 595 596 @Test testGetOdpModuleJobPolicy()597 public void testGetOdpModuleJobPolicy() { 598 assertThat(FlagsFactory.getFlags().getOdpModuleJobPolicy()) 599 .isEqualTo(DEFAULT_ODP_MODULE_JOB_POLICY); 600 601 String overrideValue = "Something"; 602 DeviceConfig.setProperty( 603 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 604 KEY_ODP_MODULE_JOB_POLICY, 605 overrideValue, 606 /* makeDefault= */ false); 607 assertThat(FlagsFactory.getFlags().getOdpModuleJobPolicy()).isEqualTo(overrideValue); 608 } 609 610 @Test testGetSpePilotJobEnabled()611 public void testGetSpePilotJobEnabled() { 612 assertSpeFeatureFlags( 613 () -> FlagsFactory.getFlags().getSpePilotJobEnabled(), 614 KEY_ODP_SPE_PILOT_JOB_ENABLED, 615 DEFAULT_SPE_PILOT_JOB_ENABLED 616 ); 617 } 618 619 @Test testGetSpeOnAggregateErrorDataReportingJobEnabled()620 public void testGetSpeOnAggregateErrorDataReportingJobEnabled() { 621 assertSpeFeatureFlags( 622 () -> FlagsFactory.getFlags().getSpeOnAggregateErrorDataReportingJobEnabled(), 623 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB, 624 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_AGGREGATE_ERROR_DATA_REPORTING_JOB 625 ); 626 } 627 628 @Test testGetSpeOnMddJobEnabled()629 public void testGetSpeOnMddJobEnabled() { 630 assertSpeFeatureFlags( 631 () -> FlagsFactory.getFlags().getSpeOnMddJobEnabled(), 632 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB, 633 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_MDD_JOB 634 ); 635 } 636 637 @Test testGetSpeOnOdpDownloadProcessingJobEnabled()638 public void testGetSpeOnOdpDownloadProcessingJobEnabled() { 639 assertSpeFeatureFlags( 640 () -> FlagsFactory.getFlags().getSpeOnOdpDownloadProcessingJobEnabled(), 641 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB, 642 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_ODP_DOWNLOAD_PROCESSING_JOB 643 ); 644 } 645 646 @Test testGetSpeOnResetDataJobEnabled()647 public void testGetSpeOnResetDataJobEnabled() { 648 assertSpeFeatureFlags( 649 () -> FlagsFactory.getFlags().getSpeOnResetDataJobEnabled(), 650 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB, 651 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_RESET_DATA_JOB 652 ); 653 } 654 655 @Test testGetSpeOnUserDataCollectionJobEnabled()656 public void testGetSpeOnUserDataCollectionJobEnabled() { 657 assertSpeFeatureFlags( 658 () -> FlagsFactory.getFlags().getSpeOnUserDataCollectionJobEnabled(), 659 KEY_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB, 660 DEFAULT_ODP_BACKGROUND_JOBS__ENABLE_SPE_ON_USER_DATA_COLLECTION_JOB 661 ); 662 } 663 664 @Test testAppInstallHistoryTtl()665 public void testAppInstallHistoryTtl() { 666 // read a stable flag value and verify it's equal to the default value. 667 long stableValue = FlagsFactory.getFlags().getAppInstallHistoryTtlInMillis(); 668 assertThat(stableValue).isEqualTo(DEFAULT_APP_INSTALL_HISTORY_TTL_MILLIS); 669 670 // override the value in device config. 671 long overrideEnabled = 1000L; 672 DeviceConfig.setProperty( 673 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 674 APP_INSTALL_HISTORY_TTL, 675 Long.toString(overrideEnabled), 676 /* makeDefault= */ false); 677 678 // the flag value remains stable 679 assertThat(FlagsFactory.getFlags().getAppInstallHistoryTtlInMillis()) 680 .isEqualTo(overrideEnabled); 681 } 682 683 @Test testAggregateErrorReportingEnabled()684 public void testAggregateErrorReportingEnabled() { 685 boolean testValue = !DEFAULT_AGGREGATED_ERROR_REPORTING_ENABLED; 686 687 DeviceConfig.setProperty( 688 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 689 KEY_ENABLE_AGGREGATED_ERROR_REPORTING, 690 Boolean.toString(testValue), 691 /* makeDefault */ false); 692 693 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingEnabled()) 694 .isEqualTo(testValue); 695 696 DeviceConfig.setProperty( 697 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 698 KEY_ENABLE_AGGREGATED_ERROR_REPORTING, 699 Boolean.toString(DEFAULT_AGGREGATED_ERROR_REPORTING_ENABLED), 700 /* makeDefault */ false); 701 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingEnabled()) 702 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORTING_ENABLED); 703 } 704 705 @Test testAggregateErrorReportingTtlDays()706 public void testAggregateErrorReportingTtlDays() { 707 int testValue = 4; 708 709 DeviceConfig.setProperty( 710 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 711 KEY_AGGREGATED_ERROR_REPORT_TTL_DAYS, 712 Integer.toString(testValue), 713 /* makeDefault */ false); 714 715 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingTtlInDays()) 716 .isEqualTo(testValue); 717 718 DeviceConfig.setProperty( 719 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 720 KEY_AGGREGATED_ERROR_REPORT_TTL_DAYS, 721 Integer.toString(DEFAULT_AGGREGATED_ERROR_REPORT_TTL_DAYS), 722 /* makeDefault */ false); 723 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingTtlInDays()) 724 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORT_TTL_DAYS); 725 } 726 727 @Test testAggregateErrorReportingUrlPath()728 public void testAggregateErrorReportingUrlPath() { 729 String testValue = "foo/bar"; 730 731 DeviceConfig.setProperty( 732 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 733 KEY_AGGREGATED_ERROR_REPORTING_PATH, 734 testValue, 735 /* makeDefault */ false); 736 737 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingServerPath()) 738 .isEqualTo(testValue); 739 740 DeviceConfig.setProperty( 741 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 742 KEY_AGGREGATED_ERROR_REPORTING_PATH, 743 DEFAULT_AGGREGATED_ERROR_REPORTING_URL_PATH, 744 /* makeDefault */ false); 745 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingServerPath()) 746 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORTING_URL_PATH); 747 } 748 749 @Test testAggregateErrorReportingThreshold()750 public void testAggregateErrorReportingThreshold() { 751 int testValue = 5; 752 753 DeviceConfig.setProperty( 754 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 755 KEY_AGGREGATED_ERROR_REPORTING_THRESHOLD, 756 Integer.toString(testValue), 757 /* makeDefault */ false); 758 759 assertThat(FlagsFactory.getFlags().getAggregatedErrorMinThreshold()).isEqualTo(testValue); 760 761 DeviceConfig.setProperty( 762 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 763 KEY_AGGREGATED_ERROR_REPORTING_THRESHOLD, 764 Integer.toString(DEFAULT_AGGREGATED_ERROR_REPORTING_THRESHOLD), 765 /* makeDefault */ false); 766 assertThat(FlagsFactory.getFlags().getAggregatedErrorMinThreshold()) 767 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORTING_THRESHOLD); 768 } 769 770 @Test testAggregateErrorReportingIntervalInHours()771 public void testAggregateErrorReportingIntervalInHours() { 772 int testValue = 4; 773 774 DeviceConfig.setProperty( 775 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 776 KEY_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS, 777 Integer.toString(testValue), 778 /* makeDefault */ false); 779 780 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingIntervalInHours()) 781 .isEqualTo(testValue); 782 783 DeviceConfig.setProperty( 784 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 785 KEY_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS, 786 Integer.toString(DEFAULT_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS), 787 /* makeDefault */ false); 788 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingIntervalInHours()) 789 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORTING_INTERVAL_HOURS); 790 } 791 792 @Test testAllowUnencryptedAggregatedErrorReportingPayload()793 public void testAllowUnencryptedAggregatedErrorReportingPayload() { 794 boolean testValue = !DEFAULT_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING_PAYLOAD; 795 796 DeviceConfig.setProperty( 797 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 798 KEY_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING, 799 Boolean.toString(testValue), 800 /* makeDefault */ false); 801 802 assertThat(FlagsFactory.getFlags().getAllowUnencryptedAggregatedErrorReportingPayload()) 803 .isEqualTo(testValue); 804 805 DeviceConfig.setProperty( 806 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 807 KEY_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING, 808 Boolean.toString(DEFAULT_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING_PAYLOAD), 809 /* makeDefault */ false); 810 assertThat(FlagsFactory.getFlags().getAllowUnencryptedAggregatedErrorReportingPayload()) 811 .isEqualTo(DEFAULT_ALLOW_UNENCRYPTED_AGGREGATED_ERROR_REPORTING_PAYLOAD); 812 } 813 814 @Test testAggregatedErrorReportingHttpTimeoutSeconds()815 public void testAggregatedErrorReportingHttpTimeoutSeconds() { 816 int testValue = 10; 817 818 DeviceConfig.setProperty( 819 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 820 KEY_AGGREGATED_ERROR_REPORTING_HTTP_TIMEOUT_SECONDS, 821 Integer.toString(testValue), 822 /* makeDefault */ false); 823 824 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingHttpTimeoutSeconds()) 825 .isEqualTo(testValue); 826 827 DeviceConfig.setProperty( 828 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 829 KEY_AGGREGATED_ERROR_REPORTING_HTTP_TIMEOUT_SECONDS, 830 Integer.toString(DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_TIMEOUT_SECONDS), 831 /* makeDefault */ false); 832 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingIntervalInHours()) 833 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_TIMEOUT_SECONDS); 834 } 835 836 @Test testAggregatedErrorReportingHttpRetryLimit()837 public void testAggregatedErrorReportingHttpRetryLimit() { 838 int testValue = 5; 839 840 DeviceConfig.setProperty( 841 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 842 KEY_AGGREGATED_ERROR_REPORTING_HTTP_RETRY_LIMIT, 843 Integer.toString(testValue), 844 /* makeDefault */ false); 845 846 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingHttpRetryLimit()) 847 .isEqualTo(testValue); 848 849 DeviceConfig.setProperty( 850 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 851 KEY_AGGREGATED_ERROR_REPORTING_HTTP_RETRY_LIMIT, 852 Integer.toString(DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_RETRY_LIMIT), 853 /* makeDefault */ false); 854 assertThat(FlagsFactory.getFlags().getAggregatedErrorReportingIntervalInHours()) 855 .isEqualTo(DEFAULT_AGGREGATED_ERROR_REPORT_HTTP_RETRY_LIMIT); 856 } 857 858 @Test testEncryptionKeyFetchUrl()859 public void testEncryptionKeyFetchUrl() { 860 String testValue = "foo/bar"; 861 862 DeviceConfig.setProperty( 863 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 864 KEY_ENCRYPTION_KEY_URL, 865 testValue, 866 /* makeDefault */ false); 867 868 assertThat(FlagsFactory.getFlags().getEncryptionKeyFetchUrl()).isEqualTo(testValue); 869 870 DeviceConfig.setProperty( 871 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 872 KEY_ENCRYPTION_KEY_URL, 873 DEFAULT_ENCRYPTION_KEY_URL, 874 /* makeDefault */ false); 875 assertThat(FlagsFactory.getFlags().getEncryptionKeyFetchUrl()) 876 .isEqualTo(DEFAULT_ENCRYPTION_KEY_URL); 877 } 878 879 @Test testEncryptionKeyMaxAgeSeconds()880 public void testEncryptionKeyMaxAgeSeconds() { 881 Long testValue = 100L; 882 883 DeviceConfig.setProperty( 884 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 885 KEY_ENCRYPTION_KEY_MAX_AGE_SECONDS, 886 Long.toString(testValue), 887 /* makeDefault */ false); 888 889 assertThat(FlagsFactory.getFlags().getEncryptionKeyMaxAgeSeconds()).isEqualTo(testValue); 890 891 DeviceConfig.setProperty( 892 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 893 KEY_ENCRYPTION_KEY_MAX_AGE_SECONDS, 894 Long.toString(DEFAULT_ENCRYPTION_KEY_MAX_AGE_SECONDS), 895 /* makeDefault */ false); 896 assertThat(FlagsFactory.getFlags().getEncryptionKeyMaxAgeSeconds()) 897 .isEqualTo(DEFAULT_ENCRYPTION_KEY_MAX_AGE_SECONDS); 898 } 899 900 @Test testGetAdservicesIpcCallTimeoutInMillis()901 public void testGetAdservicesIpcCallTimeoutInMillis() { 902 long testTimeoutValue = 100L; 903 904 DeviceConfig.setProperty( 905 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 906 KEY_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS, 907 Long.toString(testTimeoutValue), 908 /* makeDefault */ false); 909 910 assertThat(FlagsFactory.getFlags().getAdservicesIpcCallTimeoutInMillis()) 911 .isEqualTo(testTimeoutValue); 912 913 DeviceConfig.setProperty( 914 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 915 KEY_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS, 916 Long.toString(DEFAULT_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS), 917 /* makeDefault */ false); 918 assertThat(FlagsFactory.getFlags().getAdservicesIpcCallTimeoutInMillis()) 919 .isEqualTo(DEFAULT_ADSERVICES_IPC_CALL_TIMEOUT_IN_MILLIS); 920 } 921 922 @Test testIsPluginProcessRunnerEnabled()923 public void testIsPluginProcessRunnerEnabled() { 924 // read a stable flag value and verify it's equal to the default value. 925 boolean stableValue = FlagsFactory.getFlags().isPluginProcessRunnerEnabled(); 926 assertThat(stableValue).isEqualTo(DEFAULT_PLUGIN_PROCESS_RUNNER_ENABLED); 927 928 // override the value in device config. 929 boolean overrideEnabled = !stableValue; 930 DeviceConfig.setProperty( 931 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 932 KEY_PLUGIN_PROCESS_RUNNER_ENABLED, 933 Boolean.toString(overrideEnabled), 934 /* makeDefault= */ false); 935 936 // the flag value remains stable 937 assertThat(FlagsFactory.getFlags().isPluginProcessRunnerEnabled()).isEqualTo( 938 overrideEnabled); 939 } 940 941 @Test testIsFeatureEnabledApiEnabled()942 public void testIsFeatureEnabledApiEnabled() { 943 boolean stableValue = FlagsFactory.getFlags().isFeatureEnabledApiEnabled(); 944 assertThat(stableValue).isEqualTo(DEFAULT_IS_FEATURE_ENABLED_API_ENABLED); 945 946 boolean overrideEnabled = !stableValue; 947 DeviceConfig.setProperty( 948 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 949 KEY_IS_FEATURE_ENABLED_API_ENABLED, 950 Boolean.toString(overrideEnabled), 951 /* makeDefault= */ false); 952 953 assertThat(FlagsFactory.getFlags().isFeatureEnabledApiEnabled()).isEqualTo(overrideEnabled); 954 } 955 assertSpeFeatureFlags( Supplier<Boolean> flagSupplier, String flagName, boolean defaultValue)956 private void assertSpeFeatureFlags( 957 Supplier<Boolean> flagSupplier, String flagName, boolean defaultValue) { 958 // Test override value 959 boolean overrideValue = !defaultValue; 960 DeviceConfig.setProperty( 961 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 962 flagName, 963 Boolean.toString(overrideValue), 964 /* makeDefault */ false); 965 assertThat(flagSupplier.get()).isEqualTo(overrideValue); 966 967 // Test default value 968 DeviceConfig.setProperty( 969 DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION, 970 flagName, 971 Boolean.toString(defaultValue), 972 /* makeDefault */ false); 973 assertThat(flagSupplier.get()).isEqualTo(defaultValue); 974 } 975 } 976