summaryrefslogtreecommitdiff
path: root/adservices/tests/unittest/service-core
diff options
context:
space:
mode:
Diffstat (limited to 'adservices/tests/unittest/service-core')
-rw-r--r--adservices/tests/unittest/service-core/AndroidManifest.xml1
-rw-r--r--adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchConsentWorkerTest.java379
-rw-r--r--adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchDaoTest.java41
-rw-r--r--adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchMeasurementRollbackWorkerTest.java30
-rw-r--r--adservices/tests/unittest/service-core/assets/attribution_service_test.json34
-rw-r--r--adservices/tests/unittest/service-core/assets/measurement_app_uninstall_deletion_test.json21
-rw-r--r--adservices/tests/unittest/service-core/assets/measurement_delete_expired_test.json15
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/flex_api_with_no_origin_multiple_domain.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/registrant_not_found.json12
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain_preserve.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain_preserve.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_nor_range.json12
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_origin_but_no_range.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_but_no_origin.json12
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_and_origin.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_no_origin.json12
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_and_origin.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_no_origin.json12
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_and_origin.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_no_origin_preserve.json9
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_debug_source_storage_limit.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_large_keys.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_many_trigger_data.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_over_contributions_limit.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_three_of_three_entries.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_source.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_trigger.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_source.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_trigger.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_null_reports.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_3_conversions.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2_w3.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_install_attribution.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w1.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w2.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w3.json1
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_aggregatable_two_contributions.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-app_source_destination_limit.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-web_source_destination_limit.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger-reporting-origin-limit-app-app.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-app.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-web.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-app.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-different-registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-same-registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-app.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-web.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-app.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-different-registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-same-registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_3_app_sources_3_web_triggers_3_reports.json6
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_cannot_redirect.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect.json8
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect_to_well_known.json113
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects.json20
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects_to_well_known.json287
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_1_allowed.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_2_allowed.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_disabled.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/enrollment_flag_disabled.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_debug_source_storage_limit.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_report_window.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_time_based_source_selection.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/limit_num_reports_for_click.json6
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_as_reporting_origin.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_basic_use_of_redirect.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_ip_as_reporting_origin.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/only_one_source_of_multiple_matches_can_be_attributed.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/priority_based_source_selection.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWebSource_3_sources_3_triggers_3_reports.json6
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_different_registrant.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_same_registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_no_adid_no_ar_debug.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_disabled_different_registrant.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_enabled_different_registrant.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_app_and_web_matching.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_web_only_matching.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_adid_debug_api.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_ar_debug_adid_debug_api.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_debug_api_ar_debug.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_multiple_destinations.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_redirects_ignored.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_web_app_matching_debug_api_adid_ar_debug.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_1-1_app-app_matching.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_empty_object_event_trigger_data.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_null_trigger_data_null_source_event_id.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_dual_destination_source_storage_limit_debug_report.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_source_storage_limit_debug_report.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_web-web_source_storage_limit_debug_report.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_one_trigger.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_three_triggers_one_dedup.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/two_simple_matches_testing_multiplicity.json4
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_disabled_basic.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_original_source_wins_install_attribution.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_reg_has_original_xna_source_avoids_creating_derived_source.json2
-rw-r--r--adservices/tests/unittest/service-core/assets/msmt_interop_tests/event_report_windows.json289
-rw-r--r--adservices/tests/unittest/service-core/common/Android.bp33
-rw-r--r--adservices/tests/unittest/service-core/common/AndroidManifest.xml30
-rw-r--r--adservices/tests/unittest/service-core/common/AndroidTest.ExtServices.xml48
-rw-r--r--adservices/tests/unittest/service-core/common/AndroidTest.xml37
-rw-r--r--adservices/tests/unittest/service-core/common/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java (renamed from adservices/tests/unittest/service-core/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java)71
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/customaudience/DBCustomAudienceBackgroundFetchDataTest.java32
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/enrollment/EnrollmentDaoTest.java2
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/AbstractDbIntegrationTest.java3
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/DbState.java3
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDaoTest.java41
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDbSchemaTrail.java52
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/ContentValueFixtures.java9
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV30Test.java1
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV31Test.java108
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/DBSignalsUpdateMetadataTest.java112
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/EncoderLogicHandlerTest.java7
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDaoTest.java184
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDatabaseMigrationTest.java23
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/PhFlagsTest.java298
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererImplTest.java2
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererNoOpImplTest.java2
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionConfigValidatorTest.java15
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java247
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java17
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java178
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java12
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AuctionServerE2ETest.java24
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/FrequencyCapFilteringE2ETest.java33
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java136
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportAndRegisterEventE2ETest.java17
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportImpressionScriptEngineTest.java1
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/TrustedServerAdSelectionRunnerTest.java14
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/BinarySerializerSignedContextualAdsTest.java8
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ProtectedAudienceSignatureManagerTest.java127
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ThreadUnsafeByteArrayOutputStreamTest.java (renamed from adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/SafeNoCopyByteArrayOutputStreamTest.java)2
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigCallTest.java250
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigHelperTest.java107
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigMetricsLoggerTest.java305
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigParserTest.java262
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeAuthorizationFilterTest.java72
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeE2ETest.java54
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PackageChangedReceiverTest.java39
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PermissionHelperTest.java10
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/consent/ConsentMigrationUtilsTest.java78
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceEndToEndTest.java20
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceImplTest.java80
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/E2EInteropMockTest.java13
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/EventReportTest.java33
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/SourceTest.java22
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerIntegrationTest.java2
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerTest.java23
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerAttributionProbabilityTest.java335
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerTest.java67
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueJobServiceTest.java38
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueRunnerTest.java705
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncSourceFetcherTest.java1129
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncTriggerFetcherTest.java1149
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/EnqueueAsyncRegistrationTest.java34
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/AggregateReportingJobHandlerTest.java159
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/DebugReportApiTest.java194
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/EventReportWindowCalcDelegateTest.java573
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/AdServicesShellCommandHandlerTest.java21
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/ShellCommandServiceImplTest.java70
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/PeriodicEncodingJobWorkerTest.java52
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/ProtectedSignalsServiceImplTest.java3
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsEncodingE2ETest.java15
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsIntakeE2ETest.java4
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsMaintenanceTasksWorkerTest.java17
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateProcessingOrchestratorTest.java22
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateSignalsOrchestratorTest.java3
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/AdServicesLoggerImplTest.java396
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/StatsdAdServicesLoggerTest.java178
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/EncryptionManagerTest.java18
-rw-r--r--adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/TopicsServiceImplTest.java8
177 files changed, 6527 insertions, 3556 deletions
diff --git a/adservices/tests/unittest/service-core/AndroidManifest.xml b/adservices/tests/unittest/service-core/AndroidManifest.xml
index 44a4d197f7..7be4ea18e9 100644
--- a/adservices/tests/unittest/service-core/AndroidManifest.xml
+++ b/adservices/tests/unittest/service-core/AndroidManifest.xml
@@ -24,7 +24,6 @@
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID" />
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" />
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE" />
- <uses-permission android:name="android.permission.ACCESS_ADSERVICES_PROTECTED_SIGNALS" />
<!-- Needed to resolve Intent to ComponentName for measurement verifiedDestination -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
diff --git a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchConsentWorkerTest.java b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchConsentWorkerTest.java
index e7344abe15..2bf1221c7a 100644
--- a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchConsentWorkerTest.java
+++ b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchConsentWorkerTest.java
@@ -64,6 +64,8 @@ import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
import org.junit.Before;
import org.junit.Test;
@@ -73,6 +75,9 @@ import org.mockito.Mockito;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
@SpyStatic(FlagsFactory.class)
@RequiresSdkLevelAtLeastS
@@ -87,6 +92,8 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
private static final Topic TOPIC1 = Topic.create(0, 1, 11);
private static final Topic TOPIC2 = Topic.create(12, 2, 22);
private static final Topic TOPIC3 = Topic.create(123, 3, 33);
+ private static final int APPSEARCH_WRITE_TIMEOUT_MS = 1000;
+
private final List<Topic> mTopics = Arrays.asList(TOPIC1, TOPIC2, TOPIC3);
@Mock private Flags mMockFlags;
@@ -97,6 +104,8 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
when(mMockFlags.getAdservicesApkShaCertificate())
.thenReturn(Flags.ADSERVICES_APK_SHA_CERTIFICATE);
when(mMockFlags.getAppsearchWriterAllowListOverride()).thenReturn("");
+ // Reduce AppSearch write timeout to speed up the tests.
+ when(mMockFlags.getAppSearchWriteTimeout()).thenReturn(APPSEARCH_WRITE_TIMEOUT_MS);
}
@Test
@@ -144,6 +153,21 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void testSetConsent_failure_timeout() {
+ initTimeoutResponse();
+
+ RuntimeException e =
+ assertThrows(
+ RuntimeException.class,
+ () -> AppSearchConsentWorker.getInstance().setConsent(API_TYPE, CONSENTED));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ @SpyStatic(PlatformStorage.class)
@MockStatic(UserHandle.class)
public void testSetConsent() {
initSuccessResponse();
@@ -285,6 +309,8 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
RuntimeException.class,
() -> appSearchConsentWorker.clearAppsWithConsent(TEST));
assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(ExecutionException.class);
}
@Test
@@ -408,6 +434,8 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
RuntimeException.class,
() -> appSearchConsentWorker.removeAppWithConsent(consentType, TEST));
assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(ExecutionException.class);
}
@Test
@@ -488,7 +516,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
- public void testRecordGaUxNotificationDisplayed_faiure() {
+ public void testRecordGaUxNotificationDisplayed_failure() {
runRecordNotificationDisplayedTestFailure(/* isBetaUx= */ false);
}
@@ -511,6 +539,41 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void testRecordNotificationDisplayed_failure_timeout() {
+ runRecordNotificationDisplayedTestFailureTimeout(/* isBetaUx= */ true);
+ }
+
+ @Test
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void testRecordGaUxNotificationDisplayed_failure_timeout() {
+ runRecordNotificationDisplayedTestFailureTimeout(/* isBetaUx= */ false);
+ }
+
+ private void runRecordNotificationDisplayedTestFailureTimeout(boolean isBetaUx) {
+ initTimeoutResponse();
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+
+ RuntimeException e;
+ if (isBetaUx) {
+ e =
+ assertThrows(
+ RuntimeException.class, () -> worker.recordNotificationDisplayed(true));
+ } else {
+ e =
+ assertThrows(
+ RuntimeException.class,
+ () -> worker.recordGaUxNotificationDisplayed(true));
+ }
+
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@MockStatic(AppSearchNotificationDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
@@ -574,6 +637,24 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
+ public void testSetCurrentPrivacySandboxFeature_failure_timeout() {
+ initTimeoutResponse();
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(
+ RuntimeException.class,
+ () ->
+ worker.setCurrentPrivacySandboxFeature(
+ PrivacySandboxFeatureType.PRIVACY_SANDBOX_RECONSENT));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
public void testSetCurrentPrivacySandboxFeature() {
initSuccessResponse();
@@ -616,6 +697,27 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@MockStatic(AppSearchInteractionsDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
+ public void testRecordUserManualInteractionWithConsent_failure_timeout() {
+ initTimeoutResponse();
+
+ when(AppSearchInteractionsDao.getRowId(any(), any())).thenReturn("" + UID);
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ int interactions = ConsentManager.MANUAL_INTERACTIONS_RECORDED;
+
+ RuntimeException e =
+ assertThrows(
+ RuntimeException.class,
+ () -> worker.recordUserManualInteractionWithConsent(interactions));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ @MockStatic(AppSearchInteractionsDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
public void testRecordUserManualInteractionWithConsent() {
initSuccessResponse();
@@ -638,7 +740,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
- public void testRecordBlockedTopics_failure() {
+ public void testRecordBlockedTopic_failure() {
initFailureResponse();
AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
@@ -651,7 +753,27 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@MockStatic(AppSearchTopicsConsentDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
- public void testRecordBlockedTopics_new() {
+ public void testRecordBlockedTopic_failure_timeout() {
+ initTimeoutResponse();
+
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchTopicsConsentDao.getQuery(any()));
+ ExtendedMockito.doReturn(null)
+ .when(() -> AppSearchTopicsConsentDao.readConsentData(any(), any(), any(), any()));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.recordBlockedTopic(TOPIC1));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ @MockStatic(AppSearchTopicsConsentDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void testRecordBlockedTopic_new() {
initSuccessResponse();
String query = "" + UID;
@@ -667,7 +789,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@MockStatic(AppSearchTopicsConsentDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
- public void testRecordBlockedTopics() throws Exception {
+ public void testRecordBlockedTopic() {
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchTopicsConsentDao.getQuery(any()));
AppSearchTopicsConsentDao dao = Mockito.mock(AppSearchTopicsConsentDao.class);
@@ -686,7 +808,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@MockStatic(AppSearchTopicsConsentDao.class)
@SpyStatic(PlatformStorage.class)
- public void testRecordUnblockedTopics_failure() throws Exception {
+ public void testRecordUnblockedTopic_failure() throws Exception {
AppSearchTopicsConsentDao dao = Mockito.mock(AppSearchTopicsConsentDao.class);
ExtendedMockito.doReturn(dao)
.when(() -> AppSearchTopicsConsentDao.readConsentData(any(), any(), any(), any()));
@@ -702,13 +824,21 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
verify(dao).removeBlockedTopic(TOPIC1);
verify(dao).writeData(any(), any(), any());
assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+
+ Throwable cause = e.getCause();
+ assertThat(cause).isNotNull();
+ assertThat(cause).isInstanceOf(ExecutionException.class);
+
+ Throwable rootCause = cause.getCause();
+ assertThat(rootCause).isNotNull();
+ assertThat(rootCause).isInstanceOf(InterruptedException.class);
}
@Test
@MockStatic(AppSearchTopicsConsentDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
- public void testRecordUnblockedTopics_new() {
+ public void testRecordUnblockedTopic_new() {
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchTopicsConsentDao.getQuery(any()));
ExtendedMockito.doReturn(null)
@@ -722,7 +852,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@MockStatic(AppSearchTopicsConsentDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
- public void testRecordUnblockedTopics() {
+ public void testRecordUnblockedTopic() {
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchTopicsConsentDao.getQuery(any()));
AppSearchTopicsConsentDao dao = Mockito.mock(AppSearchTopicsConsentDao.class);
@@ -753,6 +883,20 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
+ public void testClearBlockedTopics_failure_timeout() {
+ initTimeoutResponse();
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.clearBlockedTopics());
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
public void testClearBlockedTopics() {
initSuccessResponse();
@@ -781,6 +925,26 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
when(mockResponse.getMigrationFailures()).thenReturn(List.of());
}
+ private void initTimeoutResponse() {
+ AppSearchSession mockSession = Mockito.mock(AppSearchSession.class);
+ UserHandle mockUserHandle = Mockito.mock(UserHandle.class);
+ Mockito.when(UserHandle.getUserHandleForUid(Binder.getCallingUid()))
+ .thenReturn(mockUserHandle);
+ Mockito.when(mockUserHandle.getIdentifier()).thenReturn(UID);
+ ExtendedMockito.doReturn(Futures.immediateFuture(mockSession))
+ .when(() -> PlatformStorage.createSearchSessionAsync(any()));
+ verify(mockSession, atMost(1)).setSchemaAsync(any(SetSchemaRequest.class));
+
+ SetSchemaResponse mockResponse = Mockito.mock(SetSchemaResponse.class);
+ when(mockSession.setSchemaAsync(any(SetSchemaRequest.class)))
+ .thenReturn(Futures.immediateFuture(mockResponse));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(mockSession.putAsync(any())).thenReturn(getLongRunningOperation(result));
+
+ verify(mockResponse, atMost(1)).getMigrationFailures();
+ when(mockResponse.getMigrationFailures()).thenReturn(List.of());
+ }
+
private void initFailureResponse() {
AppSearchSession mockSession = Mockito.mock(AppSearchSession.class);
ExtendedMockito.doReturn(Futures.immediateFuture(mockSession))
@@ -801,6 +965,17 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
when(mockResponse.getMigrationFailures()).thenReturn(List.of(failure));
}
+ private <T> ListenableFuture<T> getLongRunningOperation(T result) {
+ // Wait for a time that's longer than the AppSearch write timeout, then return the result.
+ ListeningExecutorService ls =
+ MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
+ return ls.submit(
+ () -> {
+ TimeUnit.MILLISECONDS.sleep(APPSEARCH_WRITE_TIMEOUT_MS + 500);
+ return result;
+ });
+ }
+
@Test
@SpyStatic(AppSearchUxStatesDao.class)
public void isAdIdEnabledTest_trueBit() {
@@ -826,8 +1001,6 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
public void setAdIdEnabledTest_success() {
- initSuccessResponse();
-
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
@@ -845,17 +1018,17 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@Test
@SpyStatic(PlatformStorage.class)
- public void setAdIdEnabledTest_trueBit() {
- setAdIdEnabledTest(true);
+ public void setAdIdEnabledTest_failure_trueBit() {
+ setAdIdEnabledTestFailure(true);
}
@Test
@SpyStatic(PlatformStorage.class)
- public void setAdIdEnabledTest_falseBit() {
- setAdIdEnabledTest(false);
+ public void setAdIdEnabledTest_failure_falseBit() {
+ setAdIdEnabledTestFailure(false);
}
- private void setAdIdEnabledTest(boolean isAdIdEnabled) {
+ private void setAdIdEnabledTestFailure(boolean isAdIdEnabled) {
initFailureResponse();
AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
@@ -865,6 +1038,27 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setAdIdEnabledTest_timeout() {
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(null)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.setAdIdEnabled(true));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void isU18AccountTest_trueBit() {
isU18AccountTest(true);
@@ -889,8 +1083,6 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
public void setU18AccountTest_success() {
- initSuccessResponse();
-
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
@@ -928,6 +1120,28 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setU18AccountTest_timeout() {
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.setU18Account(false));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void isEntryPointEnabledTest_trueBit() {
isEntryPointEnabledTest(true);
@@ -996,6 +1210,30 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setEntryPointEnabledTest_timeout() {
+ initSuccessResponse();
+
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.setEntryPointEnabled(true));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void isAdultAccountTest_trueBit() {
isAdultAccountTest(true);
@@ -1040,7 +1278,7 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@MockStatic(AppSearchUxStatesDao.class)
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
- public void setU18AdultAccountTest_success() {
+ public void setAdultAccountTest_success() {
initSuccessResponse();
String query = "" + UID;
@@ -1059,6 +1297,30 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setAdultAccountTest_timeout() {
+ initSuccessResponse();
+
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(RuntimeException.class, () -> worker.setAdultAccount(true));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void wasU18NotificationDisplayedTest_trueBit() {
wasU18NotificationDisplayedTest(true);
@@ -1128,6 +1390,31 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setU18NotificationDisplayedTest_timeout() {
+ initSuccessResponse();
+
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(
+ RuntimeException.class, () -> worker.setU18NotificationDisplayed(true));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void getUxTest_allUxs() {
for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
@@ -1155,8 +1442,6 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
public void setUxTest_allUxsSuccess() {
- initSuccessResponse();
-
for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
String query = "" + UID;
ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
@@ -1175,6 +1460,29 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
@Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setUxTest_allUxs_timeout() {
+ for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result = Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e = assertThrows(RuntimeException.class, () -> worker.setUx(ux));
+ assertThat(e.getMessage()).isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+ }
+
+ @Test
@SpyStatic(AppSearchUxStatesDao.class)
public void getEnrollmentChannelTest_allUxsAllEnrollmentChannels() {
for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
@@ -1217,8 +1525,6 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
@SpyStatic(PlatformStorage.class)
@SpyStatic(UserHandle.class)
public void setEnrollmentChannelTest_allUxsAllEnrollmentChannelsSuccess() {
- initSuccessResponse();
-
for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
for (PrivacySandboxEnrollmentChannelCollection channel :
ux.getEnrollmentChannelCollection()) {
@@ -1240,4 +1546,35 @@ public final class AppSearchConsentWorkerTest extends AdServicesExtendedMockitoT
}
}
}
+
+ @Test
+ @MockStatic(AppSearchUxStatesDao.class)
+ @SpyStatic(PlatformStorage.class)
+ @SpyStatic(UserHandle.class)
+ public void setEnrollmentChannelTest_allUxsAllEnrollmentChannels_timeout() {
+ for (PrivacySandboxUxCollection ux : PrivacySandboxUxCollection.values()) {
+ for (PrivacySandboxEnrollmentChannelCollection channel :
+ ux.getEnrollmentChannelCollection()) {
+ String query = "" + UID;
+ ExtendedMockito.doReturn(query).when(() -> AppSearchUxStatesDao.getQuery(any()));
+ AppSearchUxStatesDao dao = Mockito.mock(AppSearchUxStatesDao.class);
+ ExtendedMockito.doReturn(dao)
+ .when(() -> AppSearchUxStatesDao.readData(any(), any(), any(), any()));
+ AppSearchBatchResult<String, Void> result =
+ Mockito.mock(AppSearchBatchResult.class);
+ when(dao.writeData(any(), any(), any()))
+ .thenReturn(FluentFuture.from(getLongRunningOperation(result)));
+
+ AppSearchConsentWorker worker = AppSearchConsentWorker.getInstance();
+ RuntimeException e =
+ assertThrows(
+ RuntimeException.class,
+ () -> worker.setEnrollmentChannel(ux, channel));
+ assertThat(e.getMessage())
+ .isEqualTo(ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ assertThat(e.getCause()).isNotNull();
+ assertThat(e.getCause()).isInstanceOf(TimeoutException.class);
+ }
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchDaoTest.java b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchDaoTest.java
index 47bc186455..116891316c 100644
--- a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchDaoTest.java
+++ b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchDaoTest.java
@@ -52,6 +52,8 @@ import com.android.adservices.service.consent.ConsentConstants;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
import org.junit.Before;
import org.junit.Rule;
@@ -63,6 +65,8 @@ import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
@SmallTest
public class AppSearchDaoTest {
@@ -87,6 +91,8 @@ public class AppSearchDaoTest {
new PackageIdentifier(
/* packageName= */ TEST, /* sha256= */ new Signature(SHA).toByteArray());
+ private static final int APPSEARCH_READ_TIMEOUT_MS = 500;
+
@Rule
public final AdServicesExtendedMockitoRule adServicesExtendedMockitoRule =
new AdServicesExtendedMockitoRule.Builder(this).mockStatic(FlagsFactory.class).build();
@@ -95,6 +101,7 @@ public class AppSearchDaoTest {
public void before() {
MockitoAnnotations.initMocks(this);
when(mFlags.getAppsearchWriterAllowListOverride()).thenReturn("");
+ when(mFlags.getAppSearchReadTimeout()).thenReturn(APPSEARCH_READ_TIMEOUT_MS);
doReturn(mFlags).when(FlagsFactory::getFlags);
}
@@ -205,6 +212,30 @@ public class AppSearchDaoTest {
}
@Test
+ public void testReadConsentData_timeout() {
+ AppSearchDao result =
+ AppSearchDao.readConsentData(
+ AppSearchConsentDao.class,
+ getLongRunningOperation(mGlobalSearchSession),
+ mExecutor,
+ NAMESPACE,
+ TEST,
+ mAdServicesPackageName);
+ assertThat(result).isNull();
+ }
+
+ private <T> ListenableFuture<T> getLongRunningOperation(T result) {
+ // Wait for a time that's longer than the AppSearch read timeout, then return the result.
+ ListeningExecutorService ls =
+ MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
+ return ls.submit(
+ () -> {
+ TimeUnit.MILLISECONDS.sleep(APPSEARCH_READ_TIMEOUT_MS + 500);
+ return result;
+ });
+ }
+
+ @Test
public void testReadAppSearchData_emptyQuery() {
AppSearchDao dao =
AppSearchDao.readAppSearchSessionData(
@@ -262,7 +293,8 @@ public class AppSearchDaoTest {
when(mockSession.setSchemaAsync(any(SetSchemaRequest.class)))
.thenReturn(Futures.immediateFuture(mockResponse));
- AppSearchResult mockResult = Mockito.mock(AppSearchResult.class);
+ AppSearchResult<Void> mockResult =
+ AppSearchResult.newFailedResult(AppSearchResult.RESULT_INVALID_ARGUMENT, "test");
SetSchemaResponse.MigrationFailure failure =
new SetSchemaResponse.MigrationFailure(
/* namespace= */ TEST,
@@ -278,11 +310,12 @@ public class AppSearchDaoTest {
Futures.immediateFuture(mockSession),
List.of(PACKAGE_IDENTIFIER),
mExecutor);
- ExecutionException e = assertThrows(ExecutionException.class, () -> result.get());
+ ExecutionException e = assertThrows(ExecutionException.class, result::get);
assertThat(e.getMessage())
.isEqualTo(
"java.lang.RuntimeException: "
- + ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE);
+ + ConsentConstants.ERROR_MESSAGE_APPSEARCH_FAILURE
+ + " Migration failure: [FAILURE(3)]: test");
}
@Test
@@ -337,7 +370,7 @@ public class AppSearchDaoTest {
mExecutor,
TEST,
NAMESPACE);
- ExecutionException e = assertThrows(ExecutionException.class, () -> result.get());
+ ExecutionException e = assertThrows(ExecutionException.class, result::get);
assertThat(e.getMessage())
.isEqualTo(
"java.lang.RuntimeException: "
diff --git a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchMeasurementRollbackWorkerTest.java b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchMeasurementRollbackWorkerTest.java
index 0765ba5275..638ee67142 100644
--- a/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchMeasurementRollbackWorkerTest.java
+++ b/adservices/tests/unittest/service-core/appsearch/src/com/android/adservices/service/appsearch/AppSearchMeasurementRollbackWorkerTest.java
@@ -41,6 +41,8 @@ import androidx.test.filters.SmallTest;
import com.android.adservices.concurrency.AdServicesExecutors;
import com.android.adservices.mockito.AdServicesExtendedMockitoRule;
+import com.android.adservices.service.Flags;
+import com.android.adservices.service.FlagsFactory;
import com.android.adservices.service.common.compat.FileCompatUtils;
import com.android.adservices.service.consent.ConsentConstants;
@@ -66,7 +68,7 @@ public class AppSearchMeasurementRollbackWorkerTest {
FileCompatUtils.getAdservicesFilename("measurement_rollback");
private static final String USERID = "user1";
private static final long APEX_VERSION = 100L;
- private static final int FUTURE_TIMEOUT_MILLISECONDS = 3000;
+ private static final int APPSEARCH_WRITE_TIMEOUT_MS = 1000;
private final Context mContext = ApplicationProvider.getApplicationContext();
private final String mAdServicesPackageName =
@@ -74,17 +76,22 @@ public class AppSearchMeasurementRollbackWorkerTest {
private final Executor mExecutor = AdServicesExecutors.getBackgroundExecutor();
private AppSearchMeasurementRollbackWorker mWorker;
@Mock private ListenableFuture<AppSearchSession> mAppSearchSession;
+ @Mock private Flags mMockFlags;
@Rule
public final AdServicesExtendedMockitoRule adServicesExtendedMockitoRule =
new AdServicesExtendedMockitoRule.Builder(this)
.mockStatic(PlatformStorage.class)
.mockStatic(AppSearchDao.class)
+ .mockStatic(FlagsFactory.class)
.setStrictness(Strictness.LENIENT)
.build();
@Before
public void setup() {
+ doReturn(mMockFlags).when(FlagsFactory::getFlags);
+ doReturn(APPSEARCH_WRITE_TIMEOUT_MS).when(mMockFlags).getAppSearchWriteTimeout();
+
ArgumentCaptor<PlatformStorage.SearchContext> cap =
ArgumentCaptor.forClass(PlatformStorage.SearchContext.class);
doReturn(mAppSearchSession)
@@ -107,7 +114,7 @@ public class AppSearchMeasurementRollbackWorkerTest {
@SuppressWarnings("FutureReturnValueIgnored")
@Test
public void testClearAdServicesDeletionOccurred() {
- FluentFuture mockResult =
+ FluentFuture<AppSearchBatchResult<String, Void>> mockResult =
FluentFuture.from(
Futures.immediateFuture(
new AppSearchBatchResult.Builder<String, Void>().build()));
@@ -128,13 +135,14 @@ public class AppSearchMeasurementRollbackWorkerTest {
@Test
public void testClearAdServicesDeletionOccurred_throwsChecked() {
- Callable<Void> callable =
+ Callable<AppSearchBatchResult<String, Void>> callable =
() -> {
- TimeUnit.MILLISECONDS.sleep(FUTURE_TIMEOUT_MILLISECONDS);
+ TimeUnit.MILLISECONDS.sleep(APPSEARCH_WRITE_TIMEOUT_MS + 500);
return null;
};
- FluentFuture mockResult = FluentFuture.from(Futures.submit(callable, mExecutor));
+ FluentFuture<AppSearchBatchResult<String, Void>> mockResult =
+ FluentFuture.from(Futures.submit(callable, mExecutor));
doReturn(mockResult).when(() -> AppSearchDao.deleteData(any(), any(), any(), any(), any()));
RuntimeException e =
@@ -234,17 +242,17 @@ public class AppSearchMeasurementRollbackWorkerTest {
@Test
public void testRecordAdServicesDeletionOccurred_throwsChecked() {
- // The manager class waits for 2 seconds on the future.get() call before timing out. So
- // creating a future that takes longer than 2 sec to resolve, in order to create a
+ // The manager class waits for a few seconds on the future.get() call before timing out. So
+ // creating a future that takes longer than the timeout to resolve, in order to create a
// TimeoutException.
- Callable<Void> callable =
+ Callable<AppSearchBatchResult<String, Void>> callable =
() -> {
- TimeUnit.MILLISECONDS.sleep(FUTURE_TIMEOUT_MILLISECONDS);
+ TimeUnit.MILLISECONDS.sleep(APPSEARCH_WRITE_TIMEOUT_MS + 500);
return null;
};
- ListenableFuture<Void> future = Futures.submit(callable, mExecutor);
- FluentFuture mockFuture = FluentFuture.from(future);
+ FluentFuture<AppSearchBatchResult<String, Void>> mockFuture =
+ FluentFuture.from(Futures.submit(callable, mExecutor));
AppSearchMeasurementRollbackDao dao = mock(AppSearchMeasurementRollbackDao.class);
doReturn(mockFuture).when(dao).writeData(any(), any(), any());
diff --git a/adservices/tests/unittest/service-core/assets/attribution_service_test.json b/adservices/tests/unittest/service-core/assets/attribution_service_test.json
index 223e9cbf95..7612332a24 100644
--- a/adservices/tests/unittest/service-core/assets/attribution_service_test.json
+++ b/adservices/tests/unittest/service-core/assets/attribution_service_test.json
@@ -102,7 +102,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T1"
}],
@@ -244,7 +244,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T1"
}],
@@ -423,7 +423,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T1"
},
@@ -438,7 +438,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T2"
}
@@ -805,7 +805,7 @@
"triggerPriority": 101,
"status": 0,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S2",
"triggerId": "T1"
}],
@@ -965,7 +965,7 @@
"triggerPriority": 101,
"status": 0,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S2",
"triggerId": "T1"
}],
@@ -1883,7 +1883,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T1"
}],
@@ -2580,7 +2580,7 @@
"reportTime": 8730000001,
"triggerPriority": 102,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T2"
},
@@ -2595,7 +2595,7 @@
"reportTime": 8730000001,
"triggerPriority": 103,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T3"
},
@@ -2610,7 +2610,7 @@
"reportTime": 8730000001,
"triggerPriority": 104,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T4"
}
@@ -2875,7 +2875,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T1"
},
@@ -2890,7 +2890,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T2"
},
@@ -2905,7 +2905,7 @@
"reportTime": 8730000001,
"triggerPriority": 102,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T4"
}
@@ -3765,7 +3765,7 @@
"reportTime": 8643600030,
"triggerPriority": 0,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T2"
}
@@ -3928,7 +3928,7 @@
"reportTime": 8643600030,
"triggerPriority": 0,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0024263,
+ "randomizedTriggerRate": 0.0001372,
"sourceId": "S1",
"triggerId": "T2"
}
@@ -5052,7 +5052,7 @@
"reportTime": 8730000001,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0170218,
+ "randomizedTriggerRate": 0.0008051,
"sourceId": "S1",
"triggerId": "T1"
}],
@@ -5401,7 +5401,7 @@
"reportTime": 8730000002,
"triggerPriority": 101,
"sourceType": "navigation",
- "randomizedTriggerRate": 0.0170218,
+ "randomizedTriggerRate": 0.0008051,
"sourceId": "S1",
"triggerId": "T1"
}],
diff --git a/adservices/tests/unittest/service-core/assets/measurement_app_uninstall_deletion_test.json b/adservices/tests/unittest/service-core/assets/measurement_app_uninstall_deletion_test.json
index c9e8a4f5e4..ce426c9dd5 100644
--- a/adservices/tests/unittest/service-core/assets/measurement_app_uninstall_deletion_test.json
+++ b/adservices/tests/unittest/service-core/assets/measurement_app_uninstall_deletion_test.json
@@ -784,7 +784,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.test",
"webDestination": "https://foo.test",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2-REMOVE",
@@ -801,7 +802,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.test",
"webDestination": "https://foo.test",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -822,7 +824,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.test",
"webDestination": "https://foo.test",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -1192,7 +1195,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -1209,7 +1213,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -1365,7 +1370,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -1382,7 +1388,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/measurement_delete_expired_test.json b/adservices/tests/unittest/service-core/assets/measurement_delete_expired_test.json
index b835aeda95..95bbb6199a 100644
--- a/adservices/tests/unittest/service-core/assets/measurement_delete_expired_test.json
+++ b/adservices/tests/unittest/service-core/assets/measurement_delete_expired_test.json
@@ -296,7 +296,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -313,7 +314,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR3",
@@ -330,7 +332,8 @@
"retryCount": 5,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR4",
@@ -347,7 +350,8 @@
"retryCount": 5,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -374,7 +378,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/flex_api_with_no_origin_multiple_domain.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/flex_api_with_no_origin_multiple_domain.json
index 28000d86aa..d11dc54433 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/flex_api_with_no_origin_multiple_domain.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/flex_api_with_no_origin_multiple_domain.json
@@ -332,7 +332,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -349,7 +350,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -420,7 +422,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/registrant_not_found.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/registrant_not_found.json
index c5e9d4b564..0ee22ebf73 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/registrant_not_found.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/registrant_not_found.json
@@ -143,7 +143,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -160,7 +161,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -307,7 +309,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -324,7 +327,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain.json
index c9b7e17e1a..5e63f9e8de 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain.json
@@ -312,7 +312,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -329,7 +330,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -488,7 +490,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain_preserve.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain_preserve.json
index 533129bd50..008c0aa91d 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain_preserve.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_multiple_origin_no_domain_preserve.json
@@ -325,7 +325,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -342,7 +343,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -580,7 +582,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain.json
index abd601f823..d993967812 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain.json
@@ -325,7 +325,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -342,7 +343,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -500,7 +502,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain_preserve.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain_preserve.json
index 802e383195..160e848137 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain_preserve.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_multiple_domain_preserve.json
@@ -339,7 +339,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -356,7 +357,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -595,7 +597,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_nor_range.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_nor_range.json
index 5ed787715e..58f75087dd 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_nor_range.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_no_origin_nor_range.json
@@ -152,7 +152,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -169,7 +170,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -324,7 +326,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -341,7 +344,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_origin_but_no_range.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_origin_but_no_range.json
index 0528d34e84..e6137bd08f 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_origin_but_no_range.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_origin_but_no_range.json
@@ -178,7 +178,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -195,7 +196,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -288,7 +290,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_but_no_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_but_no_origin.json
index 2f08f9ea86..0abc4ceb01 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_but_no_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_but_no_origin.json
@@ -170,7 +170,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -187,7 +188,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -360,7 +362,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -377,7 +380,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_and_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_and_origin.json
index 74b7ca85a9..0994666c4c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_and_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_and_origin.json
@@ -247,7 +247,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -264,7 +265,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -423,7 +425,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_no_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_no_origin.json
index 6aa23b0530..b7f45c81c5 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_no_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_ending_edge_no_origin.json
@@ -170,7 +170,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -187,7 +188,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -360,7 +362,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -377,7 +380,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_and_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_and_origin.json
index bf15f2fe8f..ec53542051 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_and_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_and_origin.json
@@ -234,7 +234,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -251,7 +252,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -397,7 +399,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_no_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_no_origin.json
index 96e63cfafe..4f0528007c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_no_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_range_on_starting_edge_no_origin.json
@@ -170,7 +170,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -187,7 +188,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -360,7 +362,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -377,7 +380,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_and_origin.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_and_origin.json
index 540f8cefda..4ff46fea48 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_and_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_and_origin.json
@@ -234,7 +234,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -251,7 +252,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -397,7 +399,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_no_origin_preserve.json b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_no_origin_preserve.json
index 0a4c0a3692..e0775912c8 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_no_origin_preserve.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_browser_deletion_tests/with_start_equals_end_no_origin_preserve.json
@@ -169,7 +169,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
},
{
"registrationId": "AR2",
@@ -186,7 +187,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
@@ -281,7 +283,8 @@
"retryCount": 1,
"verifiedDestination": "https://foo.com",
"webDestination": "https://foo.com",
- "sourceType": 1
+ "sourceType": 1,
+ "redirectBehavior": "AS_IS"
}
]
},
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_debug_source_storage_limit.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_debug_source_storage_limit.json
index ff052bee42..b38a247233 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_debug_source_storage_limit.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_debug_source_storage_limit.json
@@ -153,7 +153,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key": "347982378",
"trigger_debug_key": "147982378"
}
@@ -181,7 +181,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key": "347982378",
"trigger_debug_key": "147982378"
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_large_keys.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_large_keys.json
index 167693041b..c7bae560bb 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_large_keys.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_large_keys.json
@@ -103,7 +103,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_many_trigger_data.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_many_trigger_data.json
index 7210704bbb..5fad101445 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_many_trigger_data.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_many_trigger_data.json
@@ -121,7 +121,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_over_contributions_limit.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_over_contributions_limit.json
index c5e8b3cad3..20f7179f30 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_over_contributions_limit.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_over_contributions_limit.json
@@ -160,7 +160,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -172,7 +172,7 @@
"source_event_id": "1",
"trigger_data": "3",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_three_of_three_entries.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_three_of_three_entries.json
index f228340d0e..bc5b4d132f 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_three_of_three_entries.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_three_of_three_entries.json
@@ -105,7 +105,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions.json
index 985a338edc..54739775a6 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions.json
@@ -103,7 +103,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api.json
index 11df48af0c..c619387a7e 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api.json
@@ -107,7 +107,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
@@ -135,7 +135,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_source.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_source.json
index 13cbac1a22..bfd9f49a5c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_source.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_source.json
@@ -106,7 +106,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378"
}
}],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_trigger.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_trigger.json
index 2d394041fd..77e5f09e98 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_trigger.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_debug_api_trigger.json
@@ -106,7 +106,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"trigger_debug_key" : "8971346783"
}
}],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api.json
index a2e78e2098..6c4c776b26 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api.json
@@ -107,7 +107,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_source.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_source.json
index 9f0ad2801a..8bd9dd685c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_source.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_source.json
@@ -106,7 +106,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_trigger.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_trigger.json
index 7cae580ac5..83516309f0 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_trigger.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_no_adid_debug_api_trigger.json
@@ -106,7 +106,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_null_reports.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_null_reports.json
index ba0fae5d74..5b551ae953 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_null_reports.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/aggregatable/aggregatable_two_contributions_null_reports.json
@@ -107,7 +107,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_3_conversions.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_3_conversions.json
index 5e1ff2b5c5..b8d9fe1abb 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_3_conversions.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_3_conversions.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for CTC - 2h (w1), 2d (w2) and expiry (w3). Source (app) has T1 (web), T2(web) and T3(web) in W1, where T4 gets ignored due to equal priority",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_ctc_early_reporting_windows": "7200,172800",
"measurement_flex_api_max_information_gain_dual_destination_event": "9",
"measurement_flex_api_max_information_gain_dual_destination_navigation": "14"
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2.json
index a6294ab4bd..3c6ad0eda6 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for CTC - 2h (w1), 2d (w2) and expiry (w3). Source has T1(app) in W1 and T2(app) in W2.",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_ctc_early_reporting_windows": "7200,172800"
},
"input": {
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2_w3.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2_w3.json
index 98fdf514e9..670f89e0cb 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2_w3.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_ctc_w1_w2_w3.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for CTC - 2h (w1), 2d (w2) and expiry (w3). Source (web) source has T1(app) in W1, T2(web) in W2 and T4(app) in W3 where T3(web) gets replaced by T4 because T4 has higher priority.",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_ctc_early_reporting_windows": "7200,172800",
"measurement_flex_api_max_information_gain_dual_destination_event": "9",
"measurement_flex_api_max_information_gain_dual_destination_navigation": "14"
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_install_attribution.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_install_attribution.json
index 0bd0470df8..dc8e961a0d 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_install_attribution.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_install_attribution.json
@@ -1,7 +1,7 @@
{
"description": "Three reporting windows configured for VTC - 1h (w1), 1d (w2) and expiry (w3). Source has 2 app triggers due to install attribution in w1 and w2.",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
+ "measurement_vtc_configurable_max_event_reports_count": "2",
"measurement_event_reports_vtc_early_reporting_windows": "3600,86400",
"measurement_flex_api_max_information_gain_dual_destination_event": "9",
"measurement_flex_api_max_information_gain_dual_destination_navigation": "14"
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w1.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w1.json
index 3aa8dafc2f..4641d4e536 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w1.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w1.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for VTC - 1h (w1), 1d (w2) and expiry (w3). Source has trigger attributed in W1.",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_vtc_early_reporting_windows": "3600,86400"
},
"input": {
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w2.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w2.json
index 9c6ec1539d..ff5af97ef7 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w2.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w2.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for VTC - 1h (w1), 1d (w2) and expiry (w3). Source has trigger attributed in W2 (also has another trigger which gets ignored due to lower priority).",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_vtc_early_reporting_windows": "3600,86400"
},
"input": {
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w3.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w3.json
index bc775e3a48..224f52c57a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w3.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/configurable_reporting/configurable_reporting_event_vtc_w3.json
@@ -1,7 +1,6 @@
{
"description": "Three reporting windows configured for VTC - 1h (w1), 1d (w2) and expiry (w3). Source(app) has web trigger attributed in W3.",
"phflags_override": {
- "measurement_enable_configurable_event_reporting_windows": "true",
"measurement_event_reports_vtc_early_reporting_windows": "3600,86400"
},
"input": {
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_aggregatable_two_contributions.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_aggregatable_two_contributions.json
index ebd6ed6430..2338ff7f04 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_aggregatable_two_contributions.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_aggregatable_two_contributions.json
@@ -151,7 +151,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key": "347982378"
}
}],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-app_source_destination_limit.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-app_source_destination_limit.json
index a663f249a9..280c87b411 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-app_source_destination_limit.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-app_source_destination_limit.json
@@ -111,7 +111,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-web_source_destination_limit.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-web_source_destination_limit.json
index d3d1ca3344..2e8540beac 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-web_source_destination_limit.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_register_web-web_source_destination_limit.json
@@ -98,7 +98,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger-reporting-origin-limit-app-app.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger-reporting-origin-limit-app-app.json
index 39716916d1..f4498b61cf 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger-reporting-origin-limit-app-app.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger-reporting-origin-limit-app-app.json
@@ -120,7 +120,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
@@ -136,7 +136,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-app.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-app.json
index 459632d366..a4efff0cc9 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-app.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-app.json
@@ -91,7 +91,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [],
@@ -106,7 +106,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"debug_aggregatable_results": [],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-web.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-web.json
index 4fdfa14c0c..77ff7530a7 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-web.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_app-web.json
@@ -102,7 +102,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"debug_event_level_results": [{
@@ -116,7 +116,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-app.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-app.json
index bc0de4ec04..6d43ca8344 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-app.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-app.json
@@ -101,7 +101,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"debug_event_level_results": [{
@@ -115,7 +115,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-different-registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-different-registrant.json
index b11caa5333..42e17840da 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-different-registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-different-registrant.json
@@ -103,7 +103,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"debug_event_level_results": [{
@@ -117,7 +117,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-same-registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-same-registrant.json
index ee2b33f983..3e92414069 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-same-registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_attributions_per_source_destination_limit_web-web-same-registrant.json
@@ -99,7 +99,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"debug_event_level_results": [{
@@ -113,7 +113,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346783",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-app.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-app.json
index 422d8a143c..4d91151dfd 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-app.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-app.json
@@ -79,7 +79,7 @@
{
"payload": {
"attribution_destination": "android-app://example.2d1.test",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0001372,
"scheduled_report_time": "1643325573",
"source_event_id": "1",
"source_type": "navigation",
@@ -95,7 +95,7 @@
{
"payload": {
"attribution_destination": "android-app://example.2d1.test",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0001372,
"scheduled_report_time": "1643325573",
"source_event_id": "1",
"source_type": "navigation",
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-web.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-web.json
index a18be7506e..3182ac4ce0 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-web.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_app-web.json
@@ -98,7 +98,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0008051
}
}],
"debug_event_level_results": [{
@@ -112,7 +112,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-app.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-app.json
index a425ba0f31..86e4d16d04 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-app.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-app.json
@@ -97,7 +97,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0008051
}
}],
"debug_event_level_results": [{
@@ -111,7 +111,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-different-registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-different-registrant.json
index ba15a27bd6..29e5241202 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-different-registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-different-registrant.json
@@ -101,7 +101,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0001372
}
}],
"debug_event_level_results": [{
@@ -115,7 +115,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0001372
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-same-registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-same-registrant.json
index b0c0aa01eb..9eb5b1b4bc 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-same-registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/debug_report/debug_report_trigger_event_report_window_passed_web-web-same-registrant.json
@@ -95,7 +95,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0001372
}
}],
"debug_event_level_results": [{
@@ -109,7 +109,7 @@
"source_type": "navigation",
"source_debug_key": "347982378",
"trigger_debug_key": "8971346781",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0001372
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_3_app_sources_3_web_triggers_3_reports.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_3_app_sources_3_web_triggers_3_reports.json
index 1405c785d7..5eaa9d1ac8 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_3_app_sources_3_web_triggers_3_reports.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_3_app_sources_3_web_triggers_3_reports.json
@@ -123,7 +123,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}, {
"report_time": "800176400001",
@@ -134,7 +134,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}, {
"report_time": "800176400001",
@@ -145,7 +145,7 @@
"source_event_id": "3",
"trigger_data": "3",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_cannot_redirect.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_cannot_redirect.json
index 518fbf142e..7fabaaf824 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_cannot_redirect.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/list_sources/list_sources_cannot_redirect.json
@@ -228,7 +228,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect.json
index 45fdc162cf..975bd064b9 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect.json
@@ -44,9 +44,7 @@
"Attribution-Reporting-Register-Source": {
"source_event_id": "3",
"destination": "android-app://example.2d1.test",
- "priority": "100",
- "expiry": "800172800002"
-
+ "priority": "100"
},
"Location": null,
"Attribution-Reporting-Redirect": null
@@ -124,7 +122,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -136,7 +134,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect_to_well_known.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect_to_well_known.json
new file mode 100644
index 0000000000..ceb8bd2ad9
--- /dev/null
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/basic_use_of_redirect_to_well_known.json
@@ -0,0 +1,113 @@
+{
+ "description": "Three sources with equal event-time, and three triggers that match. The second and third sources and triggers are obtained by redirect from the first HTTP fetch of each, using redirection to the .well-known path. Event report task within the expiry window sends the data corresponding to the three sources.",
+ "phflags_override": {
+ "measurement_enable_redirect_to_well_known_path": "true"
+ },
+ "input": {
+ "sources": [{
+ "registration_request": {
+ "attribution_src_url": "https://www.ad-tech1.test",
+ "source_type": "navigation",
+ "registrant": "example.1s1.test"
+ },
+ "responses": [
+ {
+ "url": "https://www.ad-tech1.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "1",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100",
+ "expiry": "172801"
+ },
+ "Location": "https://www.ad-tech2.test",
+ "Attribution-Reporting-Redirect-Config": "redirect-302-to-well-known"
+ }
+ },
+ {
+ "url": "https://www.ad-tech2.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.ad-tech2.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "2",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100",
+ "expiry": "172801"
+ },
+
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ }
+ ],
+ "timestamp": "800000000001"
+ }],
+ "triggers": [{
+ "registration_request": {
+ "attribution_src_url": "https://www.ad-tech1.test",
+ "registrant": "example.2d1.test"
+ },
+ "responses": [
+ {
+ "url": "https://www.ad-tech1.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "1",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": "https://www.ad-tech2.test",
+ "Attribution-Reporting-Redirect-Config": "redirect-302-to-well-known"
+ }
+ },
+ {
+ "url": "https://www.ad-tech2.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.ad-tech2.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "2",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ }
+ ],
+ "timestamp": "800000600001"
+ }]
+ },
+ "output": {
+ "event_level_results": [
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech1.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "1",
+ "trigger_data": "1",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0008051
+ }
+ },
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech2.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "2",
+ "trigger_data": "2",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0008051
+ }
+ }
+ ],
+ "aggregatable_results": []
+ }
+}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects.json
index 413283b348..2240b56614 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects.json
@@ -50,9 +50,7 @@
"Attribution-Reporting-Register-Source": {
"source_event_id": "3",
"destination": "android-app://example.2d1.test",
- "priority": "100",
- "expiry": "800172800002"
-
+ "priority": "100"
},
"Location": "https://www.unenrolled-non-registering2.test",
"Attribution-Reporting-Redirect": [
@@ -66,9 +64,7 @@
"Attribution-Reporting-Register-Source": {
"source_event_id": "4",
"destination": "android-app://example.2d1.test",
- "priority": "100",
- "expiry": "800172800002"
-
+ "priority": "100"
},
"Location": null,
"Attribution-Reporting-Redirect": null
@@ -80,9 +76,7 @@
"Attribution-Reporting-Register-Source": {
"source_event_id": "6",
"destination": "android-app://example.2d1.test",
- "priority": "100",
- "expiry": "800172800002"
-
+ "priority": "100"
},
"Attribution-Reporting-Redirect": [
"https://www.ad-tech5.test"
@@ -96,9 +90,7 @@
"Attribution-Reporting-Register-Source": {
"source_event_id": "5",
"destination": "android-app://example.2d1.test",
- "priority": "100",
- "expiry": "800172800002"
-
+ "priority": "100"
},
"Location": null,
"Attribution-Reporting-Redirect": null
@@ -231,7 +223,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -243,7 +235,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects_to_well_known.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects_to_well_known.json
new file mode 100644
index 0000000000..e9a811d4cc
--- /dev/null
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/complex_use_of_redirects_to_well_known.json
@@ -0,0 +1,287 @@
+{
+ "description": "7 (5 registering & 2 non-registering) redirects each for source & triggers. Redirection to .well-known path is enabled intermediately, making all subsequent Location-type registrations redirect to the .well-known path, even without the header. All 5 sources and triggers match. Event report task within the expiry window sends the data corresponding to the 5 sources.",
+ "phflags_override": {
+ "measurement_enable_redirect_to_well_known_path": "true"
+ },
+ "input": {
+ "sources": [{
+ "registration_request": {
+ "attribution_src_url": "https://www.ad-tech1.test",
+ "source_type": "navigation",
+ "registrant": "example.1s1.test"
+ },
+ "responses": [
+ {
+ "url": "https://www.ad-tech1.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "1",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100",
+ "expiry": "172801"
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech2.test",
+ "https://www.enrolled-non-registering1.test"
+ ]
+ }
+ },
+ {
+ "url": "https://www.ad-tech2.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "2",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100",
+ "expiry": "172801"
+ },
+
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ },
+ {
+ "url": "https://www.enrolled-non-registering1.test",
+ "response": {
+ "Location": "https://www.ad-tech3.test",
+ "Attribution-Reporting-Redirect-Config": "redirect-302-to-well-known"
+ }
+ },
+ {
+ "url": "https://www.ad-tech3.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.ad-tech3.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "3",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100"
+ },
+ "Location": "https://www.unenrolled-non-registering2.test",
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech4.test"
+ ]
+ }
+ },
+ {
+ "url": "https://www.ad-tech4.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "4",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100"
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ },
+ {
+ "url": "https://www.unenrolled-non-registering2.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.unenrolled-non-registering2.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "6",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100"
+ },
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech5.test"
+ ]
+ },
+ "enroll": false
+ },
+ {
+ "url": "https://www.ad-tech5.test",
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "source_event_id": "5",
+ "destination": "android-app://example.2d1.test",
+ "priority": "100",
+ "expiry": "800172800002"
+
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ }
+ ],
+ "timestamp": "800000000001"
+ }],
+ "triggers": [{
+ "registration_request": {
+ "attribution_src_url": "https://www.ad-tech1.test",
+ "registrant": "example.2d1.test"
+ },
+ "responses": [
+ {
+ "url": "https://www.ad-tech1.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "1",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech2.test",
+ "https://www.enrolled-non-registering1.test"
+ ]
+ }
+ },
+ {
+ "url": "https://www.ad-tech2.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "2",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ },
+ {
+ "url": "https://www.enrolled-non-registering1.test",
+ "response": {
+ "Location": "https://www.ad-tech3.test",
+ "Attribution-Reporting-Redirect-Config": "redirect-302-to-well-known"
+ }
+ },
+ {
+ "url": "https://www.ad-tech3.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.ad-tech3.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "3",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": "https://www.unenrolled-non-registering2.test",
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech4.test"
+ ]
+ }
+ },
+ {
+ "url": "https://www.ad-tech4.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "4",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ },
+ {
+ "url": "https://www.unenrolled-non-registering2.test/.well-known/attribution-reporting/register-redirect?302_url=https%3A%2F%2Fwww.unenrolled-non-registering2.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "6",
+ "priority": "101"
+ }
+ ]
+ },
+ "Attribution-Reporting-Redirect": [
+ "https://www.ad-tech5.test"
+ ]
+ },
+ "enroll": false
+ },
+ {
+ "url": "https://www.ad-tech5.test",
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "event_trigger_data": [
+ {
+ "trigger_data": "5",
+ "priority": "101"
+ }
+ ]
+ },
+ "Location": null,
+ "Attribution-Reporting-Redirect": null
+ }
+ }
+ ],
+ "timestamp": "800000600001"
+ }]
+ },
+ "output": {
+ "event_level_results": [
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech1.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "1",
+ "trigger_data": "1",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0008051
+ }
+ },
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech2.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "2",
+ "trigger_data": "2",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0008051
+ }
+ },
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech3.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "3",
+ "trigger_data": "3",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0024263
+ }
+ },
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech4.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "4",
+ "trigger_data": "4",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0024263
+ }
+ },
+ {
+ "report_time": "800176400001",
+ "report_url": "https://www.ad-tech5.test/.well-known/attribution-reporting/report-event-attribution",
+ "payload": {
+ "attribution_destination": "android-app://example.2d1.test",
+ "scheduled_report_time": "800176400",
+ "source_event_id": "5",
+ "trigger_data": "5",
+ "source_type": "navigation",
+ "randomized_trigger_rate": 0.0024263
+ }
+ }
+ ],
+ "aggregatable_results": []
+ }
+}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_1_allowed.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_1_allowed.json
index a86d676748..f6921321ac 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_1_allowed.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_1_allowed.json
@@ -126,7 +126,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_2_allowed.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_2_allowed.json
index 5877390240..e9228b9c42 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_2_allowed.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_2_allowed.json
@@ -126,7 +126,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_disabled.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_disabled.json
index a9752fec1d..2da69130d3 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_disabled.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/coordinator_origin_disabled.json
@@ -126,7 +126,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/enrollment_flag_disabled.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/enrollment_flag_disabled.json
index 0b966e24dd..4a17c0eb6a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/enrollment_flag_disabled.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/enrollment_flag_disabled.json
@@ -108,7 +108,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": [{
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_debug_source_storage_limit.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_debug_source_storage_limit.json
index 71b47b1040..1ba32b6d5a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_debug_source_storage_limit.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_debug_source_storage_limit.json
@@ -88,7 +88,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key": "347982378",
"trigger_debug_key": "147982378"
}
@@ -102,7 +102,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key": "347982378",
"trigger_debug_key": "147982378"
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_report_window.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_report_window.json
index 67ef2d38d1..615ab49316 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_report_window.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_report_window.json
@@ -121,7 +121,7 @@
"payload": {
"attribution_destination": "android-app://destination.test",
"scheduled_report_time": "1643325573",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0001372,
"source_event_id": "123",
"source_type": "navigation",
"trigger_data": "1"
@@ -133,7 +133,7 @@
"payload": {
"attribution_destination": "android-app://destination.test",
"scheduled_report_time": "1643325573",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0001372,
"source_event_id": "123",
"source_type": "navigation",
"trigger_data": "2"
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_time_based_source_selection.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_time_based_source_selection.json
index 6d9b78f24d..b84aeab364 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_time_based_source_selection.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/event_time_based_source_selection.json
@@ -78,7 +78,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/limit_num_reports_for_click.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/limit_num_reports_for_click.json
index 9adf76d188..71dd31cc7d 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/limit_num_reports_for_click.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/limit_num_reports_for_click.json
@@ -124,7 +124,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -136,7 +136,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -148,7 +148,7 @@
"source_event_id": "1",
"trigger_data": "3",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_as_reporting_origin.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_as_reporting_origin.json
index f3944e4ebe..bef06b6e4c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_as_reporting_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_as_reporting_origin.json
@@ -55,7 +55,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_basic_use_of_redirect.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_basic_use_of_redirect.json
index 944d307227..b519eb9f5a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_basic_use_of_redirect.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_basic_use_of_redirect.json
@@ -93,7 +93,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -105,7 +105,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_ip_as_reporting_origin.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_ip_as_reporting_origin.json
index d7fad3f796..1e06979410 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_ip_as_reporting_origin.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/localhost_ip_as_reporting_origin.json
@@ -55,7 +55,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/only_one_source_of_multiple_matches_can_be_attributed.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/only_one_source_of_multiple_matches_can_be_attributed.json
index 4563f37988..7a5af3e5cd 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/only_one_source_of_multiple_matches_can_be_attributed.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/only_one_source_of_multiple_matches_can_be_attributed.json
@@ -103,7 +103,7 @@
"source_event_id": "2",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -115,7 +115,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/priority_based_source_selection.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/priority_based_source_selection.json
index 41595f546a..fdc35df288 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/priority_based_source_selection.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/priority_based_source_selection.json
@@ -78,7 +78,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWebSource_3_sources_3_triggers_3_reports.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWebSource_3_sources_3_triggers_3_reports.json
index 8827e69b5a..2c000a83b0 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWebSource_3_sources_3_triggers_3_reports.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWebSource_3_sources_3_triggers_3_reports.json
@@ -128,7 +128,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}, {
"report_time": "800176400001",
@@ -139,7 +139,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}, {
"report_time": "800176400001",
@@ -150,7 +150,7 @@
"source_event_id": "3",
"trigger_data": "3",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching.json
index eac5f0a527..03fb47d115 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching.json
@@ -64,7 +64,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_different_registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_different_registrant.json
index ddb67affd0..5ef74d0e62 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_different_registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_different_registrant.json
@@ -66,7 +66,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_same_registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_same_registrant.json
index b712042b89..f0c60f59e5 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_same_registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_ar_debug_same_registrant.json
@@ -66,7 +66,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
@@ -80,7 +80,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_no_adid_no_ar_debug.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_no_adid_no_ar_debug.json
index 15dbcae8f2..e43a0c4091 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_no_adid_no_ar_debug.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_api_no_adid_no_ar_debug.json
@@ -64,7 +64,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_disabled_different_registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_disabled_different_registrant.json
index 061c0c7439..8142f2c57f 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_disabled_different_registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_disabled_different_registrant.json
@@ -69,7 +69,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_enabled_different_registrant.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_enabled_different_registrant.json
index ac91e0adf7..0917d94348 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_enabled_different_registrant.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-1_web-web_matching_debug_join_enabled_different_registrant.json
@@ -69,7 +69,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
@@ -83,7 +83,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263,
+ "randomized_trigger_rate": 0.0008051,
"source_debug_key" : "347982378",
"trigger_debug_key" : "8971346783"
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_app_and_web_matching.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_app_and_web_matching.json
index 8be0277e02..dcf130f11c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_app_and_web_matching.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_app_and_web_matching.json
@@ -88,7 +88,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}, {
"report_time": "800176400001",
@@ -99,7 +99,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_web_only_matching.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_web_only_matching.json
index faa4806674..ccb8f3fce2 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_web_only_matching.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_1-2_web_only_matching.json
@@ -83,7 +83,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_adid_debug_api.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_adid_debug_api.json
index da1aab976a..b047a48a8e 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_adid_debug_api.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_adid_debug_api.json
@@ -83,7 +83,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}]
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_ar_debug_adid_debug_api.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_ar_debug_adid_debug_api.json
index b161cb42fb..681d1f66d6 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_ar_debug_adid_debug_api.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_ar_debug_adid_debug_api.json
@@ -83,7 +83,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}]
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_debug_api_ar_debug.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_debug_api_ar_debug.json
index 9fb5654c93..57c247e4e9 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_debug_api_ar_debug.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_app-web_debug_api_ar_debug.json
@@ -82,7 +82,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}]
}
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_multiple_destinations.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_multiple_destinations.json
index 93f63a51e4..ca316b7758 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_multiple_destinations.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_multiple_destinations.json
@@ -89,7 +89,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -101,7 +101,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_redirects_ignored.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_redirects_ignored.json
index 646b2e2b12..280fc41933 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_redirects_ignored.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_redirects_ignored.json
@@ -106,7 +106,7 @@
"source_event_id": "1",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_web_app_matching_debug_api_adid_ar_debug.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_web_app_matching_debug_api_adid_ar_debug.json
index 11d36313c8..5a229be9b6 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_web_app_matching_debug_api_adid_ar_debug.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/registerWeb_web_app_matching_debug_api_adid_ar_debug.json
@@ -68,7 +68,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_1-1_app-app_matching.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_1-1_app-app_matching.json
index 768d5f994c..080c62ca1a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_1-1_app-app_matching.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_1-1_app-app_matching.json
@@ -55,7 +55,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_empty_object_event_trigger_data.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_empty_object_event_trigger_data.json
index d2be233191..9fd1eb9235 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_empty_object_event_trigger_data.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_empty_object_event_trigger_data.json
@@ -50,7 +50,7 @@
"source_event_id": "0",
"trigger_data": "0",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_null_trigger_data_null_source_event_id.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_null_trigger_data_null_source_event_id.json
index c36147be60..670c8de80a 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_null_trigger_data_null_source_event_id.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-app_null_trigger_data_null_source_event_id.json
@@ -55,7 +55,7 @@
"source_event_id": "0",
"trigger_data": "0",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_dual_destination_source_storage_limit_debug_report.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_dual_destination_source_storage_limit_debug_report.json
index 2041a9d2f0..22e7b538ab 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_dual_destination_source_storage_limit_debug_report.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_dual_destination_source_storage_limit_debug_report.json
@@ -99,7 +99,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0170218
+ "randomized_trigger_rate": 0.0054129
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_source_storage_limit_debug_report.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_source_storage_limit_debug_report.json
index dad35eb619..9a88bf402b 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_source_storage_limit_debug_report.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_app-web_source_storage_limit_debug_report.json
@@ -94,7 +94,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_web-web_source_storage_limit_debug_report.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_web-web_source_storage_limit_debug_report.json
index be217c98c4..aaa2b6d4cc 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_web-web_source_storage_limit_debug_report.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/register_web-web_source_storage_limit_debug_report.json
@@ -100,7 +100,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"verbose_debug_reports": [
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_one_trigger.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_one_trigger.json
index 443987f27f..9dec79b882 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_one_trigger.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_one_trigger.json
@@ -99,7 +99,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}],
"aggregatable_results": []
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_three_triggers_one_dedup.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_three_triggers_one_dedup.json
index 17a8ecc366..0343b9bf38 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_three_triggers_one_dedup.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/three_sources_three_triggers_one_dedup.json
@@ -149,7 +149,7 @@
"source_event_id": "2",
"trigger_data": "1",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -161,7 +161,7 @@
"source_event_id": "2",
"trigger_data": "0",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/two_simple_matches_testing_multiplicity.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/two_simple_matches_testing_multiplicity.json
index fa9c81136a..aaabe1703c 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/two_simple_matches_testing_multiplicity.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/misc/two_simple_matches_testing_multiplicity.json
@@ -103,7 +103,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
},
{
@@ -115,7 +115,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_disabled_basic.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_disabled_basic.json
index d859f34139..8fcd67d555 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_disabled_basic.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_disabled_basic.json
@@ -193,7 +193,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_original_source_wins_install_attribution.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_original_source_wins_install_attribution.json
index ee188284d0..9956388e99 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_original_source_wins_install_attribution.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_original_source_wins_install_attribution.json
@@ -373,7 +373,7 @@
"source_event_id": "1",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_reg_has_original_xna_source_avoids_creating_derived_source.json b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_reg_has_original_xna_source_avoids_creating_derived_source.json
index 233e156c5a..bd792b74c5 100644
--- a/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_reg_has_original_xna_source_avoids_creating_derived_source.json
+++ b/adservices/tests/unittest/service-core/assets/msmt_e2e_tests/xna/xna_reg_has_original_xna_source_avoids_creating_derived_source.json
@@ -183,7 +183,7 @@
"source_event_id": "2",
"trigger_data": "2",
"source_type": "navigation",
- "randomized_trigger_rate": 0.0024263
+ "randomized_trigger_rate": 0.0008051
}
}
],
diff --git a/adservices/tests/unittest/service-core/assets/msmt_interop_tests/event_report_windows.json b/adservices/tests/unittest/service-core/assets/msmt_interop_tests/event_report_windows.json
new file mode 100644
index 0000000000..e9a96f2fe7
--- /dev/null
+++ b/adservices/tests/unittest/service-core/assets/msmt_interop_tests/event_report_windows.json
@@ -0,0 +1,289 @@
+{
+ "description": "Set report windows for navigation type event-level reporting",
+ "input": {
+ "registrations": [
+ {
+ "timestamp": "0",
+ "registration_request": {
+ "context_origin": "https://source.test",
+ "attribution_src_url": "https://reporter.test/register-source",
+ "source_type": "navigation"
+ },
+ "responses": [
+ {
+ "url": "https://reporter.test/register-source",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "destination": "https://destination.test",
+ "source_event_id": "123",
+ "expiry": "1296000",
+ "event_report_windows": {
+ "start_time": 3600,
+ // 2592000 s clamped down to expiry.
+ "end_times": [86400, 2592000]
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "timestamp": "1000",
+ "registration_request": {
+ "context_origin": "https://source.test",
+ "attribution_src_url": "https://reporter2.test/register-source",
+ "source_type": "navigation"
+ },
+ "responses": [
+ {
+ "url": "https://reporter2.test/register-source",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Source": {
+ "destination": "https://destination2.test",
+ "source_event_id": "456",
+ "event_report_windows": {
+ "start_time": 0,
+ // 1800 rounded to 3600 (1 hr).
+ "end_times": [1800]
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ // Should result in an event-level report in the first window
+ // rounded up to 1 hour (3600 s).
+ "timestamp": "1900000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter2.test/register-trigger",
+ "context_origin": "https://destination2.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter2.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "4"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ // Should not result in an event-level report as the event report start
+ // time has passed,
+ {
+ // 3,600,000 ms = 1 hour = clamped event_report_window value.
+ "timestamp": "3590000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter.test/register-trigger",
+ "context_origin": "https://destination.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "1"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ // Should result in an event-level report in the first window.
+ "timestamp": "3600000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter.test/register-trigger",
+ "context_origin": "https://destination.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "1"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ // Should not result in an event-level report.
+ "timestamp": "3700000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter2.test/register-trigger",
+ "context_origin": "https://destination2.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter2.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "5"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ // Should result in an event-level report in the last window.
+ "timestamp": "1209600000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter.test/register-trigger",
+ "context_origin": "https://destination.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "2"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ // Should not result in an event-level report as the last window was
+ // clamped to 1296000 s.
+ "timestamp": "1296000000",
+ "registration_request": {
+ "attribution_src_url": "https://reporter.test/register-trigger",
+ "context_origin": "https://destination.test"
+ },
+ "responses": [
+ {
+ "url": "https://reporter.test/register-trigger",
+ "debug_permission": true,
+ "response": {
+ "Attribution-Reporting-Register-Trigger": {
+ "debug_reporting": true,
+ "event_trigger_data": [
+ {
+ "trigger_data": "3"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "output": {
+ "unparsable_registrations": [],
+ "reports": [
+ {
+ "payload": [
+ {
+ "body": {
+ "attribution_destination": "https://destination.test",
+ "source_event_id": "123",
+ "source_site": "https://source.test"
+ },
+ "type": "trigger-event-report-window-not-started"
+ }
+ ],
+ "report_time": "3590000",
+ "report_url": "https://reporter.test/.well-known/attribution-reporting/debug/verbose"
+ },
+ {
+ "payload": {
+ "attribution_destination": "https://destination2.test",
+ "randomized_trigger_rate": 0.0001372,
+ // 3601 s = 3600 s (rounded window) + 1 s (source timestamp).
+ "scheduled_report_time": "3601",
+ "source_event_id": "456",
+ "source_type": "navigation",
+ "trigger_data": "4"
+ },
+ "report_url": "https://reporter2.test/.well-known/attribution-reporting/report-event-attribution",
+ "report_time": "3601000"
+ },
+ {
+ "payload": [
+ {
+ "body": {
+ "attribution_destination": "https://destination2.test",
+ "source_event_id": "456",
+ "source_site": "https://source.test"
+ },
+ "type": "trigger-event-report-window-passed"
+ }
+ ],
+ "report_time": "3700000",
+ "report_url": "https://reporter2.test/.well-known/attribution-reporting/debug/verbose"
+ },
+ {
+ "payload": {
+ "attribution_destination": "https://destination.test",
+ "randomized_trigger_rate": 0.0008051,
+ "scheduled_report_time": "86400",
+ "source_event_id": "123",
+ "source_type": "navigation",
+ "trigger_data": "1"
+ },
+ "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution",
+ "report_time": "86400000"
+ },
+ {
+ "payload": {
+ "attribution_destination": "https://destination.test",
+ "randomized_trigger_rate": 0.0008051,
+ "scheduled_report_time": "1296000",
+ "source_event_id": "123",
+ "source_type": "navigation",
+ "trigger_data": "2"
+ },
+ "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution",
+ "report_time": "1296000000"
+ },
+ {
+ "payload": [
+ {
+ "body": {
+ "attribution_destination": "https://destination.test"
+ },
+ // Source has expired at this point.
+ "type": "trigger-no-matching-source"
+ }
+ ],
+ "report_time": "1296000000",
+ "report_url": "https://reporter.test/.well-known/attribution-reporting/debug/verbose"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/adservices/tests/unittest/service-core/common/Android.bp b/adservices/tests/unittest/service-core/common/Android.bp
new file mode 100644
index 0000000000..b128e30ec8
--- /dev/null
+++ b/adservices/tests/unittest/service-core/common/Android.bp
@@ -0,0 +1,33 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test {
+ name: "AdServicesServiceCoreCommonUnitTests",
+ srcs: [
+ "src/**/*.java",
+ ],
+ defaults: ["AdServices-ServiceCoreUnitTest-Defaults"],
+}
+
+android_test {
+ name: "AdExtServicesServiceCoreCommonUnitTests",
+ srcs: [
+ "src/**/*.java",
+ ],
+ defaults: ["AdExtServices-ServiceCoreUnitTest-Defaults"],
+ test_config: "AndroidTest.ExtServices.xml",
+}
diff --git a/adservices/tests/unittest/service-core/common/AndroidManifest.xml b/adservices/tests/unittest/service-core/common/AndroidManifest.xml
new file mode 100644
index 0000000000..cdbd758b50
--- /dev/null
+++ b/adservices/tests/unittest/service-core/common/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2024 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.adservices.servicecorecommontest">
+ <!-- android:debuggable="true" is needed. See b/228384531 -->
+ <application android:debuggable="true">
+ <uses-library android:name="android.ext.adservices" android:required="false"/>
+ </application>
+
+ <!-- Entries below are necessary so atest can work without specifying the project. -->
+ <instrumentation
+ android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.adservices.servicecorecommontest">
+ </instrumentation>
+</manifest>
diff --git a/adservices/tests/unittest/service-core/common/AndroidTest.ExtServices.xml b/adservices/tests/unittest/service-core/common/AndroidTest.ExtServices.xml
new file mode 100644
index 0000000000..900999fa6d
--- /dev/null
+++ b/adservices/tests/unittest/service-core/common/AndroidTest.ExtServices.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2023 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<configuration
+ description="Config for AdServices Service-core common test cases in ExtServices">
+ <object class="com.android.tradefed.testtype.suite.module.MaxSdkModuleController"
+ type="module_controller">
+ <option name="max-sdk-level" value="32"/>
+ </object>
+
+ <!-- Prevent test from running on Android T+ -->
+ <object class="com.android.tradefed.testtype.suite.module.Sdk30ModuleController"
+ type="module_controller"/>
+
+ <!-- Prevent tests from running on Android Q- -->
+ <object class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController"
+ type="module_controller">
+ <option name="mainline-module-package-name" value="com.google.android.extservices"/>
+ </object>
+
+ <option name="test-tag" value="AdExtServicesServiceCoreCommonUnitTests"/>
+ <option name="config-descriptor:metadata" key="mainline-param"
+ value="com.google.android.extservices.apex"/>
+ <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+ <option name="cleanup-apks" value="true"/>
+ <option name="check-min-sdk" value="true"/>
+ <option name="test-file-name" value="AdExtServicesServiceCoreCommonUnitTests.apk"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+ <option name="run-command" value="setprop log.tag.adservices VERBOSE"/>
+ </target_preparer>
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="com.android.adservices.servicecorecommontest"/>
+ </test>
+</configuration>
diff --git a/adservices/tests/unittest/service-core/common/AndroidTest.xml b/adservices/tests/unittest/service-core/common/AndroidTest.xml
new file mode 100644
index 0000000000..f9a08c35bb
--- /dev/null
+++ b/adservices/tests/unittest/service-core/common/AndroidTest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2024 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<configuration description="Config for Ad Services Service-core common test cases">
+ <object class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController"
+ type="module_controller">
+ <option name="mainline-module-package-name" value="com.google.android.adservices"/>
+ </object>
+
+ <option name="test-tag" value="AdServicesServiceCoreCommonUnitTests"/>
+ <option name="config-descriptor:metadata" key="mainline-param"
+ value="com.google.android.adservices.apex"/>
+ <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+ <option name="cleanup-apks" value="true"/>
+ <option name="check-min-sdk" value="true"/>
+ <option name="test-file-name" value="AdServicesServiceCoreCommonUnitTests.apk"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+ <option name="run-command" value="setprop log.tag.adservices VERBOSE"/>
+ </target_preparer>
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+ <option name="package" value="com.android.adservices.servicecorecommontest"/>
+ </test>
+</configuration>
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java b/adservices/tests/unittest/service-core/common/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java
index 847c08e52a..bdf20f56d5 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java
+++ b/adservices/tests/unittest/service-core/common/src/com/android/adservices/errorlogging/AdServicesErrorLoggerImplTest.java
@@ -21,10 +21,9 @@ import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICE
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__TOPICS;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.database.sqlite.SQLiteException;
@@ -37,11 +36,10 @@ import com.google.common.collect.ImmutableList;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCase {
- private AdServicesErrorLoggerImpl mErrorLogger;
-
// Constants used for tests
private static final String CLASS_NAME = "TopicsService";
private static final String METHOD_NAME = "getTopics";
@@ -50,17 +48,19 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
private static final String SQ_LITE_EXCEPTION = "SQLiteException";
@Mock private Flags mFlags;
- @Mock StatsdAdServicesErrorLogger mStatsdLoggerMock;
+ @Mock private StatsdAdServicesErrorLogger mStatsdLoggerMock;
+
+ private AdServicesErrorLoggerImpl mErrorLogger;
@Before
public void setUp() {
mErrorLogger = new AdServicesErrorLoggerImpl(mFlags, mStatsdLoggerMock);
- doReturn(ImmutableList.of()).when(mFlags).getErrorCodeLoggingDenyList();
+ mockErrorCodeLoggingDenyList(ImmutableList.of());
}
@Test
public void testLogError_errorLoggingFlagDisabled() {
- doReturn(false).when(mFlags).getAdServicesErrorLoggingEnabled();
+ mockAdServicesErrorLogging(/* enabled= */ false);
mErrorLogger.logError(
AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR, PPAPI_NAME);
@@ -70,10 +70,9 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
@Test
public void testLogError_errorLoggingFlagEnabled_errorCodeLoggingDenied() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
- doReturn(ImmutableList.of(AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR))
- .when(mFlags)
- .getErrorCodeLoggingDenyList();
+ mockAdServicesErrorLogging(/* enabled= */ true);
+ mockErrorCodeLoggingDenyList(
+ ImmutableList.of(AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR));
mErrorLogger.logError(
AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR, PPAPI_NAME);
@@ -83,16 +82,23 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
@Test
public void testLogError_errorLoggingFlagEnabled() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
+ mockAdServicesErrorLogging(/* enabled= */ true);
+ ArgumentCaptor<AdServicesErrorStats> adServicesErrorStatsArgumentCaptor =
+ ArgumentCaptor.forClass(AdServicesErrorStats.class);
+
mErrorLogger.logError(
AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR, PPAPI_NAME);
- verify(mStatsdLoggerMock).logAdServicesError(any());
+ verify(mStatsdLoggerMock).logAdServicesError(adServicesErrorStatsArgumentCaptor.capture());
+ AdServicesErrorStats adServicesErrorStats = adServicesErrorStatsArgumentCaptor.getValue();
+ expect.that(adServicesErrorStats.getErrorCode())
+ .isEqualTo(AD_SERVICES_ERROR_REPORTED__ERROR_CODE__CONSENT_REVOKED_ERROR);
+ expect.that(adServicesErrorStats.getPpapiName()).isEqualTo(PPAPI_NAME);
}
@Test
public void testLogErrorWithExceptionInfo_errorLoggingFlagDisabled() {
- doReturn(false).when(mFlags).getAdServicesErrorLoggingEnabled();
+ mockAdServicesErrorLogging(/* enabled= */ false);
mErrorLogger.logErrorWithExceptionInfo(
new Exception(),
@@ -104,10 +110,9 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
@Test
public void testLogErrorWithExceptionInfo_errorLoggingFlagEnabled_errorCodeLoggingDenied() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
- doReturn(ImmutableList.of(AD_SERVICES_ERROR_REPORTED__ERROR_CODE__DATABASE_READ_EXCEPTION))
- .when(mFlags)
- .getErrorCodeLoggingDenyList();
+ mockAdServicesErrorLogging(/* enabled= */ true);
+ mockErrorCodeLoggingDenyList(
+ ImmutableList.of(AD_SERVICES_ERROR_REPORTED__ERROR_CODE__DATABASE_READ_EXCEPTION));
mErrorLogger.logErrorWithExceptionInfo(
new Exception(),
@@ -119,8 +124,7 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
@Test
public void testLogErrorWithExceptionInfo_errorLoggingFlagEnabled() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
-
+ mockAdServicesErrorLogging(/* enabled= */ true);
Exception exception = createSQLiteException(CLASS_NAME, METHOD_NAME, LINE_NUMBER);
mErrorLogger.logErrorWithExceptionInfo(
@@ -138,13 +142,12 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
.setLineNumber(LINE_NUMBER)
.setLastObservedExceptionName(SQ_LITE_EXCEPTION)
.build();
- verify(mStatsdLoggerMock).logAdServicesError(eq(stats));
+ verify(mStatsdLoggerMock).logAdServicesError(stats);
}
@Test
public void testLogErrorWithExceptionInfo_fullyQualifiedClassName_errorLoggingFlagEnabled() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
-
+ mockAdServicesErrorLogging(/* enabled= */ true);
String fullClassName = "com.android.adservices.topics.TopicsService";
Exception exception = createSQLiteException(fullClassName, METHOD_NAME, LINE_NUMBER);
@@ -163,12 +166,12 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
.setLineNumber(LINE_NUMBER)
.setLastObservedExceptionName(SQ_LITE_EXCEPTION)
.build();
- verify(mStatsdLoggerMock).logAdServicesError(eq(stats));
+ verify(mStatsdLoggerMock).logAdServicesError(stats);
}
@Test
public void testLogErrorWithExceptionInfo_emptyClassName_errorLoggingFlagEnabled() {
- doReturn(true).when(mFlags).getAdServicesErrorLoggingEnabled();
+ mockAdServicesErrorLogging(/* enabled= */ true);
Exception exception = createSQLiteException(/* className = */ "", METHOD_NAME, LINE_NUMBER);
@@ -186,7 +189,7 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
.setLineNumber(LINE_NUMBER)
.setLastObservedExceptionName(SQ_LITE_EXCEPTION)
.build();
- verify(mStatsdLoggerMock).logAdServicesError(eq(stats));
+ verify(mStatsdLoggerMock).logAdServicesError(stats);
}
Exception createSQLiteException(String className, String methodName, int lineNumber) {
@@ -200,17 +203,11 @@ public final class AdServicesErrorLoggerImplTest extends AdServicesMockitoTestCa
return exception;
}
- Exception createSQLiteExceptionwith3StackTraceElements(
- String className, String methodName, int lineNumber) {
- StackTraceElement[] stackTraceElements =
- new StackTraceElement[] {
- new StackTraceElement("AdServicesErrorLoggerImpl", "logError", "file", 4),
- new StackTraceElement("ErrorLogUtil", "e", "file", 4),
- new StackTraceElement(className, methodName, "file", lineNumber)
- };
+ private void mockAdServicesErrorLogging(boolean enabled) {
+ when(mFlags.getAdServicesErrorLoggingEnabled()).thenReturn(enabled);
+ }
- Exception exception = new SQLiteException();
- exception.setStackTrace(stackTraceElements);
- return exception;
+ private void mockErrorCodeLoggingDenyList(ImmutableList<Integer> errorCodeLoggingDenyList) {
+ when(mFlags.getErrorCodeLoggingDenyList()).thenReturn(errorCodeLoggingDenyList);
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/customaudience/DBCustomAudienceBackgroundFetchDataTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/customaudience/DBCustomAudienceBackgroundFetchDataTest.java
index e9574eca6b..a078f13c0e 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/customaudience/DBCustomAudienceBackgroundFetchDataTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/customaudience/DBCustomAudienceBackgroundFetchDataTest.java
@@ -26,26 +26,21 @@ import static org.junit.Assert.assertThrows;
import android.adservices.common.CommonFixture;
import android.adservices.customaudience.CustomAudienceFixture;
+import com.android.adservices.common.AdServicesExtendedMockitoTestCase;
import com.android.adservices.customaudience.DBCustomAudienceBackgroundFetchDataFixture;
import com.android.adservices.service.Flags;
import com.android.adservices.service.FlagsFactory;
-import com.android.adservices.service.PhFlagsFixture;
import com.android.adservices.service.customaudience.BackgroundFetchRunner;
import com.android.adservices.service.customaudience.CustomAudienceUpdatableData;
import com.android.adservices.service.customaudience.CustomAudienceUpdatableDataFixture;
-import com.android.modules.utils.testing.TestableDeviceConfig;
+import com.android.modules.utils.testing.ExtendedMockitoRule.SpyStatic;
-import org.json.JSONException;
-import org.junit.Rule;
import org.junit.Test;
import java.time.Instant;
-public class DBCustomAudienceBackgroundFetchDataTest {
- // This rule is used for configuring P/H flags
- @Rule
- public final TestableDeviceConfig.TestableDeviceConfigRule mDeviceConfigRule =
- new TestableDeviceConfig.TestableDeviceConfigRule();
+public final class DBCustomAudienceBackgroundFetchDataTest
+ extends AdServicesExtendedMockitoTestCase {
@Test
public void testBuildFetchDataSuccess() {
@@ -179,22 +174,28 @@ public class DBCustomAudienceBackgroundFetchDataTest {
@Test
public void testComputeNextEligibleUpdateTimeWithPhFlags() {
- long configuredBaseIntervalS = 100L;
- PhFlagsFixture.configureFledgeBackgroundFetchEligibleUpdateBaseIntervalS(
- configuredBaseIntervalS);
+ Flags flags = FlagsFactory.getFlagsForTest();
+ long configuredBaseIntervalS = flags.getFledgeBackgroundFetchEligibleUpdateBaseIntervalS();
Instant expectedEligibleUpdateTime =
CommonFixture.FIXED_NOW.plusSeconds(configuredBaseIntervalS);
Instant actualEligibleUpdateTime =
DBCustomAudienceBackgroundFetchData
.computeNextEligibleUpdateTimeAfterSuccessfulUpdate(
- CommonFixture.FIXED_NOW);
+ CommonFixture.FIXED_NOW, flags);
assertEquals(expectedEligibleUpdateTime, actualEligibleUpdateTime);
}
@Test
- public void testCopyWithFullSuccessfulUpdatableDataResetsFailureCounts() throws JSONException {
+ @SpyStatic(FlagsFactory.class)
+ public void testCopyWithFullSuccessfulUpdatableDataResetsFailureCounts() throws Exception {
+ // NOTE: copyWithUpdatableData() will eventually call the
+ // computeNextEligibleUpdateTimeAfterSuccessfulUpdate() method that calls
+ // FlagsFactory.getInstance(), so we need to mock that method (otherwise it would call
+ // DeviceConfig and fail due to lack of permissions)
+ extendedMockito.mockGetFlags(FlagsFactory.getFlagsForTest());
+
DBCustomAudienceBackgroundFetchData originalFetchData =
DBCustomAudienceBackgroundFetchDataFixture.getValidBuilderByBuyer(
CommonFixture.VALID_BUYER_1)
@@ -206,8 +207,7 @@ public class DBCustomAudienceBackgroundFetchDataTest {
Instant attemptedUpdateTime = CommonFixture.FIXED_NOW.plusSeconds(10);
Instant expectedEligibleUpdateTime =
DBCustomAudienceBackgroundFetchData
- .computeNextEligibleUpdateTimeAfterSuccessfulUpdate(
- attemptedUpdateTime, FlagsFactory.getFlagsForTest());
+ .computeNextEligibleUpdateTimeAfterSuccessfulUpdate(attemptedUpdateTime);
CustomAudienceUpdatableData updatableData =
CustomAudienceUpdatableDataFixture.getValidBuilderFullSuccessfulResponse()
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/enrollment/EnrollmentDaoTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/enrollment/EnrollmentDaoTest.java
index 5c16e32d88..aa0ac3f7ca 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/enrollment/EnrollmentDaoTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/enrollment/EnrollmentDaoTest.java
@@ -79,7 +79,7 @@ public class EnrollmentDaoTest {
@Mock private EnrollmentUtil mEnrollmentUtil;
@Mock private SharedDbHelper mMockDbHelper;
- private static final EnrollmentData ENROLLMENT_DATA1 =
+ public static final EnrollmentData ENROLLMENT_DATA1 =
new EnrollmentData.Builder()
.setEnrollmentId("1")
.setCompanyId("1001")
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/AbstractDbIntegrationTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/AbstractDbIntegrationTest.java
index 3cea7026fe..b55f828555 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/AbstractDbIntegrationTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/AbstractDbIntegrationTest.java
@@ -666,6 +666,9 @@ public abstract class AbstractDbIntegrationTest {
values.put(
MeasurementTables.AsyncRegistrationContract.PLATFORM_AD_ID,
asyncRegistration.getPlatformAdId());
+ values.put(
+ MeasurementTables.AsyncRegistrationContract.REDIRECT_BEHAVIOR,
+ asyncRegistration.getRedirectBehavior().name());
long rowId =
db.insert(
MeasurementTables.AsyncRegistrationContract.TABLE,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/DbState.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/DbState.java
index 24139fe83c..f6c0712885 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/DbState.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/DbState.java
@@ -30,6 +30,7 @@ import com.android.adservices.service.measurement.Source;
import com.android.adservices.service.measurement.Trigger;
import com.android.adservices.service.measurement.aggregation.AggregateEncryptionKey;
import com.android.adservices.service.measurement.aggregation.AggregateReport;
+import com.android.adservices.service.measurement.registration.AsyncRedirect;
import com.android.adservices.service.measurement.registration.AsyncRegistration;
import com.android.adservices.service.measurement.reporting.DebugReport;
import com.android.adservices.service.measurement.util.UnsignedLong;
@@ -609,6 +610,8 @@ public class DbState {
.setVerifiedDestination(Uri.parse(aJSON.getString("verifiedDestination")))
.setWebDestination(Uri.parse(aJSON.getString("webDestination")))
.setSourceType(Source.SourceType.values()[aJSON.getInt("sourceType")])
+ .setRedirectBehavior(
+ AsyncRedirect.RedirectBehavior.valueOf(aJSON.getString("redirectBehavior")))
.build();
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDaoTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDaoTest.java
index f12e36b93f..fec0f7ce1e 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDaoTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDaoTest.java
@@ -4887,44 +4887,6 @@ public class MeasurementDaoTest {
.getCount());
}
- private static AsyncRegistration buildAsyncRegistration(String id) {
-
- return new AsyncRegistration.Builder()
- .setId(id)
- .setOsDestination(Uri.parse("android-app://installed-app-destination"))
- .setRegistrant(INSTALLED_REGISTRANT)
- .setTopOrigin(INSTALLED_REGISTRANT)
- .setAdIdPermission(false)
- .setType(AsyncRegistration.RegistrationType.APP_SOURCE)
- .setRegistrationId(UUID.randomUUID().toString())
- .build();
- }
-
- private static AsyncRegistration buildAsyncRegistrationWithNotDestination(String id) {
- return new AsyncRegistration.Builder()
- .setId(id)
- .setOsDestination(Uri.parse("android-app://not-installed-app-destination"))
- .setRegistrant(INSTALLED_REGISTRANT)
- .setTopOrigin(INSTALLED_REGISTRANT)
- .setAdIdPermission(false)
- .setType(AsyncRegistration.RegistrationType.APP_SOURCE)
- .setRequestTime(Long.MAX_VALUE)
- .setRegistrationId(UUID.randomUUID().toString())
- .build();
- }
-
- private static AsyncRegistration buildAsyncRegistrationWithNotRegistrant(String id) {
- return new AsyncRegistration.Builder()
- .setId(id)
- .setOsDestination(Uri.parse("android-app://installed-app-destination"))
- .setRegistrant(NOT_INSTALLED_REGISTRANT)
- .setTopOrigin(NOT_INSTALLED_REGISTRANT)
- .setAdIdPermission(false)
- .setType(AsyncRegistration.RegistrationType.APP_SOURCE)
- .setRegistrationId(UUID.randomUUID().toString())
- .build();
- }
-
@Test
public void testDeleteDebugReport() {
SQLiteDatabase db = MeasurementDbHelper.getInstance(sContext).safeGetWritableDatabase();
@@ -6163,6 +6125,9 @@ public class MeasurementDaoTest {
assertEquals(
asyncRegistration.getPlatformAdId(), validAsyncRegistration.getPlatformAdId());
assertEquals(asyncRegistration.getPostBody(), validAsyncRegistration.getPostBody());
+ assertEquals(
+ asyncRegistration.getRedirectBehavior(),
+ validAsyncRegistration.getRedirectBehavior());
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDbSchemaTrail.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDbSchemaTrail.java
index 526eb95956..35d0321a26 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDbSchemaTrail.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/MeasurementDbSchemaTrail.java
@@ -2036,6 +2036,46 @@ public class MeasurementDbSchemaTrail {
+ " TEXT "
+ ")";
+ public static final String CREATE_TABLE_ASYNC_REGISTRATION_V31 =
+ "CREATE TABLE "
+ + AsyncRegistrationContract.TABLE
+ + " ("
+ + AsyncRegistrationContract.ID
+ + " TEXT PRIMARY KEY NOT NULL, "
+ + AsyncRegistrationContract.REGISTRATION_URI
+ + " TEXT, "
+ + AsyncRegistrationContract.WEB_DESTINATION
+ + " TEXT, "
+ + AsyncRegistrationContract.OS_DESTINATION
+ + " TEXT, "
+ + AsyncRegistrationContract.VERIFIED_DESTINATION
+ + " TEXT, "
+ + AsyncRegistrationContract.TOP_ORIGIN
+ + " TEXT, "
+ + AsyncRegistrationContract.SOURCE_TYPE
+ + " INTEGER, "
+ + AsyncRegistrationContract.REGISTRANT
+ + " TEXT, "
+ + AsyncRegistrationContract.REQUEST_TIME
+ + " INTEGER, "
+ + AsyncRegistrationContract.RETRY_COUNT
+ + " INTEGER, "
+ + AsyncRegistrationContract.TYPE
+ + " INTEGER, "
+ + AsyncRegistrationContract.DEBUG_KEY_ALLOWED
+ + " INTEGER, "
+ + AsyncRegistrationContract.AD_ID_PERMISSION
+ + " INTEGER, "
+ + AsyncRegistrationContract.REGISTRATION_ID
+ + " TEXT NOT NULL,"
+ + AsyncRegistrationContract.PLATFORM_AD_ID
+ + " TEXT, "
+ + AsyncRegistrationContract.REQUEST_POST_BODY
+ + " TEXT, "
+ + AsyncRegistrationContract.REDIRECT_BEHAVIOR
+ + " TEXT "
+ + ")";
+
private static final String CREATE_TABLE_DEBUG_REPORT_V6 =
"CREATE TABLE IF NOT EXISTS "
+ DebugReportContract.TABLE
@@ -2489,6 +2529,12 @@ public class MeasurementDbSchemaTrail {
return createStatements;
}
+ private static Map<String, String> getCreateStatementByTableV31() {
+ Map<String, String> createStatements = new HashMap<>(getCreateStatementByTableV30());
+ createStatements.put(AsyncRegistrationContract.TABLE, CREATE_TABLE_ASYNC_REGISTRATION_V31);
+ return createStatements;
+ }
+
private static Map<String, String> getCreateIndexesV7() {
Map<String, String> createIndexes = new HashMap<>();
createIndexes.putAll(CREATE_INDEXES_V6);
@@ -2595,6 +2641,10 @@ public class MeasurementDbSchemaTrail {
return getCreateIndexesV29();
}
+ private static Map<String, String> getCreateIndexesV31() {
+ return getCreateIndexesV30();
+ }
+
private static final Map<Integer, Collection<String>> CREATE_TABLES_STATEMENTS_BY_VERSION =
new ImmutableMap.Builder<Integer, Collection<String>>()
.put(6, CREATE_STATEMENT_BY_TABLE_V6.values())
@@ -2622,6 +2672,7 @@ public class MeasurementDbSchemaTrail {
.put(28, getCreateStatementByTableV28().values())
.put(29, getCreateStatementByTableV29().values())
.put(30, getCreateStatementByTableV30().values())
+ .put(31, getCreateStatementByTableV31().values())
.build();
private static final Map<Integer, Collection<String>> CREATE_INDEXES_STATEMENTS_BY_VERSION =
@@ -2651,6 +2702,7 @@ public class MeasurementDbSchemaTrail {
.put(28, getCreateIndexesV28().values())
.put(29, getCreateIndexesV29().values())
.put(30, getCreateIndexesV30().values())
+ .put(31, getCreateIndexesV31().values())
.build();
/**
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/ContentValueFixtures.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/ContentValueFixtures.java
index a12ea65f96..0b3893126d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/ContentValueFixtures.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/ContentValueFixtures.java
@@ -536,6 +536,15 @@ public class ContentValueFixtures {
return asyncRegistration;
}
+ /**
+ * Get content values for V31 migration
+ *
+ * @return ContentValues for AsyncRegistration table
+ */
+ public static ContentValues generateAsyncRegistrationContentValuesV31() {
+ return generateAsyncRegistrationContentValuesV24();
+ }
+
public static ContentValues generateSourceContentValuesV1() {
ContentValues source = new ContentValues();
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV30Test.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV30Test.java
index ca859a4981..d076d277bd 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV30Test.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV30Test.java
@@ -63,7 +63,6 @@ public class MeasurementDbMigratorV30Test extends MeasurementDbMigratorTestBase
MeasurementTables.SourceContract.TABLE,
Set.of(MeasurementTables.SourceContract.ID));
MigrationTestHelper.verifyDataInDb(db, fakeData, new HashMap<>(), columnsToBeSkipped);
- // Check that new columns are initialized with empty string
List<Pair<String, String>> tableAndNewColumnPairs = new ArrayList<>();
tableAndNewColumnPairs.add(
new Pair<>(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV31Test.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV31Test.java
new file mode 100644
index 0000000000..d41fb695bb
--- /dev/null
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/measurement/migration/MeasurementDbMigratorV31Test.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.adservices.data.measurement.migration;
+
+import static com.android.adservices.data.DbTestUtil.getDbHelperForTest;
+
+import static org.junit.Assert.assertEquals;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import com.android.adservices.data.measurement.MeasurementDbHelper;
+import com.android.adservices.data.measurement.MeasurementTables;
+import com.android.adservices.service.measurement.registration.AsyncRedirect;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+@RunWith(MockitoJUnitRunner.class)
+public class MeasurementDbMigratorV31Test extends MeasurementDbMigratorTestBase {
+ @Test
+ public void performMigration_v30ToV31WithData_maintainsDataIntegrity() {
+ // Setup
+ MeasurementDbHelper dbHelper =
+ new MeasurementDbHelper(
+ sContext,
+ MEASUREMENT_DATABASE_NAME_FOR_MIGRATION,
+ 30,
+ getDbHelperForTest());
+ SQLiteDatabase db = dbHelper.getWritableDatabase();
+ Map<String, List<ContentValues>> testData = createFakeDataV30();
+ MigrationTestHelper.populateDb(db, testData);
+
+ // Execution
+ getTestSubject().performMigration(db, 30, 31);
+
+ // Assertion
+ MigrationTestHelper.verifyDataInDb(db, testData);
+
+ String[] columns =
+ new String[] {
+ MeasurementTables.AsyncRegistrationContract.REDIRECT_BEHAVIOR,
+ };
+ try (Cursor cursor =
+ db.query(
+ MeasurementTables.AsyncRegistrationContract.TABLE,
+ columns, /* selection */
+ null, /* selectionArgs */
+ null, /* groupBy */
+ null, /* having */
+ null, /* orderBy */
+ null)) {
+ assertEquals(1, cursor.getCount());
+ while (cursor.moveToNext()) {
+ assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS.name(),
+ cursor.getString(cursor.getColumnIndex(columns[0])));
+ }
+ }
+ }
+
+ private Map<String, List<ContentValues>> createFakeDataV30() {
+ Map<String, List<ContentValues>> tableRowsMap = new LinkedHashMap<>();
+
+ // AsyncRegistration table
+ List<ContentValues> asyncRegistrationRows = new ArrayList<>();
+ ContentValues asyncRegistration =
+ ContentValueFixtures.generateAsyncRegistrationContentValuesV24();
+ asyncRegistration.put(
+ MeasurementTables.AsyncRegistrationContract.ID, UUID.randomUUID().toString());
+ asyncRegistrationRows.add(asyncRegistration);
+ tableRowsMap.put(MeasurementTables.AsyncRegistrationContract.TABLE, asyncRegistrationRows);
+
+ return tableRowsMap;
+ }
+
+ @Override
+ int getTargetVersion() {
+ return 31;
+ }
+
+ @Override
+ AbstractMeasurementDbMigrator getTestSubject() {
+ return new MeasurementDbMigratorV31();
+ }
+}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/DBSignalsUpdateMetadataTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/DBSignalsUpdateMetadataTest.java
new file mode 100644
index 0000000000..f188393594
--- /dev/null
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/DBSignalsUpdateMetadataTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.adservices.data.signals;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThrows;
+
+import android.adservices.common.AdTechIdentifier;
+import android.adservices.common.CommonFixture;
+
+import org.junit.Test;
+
+public class DBSignalsUpdateMetadataTest {
+
+ @Test
+ public void testCreateSignalsUpdateMetadata() {
+ AdTechIdentifier buyer = CommonFixture.VALID_BUYER_1;
+ DBSignalsUpdateMetadata signalsUpdateMetadata =
+ DBSignalsUpdateMetadata.create(buyer, CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI);
+ assertEquals(buyer, signalsUpdateMetadata.getBuyer());
+ assertEquals(
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ signalsUpdateMetadata.getLastSignalsUpdatedTime());
+ }
+
+ @Test
+ public void testBuildSignalsUpdateMetadata() {
+ AdTechIdentifier buyer = CommonFixture.VALID_BUYER_1;
+ DBSignalsUpdateMetadata signalsUpdatedTime =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(buyer, signalsUpdatedTime.getBuyer());
+ assertEquals(
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ signalsUpdatedTime.getLastSignalsUpdatedTime());
+ }
+
+ @Test
+ public void testNullFails() {
+ assertThrows(
+ IllegalStateException.class,
+ () -> {
+ DBSignalsUpdateMetadata.builder().build();
+ });
+ }
+
+ @Test
+ public void testEquals() {
+ AdTechIdentifier buyer = CommonFixture.VALID_BUYER_1;
+ DBSignalsUpdateMetadata signalsUpdateMetadata1 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ DBSignalsUpdateMetadata signalsUpdateMetadata2 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(signalsUpdateMetadata1, signalsUpdateMetadata2);
+ }
+
+ @Test
+ public void testNotEquals() {
+ AdTechIdentifier buyer1 = CommonFixture.VALID_BUYER_1;
+ AdTechIdentifier buyer2 = CommonFixture.VALID_BUYER_2;
+ DBSignalsUpdateMetadata signalsUpdateMetadata1 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ DBSignalsUpdateMetadata signalsUpdateMetadata2 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer2)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertNotEquals(signalsUpdateMetadata1, signalsUpdateMetadata2);
+ }
+
+ @Test
+ public void testHashCode() {
+ AdTechIdentifier buyer = CommonFixture.VALID_BUYER_1;
+ DBSignalsUpdateMetadata signalsUpdateMetadata1 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ DBSignalsUpdateMetadata signalsUpdateMetadata2 =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(buyer)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(signalsUpdateMetadata1.hashCode(), signalsUpdateMetadata2.hashCode());
+ }
+}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/EncoderLogicHandlerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/EncoderLogicHandlerTest.java
index f27a31a7f1..98b5af3054 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/EncoderLogicHandlerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/EncoderLogicHandlerTest.java
@@ -76,6 +76,8 @@ public class EncoderLogicHandlerTest {
@Mock private AdServicesHttpsClient mAdServicesHttpsClient;
+ @Mock private ProtectedSignalsDao mProtectedSignalsDao;
+
@Captor ArgumentCaptor<DBEncoderLogicMetadata> mDBEncoderLogicArgumentCaptor;
private ListeningExecutorService mExecutorService = MoreExecutors.newDirectExecutorService();
@@ -90,6 +92,7 @@ public class EncoderLogicHandlerTest {
mEncoderPersistenceDao,
mEncoderEndpointsDao,
mEncoderLogicMetadataDao,
+ mProtectedSignalsDao,
mAdServicesHttpsClient,
mExecutorService);
}
@@ -273,6 +276,7 @@ public class EncoderLogicHandlerTest {
verify(mEncoderLogicMetadataDao).deleteEncoder(buyer);
verify(mEncoderPersistenceDao).deleteEncoder(buyer);
verify(mEncoderEndpointsDao).deleteEncoderEndpoint(buyer);
+ verify(mProtectedSignalsDao).deleteSignalsUpdateMetadata(buyer);
}
@Test
@@ -290,6 +294,9 @@ public class EncoderLogicHandlerTest {
verify(mEncoderEndpointsDao).deleteEncoderEndpoint(buyer1);
verify(mEncoderEndpointsDao).deleteEncoderEndpoint(buyer2);
+
+ verify(mProtectedSignalsDao).deleteSignalsUpdateMetadata(buyer1);
+ verify(mProtectedSignalsDao).deleteSignalsUpdateMetadata(buyer2);
}
@SuppressWarnings("FutureReturnValueIgnored")
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDaoTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDaoTest.java
index fbf9546086..c7668d4d34 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDaoTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDaoTest.java
@@ -20,7 +20,9 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -48,6 +50,7 @@ import org.mockito.Mock;
import org.mockito.MockitoSession;
import java.time.Duration;
+import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
@@ -176,16 +179,27 @@ public class ProtectedSignalsDaoTest {
public void testInsertAndDelete() {
// Insert two signals
mProtectedSignalsDao.insertAndDelete(
+ BUYER_1,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
Arrays.asList(DBProtectedSignalFixture.SIGNAL, DBProtectedSignalFixture.SIGNAL),
Collections.emptyList());
// Get all the signals for the test buyer
List<DBProtectedSignal> readResult = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
+ assertEquals(
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1).getLastSignalsUpdatedTime());
// Delete one of the signals and insert two more
mProtectedSignalsDao.insertAndDelete(
+ BUYER_1,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
Arrays.asList(DBProtectedSignalFixture.SIGNAL, DBProtectedSignalFixture.SIGNAL),
readResult.subList(0, 1));
// Check that the deletions and insertion occurred
readResult = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
+ assertEquals(
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1).getLastSignalsUpdatedTime());
+
assertEquals(3, readResult.size());
assertNotNull(readResult.get(0).getId());
assertEqualsExceptId(DBProtectedSignalFixture.SIGNAL, readResult.get(0));
@@ -197,17 +211,32 @@ public class ProtectedSignalsDaoTest {
public void testDeleteSignalsBeforeTime() {
// Insert two signals
mProtectedSignalsDao.insertAndDelete(
+ BUYER_1,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
Arrays.asList(
DBProtectedSignalFixture.SIGNAL,
DBProtectedSignalFixture.LATER_TIME_SIGNAL),
Collections.emptyList());
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
// Delete the older signal
assertEquals(
1,
- mProtectedSignalsDao.deleteSignalsBeforeTime(
+ mProtectedSignalsDao.deleteExpiredSignalsAndUpdateSignalsUpdateMetadata(
DBProtectedSignalFixture.SIGNAL
.getCreationTime()
- .plus(Duration.ofMillis(1))));
+ .plus(Duration.ofMillis(1)),
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI));
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
// Check that the deletions and insertion occurred
List<DBProtectedSignal> readResult = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
assertEquals(1, readResult.size());
@@ -226,7 +255,10 @@ public class ProtectedSignalsDaoTest {
DBProtectedSignal signal2 = DBProtectedSignalFixture.getBuilder().setBuyer(BUYER_2).build();
// Insert two signals
mProtectedSignalsDao.insertAndDelete(
- Arrays.asList(signal1, signal2), Collections.emptyList());
+ BUYER_1,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ Arrays.asList(signal1, signal2),
+ Collections.emptyList());
when(mEnrollmentDaoMock.getAllFledgeEnrolledAdTechs())
.thenReturn(new HashSet<>(Arrays.asList(BUYER_1, BUYER_2)));
assertEquals(0, mProtectedSignalsDao.deleteDisallowedBuyerSignals(mEnrollmentDaoMock));
@@ -235,10 +267,17 @@ public class ProtectedSignalsDaoTest {
assertEquals(1, readResult.size());
assertNotNull(readResult.get(0).getId());
assertEqualsExceptId(signal1, readResult.get(0));
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
readResult = mProtectedSignalsDao.getSignalsByBuyer(BUYER_2);
assertEquals(1, readResult.size());
assertNotNull(readResult.get(0).getId());
assertEqualsExceptId(signal2, readResult.get(0));
+ assertNull(mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_2));
}
@Test
@@ -249,10 +288,37 @@ public class ProtectedSignalsDaoTest {
DBProtectedSignalFixture.getBuilder().setBuyer(CommonFixture.VALID_BUYER_2).build();
// Insert two signals
mProtectedSignalsDao.insertAndDelete(
- Arrays.asList(signal1, signal2), Collections.emptyList());
+ BUYER_1,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ List.of(signal1),
+ Collections.emptyList());
+ mProtectedSignalsDao.insertAndDelete(
+ BUYER_2,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI,
+ List.of(signal2),
+ Collections.emptyList());
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_2)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_2));
when(mEnrollmentDaoMock.getAllFledgeEnrolledAdTechs())
.thenReturn(Collections.singleton(CommonFixture.VALID_BUYER_1));
assertEquals(1, mProtectedSignalsDao.deleteDisallowedBuyerSignals(mEnrollmentDaoMock));
+ assertEquals(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build(),
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+ assertNull(mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_2));
// Check that the correct deletion occurred
List<DBProtectedSignal> readResult = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
assertEquals(1, readResult.size());
@@ -264,8 +330,10 @@ public class ProtectedSignalsDaoTest {
public void testDeleteDisallowedPackageSignalsNoSignals() {
assertEquals(
0,
- mProtectedSignalsDao.deleteAllDisallowedPackageSignals(
- mPackageManagerMock, mFlagsMock));
+ mProtectedSignalsDao.deleteAllDisallowedPackageSignalsAndUpdateSignalUpdateMetadata(
+ mPackageManagerMock,
+ mFlagsMock,
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI));
}
@Test
@@ -292,8 +360,10 @@ public class ProtectedSignalsDaoTest {
assertEquals(2, readResult1.size());
assertEquals(
0,
- mProtectedSignalsDao.deleteAllDisallowedPackageSignals(
- mPackageManagerMock, new FlagsWithAllAppsAllowed()));
+ mProtectedSignalsDao.deleteAllDisallowedPackageSignalsAndUpdateSignalUpdateMetadata(
+ mPackageManagerMock,
+ new FlagsWithAllAppsAllowed(),
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI));
// Check that no deletion occurred
List<DBProtectedSignal> readResult2 = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
assertEquals(2, readResult2.size());
@@ -322,13 +392,107 @@ public class ProtectedSignalsDaoTest {
assertEquals(2, readResult1.size());
assertEquals(
1,
- mProtectedSignalsDao.deleteAllDisallowedPackageSignals(
- CONTEXT.getPackageManager(), new FlagsThatAllowOneApp()));
+ mProtectedSignalsDao.deleteAllDisallowedPackageSignalsAndUpdateSignalUpdateMetadata(
+ CONTEXT.getPackageManager(),
+ new FlagsThatAllowOneApp(),
+ CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI));
List<DBProtectedSignal> readResult2 = mProtectedSignalsDao.getSignalsByBuyer(BUYER_1);
assertEquals(1, readResult2.size());
assertEquals(PACKAGE_1, readResult2.get(0).getPackageName());
}
+ @Test
+ public void testPersistMetadata() {
+ assertNull(
+ "Initial state of the table should be empty",
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+
+ DBSignalsUpdateMetadata signalsUpdateMetadata =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(
+ "One entry should have been inserted",
+ 1,
+ mProtectedSignalsDao.persistSignalsUpdateMetadata(signalsUpdateMetadata));
+ }
+
+ @Test
+ public void testDeleteMetadata() {
+ assertNull(
+ "Initial state of the table should be empty",
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+
+ DBSignalsUpdateMetadata signalsUpdateMetadata =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(
+ "One entry should have been inserted",
+ 1,
+ mProtectedSignalsDao.persistSignalsUpdateMetadata(signalsUpdateMetadata));
+
+ mProtectedSignalsDao.deleteSignalsUpdateMetadata(BUYER_1);
+ assertNull(
+ "Metadata should have been deleted",
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+ }
+
+ @Test
+ public void testQuerySignalsUpdateMetadata() {
+ assertNull(
+ "Initial state of the table should be empty",
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+
+ DBSignalsUpdateMetadata signalsUpdateMetadata =
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER_1)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ assertEquals(
+ "One entry should have been inserted",
+ 1,
+ mProtectedSignalsDao.persistSignalsUpdateMetadata(signalsUpdateMetadata));
+ DBSignalsUpdateMetadata retrieved = mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1);
+
+ assertEquals(signalsUpdateMetadata.getBuyer(), retrieved.getBuyer());
+ assertEquals(
+ signalsUpdateMetadata.getLastSignalsUpdatedTime(),
+ retrieved.getLastSignalsUpdatedTime());
+ }
+
+ @Test
+ public void testPersistMetadataReplacesExisting() {
+ assertNull(
+ "Initial state of the table should be empty",
+ mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1));
+
+ DBSignalsUpdateMetadata.Builder anBuilder =
+ DBSignalsUpdateMetadata.builder().setBuyer(BUYER_1);
+ DBSignalsUpdateMetadata previous =
+ anBuilder
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_NOW_TRUNCATED_TO_MILLI)
+ .build();
+ mProtectedSignalsDao.persistSignalsUpdateMetadata(previous);
+
+ DBSignalsUpdateMetadata retrieved = mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1);
+ assertEquals(previous.getLastSignalsUpdatedTime(), retrieved.getLastSignalsUpdatedTime());
+
+ DBSignalsUpdateMetadata updated =
+ anBuilder
+ .setLastSignalsUpdatedTime(
+ CommonFixture.FIXED_NEXT_ONE_DAY.truncatedTo(ChronoUnit.MILLIS))
+ .build();
+
+ mProtectedSignalsDao.persistSignalsUpdateMetadata(updated);
+ retrieved = mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER_1);
+ assertNotEquals(
+ previous.getLastSignalsUpdatedTime(), retrieved.getLastSignalsUpdatedTime());
+ assertEquals(updated.getLastSignalsUpdatedTime(), retrieved.getLastSignalsUpdatedTime());
+ }
+
private void assertEqualsExceptId(DBProtectedSignal expected, DBProtectedSignal actual) {
assertEquals(expected.getBuyer(), actual.getBuyer());
assertArrayEquals(expected.getKey(), actual.getKey());
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDatabaseMigrationTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDatabaseMigrationTest.java
index 2c668cca7a..82fa411ef3 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDatabaseMigrationTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/data/signals/ProtectedSignalsDatabaseMigrationTest.java
@@ -57,7 +57,7 @@ public class ProtectedSignalsDatabaseMigrationTest {
assertFalse(tables.contains(DBEncodedPayload.TABLE_NAME));
assertFalse(tables.contains(DBEncoderEndpoint.TABLE_NAME));
}
- // Re-open the database with version 3.
+ // Re-open the database with version 2.
try (SupportSQLiteDatabase db = helper.runMigrationsAndValidate(TEST_DB, 2, true)) {
List<String> tables = listTables(db);
assertTrue(tables.contains(DBProtectedSignal.TABLE_NAME));
@@ -119,4 +119,25 @@ public class ProtectedSignalsDatabaseMigrationTest {
CommonFixture.VALID_BUYER_2.toString(), c.getString(c.getColumnIndex("buyer")));
}
}
+
+ @Test
+ public void testMigration3To4() throws IOException {
+ try (SupportSQLiteDatabase db = helper.createDatabase(TEST_DB, 3)) {
+ List<String> tables = listTables(db);
+ assertTrue(tables.contains(DBProtectedSignal.TABLE_NAME));
+ assertTrue(tables.contains(DBEncoderLogicMetadata.TABLE_NAME));
+ assertTrue(tables.contains(DBEncodedPayload.TABLE_NAME));
+ assertTrue(tables.contains(DBEncoderEndpoint.TABLE_NAME));
+ assertFalse(tables.contains(DBSignalsUpdateMetadata.TABLE_NAME));
+ }
+ // Re-open the database with version 4.
+ try (SupportSQLiteDatabase db = helper.runMigrationsAndValidate(TEST_DB, 4, true)) {
+ List<String> tables = listTables(db);
+ assertTrue(tables.contains(DBProtectedSignal.TABLE_NAME));
+ assertTrue(tables.contains(DBEncoderLogicMetadata.TABLE_NAME));
+ assertTrue(tables.contains(DBEncodedPayload.TABLE_NAME));
+ assertTrue(tables.contains(DBEncoderEndpoint.TABLE_NAME));
+ assertTrue(tables.contains(DBSignalsUpdateMetadata.TABLE_NAME));
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/PhFlagsTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/PhFlagsTest.java
index c5e9716b3d..f86269555f 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/PhFlagsTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/PhFlagsTest.java
@@ -50,17 +50,19 @@ import static com.android.adservices.service.Flags.DEFAULT_ADSERVICES_CONSENT_MI
import static com.android.adservices.service.Flags.DEFAULT_ADSERVICES_ENABLEMENT_CHECK_ENABLED;
import static com.android.adservices.service.Flags.DEFAULT_ADSERVICES_VERSION_MAPPINGS;
import static com.android.adservices.service.Flags.DEFAULT_AD_ID_FETCHER_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.DEFAULT_APPSEARCH_READ_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.DEFAULT_APPSEARCH_WRITE_TIMEOUT_MS;
import static com.android.adservices.service.Flags.DEFAULT_AUCTION_SERVER_AD_ID_FETCHER_TIMEOUT_MS;
import static com.android.adservices.service.Flags.DEFAULT_BACKGROUND_JOB_SAMPLING_LOGGING_RATE;
import static com.android.adservices.service.Flags.DEFAULT_BLOCKED_TOPICS_SOURCE_OF_TRUTH;
import static com.android.adservices.service.Flags.DEFAULT_CLASSIFIER_TYPE;
import static com.android.adservices.service.Flags.DEFAULT_COMPUTE_VERSION_FROM_MAPPINGS_ENABLED;
+import static com.android.adservices.service.Flags.DEFAULT_CONSENT_MANAGER_OTA_DEBUG_MODE;
import static com.android.adservices.service.Flags.DEFAULT_CONSENT_SOURCE_OF_TRUTH;
import static com.android.adservices.service.Flags.DEFAULT_ENABLE_ADEXT_DATA_SERVICE_APIS;
import static com.android.adservices.service.Flags.DEFAULT_ENABLE_ADEXT_SERVICE_DEBUG_PROXY;
import static com.android.adservices.service.Flags.DEFAULT_ENABLE_ADSERVICES_API_ENABLED;
import static com.android.adservices.service.Flags.DEFAULT_ENABLE_AD_SERVICES_SYSTEM_API;
-import static com.android.adservices.service.Flags.DEFAULT_EU_NOTIF_FLOW_CHANGE_ENABLED;
import static com.android.adservices.service.Flags.DEFAULT_MAINLINE_TRAIN_VERSION;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_ASYNC_REGISTRATION_JOB_TRIGGER_MAX_DELAY_MS;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_ASYNC_REGISTRATION_JOB_TRIGGER_MIN_DELAY_MS;
@@ -68,7 +70,6 @@ import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_ATTRIBUTI
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_DEBUG_JOIN_KEY_ENROLLMENT_ALLOWLIST;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_DEBUG_JOIN_KEY_HASH_LIMIT;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_ENABLE_COARSE_EVENT_REPORT_DESTINATIONS;
-import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_ENABLE_VTC_CONFIGURABLE_MAX_EVENT_REPORTS;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_MAX_AGGREGATE_DEDUPLICATION_KEYS_PER_REGISTRATION;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_MAX_AGGREGATE_REPORT_UPLOAD_RETRY_WINDOW_MS;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_MAX_ATTRIBUTIONS_PER_INVOCATION;
@@ -83,9 +84,8 @@ import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_PLATFORM_
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_PLATFORM_DEBUG_AD_ID_MATCHING_LIMIT;
import static com.android.adservices.service.Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT;
import static com.android.adservices.service.Flags.DEFAULT_NOTIFICATION_DISMISSED_ON_CLICK;
-import static com.android.adservices.service.Flags.DEFAULT_RVC_NOTIFICATION_ENABLED;
+import static com.android.adservices.service.Flags.DEFAULT_RVC_POST_OTA_NOTIFICATION_ENABLED;
import static com.android.adservices.service.Flags.DEFAULT_RVC_POST_OTA_NOTIF_AGE_CHECK;
-import static com.android.adservices.service.Flags.DEFAULT_CONSENT_MANAGER_OTA_DEBUG_MODE;
import static com.android.adservices.service.Flags.DEFAULT_U18_UX_ENABLED;
import static com.android.adservices.service.Flags.DISABLE_FLEDGE_ENROLLMENT_CHECK;
import static com.android.adservices.service.Flags.DISABLE_MEASUREMENT_ENROLLMENT_CHECK;
@@ -283,15 +283,12 @@ import static com.android.adservices.service.Flags.MEASUREMENT_DELETE_EXPIRED_JO
import static com.android.adservices.service.Flags.MEASUREMENT_DELETE_UNINSTALLED_JOB_PERIOD_MS;
import static com.android.adservices.service.Flags.MEASUREMENT_DELETE_UNINSTALLED_JOB_PERSISTED;
import static com.android.adservices.service.Flags.MEASUREMENT_DESTINATION_RATE_LIMIT_WINDOW;
-import static com.android.adservices.service.Flags.MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_AGGREGATABLE_REPORT_PAYLOAD_PADDING;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_API_STATUS_ALLOW_LIST_CHECK;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_APP_PACKAGE_NAME_LOGGING;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_ARA_DEDUPLICATION_ALIGNMENT_V1;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_ARA_PARSING_ALIGNMENT_V1;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_CONFIGURABLE_AGGREGATE_REPORT_DELAY;
-import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_CONFIGURABLE_EVENT_REPORTING_WINDOWS;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_DATASTORE_MANAGER_THROW_DATASTORE_EXCEPTION;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_DEBUG_REPORT;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_DELETE_REPORTS_ON_UNRECOVERABLE_EXCEPTION;
@@ -299,6 +296,7 @@ import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_DESTINATIO
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_LOOKBACK_WINDOW_FILTER;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_MAX_AGGREGATE_REPORTS_PER_SOURCE;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_PREINSTALL_CHECK;
+import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_REDIRECT_TO_WELL_KNOWN_PATH;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_REPORTING_JOBS_THROW_JSON_EXCEPTION;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_REPORTING_JOBS_THROW_UNACCOUNTED_EXCEPTION;
import static com.android.adservices.service.Flags.MEASUREMENT_ENABLE_SCOPED_ATTRIBUTION_RATE_LIMIT;
@@ -323,7 +321,6 @@ import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_FALLBACK_RE
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_FALLBACK_REPORTING_JOB_REQUIRED_BATTERY_NOT_LOW;
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_FALLBACK_REPORTING_JOB_REQUIRED_NETWORK_TYPE;
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_MAIN_REPORTING_JOB_PERIOD_MS;
-import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_NOISE_PROBABILITY;
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_REPORTING_JOB_PERSISTED;
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_REPORTING_JOB_REQUIRED_BATTERY_NOT_LOW;
import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_REPORTING_JOB_REQUIRED_NETWORK_TYPE;
@@ -338,10 +335,6 @@ import static com.android.adservices.service.Flags.MEASUREMENT_FLEX_API_MAX_INFO
import static com.android.adservices.service.Flags.MEASUREMENT_FLEX_API_MAX_INFORMATION_GAIN_NAVIGATION;
import static com.android.adservices.service.Flags.MEASUREMENT_FLEX_API_MAX_TRIGGER_DATA_CARDINALITY;
import static com.android.adservices.service.Flags.MEASUREMENT_FLEX_LITE_API_ENABLED;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.Flags.MEASUREMENT_IS_CLICK_VERIFICATION_ENABLED;
import static com.android.adservices.service.Flags.MEASUREMENT_IS_CLICK_VERIFIED_BY_INPUT_EVENT;
import static com.android.adservices.service.Flags.MEASUREMENT_JOB_AGGREGATE_FALLBACK_REPORTING_KILL_SWITCH;
@@ -386,7 +379,6 @@ import static com.android.adservices.service.Flags.MEASUREMENT_MIN_INSTALL_ATTRI
import static com.android.adservices.service.Flags.MEASUREMENT_MIN_POST_INSTALL_EXCLUSIVITY_WINDOW;
import static com.android.adservices.service.Flags.MEASUREMENT_MIN_REPORTING_ORIGIN_UPDATE_WINDOW;
import static com.android.adservices.service.Flags.MEASUREMENT_MIN_REPORTING_REGISTER_SOURCE_EXPIRATION_IN_SECONDS;
-import static com.android.adservices.service.Flags.MEASUREMENT_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.Flags.MEASUREMENT_NETWORK_CONNECT_TIMEOUT_MS;
import static com.android.adservices.service.Flags.MEASUREMENT_NETWORK_READ_TIMEOUT_MS;
import static com.android.adservices.service.Flags.MEASUREMENT_RATE_LIMIT_WINDOW_MILLISECONDS;
@@ -442,6 +434,7 @@ import static com.android.adservices.service.Flags.TOPICS_NUMBER_OF_TOP_TOPICS;
import static com.android.adservices.service.Flags.TOPICS_ON_DEVICE_CLASSIFIER_KILL_SWITCH;
import static com.android.adservices.service.Flags.TOPICS_PERCENTAGE_FOR_RANDOM_TOPIC;
import static com.android.adservices.service.Flags.TOPICS_PRIVACY_BUDGET_FOR_TOPIC_ID_DISTRIBUTION;
+import static com.android.adservices.service.Flags.TOPICS_TEST_ENCRYPTION_PUBLIC_KEY;
import static com.android.adservices.service.Flags.UI_DIALOG_FRAGMENT;
import static com.android.adservices.service.Flags.UI_EEA_COUNTRIES;
import static com.android.adservices.service.Flags.UI_FEATURE_TYPE_LOGGING_ENABLED;
@@ -474,8 +467,8 @@ import static com.android.adservices.service.FlagsConstants.KEY_COBALT_LOGGING_E
import static com.android.adservices.service.FlagsConstants.KEY_COBALT_LOGGING_JOB_PERIOD_MS;
import static com.android.adservices.service.FlagsConstants.KEY_COBALT_UPLOAD_SERVICE_UNBIND_DELAY_MS;
import static com.android.adservices.service.FlagsConstants.KEY_COMPAT_LOGGING_KILL_SWITCH;
-import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_MANAGER_OTA_DEBUG_MODE;
import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_ALREADY_INTERACTED_FIX_ENABLE;
+import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_MANAGER_OTA_DEBUG_MODE;
import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_NOTIFICATION_ACTIVITY_DEBUG_MODE;
import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_NOTIFICATION_RESET_TOKEN;
import static com.android.adservices.service.FlagsConstants.KEY_CONSENT_NOTIFIED_DEBUG_MODE;
@@ -513,7 +506,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_ENROLLMENT_BLOCK
import static com.android.adservices.service.FlagsConstants.KEY_ENROLLMENT_ENABLE_LIMITED_LOGGING;
import static com.android.adservices.service.FlagsConstants.KEY_ENROLLMENT_MDD_RECORD_DELETION_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_ERROR_CODE_LOGGING_DENY_LIST;
-import static com.android.adservices.service.FlagsConstants.KEY_EU_NOTIF_FLOW_CHANGE_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_FLEDGE_AD_COUNTER_HISTOGRAM_ABSOLUTE_MAX_PER_BUYER_EVENT_COUNT;
import static com.android.adservices.service.FlagsConstants.KEY_FLEDGE_AD_COUNTER_HISTOGRAM_ABSOLUTE_MAX_TOTAL_EVENT_COUNT;
import static com.android.adservices.service.FlagsConstants.KEY_FLEDGE_AD_COUNTER_HISTOGRAM_LOWER_MAX_PER_BUYER_EVENT_COUNT;
@@ -676,8 +668,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DELE
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DELETE_UNINSTALLED_JOB_PERIOD_MS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DELETE_UNINSTALLED_JOB_PERSISTED;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DESTINATION_RATE_LIMIT_WINDOW;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_AGGREGATABLE_REPORT_PAYLOAD_PADDING;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_API_STATUS_ALLOW_LIST_CHECK;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_APP_PACKAGE_NAME_LOGGING;
@@ -685,7 +675,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENAB
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_ARA_PARSING_ALIGNMENT_V1;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_COARSE_EVENT_REPORT_DESTINATIONS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_CONFIGURABLE_AGGREGATE_REPORT_DELAY;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_CONFIGURABLE_EVENT_REPORTING_WINDOWS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_DATASTORE_MANAGER_THROW_DATASTORE_EXCEPTION;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_DEBUG_REPORT;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_DELETE_REPORTS_ON_UNRECOVERABLE_EXCEPTION;
@@ -693,6 +682,7 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENAB
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_LOOKBACK_WINDOW_FILTER;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_MAX_AGGREGATE_REPORTS_PER_SOURCE;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_PREINSTALL_CHECK;
+import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_REDIRECT_TO_WELL_KNOWN_PATH;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_REPORTING_JOBS_THROW_CRYPTO_EXCEPTION;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_REPORTING_JOBS_THROW_JSON_EXCEPTION;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_REPORTING_JOBS_THROW_UNACCOUNTED_EXCEPTION;
@@ -703,7 +693,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENAB
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_SOURCE_DEBUG_REPORT;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_TRIGGER_DATA_MATCHING;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_TRIGGER_DEBUG_REPORT;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_VTC_CONFIGURABLE_MAX_EVENT_REPORTS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENABLE_XNA;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENFORCE_ENROLLMENT_ORIGIN_MATCH;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_ENFORCE_FOREGROUND_STATUS_DELETE_REGISTRATIONS;
@@ -718,7 +707,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVEN
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_FALLBACK_REPORTING_JOB_REQUIRED_BATTERY_NOT_LOW;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_FALLBACK_REPORTING_JOB_REQUIRED_NETWORK_TYPE;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_MAIN_REPORTING_JOB_PERIOD_MS;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_NOISE_PROBABILITY;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_REPORTING_JOB_PERSISTED;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_REPORTING_JOB_REQUIRED_BATTERY_NOT_LOW;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_EVENT_REPORTING_JOB_REQUIRED_NETWORK_TYPE;
@@ -733,10 +721,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_FLEX
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_FLEX_API_MAX_INFORMATION_GAIN_NAVIGATION;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_FLEX_API_MAX_TRIGGER_DATA_CARDINALITY;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_FLEX_LITE_API_ENABLED;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_IS_CLICK_VERIFICATION_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_IS_CLICK_VERIFIED_BY_INPUT_EVENT;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_JOB_AGGREGATE_FALLBACK_REPORTING_KILL_SWITCH;
@@ -791,7 +775,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_MIN_
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_MIN_POST_INSTALL_EXCLUSIVITY_WINDOW;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_MIN_REPORTING_ORIGIN_UPDATE_WINDOW;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_MIN_REPORTING_REGISTER_SOURCE_EXPIRATION_IN_SECONDS;
-import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_NETWORK_CONNECT_TIMEOUT_MS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_NETWORK_READ_TIMEOUT_MS;
import static com.android.adservices.service.FlagsConstants.KEY_MEASUREMENT_RATE_LIMIT_WINDOW_MILLISECONDS;
@@ -828,7 +811,7 @@ import static com.android.adservices.service.FlagsConstants.KEY_PROTECTED_SIGNAL
import static com.android.adservices.service.FlagsConstants.KEY_PROTECTED_SIGNALS_PERIODIC_ENCODING_JOB_PERIOD_MS;
import static com.android.adservices.service.FlagsConstants.KEY_PROTECTED_SIGNALS_SERVICE_KILL_SWITCH;
import static com.android.adservices.service.FlagsConstants.KEY_RECORD_MANUAL_INTERACTION_ENABLED;
-import static com.android.adservices.service.FlagsConstants.KEY_RVC_NOTIFICATION_ENABLED;
+import static com.android.adservices.service.FlagsConstants.KEY_RVC_POST_OTA_NOTIFICATION_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_RVC_POST_OTA_NOTIF_AGE_CHECK;
import static com.android.adservices.service.FlagsConstants.KEY_RVC_UX_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_SDK_REQUEST_PERMITS_PER_SECOND;
@@ -847,6 +830,7 @@ import static com.android.adservices.service.FlagsConstants.KEY_TOPICS_NUMBER_OF
import static com.android.adservices.service.FlagsConstants.KEY_TOPICS_ON_DEVICE_CLASSIFIER_KILL_SWITCH;
import static com.android.adservices.service.FlagsConstants.KEY_TOPICS_PERCENTAGE_FOR_RANDOM_TOPIC;
import static com.android.adservices.service.FlagsConstants.KEY_TOPICS_PRIVACY_BUDGET_FOR_TOPIC_ID_DISTRIBUTION;
+import static com.android.adservices.service.FlagsConstants.KEY_TOPICS_TEST_ENCRYPTION_PUBLIC_KEY;
import static com.android.adservices.service.FlagsConstants.KEY_U18_UX_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_UI_DIALOG_FRAGMENT_ENABLED;
import static com.android.adservices.service.FlagsConstants.KEY_UI_EEA_COUNTRIES;
@@ -854,7 +838,6 @@ import static com.android.adservices.service.FlagsConstants.KEY_UI_FEATURE_TYPE_
import static com.android.adservices.service.FlagsConstants.KEY_UI_OTA_STRINGS_MANIFEST_FILE_URL;
import static com.android.adservices.service.FlagsConstants.KEY_UI_TOGGLE_SPEED_BUMP_ENABLED;
-
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -1125,6 +1108,23 @@ public class PhFlagsTest {
}
@Test
+ public void testGetTopicsTestEncryptionPublicKey() {
+ assertThat(mPhFlags.getTopicsTestEncryptionPublicKey())
+ .isEqualTo(TOPICS_TEST_ENCRYPTION_PUBLIC_KEY);
+ assertThat(mPhFlags.getTopicsTestEncryptionPublicKey()).isEmpty();
+
+ // Now overriding with the value from PH.
+ String phOverridingValue = "NewKey";
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_ADSERVICES,
+ KEY_TOPICS_TEST_ENCRYPTION_PUBLIC_KEY,
+ phOverridingValue,
+ /* makeDefault */ false);
+
+ assertThat(mPhFlags.getTopicsTestEncryptionPublicKey()).isEqualTo(phOverridingValue);
+ }
+
+ @Test
public void testClassifierType() {
// Without any overriding, the value is the hard coded constant.
assertThat(mPhFlags.getClassifierType()).isEqualTo(DEFAULT_CLASSIFIER_TYPE);
@@ -5284,24 +5284,6 @@ public class PhFlagsTest {
}
@Test
- public void testGetMeasurementEnableConfigurableEventReportingWindows() {
- // Without any overriding, the value is the hard coded constant.
- assertThat(mPhFlags.getMeasurementEnableConfigurableEventReportingWindows())
- .isEqualTo(MEASUREMENT_ENABLE_CONFIGURABLE_EVENT_REPORTING_WINDOWS);
-
- boolean phOverridingValue = !MEASUREMENT_ENABLE_CONFIGURABLE_EVENT_REPORTING_WINDOWS;
-
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_ENABLE_CONFIGURABLE_EVENT_REPORTING_WINDOWS,
- Boolean.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementEnableConfigurableEventReportingWindows())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
public void testGetMeasurementEventReportsVtcEarlyReportingWindows() {
// Without any overriding, the value is the hard coded constant.
assertThat(mPhFlags.getMeasurementEventReportsVtcEarlyReportingWindows())
@@ -7351,22 +7333,6 @@ public class PhFlagsTest {
}
@Test
- public void testEuNotifFlowChangeEnabled() {
- // Without any overriding, the value is the hard coded constant.
- assertThat(mPhFlags.getEuNotifFlowChangeEnabled())
- .isEqualTo(DEFAULT_EU_NOTIF_FLOW_CHANGE_ENABLED);
-
- boolean phOverridingValue = !DEFAULT_EU_NOTIF_FLOW_CHANGE_ENABLED;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_EU_NOTIF_FLOW_CHANGE_ENABLED,
- Boolean.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getEuNotifFlowChangeEnabled()).isEqualTo(phOverridingValue);
- }
-
- @Test
public void testGetRecordManualInteractionEnabled() {
// Without any overriding, the value is the hard coded constant.
assertThat(mPhFlags.getRecordManualInteractionEnabled())
@@ -7677,7 +7643,8 @@ public class PhFlagsTest {
boolean adServicesSystemApi, boolean phOverridingValue, boolean expected) {
// Without any overriding, the value is the hard coded constant.
- assertThat(mPhFlags.getEnableRvcNotification()).isEqualTo(DEFAULT_RVC_NOTIFICATION_ENABLED);
+ assertThat(mPhFlags.getEnableRvcPostOtaNotification())
+ .isEqualTo(DEFAULT_RVC_POST_OTA_NOTIFICATION_ENABLED);
DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_ADSERVICES,
@@ -7686,11 +7653,11 @@ public class PhFlagsTest {
/* makeDefault */ false);
DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_RVC_NOTIFICATION_ENABLED,
+ KEY_RVC_POST_OTA_NOTIFICATION_ENABLED,
Boolean.toString(phOverridingValue),
/* makeDefault */ false);
- assertThat(mPhFlags.getEnableRvcNotification()).isEqualTo(expected);
+ assertThat(mPhFlags.getEnableRvcPostOtaNotification()).isEqualTo(expected);
}
@Test
@@ -7919,144 +7886,6 @@ public class PhFlagsTest {
}
@Test
- public void testGetMeasurementInstallAttrDualDestinationEventNoiseProbability() {
- assertThat(mPhFlags.getMeasurementInstallAttrDualDestinationEventNoiseProbability())
- .isEqualTo(MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue =
- MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementInstallAttrDualDestinationEventNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementDualDestinationNavigationNoiseProbability() {
- assertThat(mPhFlags.getMeasurementDualDestinationNavigationNoiseProbability())
- .isEqualTo(MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue =
- MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementDualDestinationNavigationNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementInstallAttrDualDestinationNavigationNoiseProbability() {
- assertThat(mPhFlags.getMeasurementInstallAttrDualDestinationNavigationNoiseProbability())
- .isEqualTo(MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue =
- MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementInstallAttrDualDestinationNavigationNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementDualDestinationEventNoiseProbability() {
- assertThat(mPhFlags.getMeasurementDualDestinationEventNoiseProbability())
- .isEqualTo(MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue = MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementDualDestinationEventNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementInstallAttrEventNoiseProbability() {
- assertThat(mPhFlags.getMeasurementInstallAttrEventNoiseProbability())
- .isEqualTo(MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue = MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementInstallAttrEventNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementInstallAttrNavigationNoiseProbability() {
- assertThat(mPhFlags.getMeasurementInstallAttrNavigationNoiseProbability())
- .isEqualTo(MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue = MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementInstallAttrNavigationNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementEventNoiseProbability() {
- assertThat(mPhFlags.getMeasurementEventNoiseProbability())
- .isEqualTo(MEASUREMENT_EVENT_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue = MEASUREMENT_EVENT_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_EVENT_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementEventNoiseProbability()).isEqualTo(phOverridingValue);
- }
-
- @Test
- public void testGetMeasurementNavigationNoiseProbability() {
- assertThat(mPhFlags.getMeasurementNavigationNoiseProbability())
- .isEqualTo(MEASUREMENT_NAVIGATION_NOISE_PROBABILITY);
-
- // Now overriding with the value from PH.
- float phOverridingValue = MEASUREMENT_NAVIGATION_NOISE_PROBABILITY + .0001f;
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_NAVIGATION_NOISE_PROBABILITY,
- Float.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementNavigationNoiseProbability())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
public void testGetMeasurementEnablePreinstallCheck() {
// The priority of applying the flag values: PH (DeviceConfig) and then hard-coded value.
assertThat(mPhFlags.getMeasurementEnablePreinstallCheck())
@@ -8182,24 +8011,6 @@ public class PhFlagsTest {
}
@Test
- public void testGetMeasurementEnableVtcConfigurableMaxEventReports() {
- // Without any overriding, the value is the hard coded constant.
- assertThat(mPhFlags.getMeasurementEnableVtcConfigurableMaxEventReports())
- .isEqualTo(DEFAULT_MEASUREMENT_ENABLE_VTC_CONFIGURABLE_MAX_EVENT_REPORTS);
-
- boolean phOverridingValue = !DEFAULT_MEASUREMENT_ENABLE_VTC_CONFIGURABLE_MAX_EVENT_REPORTS;
-
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- KEY_MEASUREMENT_ENABLE_VTC_CONFIGURABLE_MAX_EVENT_REPORTS,
- Boolean.toString(phOverridingValue),
- /* makeDefault */ false);
-
- assertThat(mPhFlags.getMeasurementEnableVtcConfigurableMaxEventReports())
- .isEqualTo(phOverridingValue);
- }
-
- @Test
public void testGetMeasurementVtcConfigurableMaxEventReportsCount() {
// Without any overriding, the value is the hard coded constant.
assertThat(mPhFlags.getMeasurementVtcConfigurableMaxEventReportsCount())
@@ -9710,6 +9521,22 @@ public class PhFlagsTest {
}
@Test
+ public void testGetMeasurementEnableRedirectToWellKnownPath() {
+ assertThat(mPhFlags.getMeasurementEnableRedirectToWellKnownPath())
+ .isEqualTo(MEASUREMENT_ENABLE_REDIRECT_TO_WELL_KNOWN_PATH);
+
+ boolean phOverridingValue = !MEASUREMENT_ENABLE_REDIRECT_TO_WELL_KNOWN_PATH;
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_ADSERVICES,
+ KEY_MEASUREMENT_ENABLE_REDIRECT_TO_WELL_KNOWN_PATH,
+ Boolean.toString(phOverridingValue),
+ /* makeDefault */ false);
+
+ assertThat(mPhFlags.getMeasurementEnableRedirectToWellKnownPath())
+ .isEqualTo(phOverridingValue);
+ }
+
+ @Test
public void testGetMeasurementEnableMaxAggregateReportsPerSource() {
assertThat(mPhFlags.getMeasurementEnableMaxAggregateReportsPerSource())
.isEqualTo(MEASUREMENT_ENABLE_MAX_AGGREGATE_REPORTS_PER_SOURCE);
@@ -10140,6 +9967,37 @@ public class PhFlagsTest {
assertThrows(IllegalArgumentException.class, mPhFlags::getBackgroundJobSamplingLoggingRate);
}
+ @Test
+ public void testGetAppSearchWriteTimeout() {
+ // Without any overriding, the value is the hard coded constant.
+ assertThat(mPhFlags.getAppSearchWriteTimeout())
+ .isEqualTo(DEFAULT_APPSEARCH_WRITE_TIMEOUT_MS);
+
+ int phOverridingValue = DEFAULT_APPSEARCH_WRITE_TIMEOUT_MS + 1000;
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_ADSERVICES,
+ FlagsConstants.KEY_APPSEARCH_WRITE_TIMEOUT_MS,
+ Integer.toString(phOverridingValue),
+ /* makeDefault */ false);
+
+ assertThat(mPhFlags.getAppSearchWriteTimeout()).isEqualTo(phOverridingValue);
+ }
+
+ @Test
+ public void testGetAppSearchReadTimeout() {
+ // Without any overriding, the value is the hard coded constant.
+ assertThat(mPhFlags.getAppSearchReadTimeout()).isEqualTo(DEFAULT_APPSEARCH_READ_TIMEOUT_MS);
+
+ int phOverridingValue = DEFAULT_APPSEARCH_READ_TIMEOUT_MS + 500;
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_ADSERVICES,
+ FlagsConstants.KEY_APPSEARCH_READ_TIMEOUT_MS,
+ Integer.toString(phOverridingValue),
+ /* makeDefault */ false);
+
+ assertThat(mPhFlags.getAppSearchReadTimeout()).isEqualTo(phOverridingValue);
+ }
+
private void overrideBackgroundJobSamplingLoggingRate(int phOverridingValue) {
DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_ADSERVICES,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererImplTest.java
index 490e585d42..ef9ba9f170 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererImplTest.java
@@ -92,7 +92,7 @@ public class AdFiltererImplTest {
.build();
private static final SignedContextualAds.Builder CONTEXTUAL_ADS_BUILDER =
- SignedContextualAdsFixture.aSignedContextualAdBuilder()
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder()
.setAdsWithBid(ImmutableList.of(new AdWithBid(AD_DATA, 1.0)))
.setBuyer(CommonFixture.VALID_BUYER_1)
.setDecisionLogicUri(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererNoOpImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererNoOpImplTest.java
index 7e3e358d9e..cc7aed1ef0 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererNoOpImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdFiltererNoOpImplTest.java
@@ -48,7 +48,7 @@ public class AdFiltererNoOpImplTest {
AdDataFixture.getValidFilterAdDataBuilderByBuyer(CommonFixture.VALID_BUYER_1, 0);
private static final SignedContextualAds.Builder CONTEXTUAL_ADS_BUILDER =
- SignedContextualAdsFixture.aSignedContextualAdBuilder()
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder()
.setAdsWithBid(ImmutableList.of(new AdWithBid(AD_DATA_BUILDER.build(), 1.0)))
.setBuyer(CommonFixture.VALID_BUYER_1)
.setDecisionLogicUri(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionConfigValidatorTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionConfigValidatorTest.java
index a66caecaf2..074da6b503 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionConfigValidatorTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionConfigValidatorTest.java
@@ -16,8 +16,6 @@
package com.android.adservices.service.adselection;
-import static android.adservices.adselection.SignedContextualAdsFixture.PLACEHOLDER_SIGNATURE;
-
import static com.android.adservices.service.adselection.AdSelectionConfigValidator.DECISION_LOGIC_URI_TYPE;
import static com.android.adservices.service.adselection.AdSelectionConfigValidator.TRUSTED_SCORING_SIGNALS_URI_TYPE;
@@ -351,7 +349,7 @@ public class AdSelectionConfigValidatorTest {
Map<AdTechIdentifier, SignedContextualAds> buyerContextualAds = new HashMap<>();
AdTechIdentifier buyer2 = CommonFixture.VALID_BUYER_2;
SignedContextualAds contextualAds2 =
- SignedContextualAdsFixture.generateSignedContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
buyer2, ImmutableList.of(100.0, 200.0))
.setDecisionLogicUri(
CommonFixture.getUri(
@@ -380,7 +378,7 @@ public class AdSelectionConfigValidatorTest {
AdTechIdentifier buyer2 = CommonFixture.VALID_BUYER_2;
ImmutableList<Double> bids = ImmutableList.of(100.0, 200.0);
SignedContextualAds contextualAds2 =
- SignedContextualAdsFixture.generateSignedContextualAds(buyer2, bids)
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(buyer2, bids)
.setDecisionLogicUri(
CommonFixture.getUri(buyer2, BUYER_BIDDING_LOGIC_URI_PATH))
.setAdsWithBid(
@@ -446,14 +444,9 @@ public class AdSelectionConfigValidatorTest {
Map<AdTechIdentifier, SignedContextualAds> buyerContextualAds = new HashMap<>();
buyerContextualAds.put(
CommonFixture.VALID_BUYER_1,
- new SignedContextualAds.Builder()
- .setBuyer(CommonFixture.VALID_BUYER_1)
- .setDecisionLogicUri(
- CommonFixture.getUri(
- CommonFixture.VALID_BUYER_1,
- SignedContextualAdsFixture.DECISION_LOGIC_FRAGMENT))
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
+ CommonFixture.VALID_BUYER_1)
.setAdsWithBid(adsWithBids)
- .setSignature(PLACEHOLDER_SIGNATURE)
.build());
AdSelectionConfig adSelectionConfig =
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
index 229eca16b6..bbef9eb674 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
@@ -28,6 +28,8 @@ import static android.adservices.common.AdServicesStatusUtils.STATUS_UNAUTHORIZE
import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
import static com.android.adservices.data.adselection.AdSelectionDatabase.DATABASE_NAME;
+import static com.android.adservices.data.encryptionkey.EncryptionKeyDaoTest.ENCRYPTION_KEY1;
+import static com.android.adservices.data.enrollment.EnrollmentDaoTest.ENROLLMENT_DATA1;
import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
@@ -51,6 +53,7 @@ import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.
import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_SELECTION_PREBUILT_SCHEMA;
import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_SELECTION_USE_CASE;
import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.PREBUILT_FEATURE_IS_DISABLED;
+import static com.android.adservices.service.adselection.signature.ProtectedAudienceSignatureManager.PUBLIC_TEST_KEY_STRING;
import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.DB_AD_SELECTION_FILE_SIZE;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
@@ -119,12 +122,9 @@ import com.android.adservices.data.adselection.AdSelectionDatabase;
import com.android.adservices.data.adselection.AdSelectionDebugReportDao;
import com.android.adservices.data.adselection.AdSelectionDebugReportingDatabase;
import com.android.adservices.data.adselection.AdSelectionEntryDao;
-import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.DBAdSelectionOverride;
import com.android.adservices.data.adselection.DBBuyerDecisionOverride;
-import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.common.DBAdData;
@@ -133,6 +133,7 @@ import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
import com.android.adservices.data.customaudience.DBCustomAudienceOverride;
import com.android.adservices.data.customaudience.DBTrustedBiddingData;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
@@ -151,6 +152,7 @@ import com.android.adservices.service.consent.ConsentManager;
import com.android.adservices.service.devapi.AdSelectionDevOverridesHelper;
import com.android.adservices.service.devapi.DevContext;
import com.android.adservices.service.devapi.DevContextFilter;
+import com.android.adservices.service.encryptionkey.EncryptionKey;
import com.android.adservices.service.exception.FilterException;
import com.android.adservices.service.js.JSScriptEngine;
import com.android.adservices.service.stats.AdServicesLogger;
@@ -636,8 +638,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
private EncodedPayloadDao mEncodedPayloadDao;
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDao;
+ private EnrollmentDao mEnrollmentDao;
private EncryptionKeyDao mEncryptionKeyDao;
- private EncryptionContextDao mEncryptionContextDao;
@Spy private AdSelectionEntryDao mAdSelectionEntryDaoSpy;
private AdServicesHttpsClient mAdServicesHttpsClient;
private AdSelectionConfig mAdSelectionConfig;
@@ -655,6 +657,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Before
public void setUp() throws Exception {
+ doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
+
mAdSelectionEntryDaoSpy =
Room.inMemoryDatabaseBuilder(mContext, AdSelectionDatabase.class)
.build()
@@ -667,10 +671,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
Room.inMemoryDatabaseBuilder(mContext, SharedStorageDatabase.class)
.build()
.frequencyCapDao();
- AdSelectionServerDatabase serverDb =
- Room.inMemoryDatabaseBuilder(mContext, AdSelectionServerDatabase.class).build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(mContext);
+ mEnrollmentDao = EnrollmentDao.getInstance(mContext);
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDao, mFlags);
@@ -711,8 +713,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -867,7 +869,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionSuccess_preV3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -963,8 +964,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1089,8 +1090,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1235,8 +1236,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1377,8 +1378,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1500,8 +1501,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1607,7 +1608,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionSuccess_prebuiltScoringLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -1703,7 +1703,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionSuccess_prebuiltFeatureDisabled_failure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
Flags prebuiltDisabledFlags =
new AdSelectionE2ETestFlags() {
@Override
@@ -1719,8 +1718,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1818,8 +1817,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -1913,7 +1912,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionSuccess_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -2007,8 +2005,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -2131,8 +2129,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -2276,8 +2274,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -2417,8 +2415,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -2539,8 +2537,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -2645,7 +2643,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionSuccess_preV3BiddingLogicWithV3Header_scriptFail()
throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -2714,7 +2711,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelection_getTooHighHeader_failWithError() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -2783,7 +2779,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionWithOverride_getTooHighHeader_failWithError() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -2879,7 +2874,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionContextualAds_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -2905,7 +2899,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of(BUYER_1, BUYER_2, BUYER_3))
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -2976,7 +2970,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@FlakyTest(bugId = 304764127)
@Test
public void testRunAdSelectionContextualAds_UseOverrides_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -3002,7 +2995,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of(BUYER_1, BUYER_2, BUYER_3))
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -3091,8 +3084,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -3152,7 +3145,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionContextualAds_Disabled_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -3178,7 +3170,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of(BUYER_1, BUYER_2, BUYER_3))
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -3230,8 +3222,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -3277,7 +3269,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionOnlyContextualAds_NoBuyers_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -3296,7 +3287,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of())
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -3338,8 +3329,45 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
}
@Test
+ public void testRunAdSelectionOnlyContextualAds_unauthenticatedContextualAdsRemoved_Success()
+ throws Exception {
+ // Logger calls come after the callback is returned
+ CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(1);
+ doAnswer(
+ unusedInvocation -> {
+ runAdSelectionProcessLoggerLatch.countDown();
+ return null;
+ })
+ .when(mAdServicesLoggerMock)
+ .logRunAdSelectionProcessReportedStats(any());
+
+ AdSelectionConfig adSelectionConfig =
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
+ .setCustomAudienceBuyers(ImmutableList.of())
+ .setSeller(mSeller)
+ .setDecisionLogicUri(
+ mMockWebServerRule.uriForPath(SELLER_DECISION_LOGIC_URI_PATH))
+ .setTrustedScoringSignalsUri(
+ mMockWebServerRule.uriForPath(SELLER_TRUSTED_SIGNAL_URI_PATH))
+ .setBuyerSignedContextualAds(createUnauthenticatedContextualAds())
+ .build();
+
+ mMockWebServerRule.startMockWebServer(mDispatcher);
+
+ AdSelectionTestCallback resultsCallback =
+ invokeSelectAds(mAdSelectionService, adSelectionConfig, CALLER_PACKAGE_NAME);
+ runAdSelectionProcessLoggerLatch.await();
+ assertCallbackFailed(resultsCallback);
+ assertTrue(
+ resultsCallback
+ .mFledgeErrorResponse
+ .getErrorMessage()
+ .contains(ERROR_NO_BUYERS_OR_CONTEXTUAL_ADS_AVAILABLE));
+ assertEquals(STATUS_INVALID_ARGUMENT, resultsCallback.mFledgeErrorResponse.getStatusCode());
+ }
+
+ @Test
public void testRunAdSelectionOnlyContextualAds_NoCAs_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -3365,7 +3393,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of(BUYER_1, BUYER_2, BUYER_3))
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -3417,7 +3445,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 304764127)
public void testRunAdSelectionOnlyContextualAds_NoCAsNoNetworkCall_Success() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -3457,7 +3484,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
paramKey,
paramValue));
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(Collections.emptyList())
.setSeller(mSeller)
.setDecisionLogicUri(prebuiltUri)
@@ -3508,7 +3535,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 315521295)
public void testRunAdSelectionNoContextualAds_NoCAs_Failure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -3534,7 +3560,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.logRunAdSelectionProcessReportedStats(any());
AdSelectionConfig adSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setCustomAudienceBuyers(ImmutableList.of(BUYER_1, BUYER_2, BUYER_3))
.setSeller(mSeller)
.setDecisionLogicUri(
@@ -3577,8 +3603,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionWithRevokedUserConsentSuccess() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
doThrow(new FilterException(new ConsentManager.RevokedConsentException()))
.when(mAdSelectionServiceFilter)
.filterRequest(
@@ -3653,7 +3677,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMultipleCAsSuccess_preV3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -3767,7 +3790,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMultipleCAsSuccess_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -3881,8 +3903,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMultipleCAsNoCachingSuccess_preV3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
MockWebServer server = mMockWebServerRule.startMockWebServer(mDispatcher);
List<Double> bidsForBuyer1 = ImmutableList.of(1.1, 2.2);
List<Double> bidsForBuyer2 = ImmutableList.of(4.5, 6.7, 10.0);
@@ -3962,8 +3982,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
httpClientWithNoCaching,
mDevContextFilter,
mLightweightExecutorService,
@@ -4002,8 +4022,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 304764127)
public void testRunAdSelectionMultipleCAsNoCachingSuccess_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
MockWebServer server = mMockWebServerRule.startMockWebServer(DISPATCHER_V3_BIDDING_LOGIC);
List<Double> bidsForBuyer1 = ImmutableList.of(1.1, 2.2);
List<Double> bidsForBuyer2 = ImmutableList.of(4.5, 6.7, 10.0);
@@ -4083,8 +4101,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
httpClientWithNoCaching,
mDevContextFilter,
mLightweightExecutorService,
@@ -4122,8 +4140,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMultipleCAsJSCachedSuccess_preV3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
MockWebServer server = mMockWebServerRule.startMockWebServer(mDispatcher);
List<Double> bidsForBuyer1 = ImmutableList.of(1.1, 2.2);
List<Double> bidsForBuyer2 = ImmutableList.of(4.5, 6.7, 10.0);
@@ -4205,8 +4221,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
httpClientWithCaching,
mDevContextFilter,
mLightweightExecutorService,
@@ -4247,8 +4263,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMultipleCAsJSCachedSuccess_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
MockWebServer server = mMockWebServerRule.startMockWebServer(DISPATCHER_V3_BIDDING_LOGIC);
List<Double> bidsForBuyer1 = ImmutableList.of(1.1, 2.2);
List<Double> bidsForBuyer2 = ImmutableList.of(4.5, 6.7, 10.0);
@@ -4330,8 +4344,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
httpClientWithCaching,
mDevContextFilter,
mLightweightExecutorService,
@@ -4373,7 +4387,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 304764127)
public void testRunAdSelectionSucceedsWithOverride_preV3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -4455,8 +4468,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -4511,7 +4524,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 304764127)
public void testRunAdSelectionSucceedsWithOverride_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -4595,8 +4607,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -4650,7 +4662,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionActiveCAs() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -4743,7 +4754,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionNoCAsActive() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -4926,7 +4936,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionPartialAdsExcludedBidding() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5034,7 +5043,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMissingBiddingLogicFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -5140,7 +5148,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMissingScoringLogicFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5254,7 +5261,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionErrorFetchingScoringLogicFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5367,7 +5373,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionPartialMissingBiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5485,7 +5490,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionPartialNonPositiveScoring() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5608,7 +5612,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionNonPositiveScoringFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5728,7 +5731,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionBiddingTimesOutForCA() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -5786,8 +5788,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -5907,7 +5909,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionImposesPerBuyerBiddingTimeout_preV3BiddingLogic()
throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(6);
doAnswer(
@@ -6039,8 +6040,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -6115,8 +6116,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -6177,7 +6178,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@FlakyTest(bugId = 304764127)
@Test
public void testRunAdSelectionImposesPerBuyerBiddingTimeout_v3BiddingLogic() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(6);
doAnswer(
@@ -6309,8 +6309,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -6385,8 +6385,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -6446,7 +6446,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionScoringTimesOut() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -6504,8 +6503,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -6677,7 +6676,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMissingBiddingSignalsFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(2);
doAnswer(
@@ -6770,7 +6768,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
@FlakyTest(bugId = 315521295)
public void testRunAdSelectionMissingScoringSignalsFailure() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -6872,7 +6869,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionMissingPartialBiddingSignalsSuccess() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
// Logger calls come after the callback is returned
CountDownLatch runAdSelectionProcessLoggerLatch = new CountDownLatch(3);
doAnswer(
@@ -6988,8 +6984,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
@Test
public void testRunAdSelectionFailsWithInvalidPackageName() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
String invalidPackageName = CALLER_PACKAGE_NAME + "invalidPackageName";
doThrow(new FilterException(new FledgeAuthorizationFilter.CallerMismatchException()))
@@ -7007,7 +7001,7 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
mContext, invalidPackageName, AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS);
// Logger calls come after the callback is returned
@@ -7075,13 +7069,12 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
geq(0));
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
mContext, invalidPackageName, AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS);
}
@Test
public void testRunAdSelectionFailsWhenAppCannotUsePPApi() throws Exception {
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
doThrow(new FilterException(new FledgeAuthorizationFilter.AdTechNotAllowedException()))
.when(mAdSelectionServiceFilter)
.filterRequest(
@@ -7193,8 +7186,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -7327,8 +7320,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -7462,8 +7455,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -7561,8 +7554,6 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
// A null package means WebView is not installed
doReturn(null).when(WebView::getCurrentWebViewPackage);
- doReturn(new AdSelectionE2ETestFlags()).when(FlagsFactory::getFlags);
-
// Shut down any running JSScriptEngine to ensure the new singleton gets picked up
JSScriptEngine.getInstance(mContext, LoggerFactory.getFledgeLogger()).shutdown();
@@ -7575,8 +7566,8 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -7803,6 +7794,21 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
adCost);
}
+ private Map<AdTechIdentifier, SignedContextualAds> createUnauthenticatedContextualAds() {
+ Map<AdTechIdentifier, SignedContextualAds> authenticatedContextualAds =
+ createContextualAds();
+ Map<AdTechIdentifier, SignedContextualAds> unauthenticatedContextualAds = new HashMap<>();
+ byte[] invalidSignatures = new byte[] {1, 2, 3};
+ for (Map.Entry<AdTechIdentifier, SignedContextualAds> buyersBundle :
+ authenticatedContextualAds.entrySet()) {
+ AdTechIdentifier buyer = buyersBundle.getKey();
+ SignedContextualAds ads = buyersBundle.getValue();
+ unauthenticatedContextualAds.put(
+ buyer, ads.cloneToBuilder().setSignature(invalidSignatures).build());
+ }
+ return unauthenticatedContextualAds;
+ }
+
private Map<AdTechIdentifier, SignedContextualAds> createContextualAds() {
Map<AdTechIdentifier, SignedContextualAds> buyerContextualAds = new HashMap<>();
@@ -7813,17 +7819,50 @@ public final class AdSelectionE2ETest extends AdServicesExtendedMockitoTestCase
.uriForPath(BUYER_BIDDING_LOGIC_URI_PATH + BUYER_2)
.getHost());
SignedContextualAds contextualAds2 =
- SignedContextualAdsFixture.generateSignedContextualAds(
- buyer2, ImmutableList.of(100.0, 200.0, 300.0, 400.0, 500.0))
- .setDecisionLogicUri(
- mMockWebServerRule.uriForPath(
- BUYER_BIDDING_LOGIC_URI_PATH + BUYER_2))
- .build();
+ SignedContextualAdsFixture.signContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
+ buyer2, ImmutableList.of(100.0, 200.0, 300.0, 400.0, 500.0))
+ .setDecisionLogicUri(
+ mMockWebServerRule.uriForPath(
+ BUYER_BIDDING_LOGIC_URI_PATH + BUYER_2)));
buyerContextualAds.put(buyer2, contextualAds2);
-
+ persistEncryptionKeyInDb(buyerContextualAds);
return buyerContextualAds;
}
+ private void persistEncryptionKeyInDb(
+ Map<AdTechIdentifier, SignedContextualAds> buyerContextualAds) {
+ for (AdTechIdentifier adTech : buyerContextualAds.keySet()) {
+ String enrollmentId = adTech + "-enrollment-id";
+ String sourceRegistration = CommonFixture.getUri(adTech, "/source").toString();
+ String triggerRegistration = CommonFixture.getUri(adTech, "/trigger").toString();
+ String attributionReporting = CommonFixture.getUri(adTech, "/attrReport").toString();
+ String responseBasedRegistration = CommonFixture.getUri(adTech, "/response").toString();
+ String encryptionKeyUrl = CommonFixture.getUri(adTech, "/keys").toString();
+ mEnrollmentDao.insert(
+ ENROLLMENT_DATA1
+ .cloneToBuilder()
+ .setEnrollmentId(enrollmentId)
+ .setAttributionSourceRegistrationUrl(sourceRegistration)
+ .setAttributionTriggerRegistrationUrl(triggerRegistration)
+ .setAttributionReportingUrl(attributionReporting)
+ .setRemarketingResponseBasedRegistrationUrl(responseBasedRegistration)
+ .setEncryptionKeyUrl(encryptionKeyUrl)
+ .build());
+ Uri reportingOriginUrl = CommonFixture.getUri(adTech, "/reportingOriginUrl");
+ mEncryptionKeyDao.insert(
+ ENCRYPTION_KEY1
+ .cloneToBuilder()
+ .setEnrollmentId(enrollmentId)
+ .setKeyType(EncryptionKey.KeyType.SIGNING)
+ .setEncryptionKeyUrl(encryptionKeyUrl)
+ .setProtocolType(EncryptionKey.ProtocolType.ECDSA)
+ .setBody(PUBLIC_TEST_KEY_STRING)
+ .setReportingOrigin(reportingOriginUrl)
+ .build());
+ }
+ }
+
private void verifyErrorMessageIsCorrect(
final String actualErrorMassage, final String expectedErrorReason) {
assertTrue(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
index 47e2550af8..b82d2b0a2d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
@@ -76,8 +76,6 @@ import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.CustomAudienceSignals;
import com.android.adservices.data.adselection.DBAdSelection;
-import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.adselection.datahandlers.AdSelectionInitialization;
@@ -86,6 +84,7 @@ import com.android.adservices.data.adselection.datahandlers.WinningCustomAudienc
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
@@ -212,9 +211,9 @@ public class AdSelectionFromOutcomesE2ETest {
private EncodedPayloadDao mEncodedPayloadDao;
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDao;
- private EncryptionKeyDao mEncryptionKeyDao;
- private EncryptionContextDao mEncryptionContextDao;
@Spy private AdSelectionEntryDao mAdSelectionEntryDaoSpy;
+ private EnrollmentDao mEnrollmentDao;
+ private EncryptionKeyDao mEncryptionKeyDao;
private AdServicesHttpsClient mAdServicesHttpsClient;
private AdSelectionService mAdSelectionService;
private Dispatcher mDispatcher;
@@ -259,8 +258,8 @@ public class AdSelectionFromOutcomesE2ETest {
mFrequencyCapDao = sharedDb.frequencyCapDao();
AdSelectionServerDatabase serverDb =
Room.inMemoryDatabaseBuilder(mContextSpy, AdSelectionServerDatabase.class).build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+ mEnrollmentDao = EnrollmentDao.getInstance(mContextSpy);
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(mContextSpy);
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDao, mFlags);
mAdServicesHttpsClient =
@@ -280,8 +279,8 @@ public class AdSelectionFromOutcomesE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -411,8 +410,8 @@ public class AdSelectionFromOutcomesE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
@@ -468,8 +467,8 @@ public class AdSelectionFromOutcomesE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilter,
mLightweightExecutorService,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
index 48cd9327dd..b3ceaa5bed 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
@@ -114,7 +114,6 @@ import com.android.adservices.concurrency.AdServicesExecutors;
import com.android.adservices.data.adselection.AdSelectionDatabase;
import com.android.adservices.data.adselection.AdSelectionDebugReportDao;
import com.android.adservices.data.adselection.AdSelectionEntryDao;
-import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.CustomAudienceSignals;
import com.android.adservices.data.adselection.DBAdSelection;
@@ -122,17 +121,18 @@ import com.android.adservices.data.adselection.DBAdSelectionFromOutcomesOverride
import com.android.adservices.data.adselection.DBAdSelectionOverride;
import com.android.adservices.data.adselection.DBBuyerDecisionLogic;
import com.android.adservices.data.adselection.DBReportingComputationInfo;
-import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.adselection.datahandlers.AdSelectionInitialization;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
+import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
import com.android.adservices.service.Flags;
+import com.android.adservices.service.FlagsFactory;
import com.android.adservices.service.adselection.AppInstallAdvertisersSetterTest.SetAppInstallAdvertisersTestCallback;
import com.android.adservices.service.adselection.encryption.ObliviousHttpEncryptor;
import com.android.adservices.service.common.AdSelectionServiceFilter;
@@ -300,7 +300,7 @@ public class AdSelectionServiceImplTest {
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDao;
private EncryptionKeyDao mEncryptionKeyDao;
- private EncryptionContextDao mEncryptionContextDao;
+ private EnrollmentDao mEnrollmentDao;
private AdSelectionConfig.Builder mAdSelectionConfigBuilder;
private Uri mBiddingLogicUri;
private CustomAudienceSignals mCustomAudienceSignals;
@@ -323,13 +323,14 @@ public class AdSelectionServiceImplTest {
.spyStatic(JSScriptEngine.class)
.spyStatic(WebView.class)
.mockStatic(ConsentManager.class)
+ .mockStatic(FlagsFactory.class)
.mockStatic(MeasurementImpl.class)
.mockStatic(AppImportanceFilter.class)
// mAdServicesLoggerMock is not referenced in many tests
.strictness(Strictness.LENIENT)
.initMocks(this)
.startMocking();
-
+ doReturn(mFlags).when(FlagsFactory::getFlags);
mCustomAudienceDao =
Room.inMemoryDatabaseBuilder(CONTEXT, CustomAudienceDatabase.class)
.addTypeConverter(new DBCustomAudience.Converters(true, true))
@@ -354,13 +355,8 @@ public class AdSelectionServiceImplTest {
mAppInstallDao = sharedDb.appInstallDao();
mFrequencyCapDao = sharedDb.frequencyCapDao();
- AdSelectionServerDatabase serverDb =
- Room.inMemoryDatabaseBuilder(
- ApplicationProvider.getApplicationContext(),
- AdSelectionServerDatabase.class)
- .build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(CONTEXT);
+ mEnrollmentDao = EnrollmentDao.getInstance(CONTEXT);
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDao, mFlags);
@@ -498,8 +494,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -619,8 +615,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -750,8 +746,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -882,8 +878,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1002,8 +998,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1125,8 +1121,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1240,8 +1236,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1341,8 +1337,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1449,8 +1445,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1572,8 +1568,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1693,8 +1689,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1819,8 +1815,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1993,8 +1989,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2137,8 +2133,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2299,8 +2295,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2467,8 +2463,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2626,8 +2622,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2774,8 +2770,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2926,8 +2922,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3094,8 +3090,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3269,8 +3265,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3413,8 +3409,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3520,8 +3516,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3626,8 +3622,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3738,8 +3734,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3845,8 +3841,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -3947,8 +3943,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4048,8 +4044,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4150,8 +4146,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4272,8 +4268,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4419,8 +4415,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4516,8 +4512,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4578,8 +4574,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4635,8 +4631,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4697,8 +4693,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4770,8 +4766,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4839,8 +4835,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4912,8 +4908,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4986,8 +4982,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5101,8 +5097,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5218,8 +5214,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5331,8 +5327,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5439,8 +5435,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5476,8 +5472,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5527,8 +5523,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5594,8 +5590,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5662,8 +5658,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5721,8 +5717,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5782,8 +5778,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5837,8 +5833,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5896,8 +5892,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -5996,8 +5992,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6112,8 +6108,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6230,8 +6226,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6354,8 +6350,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6459,8 +6455,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6565,8 +6561,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6699,8 +6695,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6813,8 +6809,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -6929,8 +6925,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7067,8 +7063,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7198,8 +7194,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7314,8 +7310,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7443,8 +7439,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7510,8 +7506,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7575,8 +7571,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7634,8 +7630,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7699,8 +7695,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7776,8 +7772,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7847,8 +7843,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7922,8 +7918,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -7996,8 +7992,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -8119,8 +8115,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -8236,8 +8232,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -8358,8 +8354,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -8498,8 +8494,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -9172,8 +9168,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -9234,8 +9230,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -9277,8 +9273,8 @@ public class AdSelectionServiceImplTest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
index 7a4088a376..342db92c06 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
@@ -817,7 +817,7 @@ public class AdsScoreGeneratorImplTest {
Map<AdTechIdentifier, SignedContextualAds> contextualAdsMap = createContextualAds();
mAdSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setDecisionLogicUri(decisionLogicUri)
.setTrustedScoringSignalsUri(
mMockWebServerRule.uriForPath(mTrustedScoringSignalsPath))
@@ -938,7 +938,7 @@ public class AdsScoreGeneratorImplTest {
Map<AdTechIdentifier, SignedContextualAds> contextualAdsMap = createContextualAds();
mAdSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setDecisionLogicUri(decisionLogicUri)
.setTrustedScoringSignalsUri(
mMockWebServerRule.uriForPath(mTrustedScoringSignalsPath))
@@ -1086,7 +1086,7 @@ public class AdsScoreGeneratorImplTest {
Map<AdTechIdentifier, SignedContextualAds> contextualAdsMap = createContextualAds();
mAdSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setDecisionLogicUri(decisionLogicUri)
.setTrustedScoringSignalsUri(
mMockWebServerRule.uriForPath(mTrustedScoringSignalsPath))
@@ -1257,7 +1257,7 @@ public class AdsScoreGeneratorImplTest {
Map<AdTechIdentifier, SignedContextualAds> contextualAdsMap = createContextualAds();
mAdSelectionConfig =
- AdSelectionConfigFixture.anAdSelectionConfigWithContextualAdsBuilder()
+ AdSelectionConfigFixture.anAdSelectionConfigWithSignedContextualAdsBuilder()
.setDecisionLogicUri(decisionLogicUri)
.setTrustedScoringSignalsUri(
mMockWebServerRule.uriForPath(mTrustedScoringSignalsPath))
@@ -1904,13 +1904,13 @@ public class AdsScoreGeneratorImplTest {
AdTechIdentifier buyer1 = BUYER_1;
SignedContextualAds contextualAds1 =
- SignedContextualAdsFixture.generateSignedContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
buyer1, ImmutableList.of(100.0, 200.0, 300.0))
.build();
AdTechIdentifier buyer2 = CommonFixture.VALID_BUYER_2;
SignedContextualAds contextualAds2 =
- SignedContextualAdsFixture.generateSignedContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
buyer2, ImmutableList.of(400.0, 500.0))
.build();
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AuctionServerE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AuctionServerE2ETest.java
index 8a36e3ee42..f29355fdaa 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AuctionServerE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AuctionServerE2ETest.java
@@ -104,6 +104,7 @@ import com.android.adservices.data.common.DBAdData;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
import com.android.adservices.service.Flags;
@@ -254,7 +255,9 @@ public class AuctionServerE2ETest {
private AdSelectionEntryDao mAdSelectionEntryDao;
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDaoSpy;
- private EncryptionKeyDao mEncryptionKeyDao;
+ private com.android.adservices.data.encryptionkey.EncryptionKeyDao mEncryptionKeyDao;
+ private EncryptionKeyDao mAuctionServerEncryptionKeyDao;
+ private EnrollmentDao mEnrollmentDao;
private EncryptionContextDao mEncryptionContextDao;
@Mock private ObliviousHttpEncryptor mObliviousHttpEncryptorMock;
@Mock private AdSelectionServiceFilter mAdSelectionServiceFilterMock;
@@ -305,8 +308,11 @@ public class AuctionServerE2ETest {
mFrequencyCapDaoSpy = spy(sharedDb.frequencyCapDao());
AdSelectionServerDatabase serverDb =
Room.inMemoryDatabaseBuilder(mContext, AdSelectionServerDatabase.class).build();
+ mEncryptionKeyDao =
+ com.android.adservices.data.encryptionkey.EncryptionKeyDao.getInstance(mContext);
+ mEnrollmentDao = EnrollmentDao.getInstance(mContext);
+ mAuctionServerEncryptionKeyDao = serverDb.encryptionKeyDao();
mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDaoSpy, mFlags);
when(ConsentManager.getInstance(mContext)).thenReturn(mConsentManagerMock);
@@ -820,7 +826,7 @@ public class AuctionServerE2ETest {
.setEncryptionKeyType(ENCRYPTION_KEY_TYPE_AUCTION)
.setExpiryTtlSeconds(TimeUnit.DAYS.toSeconds(7))
.build();
- mEncryptionKeyDao.insertAllKeys(ImmutableList.of(dbEncryptionKey));
+ mAuctionServerEncryptionKeyDao.insertAllKeys(ImmutableList.of(dbEncryptionKey));
String seed = "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww";
byte[] seedBytes = seed.getBytes(StandardCharsets.US_ASCII);
@@ -831,8 +837,8 @@ public class AuctionServerE2ETest {
mCustomAudienceDaoSpy,
mEncodedPayloadDaoSpy,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -848,7 +854,7 @@ public class AuctionServerE2ETest {
mConsentManagerMock,
new ObliviousHttpEncryptorWithSeedImpl(
new AdSelectionEncryptionKeyManager(
- mEncryptionKeyDao,
+ mAuctionServerEncryptionKeyDao,
mFlags,
mAdServicesHttpsClientSpy,
mLightweightExecutorService),
@@ -1455,7 +1461,7 @@ public class AuctionServerE2ETest {
.setEncryptionKeyType(ENCRYPTION_KEY_TYPE_AUCTION)
.setExpiryTtlSeconds(TimeUnit.DAYS.toSeconds(7))
.build();
- mEncryptionKeyDao.insertAllKeys(ImmutableList.of(dbEncryptionKey));
+ mAuctionServerEncryptionKeyDao.insertAllKeys(ImmutableList.of(dbEncryptionKey));
String seed = "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww";
byte[] seedBytes = seed.getBytes(StandardCharsets.US_ASCII);
@@ -1466,8 +1472,8 @@ public class AuctionServerE2ETest {
mCustomAudienceDaoSpy,
mEncodedPayloadDaoSpy,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1483,7 +1489,7 @@ public class AuctionServerE2ETest {
mConsentManagerMock,
new ObliviousHttpEncryptorWithSeedImpl(
new AdSelectionEncryptionKeyManager(
- mEncryptionKeyDao,
+ mAuctionServerEncryptionKeyDao,
mFlags,
mAdServicesHttpsClientSpy,
mLightweightExecutorService),
@@ -1537,8 +1543,8 @@ public class AuctionServerE2ETest {
mCustomAudienceDaoSpy,
mEncodedPayloadDaoSpy,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/FrequencyCapFilteringE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/FrequencyCapFilteringE2ETest.java
index a18905bbed..76d93ab08a 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/FrequencyCapFilteringE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/FrequencyCapFilteringE2ETest.java
@@ -57,18 +57,16 @@ import com.android.adservices.data.DbTestUtil;
import com.android.adservices.data.adselection.AdSelectionDatabase;
import com.android.adservices.data.adselection.AdSelectionDebugReportDao;
import com.android.adservices.data.adselection.AdSelectionEntryDao;
-import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.DBAdSelection;
import com.android.adservices.data.adselection.DBAdSelectionHistogramInfo;
-import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.common.DBAdData;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
@@ -118,7 +116,6 @@ import java.util.concurrent.TimeUnit;
@SpyStatic(FlagsFactory.class)
public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockitoTestCase {
-
private static final int CALLBACK_WAIT_MS = 500;
private static final int SELECT_ADS_CALLBACK_WAIT_MS = 10_000;
private static final long AD_SELECTION_ID_BUYER_1 = 20;
@@ -196,7 +193,7 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDaoSpy;
private EncryptionKeyDao mEncryptionKeyDao;
- private EncryptionContextDao mEncryptionContextDao;
+ private EnrollmentDao mEnrollmentDao;
private ExecutorService mLightweightExecutorService;
private ExecutorService mBackgroundExecutorService;
private ScheduledThreadPoolExecutor mScheduledExecutor;
@@ -234,16 +231,16 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
Room.inMemoryDatabaseBuilder(mContextSpy, SharedStorageDatabase.class)
.build()
.frequencyCapDao());
- AdSelectionServerDatabase serverDb =
- Room.inMemoryDatabaseBuilder(mContextSpy, AdSelectionServerDatabase.class).build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+
+ Flags flagsEnablingAdFiltering = new FlagsOverridingAdFiltering(true);
+ doReturn(flagsEnablingAdFiltering).when(FlagsFactory::getFlags);
+
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(mContextSpy);
+ mEnrollmentDao = EnrollmentDao.getInstance(mContextSpy);
mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
mScheduledExecutor = AdServicesExecutors.getScheduler();
- Flags flagsEnablingAdFiltering = new FlagsOverridingAdFiltering(true);
-
mFledgeAuthorizationFilterSpy =
ExtendedMockito.spy(
new FledgeAuthorizationFilter(
@@ -265,8 +262,8 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientMock,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -380,7 +377,7 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
mContextSpy,
CommonFixture.TEST_PACKAGE_NAME_1,
AD_SERVICES_API_CALLED__API_NAME__UPDATE_AD_COUNTER_HISTOGRAM);
@@ -404,7 +401,7 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
verifyNoMoreInteractions(mFrequencyCapDaoSpy);
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
mContextSpy,
CommonFixture.TEST_PACKAGE_NAME_1,
AD_SERVICES_API_CALLED__API_NAME__UPDATE_AD_COUNTER_HISTOGRAM);
@@ -425,8 +422,8 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientMock,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -488,8 +485,8 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientMock,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -746,8 +743,8 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientMock,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -862,8 +859,8 @@ public final class FrequencyCapFilteringE2ETest extends AdServicesExtendedMockit
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDaoSpy,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClientMock,
mDevContextFilterMock,
mLightweightExecutorService,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
index 56f4e55ae3..ce83b09c84 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
@@ -18,6 +18,7 @@ package com.android.adservices.service.adselection;
import static android.adservices.adselection.CustomAudienceBiddingInfoFixture.DATA_VERSION_1;
import static android.adservices.adselection.CustomAudienceBiddingInfoFixture.DATA_VERSION_2;
+import static android.adservices.adselection.SignedContextualAdsFixture.signContextualAds;
import static android.adservices.common.AdServicesStatusUtils.ILLEGAL_STATE_BACKGROUND_CALLER_ERROR_MESSAGE;
import static android.adservices.common.AdServicesStatusUtils.RATE_LIMIT_REACHED_ERROR_MESSAGE;
import static android.adservices.common.AdServicesStatusUtils.STATUS_BACKGROUND_CALLER;
@@ -44,6 +45,7 @@ import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_WINNING_AD_FOUND;
import static com.android.adservices.service.adselection.AdSelectionRunner.ON_DEVICE_AUCTION_KILL_SWITCH_ENABLED;
import static com.android.adservices.service.adselection.AdSelectionScriptEngine.NUM_BITS_STOCHASTIC_ROUNDING;
+import static com.android.adservices.service.adselection.signature.ProtectedAudienceSignatureManager.PUBLIC_TEST_KEY_STRING;
import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.BIDDING_STAGE_END_TIMESTAMP;
import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.BIDDING_STAGE_START_TIMESTAMP;
import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.DB_AD_SELECTION_FILE_SIZE;
@@ -128,6 +130,8 @@ import com.android.adservices.data.common.DBAdData;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
+import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.service.Flags;
import com.android.adservices.service.FlagsFactory;
import com.android.adservices.service.common.AdSelectionServiceFilter;
@@ -141,6 +145,8 @@ import com.android.adservices.service.common.httpclient.AdServicesHttpClientResp
import com.android.adservices.service.common.httpclient.AdServicesHttpsClient;
import com.android.adservices.service.consent.ConsentManager;
import com.android.adservices.service.devapi.DevContext;
+import com.android.adservices.service.encryptionkey.EncryptionKey;
+import com.android.adservices.service.enrollment.EnrollmentData;
import com.android.adservices.service.exception.FilterException;
import com.android.adservices.service.stats.AdSelectionExecutionLogger;
import com.android.adservices.service.stats.AdServicesLogger;
@@ -194,8 +200,6 @@ import java.util.stream.Collectors;
* mocked and provide expected mock responses when invoked with desired input
*/
public class OnDeviceAdSelectionRunnerTest {
- private static final String TAG = OnDeviceAdSelectionRunnerTest.class.getName();
-
private static final AdTechIdentifier BUYER_1 = AdSelectionConfigFixture.BUYER_1;
private static final AdTechIdentifier BUYER_2 = AdSelectionConfigFixture.BUYER_2;
private static final Long AD_SELECTION_ID = 1234L;
@@ -234,6 +238,8 @@ public class OnDeviceAdSelectionRunnerTest {
@Mock private AdCounterHistogramUpdater mAdCounterHistogramUpdaterMock;
@Mock private DebugReporting mDebugReportingMock;
@Mock private DebugReportSenderStrategy mDebugReportSenderMock;
+ @Mock private EnrollmentDao mEnrollmentDaoMock;
+ @Mock private EncryptionKeyDao mEncryptionKeyDaoMock;
@Captor
ArgumentCaptor<RunAdSelectionProcessReportedStats>
@@ -396,6 +402,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -501,6 +509,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -673,6 +683,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -798,6 +810,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -945,6 +959,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1145,6 +1161,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1245,6 +1263,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1359,6 +1379,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1434,6 +1456,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1500,6 +1524,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1563,6 +1589,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1617,6 +1645,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1767,6 +1797,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1886,6 +1918,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -1974,7 +2008,7 @@ public class OnDeviceAdSelectionRunnerTest {
// Getting ScoringOutcome-ForBuyerX corresponding to each BiddingOutcome-forBuyerX
// In this case assuming we get an empty result
when(mMockAdsScoreGenerator.runAdScoring(mAdBiddingOutcomeList, adSelectionConfig))
- .thenReturn((FluentFuture.from(Futures.immediateFuture(Collections.EMPTY_LIST))));
+ .thenReturn((FluentFuture.from(Futures.immediateFuture(Collections.emptyList()))));
mockAdSelectionExecutionLoggerSpyWithFailedAdSelectionDuringScoring();
@@ -1983,6 +2017,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2085,6 +2121,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2190,6 +2228,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2317,6 +2357,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2387,6 +2429,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2482,6 +2526,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2628,6 +2674,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2715,6 +2763,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2765,6 +2815,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2849,6 +2901,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2926,6 +2980,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -2981,6 +3037,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mMockHttpClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3022,7 +3080,7 @@ public class OnDeviceAdSelectionRunnerTest {
mAdSelectionConfigBuilder
.build()
.cloneToBuilder()
- .setCustomAudienceBuyers(Collections.EMPTY_LIST)
+ .setCustomAudienceBuyers(Collections.emptyList())
.setBuyerSignedContextualAds(signedContextualAdsMap)
.build();
@@ -3055,6 +3113,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3093,7 +3153,7 @@ public class OnDeviceAdSelectionRunnerTest {
mAdSelectionConfigBuilder
.build()
.cloneToBuilder()
- .setCustomAudienceBuyers(Collections.EMPTY_LIST)
+ .setCustomAudienceBuyers(Collections.emptyList())
// Despite populating Contextual Ads, they will be removed
.setBuyerSignedContextualAds(createContextualAds())
.build();
@@ -3121,6 +3181,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3163,7 +3225,7 @@ public class OnDeviceAdSelectionRunnerTest {
mAdSelectionConfigBuilder
.build()
.cloneToBuilder()
- .setCustomAudienceBuyers(Collections.EMPTY_LIST)
+ .setCustomAudienceBuyers(Collections.emptyList())
.setBuyerSignedContextualAds(contextualAdsMap)
.build();
@@ -3191,6 +3253,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3215,14 +3279,14 @@ public class OnDeviceAdSelectionRunnerTest {
.thenReturn(contextualAdsMap.get(CommonFixture.VALID_BUYER_1));
when(mMockAdFilterer.filterContextualAds(contextualAdsMap.get(CommonFixture.VALID_BUYER_2)))
.thenReturn(
- SignedContextualAdsFixture.aSignedContextualAdBuilder()
- .setBuyer(CommonFixture.VALID_BUYER_2)
- .setDecisionLogicUri(
- contextualAdsMap
- .get(CommonFixture.VALID_BUYER_2)
- .getDecisionLogicUri())
- .setAdsWithBid(Collections.EMPTY_LIST)
- .build());
+ signContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder()
+ .setBuyer(CommonFixture.VALID_BUYER_2)
+ .setDecisionLogicUri(
+ contextualAdsMap
+ .get(CommonFixture.VALID_BUYER_2)
+ .getDecisionLogicUri())
+ .setAdsWithBid(Collections.emptyList())));
invokeRunAdSelection(mAdSelectionRunner, adSelectionConfig, MY_APP_PACKAGE_NAME);
verify(mMockAdsScoreGenerator)
.runAdScoring(
@@ -3237,7 +3301,7 @@ public class OnDeviceAdSelectionRunnerTest {
.getAdsWithBid());
assertEquals(
"The contextual ads should have been filtered for Buyer 2",
- Collections.EMPTY_LIST,
+ Collections.emptyList(),
mAdSelectionConfigArgumentCaptor
.getValue()
.getBuyerSignedContextualAds()
@@ -3254,6 +3318,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3343,6 +3409,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3425,6 +3493,8 @@ public class OnDeviceAdSelectionRunnerTest {
mContextSpy,
mCustomAudienceDao,
mAdSelectionEntryDaoSpy,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
mAdServicesHttpsClient,
mLightweightExecutorService,
mBackgroundExecutorService,
@@ -3881,23 +3951,39 @@ public class OnDeviceAdSelectionRunnerTest {
AdTechIdentifier buyer1 = CommonFixture.VALID_BUYER_1;
SignedContextualAds contextualAds1 =
- SignedContextualAdsFixture.generateSignedContextualAds(
- buyer1, ImmutableList.of(100.0, 200.0, 300.0))
- .setDecisionLogicUri(
- CommonFixture.getUri(BUYER_1, BUYER_BIDDING_LOGIC_URI_PATH))
- .build();
+ signContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
+ buyer1, ImmutableList.of(100.0, 200.0, 300.0))
+ .setDecisionLogicUri(
+ CommonFixture.getUri(
+ BUYER_1, BUYER_BIDDING_LOGIC_URI_PATH)));
AdTechIdentifier buyer2 = CommonFixture.VALID_BUYER_2;
SignedContextualAds contextualAds2 =
- SignedContextualAdsFixture.generateSignedContextualAds(
- buyer2, ImmutableList.of(400.0, 500.0))
- .setDecisionLogicUri(
- CommonFixture.getUri(BUYER_2, BUYER_BIDDING_LOGIC_URI_PATH))
- .build();
+ signContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
+ buyer2, ImmutableList.of(400.0, 500.0))
+ .setDecisionLogicUri(
+ CommonFixture.getUri(
+ BUYER_2, BUYER_BIDDING_LOGIC_URI_PATH)));
buyerContextualAds.put(buyer1, contextualAds1);
buyerContextualAds.put(buyer2, contextualAds2);
+ for (AdTechIdentifier adTech : buyerContextualAds.keySet()) {
+ doReturn(new EnrollmentData.Builder().setEnrollmentId(adTech.toString()).build())
+ .when(mEnrollmentDaoMock)
+ .getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
+ doReturn(
+ Collections.singletonList(
+ new EncryptionKey.Builder()
+ .setBody(PUBLIC_TEST_KEY_STRING)
+ .build()))
+ .when(mEncryptionKeyDaoMock)
+ .getEncryptionKeyFromEnrollmentIdAndKeyType(
+ adTech.toString(), EncryptionKey.KeyType.SIGNING);
+ }
+
return buyerContextualAds;
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportAndRegisterEventE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportAndRegisterEventE2ETest.java
index f564af8ec1..d1b3cd9dc0 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportAndRegisterEventE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportAndRegisterEventE2ETest.java
@@ -66,18 +66,16 @@ import com.android.adservices.data.DbTestUtil;
import com.android.adservices.data.adselection.AdSelectionDatabase;
import com.android.adservices.data.adselection.AdSelectionDebugReportDao;
import com.android.adservices.data.adselection.AdSelectionEntryDao;
-import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.CustomAudienceSignals;
import com.android.adservices.data.adselection.DBAdSelection;
import com.android.adservices.data.adselection.DBRegisteredAdInteraction;
-import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.measurement.DatastoreException;
import com.android.adservices.data.measurement.DatastoreManager;
@@ -163,7 +161,7 @@ public class ReportAndRegisterEventE2ETest {
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDao;
private EncryptionKeyDao mEncryptionKeyDao;
- private EncryptionContextDao mEncryptionContextDao;
+ private EnrollmentDao mEnrollmentDao;
private AdFilteringFeatureFactory mAdFilteringFeatureFactory;
@Mock private AdSelectionServiceFilter mAdSelectionServiceFilterMock;
@Mock private ObliviousHttpEncryptor mObliviousHttpEncryptorMock;
@@ -284,13 +282,8 @@ public class ReportAndRegisterEventE2ETest {
mAppInstallDao = sharedDb.appInstallDao();
mFrequencyCapDao = sharedDb.frequencyCapDao();
- AdSelectionServerDatabase serverDb =
- Room.inMemoryDatabaseBuilder(
- ApplicationProvider.getApplicationContext(),
- AdSelectionServerDatabase.class)
- .build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(CONTEXT);
+ mEnrollmentDao = EnrollmentDao.getInstance(CONTEXT);
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDao, mFlags);
@@ -986,8 +979,8 @@ public class ReportAndRegisterEventE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mHttpsClientSpy,
mDevContextFilterMock,
mLightweightExecutorService,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportImpressionScriptEngineTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportImpressionScriptEngineTest.java
index 9e2771e105..9ebccfd105 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportImpressionScriptEngineTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/ReportImpressionScriptEngineTest.java
@@ -267,6 +267,7 @@ public class ReportImpressionScriptEngineTest {
}
@Test
+ @FlakyTest(bugId = 317817375)
public void testReportResultSuccessfulCaseWithCallingRegisterAdBeacon() throws Exception {
String jsScript =
"function reportResult(ad_selection_config, render_uri, bid, contextual_signals) "
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/TrustedServerAdSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/TrustedServerAdSelectionRunnerTest.java
index f0cfbaa601..d3385c13e0 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/TrustedServerAdSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/TrustedServerAdSelectionRunnerTest.java
@@ -50,6 +50,8 @@ import com.android.adservices.data.adselection.AdSelectionEntryDao;
import com.android.adservices.data.adselection.DBAdSelection;
import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.DBCustomAudience;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
+import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.service.Flags;
import com.android.adservices.service.FlagsFactory;
import com.android.adservices.service.adselection.AdSelectionRunner.AdSelectionOrchestrationResult;
@@ -150,6 +152,8 @@ public class TrustedServerAdSelectionRunnerTest {
@Mock private AdServicesLogger mAdServicesLoggerSpy;
@Mock private CustomAudienceDao mCustomAudienceDao;
@Mock private AdSelectionEntryDao mAdSelectionEntryDao;
+ @Mock private EnrollmentDao mEnrollmentDaoMock;
+ @Mock private EncryptionKeyDao mEncryptionKeyDaoMock;
@Mock private JsFetcher mJsFetcher;
@Mock private CustomAudienceDevOverridesHelper mCustomAudienceDevOverridesHelper;
@Mock private AdSelectionIdGenerator mMockAdSelectionIdGenerator;
@@ -215,6 +219,8 @@ public class TrustedServerAdSelectionRunnerTest {
mContext,
mCustomAudienceDao,
mAdSelectionEntryDao,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
sLightweightExecutorService,
sBackgroundExecutorService,
sScheduledExecutor,
@@ -276,6 +282,8 @@ public class TrustedServerAdSelectionRunnerTest {
mContext,
mCustomAudienceDao,
mAdSelectionEntryDao,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
sLightweightExecutorService,
sBackgroundExecutorService,
sScheduledExecutor,
@@ -339,6 +347,8 @@ public class TrustedServerAdSelectionRunnerTest {
mContext,
mCustomAudienceDao,
mAdSelectionEntryDao,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
sLightweightExecutorService,
sBackgroundExecutorService,
sScheduledExecutor,
@@ -408,6 +418,8 @@ public class TrustedServerAdSelectionRunnerTest {
mContext,
mCustomAudienceDao,
mAdSelectionEntryDao,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
sLightweightExecutorService,
sBackgroundExecutorService,
sScheduledExecutor,
@@ -461,6 +473,8 @@ public class TrustedServerAdSelectionRunnerTest {
mContext,
mCustomAudienceDao,
mAdSelectionEntryDao,
+ mEncryptionKeyDaoMock,
+ mEnrollmentDaoMock,
sLightweightExecutorService,
sBackgroundExecutorService,
sScheduledExecutor,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/BinarySerializerSignedContextualAdsTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/BinarySerializerSignedContextualAdsTest.java
index ad751d71d7..1533ff53a1 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/BinarySerializerSignedContextualAdsTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/BinarySerializerSignedContextualAdsTest.java
@@ -16,8 +16,6 @@
package com.android.adservices.service.adselection.signature;
-import static android.adservices.adselection.SignedContextualAdsFixture.PLACEHOLDER_SIGNATURE;
-
import static com.google.common.truth.Truth.assertThat;
import android.adservices.adselection.AdWithBid;
@@ -42,6 +40,8 @@ import java.util.Set;
import java.util.stream.Collectors;
public class BinarySerializerSignedContextualAdsTest {
+ public static final byte[] TEST_SIGNATURE = new byte[] {0, 1, 2};
+
private SignedContextualAdsHashUtil mSerializer;
@Before
@@ -131,7 +131,7 @@ public class BinarySerializerSignedContextualAdsTest {
.setRenderUri(Uri.parse(adRenderUri))
.build(),
Double.parseDouble(bid))))
- .setSignature(PLACEHOLDER_SIGNATURE)
+ .setSignature(TEST_SIGNATURE)
.build();
byte[] serialized = new SignedContextualAdsHashUtil().serialize(contextualAds);
@@ -203,7 +203,7 @@ public class BinarySerializerSignedContextualAdsTest {
.setRenderUri(Uri.parse(adRenderUri))
.build(),
Double.parseDouble(bid))))
- .setSignature(PLACEHOLDER_SIGNATURE)
+ .setSignature(TEST_SIGNATURE)
.build();
byte[] serialized = new SignedContextualAdsHashUtil().serialize(contextualAds);
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ProtectedAudienceSignatureManagerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ProtectedAudienceSignatureManagerTest.java
index 774da48a82..a44359664e 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ProtectedAudienceSignatureManagerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ProtectedAudienceSignatureManagerTest.java
@@ -16,14 +16,17 @@
package com.android.adservices.service.adselection.signature;
+import static android.adservices.adselection.SignedContextualAdsFixture.aSignedContextualAds;
+
+import static com.android.adservices.service.adselection.signature.ProtectedAudienceSignatureManager.PUBLIC_TEST_KEY_STRING;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
+import android.adservices.adselection.SignedContextualAds;
import android.adservices.common.AdTechIdentifier;
-import android.content.Context;
-import androidx.test.core.app.ApplicationProvider;
import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
import com.android.adservices.data.enrollment.EnrollmentDao;
@@ -35,39 +38,102 @@ import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.Base64;
import java.util.Collections;
import java.util.List;
public class ProtectedAudienceSignatureManagerTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
- @Mock private EnrollmentDao mEnrollmentDao;
- @Mock private EncryptionKeyDao mEncryptionKeyDao;
+ @Mock private EnrollmentDao mEnrollmentDaoMock;
+ @Mock private EncryptionKeyDao mEncryptionKeyDaoMock;
+ private ProtectedAudienceSignatureManager mNoOpSignatureManager;
+ private ProtectedAudienceSignatureManager mSignatureManager;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
+ SignatureVerifier noOpSignatureVerifier =
+ new SignatureVerifier() {
+ @Override
+ public boolean verify(byte[] publicKey, byte[] data, byte[] signature) {
+ return true;
+ }
+ };
+ boolean enrollmentEnabled = false;
+ mSignatureManager =
+ new ProtectedAudienceSignatureManager(
+ mEnrollmentDaoMock, mEncryptionKeyDaoMock, enrollmentEnabled);
+ mNoOpSignatureManager =
+ new ProtectedAudienceSignatureManager(
+ mEnrollmentDaoMock, mEncryptionKeyDaoMock, noOpSignatureVerifier);
+ }
+
+ @Test
+ public void testVerifySignature_validSignature_returnTrue() {
+ SignedContextualAds signedContextualAds = aSignedContextualAds();
+ String enrollmentId = "enrollment1";
+ AdTechIdentifier buyer = signedContextualAds.getBuyer();
+
+ doReturn(new EnrollmentData.Builder().setEnrollmentId(enrollmentId).build())
+ .when(mEnrollmentDaoMock)
+ .getEnrollmentDataForFledgeByAdTechIdentifier(buyer);
+ doReturn(
+ Collections.singletonList(
+ new EncryptionKey.Builder()
+ .setBody(PUBLIC_TEST_KEY_STRING)
+ .build()))
+ .when(mEncryptionKeyDaoMock)
+ .getEncryptionKeyFromEnrollmentIdAndKeyType(
+ enrollmentId, EncryptionKey.KeyType.SIGNING);
+
+ boolean isVerified = mSignatureManager.isVerified(buyer, signedContextualAds);
+
+ assertThat(isVerified).isTrue();
+ }
+
+ @Test
+ public void testVerifySignature_invalidSignature_returnFalse() {
+ byte[] invalidSignature = new byte[] {1, 2, 3};
+ SignedContextualAds signedContextualAds =
+ aSignedContextualAds().cloneToBuilder().setSignature(invalidSignature).build();
+ String enrollmentId = "enrollment1";
+ AdTechIdentifier buyer = signedContextualAds.getBuyer();
+
+ doReturn(new EnrollmentData.Builder().setEnrollmentId(enrollmentId).build())
+ .when(mEnrollmentDaoMock)
+ .getEnrollmentDataForFledgeByAdTechIdentifier(buyer);
+ doReturn(
+ Collections.singletonList(
+ new EncryptionKey.Builder()
+ .setBody(PUBLIC_TEST_KEY_STRING)
+ .build()))
+ .when(mEncryptionKeyDaoMock)
+ .getEncryptionKeyFromEnrollmentIdAndKeyType(
+ enrollmentId, EncryptionKey.KeyType.SIGNING);
+
+ boolean isVerified = mSignatureManager.isVerified(buyer, signedContextualAds);
+
+ assertThat(isVerified).isFalse();
}
@Test
public void testFetchKeys_validAdTech_success() {
AdTechIdentifier adTech = AdTechIdentifier.fromString("example.com");
- String publicKey = "test-key";
+ byte[] publicKeyBytes = new byte[] {1, 2, 3, 4, 5};
+ String publicKey = Base64.getEncoder().encodeToString(publicKeyBytes);
String enrollmentId = "enrollment1";
doReturn(new EnrollmentData.Builder().setEnrollmentId(enrollmentId).build())
- .when(mEnrollmentDao)
+ .when(mEnrollmentDaoMock)
.getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
doReturn(Collections.singletonList(new EncryptionKey.Builder().setBody(publicKey).build()))
- .when(mEncryptionKeyDao)
+ .when(mEncryptionKeyDaoMock)
.getEncryptionKeyFromEnrollmentIdAndKeyType(
enrollmentId, EncryptionKey.KeyType.SIGNING);
- ProtectedAudienceSignatureManager signatureManager =
- new ProtectedAudienceSignatureManager(mContext, mEnrollmentDao, mEncryptionKeyDao);
-
- List<String> signingKeys = signatureManager.fetchPublicKeyForAdTech(adTech);
+ List<byte[]> signingKeys = mNoOpSignatureManager.fetchPublicKeyForAdTech(adTech);
- assertThat(signingKeys).isEqualTo(Collections.singletonList(publicKey));
+ assertThat(signingKeys.size()).isEqualTo(1);
+ assertThat(signingKeys.get(0)).isEqualTo(publicKeyBytes);
}
@Test
@@ -77,8 +143,10 @@ public class ProtectedAudienceSignatureManagerTest {
EnrollmentData enrollment =
new EnrollmentData.Builder().setEnrollmentId(enrollmentId).build();
- String publicKey1 = "test-key1";
- String publicKey2 = "test-key2";
+ byte[] publicKeyBytes1 = new byte[] {1, 2, 3, 4, 5};
+ String publicKey1 = Base64.getEncoder().encodeToString(publicKeyBytes1);
+ byte[] publicKeyBytes2 = new byte[] {6, 7, 8, 9, 10};
+ String publicKey2 = Base64.getEncoder().encodeToString(publicKeyBytes2);
long expiration1 = 0L;
long expiration2 = 1L;
EncryptionKey encKey1 =
@@ -88,32 +156,28 @@ public class ProtectedAudienceSignatureManagerTest {
List<EncryptionKey> encKeysToPersistInReverseOrder = List.of(encKey2, encKey1);
doReturn(enrollment)
- .when(mEnrollmentDao)
+ .when(mEnrollmentDaoMock)
.getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
doReturn(encKeysToPersistInReverseOrder)
- .when(mEncryptionKeyDao)
+ .when(mEncryptionKeyDaoMock)
.getEncryptionKeyFromEnrollmentIdAndKeyType(
enrollmentId, EncryptionKey.KeyType.SIGNING);
- ProtectedAudienceSignatureManager signatureManager =
- new ProtectedAudienceSignatureManager(mContext, mEnrollmentDao, mEncryptionKeyDao);
-
- List<String> signingKeys = signatureManager.fetchPublicKeyForAdTech(adTech);
+ List<byte[]> signingKeys = mNoOpSignatureManager.fetchPublicKeyForAdTech(adTech);
assertThat(signingKeys.size()).isEqualTo(2);
- assertThat(signingKeys.get(0)).isEqualTo(publicKey1);
- assertThat(signingKeys.get(1)).isEqualTo(publicKey2);
+ assertThat(signingKeys.get(0)).isEqualTo(publicKeyBytes1);
+ assertThat(signingKeys.get(1)).isEqualTo(publicKeyBytes2);
}
@Test
public void testFetchKeys_notEnrolledAdTech_returnsEmptyList() {
AdTechIdentifier adTech = AdTechIdentifier.fromString("example.com");
- doReturn(null).when(mEnrollmentDao).getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
-
- ProtectedAudienceSignatureManager signatureManager =
- new ProtectedAudienceSignatureManager(mContext, mEnrollmentDao, mEncryptionKeyDao);
+ doReturn(null)
+ .when(mEnrollmentDaoMock)
+ .getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
- List<String> signingKeys = signatureManager.fetchPublicKeyForAdTech(adTech);
+ List<byte[]> signingKeys = mNoOpSignatureManager.fetchPublicKeyForAdTech(adTech);
assertThat(signingKeys).isEqualTo(Collections.emptyList());
}
@@ -122,13 +186,10 @@ public class ProtectedAudienceSignatureManagerTest {
public void testFetchKeys_enrolledAdTechWithNullId_returnsEmptyList() {
AdTechIdentifier adTech = AdTechIdentifier.fromString("example.com");
doReturn(new EnrollmentData.Builder().build())
- .when(mEnrollmentDao)
+ .when(mEnrollmentDaoMock)
.getEnrollmentDataForFledgeByAdTechIdentifier(adTech);
- ProtectedAudienceSignatureManager signatureManager =
- new ProtectedAudienceSignatureManager(mContext, mEnrollmentDao, mEncryptionKeyDao);
-
- List<String> signingKeys = signatureManager.fetchPublicKeyForAdTech(adTech);
+ List<byte[]> signingKeys = mNoOpSignatureManager.fetchPublicKeyForAdTech(adTech);
assertThat(signingKeys).isEqualTo(Collections.emptyList());
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/SafeNoCopyByteArrayOutputStreamTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ThreadUnsafeByteArrayOutputStreamTest.java
index 2c10dbb665..8f7622fced 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/SafeNoCopyByteArrayOutputStreamTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/signature/ThreadUnsafeByteArrayOutputStreamTest.java
@@ -21,7 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import org.junit.Before;
import org.junit.Test;
-public class SafeNoCopyByteArrayOutputStreamTest {
+public class ThreadUnsafeByteArrayOutputStreamTest {
private ThreadUnsafeByteArrayOutputStream mOutputStream;
@Before
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigCallTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigCallTest.java
new file mode 100644
index 0000000000..495b5c3c83
--- /dev/null
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigCallTest.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.adservices.service.common;
+
+import static com.android.adservices.service.common.AppManifestConfigCall.API_ATTRIBUTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_CUSTOM_AUDIENCES;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_TOPICS;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_UNSPECIFIED;
+import static com.android.adservices.service.common.AppManifestConfigCall.INVALID_API_TEMPLATE;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_ALL;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_DOES_NOT_EXIST;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_BY_APP;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_GENERIC_ERROR;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_UNSPECIFIED;
+import static com.android.adservices.service.common.AppManifestConfigCall.isAllowed;
+import static com.android.adservices.service.common.AppManifestConfigCall.resultToString;
+import static com.android.adservices.service.common.AppManifestConfigCall.apiToString;
+
+import static org.junit.Assert.assertThrows;
+
+import com.android.adservices.common.AdServicesUnitTestCase;
+
+import org.junit.Test;
+
+public final class AppManifestConfigCallTest extends AdServicesUnitTestCase {
+
+ private static final String PKG_NAME = "pkg.I.am";
+ private static final String PKG_NAME2 = "or.not";
+
+ @Test
+ public void testInvalidConstructor() {
+ assertThrows(
+ NullPointerException.class,
+ () -> new AppManifestConfigCall(/* packageName= */ null, API_TOPICS));
+
+ IllegalArgumentException e =
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> new AppManifestConfigCall(PKG_NAME, API_UNSPECIFIED));
+ expect.withMessage("e.getMessage()")
+ .that(e)
+ .hasMessageThat()
+ .isEqualTo(String.format(INVALID_API_TEMPLATE, API_UNSPECIFIED));
+
+ e =
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> new AppManifestConfigCall(PKG_NAME, -42));
+ expect.withMessage("e.getMessage()")
+ .that(e)
+ .hasMessageThat()
+ .isEqualTo(String.format(INVALID_API_TEMPLATE, -42));
+ }
+
+ @Test
+ public void testValidConstructors() {
+ AppManifestConfigCall topics = new AppManifestConfigCall(PKG_NAME, API_TOPICS);
+ expect.withMessage("pkg on %s", topics).that(topics.packageName).isEqualTo(PKG_NAME);
+ expect.withMessage("api on %s", topics).that(topics.api).isEqualTo(API_TOPICS);
+
+ AppManifestConfigCall customAudience =
+ new AppManifestConfigCall(PKG_NAME, API_CUSTOM_AUDIENCES);
+ expect.withMessage("pkg on %s", customAudience)
+ .that(customAudience.packageName)
+ .isEqualTo(PKG_NAME);
+ expect.withMessage("api on %s", customAudience)
+ .that(customAudience.api)
+ .isEqualTo(API_CUSTOM_AUDIENCES);
+
+ AppManifestConfigCall attribution = new AppManifestConfigCall(PKG_NAME, API_ATTRIBUTION);
+ expect.withMessage("pkg on %s", attribution)
+ .that(attribution.packageName)
+ .isEqualTo(PKG_NAME);
+ expect.withMessage("api on %s", attribution)
+ .that(attribution.api)
+ .isEqualTo(API_ATTRIBUTION);
+ }
+
+ @Test
+ public void testEqualsHashCode() {
+ AppManifestConfigCall pkg1api1 = new AppManifestConfigCall(PKG_NAME, API_TOPICS);
+ AppManifestConfigCall pkg1api2 = new AppManifestConfigCall(PKG_NAME, API_ATTRIBUTION);
+ AppManifestConfigCall pkg2api1 = new AppManifestConfigCall(PKG_NAME2, API_TOPICS);
+ AppManifestConfigCall pkg2api2 = new AppManifestConfigCall(PKG_NAME2, API_ATTRIBUTION);
+
+ AppManifestConfigCall otherPkg1api1 = new AppManifestConfigCall(PKG_NAME, API_TOPICS);
+ AppManifestConfigCall otherPkg1api2 = new AppManifestConfigCall(PKG_NAME, API_ATTRIBUTION);
+ AppManifestConfigCall otherPkg2api1 = new AppManifestConfigCall(PKG_NAME2, API_TOPICS);
+ AppManifestConfigCall otherPkg2api2 = new AppManifestConfigCall(PKG_NAME2, API_ATTRIBUTION);
+
+ expectEquals(pkg1api1, pkg1api1);
+ expectEquals(pkg1api1, otherPkg1api1);
+ expectEquals(pkg1api2, pkg1api2);
+ expectEquals(pkg1api2, otherPkg1api2);
+ expectEquals(pkg2api1, pkg2api1);
+ expectEquals(pkg2api1, otherPkg2api1);
+ expectEquals(pkg2api2, pkg2api2);
+ expectEquals(pkg2api2, otherPkg2api2);
+
+ expectNotEquals(pkg1api1, pkg1api2);
+ expectNotEquals(pkg1api1, pkg2api1);
+ expectNotEquals(pkg1api1, pkg2api2);
+
+ // Adds result
+ otherPkg1api1.result = RESULT_ALLOWED_APP_ALLOWS_ALL;
+ expectNotEquals(pkg1api1, otherPkg1api1);
+ pkg1api1.result = RESULT_ALLOWED_APP_ALLOWS_ALL;
+ expectEquals(pkg1api1, otherPkg1api1);
+ }
+
+ private void expectEquals(AppManifestConfigCall call1, AppManifestConfigCall call2) {
+ expect.withMessage("equals()").that(call1).isEqualTo(call2);
+ expect.withMessage("equals()").that(call2).isEqualTo(call1);
+ expect.withMessage("hashcode(%s, %s)", call1, call2)
+ .that(call1.hashCode())
+ .isEqualTo(call2.hashCode());
+ }
+
+ private void expectNotEquals(AppManifestConfigCall call1, AppManifestConfigCall call2) {
+ expect.withMessage("equals()").that(call1).isNotEqualTo(call2);
+ expect.withMessage("equals()").that(call2).isNotEqualTo(call1);
+ expect.withMessage("hashcode(%s, %s)", call1, call2)
+ .that(call1.hashCode())
+ .isNotEqualTo(call2.hashCode());
+ }
+
+ @Test
+ public void testResultToString() {
+ expect.withMessage("resultToString(%s)", RESULT_UNSPECIFIED)
+ .that(resultToString(RESULT_UNSPECIFIED))
+ .isEqualTo("UNSPECIFIED");
+ expect.withMessage("resultToString(%s)", RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG)
+ .that(resultToString(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG))
+ .isEqualTo("ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG");
+ expect.withMessage(
+ "resultToString(%s)",
+ RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION)
+ .that(resultToString(RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .isEqualTo("ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION");
+ expect.withMessage("resultToString(%s)", RESULT_ALLOWED_APP_ALLOWS_ALL)
+ .that(resultToString(RESULT_ALLOWED_APP_ALLOWS_ALL))
+ .isEqualTo("ALLOWED_APP_ALLOWS_ALL");
+ expect.withMessage("resultToString(%s)", RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID)
+ .that(resultToString(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID))
+ .isEqualTo("ALLOWED_APP_ALLOWS_SPECIFIC_ID");
+ expect.withMessage("resultToString(%s)", RESULT_DISALLOWED_APP_DOES_NOT_EXIST)
+ .that(resultToString(RESULT_DISALLOWED_APP_DOES_NOT_EXIST))
+ .isEqualTo("DISALLOWED_APP_DOES_NOT_EXIST");
+ expect.withMessage("resultToString(%s)", RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR)
+ .that(resultToString(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR))
+ .isEqualTo("DISALLOWED_APP_CONFIG_PARSING_ERROR");
+ expect.withMessage("resultToString(%s)", RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG)
+ .that(resultToString(RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG))
+ .isEqualTo("DISALLOWED_APP_DOES_NOT_HAVE_CONFIG");
+ expect.withMessage(
+ "resultToString(%s)", RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION)
+ .that(resultToString(RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .isEqualTo("DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION");
+ expect.withMessage("resultToString(%s)", RESULT_DISALLOWED_BY_APP)
+ .that(resultToString(RESULT_DISALLOWED_BY_APP))
+ .isEqualTo("DISALLOWED_BY_APP");
+ expect.withMessage("resultToString(%s)", RESULT_DISALLOWED_GENERIC_ERROR)
+ .that(resultToString(RESULT_DISALLOWED_GENERIC_ERROR))
+ .isEqualTo("DISALLOWED_GENERIC_ERROR");
+ expect.withMessage("resultToString(42)").that(resultToString(42)).isEqualTo("INVALID-42");
+ }
+
+ @Test
+ public void testApiToString() {
+ expect.withMessage("apiToString(%s)", API_UNSPECIFIED)
+ .that(apiToString(API_UNSPECIFIED))
+ .isEqualTo("UNSPECIFIED");
+ expect.withMessage("apiToString(%s)", API_TOPICS)
+ .that(apiToString(API_TOPICS))
+ .isEqualTo("TOPICS");
+ expect.withMessage("apiToString(%s)", API_CUSTOM_AUDIENCES)
+ .that(apiToString(API_CUSTOM_AUDIENCES))
+ .isEqualTo("CUSTOM_AUDIENCES");
+ expect.withMessage("apiToString(%s)", API_ATTRIBUTION)
+ .that(apiToString(API_ATTRIBUTION))
+ .isEqualTo("ATTRIBUTION");
+ expect.withMessage("apiToString(42)").that(apiToString(42)).isEqualTo("INVALID-42");
+ }
+
+ @Test
+ public void testIsAllowed() {
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_UNSPECIFIED))
+ .that(isAllowed(RESULT_UNSPECIFIED))
+ .isFalse();
+ expect.withMessage(
+ "isAllowed(%s)",
+ resultToString(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG))
+ .that(isAllowed(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG))
+ .isTrue();
+ expect.withMessage(
+ "isAllowed(%s)",
+ resultToString(
+ RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .that(isAllowed(RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .isTrue();
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_ALLOWED_APP_ALLOWS_ALL))
+ .that(isAllowed(RESULT_ALLOWED_APP_ALLOWS_ALL))
+ .isTrue();
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID))
+ .that(isAllowed(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID))
+ .isTrue();
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_DISALLOWED_APP_DOES_NOT_EXIST))
+ .that(isAllowed(RESULT_DISALLOWED_APP_DOES_NOT_EXIST))
+ .isFalse();
+ expect.withMessage(
+ "isAllowed(%s)", resultToString(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR))
+ .that(isAllowed(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR))
+ .isFalse();
+ expect.withMessage(
+ "isAllowed(%s)", resultToString(RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG))
+ .that(isAllowed(RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG))
+ .isFalse();
+ expect.withMessage(
+ "isAllowed(%s)",
+ resultToString(RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .that(isAllowed(RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION))
+ .isFalse();
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_DISALLOWED_BY_APP))
+ .that(isAllowed(RESULT_DISALLOWED_BY_APP))
+ .isFalse();
+ expect.withMessage("isAllowed(%s)", resultToString(RESULT_DISALLOWED_GENERIC_ERROR))
+ .that(isAllowed(RESULT_DISALLOWED_GENERIC_ERROR))
+ .isFalse();
+ }
+}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigHelperTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigHelperTest.java
index b9adf151e1..592635a9fd 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigHelperTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigHelperTest.java
@@ -19,13 +19,16 @@ package com.android.adservices.service.common;
import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockIsAtLeastS;
import static com.android.adservices.mockito.ExtendedMockitoExpectations.doNothingOnErrorLogUtilError;
import static com.android.adservices.mockito.ExtendedMockitoExpectations.verifyErrorLogUtilError;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.appManifestConfigCall;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.APP_DOES_NOT_EXIST;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.APP_DOES_NOT_HAVE_CONFIG;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.APP_EXISTS;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.APP_HAS_CONFIG;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.ENABLED_BY_DEFAULT;
-import static com.android.adservices.service.common.AppManifestConfigMetricsLoggerTest.NOT_ENABLED_BY_DEFAULT;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_ATTRIBUTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_CUSTOM_AUDIENCES;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_TOPICS;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_ALL;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_DOES_NOT_EXIST;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_BY_APP;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__APP_MANIFEST_CONFIG_PARSING_ERROR;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__COMMON;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -82,6 +85,9 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
private static final String PACKAGE_NAME = "TEST_PACKAGE";
private static final String ENROLLMENT_ID = "ENROLLMENT_ID";
+ // Constants for generic allowed / disallowed calls - the "type" doesn't matter
+ private static final int RESULT_ALLOWED = RESULT_ALLOWED_APP_ALLOWS_ALL;
+
@Mock private AppManifestConfig mMockAppManifestConfig;
@Mock private AppManifestIncludesSdkLibraryConfig mMockSdkLibraryConfig;
@Mock private Context mMockContext;
@@ -106,14 +112,14 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
public void testIsAllowedAttributionAccess_sPlus() throws Exception {
mockGetPropertySucceeds(PACKAGE_NAME, AD_SERVICES_CONFIG_PROPERTY, RESOURCE_ID);
mockAppManifestConfigParserGetConfigSucceeds();
- mockIsAllowedAttributionAccess(ENROLLMENT_ID, true);
+ mockIsAllowedAttributionAccess(ENROLLMENT_ID, RESULT_ALLOWED);
assertWithMessage("isAllowedAttributionAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
AppManifestConfigHelper.isAllowedAttributionAccess(
PACKAGE_NAME, ENROLLMENT_ID))
.isTrue();
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ verifyLogUsage(API_ATTRIBUTION, RESULT_ALLOWED);
}
@Test
@@ -121,14 +127,14 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
mockSdkLevelR();
mockGetAssetSucceeds(PACKAGE_NAME, RESOURCE_ID);
mockAppManifestConfigParserGetConfigSucceeds();
- mockIsAllowedAttributionAccess(ENROLLMENT_ID, true);
+ mockIsAllowedAttributionAccess(ENROLLMENT_ID, RESULT_ALLOWED);
assertWithMessage("isAllowedAttributionAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
AppManifestConfigHelper.isAllowedAttributionAccess(
PACKAGE_NAME, ENROLLMENT_ID))
.isTrue();
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ verifyLogUsage(API_ATTRIBUTION, RESULT_ALLOWED);
}
@Test
@@ -136,7 +142,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
public void testIsAllowedCustomAudiencesAccess_sPlus() throws Exception {
mockGetPropertySucceeds(PACKAGE_NAME, AD_SERVICES_CONFIG_PROPERTY, RESOURCE_ID);
mockAppManifestConfigParserGetConfigSucceeds();
- mockIsAllowedCustomAudiencesAccess(ENROLLMENT_ID, true);
+ mockIsAllowedCustomAudiencesAccess(ENROLLMENT_ID, RESULT_ALLOWED);
assertWithMessage(
"isAllowedCustomAudiencesAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
@@ -144,7 +150,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
PACKAGE_NAME, ENROLLMENT_ID))
.isTrue();
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ verifyLogUsage(API_CUSTOM_AUDIENCES, RESULT_ALLOWED);
}
@Test
@@ -152,7 +158,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
mockSdkLevelR();
mockGetAssetSucceeds(PACKAGE_NAME, RESOURCE_ID);
mockAppManifestConfigParserGetConfigSucceeds();
- mockIsAllowedCustomAudiencesAccess(ENROLLMENT_ID, true);
+ mockIsAllowedCustomAudiencesAccess(ENROLLMENT_ID, RESULT_ALLOWED);
assertWithMessage(
"isAllowedCustomAudiencesAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
@@ -160,7 +166,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
PACKAGE_NAME, ENROLLMENT_ID))
.isTrue();
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ verifyLogUsage(API_CUSTOM_AUDIENCES, RESULT_ALLOWED);
}
@Test
@@ -285,7 +291,9 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
}
mockAppManifestConfigParserGetConfigSucceeds();
mockContainsSdk(ENROLLMENT_ID, containsSdk);
- mockIsAllowedTopicsAccess(ENROLLMENT_ID, topicsAllowed);
+ int result =
+ expectedAllowed ? RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID : RESULT_DISALLOWED_BY_APP;
+ mockIsAllowedTopicsAccess(ENROLLMENT_ID, result);
assertWithMessage("isAllowedTopicsAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
AppManifestConfigHelper.isAllowedTopicsAccess(
@@ -294,7 +302,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
ENROLLMENT_ID))
.isEqualTo(expectedAllowed);
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ verifyLogUsage(API_TOPICS, result);
}
@Test
@@ -306,7 +314,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
verifyErrorLogUtilErrorLogged(e, times(4)); // Called once for each API
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR);
}
@Test
@@ -318,7 +326,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
verifyErrorLogUtilErrorLogged(e, times(4)); // Called once for each API
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR);
}
@Test
@@ -332,7 +340,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
verifyErrorLogUtilErrorLogged(e, times(4)); // Called once for each API
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR);
}
@Test
@@ -346,7 +354,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
verifyErrorLogUtilErrorLogged(e, times(4)); // Called once for each API
- verifyLogUsage(APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_CONFIG_PARSING_ERROR);
}
@Test
@@ -355,8 +363,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
- verifyLogUsage(
- APP_DOES_NOT_EXIST, APP_DOES_NOT_HAVE_CONFIG, NOT_ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_DOES_NOT_EXIST);
}
@Test
@@ -366,7 +373,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
- verifyLogUsage(APP_DOES_NOT_EXIST, APP_DOES_NOT_HAVE_CONFIG, ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_DOES_NOT_EXIST);
}
@Test
@@ -377,7 +384,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
- verifyLogUsage(APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, NOT_ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG);
}
@Test
@@ -388,7 +395,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertNoAccessAllowed();
- verifyLogUsage(APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, NOT_ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_DISALLOWED_APP_DOES_NOT_HAVE_CONFIG);
}
@Test
@@ -401,7 +408,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertAllAccessAllowed();
- verifyLogUsage(APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG);
}
@Test
@@ -414,7 +421,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
assertAllAccessAllowed();
- verifyLogUsage(APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, ENABLED_BY_DEFAULT, times(4));
+ verifyLogUsageForAllApis(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG);
}
private void mockSdkLevelR() {
@@ -485,16 +492,16 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
return e;
}
- private void mockIsAllowedAttributionAccess(String partnerId, boolean value) {
- when(mMockAppManifestConfig.isAllowedAttributionAccess(partnerId)).thenReturn(value);
+ private void mockIsAllowedAttributionAccess(String partnerId, int result) {
+ when(mMockAppManifestConfig.isAllowedAttributionAccess(partnerId)).thenReturn(result);
}
- private void mockIsAllowedCustomAudiencesAccess(String partnerId, boolean value) {
- when(mMockAppManifestConfig.isAllowedCustomAudiencesAccess(partnerId)).thenReturn(value);
+ private void mockIsAllowedCustomAudiencesAccess(String partnerId, int result) {
+ when(mMockAppManifestConfig.isAllowedCustomAudiencesAccess(partnerId)).thenReturn(result);
}
- private void mockIsAllowedTopicsAccess(String partnerId, boolean value) {
- when(mMockAppManifestConfig.isAllowedTopicsAccess(partnerId)).thenReturn(value);
+ private void mockIsAllowedTopicsAccess(String partnerId, int result) {
+ when(mMockAppManifestConfig.isAllowedTopicsAccess(partnerId)).thenReturn(result);
}
private void mockContainsSdk(String partnerId, boolean value) {
@@ -549,9 +556,7 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
expect.withMessage("isAllowedTopicsAccess(ctx, %s, %s)", PACKAGE_NAME, ENROLLMENT_ID)
.that(
AppManifestConfigHelper.isAllowedTopicsAccess(
- /* useSandboxCheck= */ false,
- PACKAGE_NAME,
- ENROLLMENT_ID))
+ /* useSandboxCheck= */ false, PACKAGE_NAME, ENROLLMENT_ID))
.isTrue();
verifyErrorLogUtilErrorLogged(any(), never());
@@ -567,21 +572,23 @@ public final class AppManifestConfigHelperTest extends AdServicesExtendedMockito
mode);
}
- private void verifyLogUsage(boolean appExists, boolean appHasConfig, boolean enabledByDefault) {
- verifyLogUsage(appExists, appHasConfig, enabledByDefault, times(1));
+ private void verifyLogUsage(int api, int result) {
+ verifyLogUsage(api, result, times(1));
}
- private void verifyLogUsage(
- boolean appExists,
- boolean appHasConfig,
- boolean enabledByDefault,
- VerificationMode mode) {
- verify(
- () ->
- AppManifestConfigMetricsLogger.logUsage(
- appManifestConfigCall(
- PACKAGE_NAME, appExists, appHasConfig, enabledByDefault)),
- mode);
+ private void verifyLogUsage(int api, int result, VerificationMode mode) {
+ AppManifestConfigCall call = new AppManifestConfigCall(PACKAGE_NAME, api);
+ call.result = result;
+
+ verify(() -> AppManifestConfigMetricsLogger.logUsage(call), mode);
+ }
+
+ private void verifyLogUsageForAllApis(int result) {
+ // Cannot use anyInt() for the APIs as logUsage() uses a custom object / matcher - it would
+ // be too coplicate to create a generic one for it
+ verifyLogUsage(API_TOPICS, result, times(2));
+ verifyLogUsage(API_ATTRIBUTION, result);
+ verifyLogUsage(API_CUSTOM_AUDIENCES, result);
}
private void setEnabledByDefault(boolean value) {
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigMetricsLoggerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigMetricsLoggerTest.java
index 0f4b2795af..800027b5d5 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigMetricsLoggerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigMetricsLoggerTest.java
@@ -18,8 +18,20 @@ package com.android.adservices.service.common;
import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockErrorLogUtilWithThrowable;
import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockErrorLogUtilWithoutThrowable;
+import static com.android.adservices.mockito.ExtendedMockitoExpectations.verifyErrorLogUtilError;
+import static com.android.adservices.mockito.ExtendedMockitoExpectations.verifyErrorLogUtilErrorWithAnyException;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_ATTRIBUTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.API_TOPICS;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_ALL;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_BY_APP;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_UNSPECIFIED;
+import static com.android.adservices.service.common.AppManifestConfigCall.apiToString;
+import static com.android.adservices.service.common.AppManifestConfigCall.resultToString;
import static com.android.adservices.service.common.AppManifestConfigMetricsLogger.dump;
+import static com.android.adservices.service.common.AppManifestConfigMetricsLogger.PREFS_KEY_TEMPLATE;
import static com.android.adservices.service.common.AppManifestConfigMetricsLogger.PREFS_NAME;
+import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__APP_MANIFEST_CONFIG_LOGGING_ERROR;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__SHARED_PREF_UPDATE_FAILURE;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__SHARED_PREF_EXCEPTION;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__COMMON;
@@ -29,7 +41,7 @@ import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -37,8 +49,6 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.util.Log;
-import androidx.test.filters.FlakyTest;
-
import com.android.adservices.common.AdServicesExtendedMockitoTestCase;
import com.android.adservices.common.Nullable;
import com.android.adservices.common.SyncCallback;
@@ -46,12 +56,13 @@ import com.android.adservices.errorlogging.ErrorLogUtil;
import com.android.adservices.mockito.ExtendedMockitoExpectations.ErrorLogUtilCallback;
import com.android.adservices.service.Flags;
import com.android.adservices.service.FlagsFactory;
+import com.android.adservices.service.common.AppManifestConfigCall.ApiType;
+import com.android.adservices.service.common.AppManifestConfigCall.Result;
import com.android.adservices.shared.testing.common.DumpHelper;
import com.android.modules.utils.testing.ExtendedMockitoRule.SpyStatic;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import java.io.File;
@@ -59,6 +70,7 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
@@ -71,14 +83,11 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
private static final String PKG_NAME = "pkg.I.am";
private static final String PKG_NAME2 = "or.not";
- static final boolean APP_EXISTS = true;
- static final boolean APP_DOES_NOT_EXIST = false;
-
- static final boolean APP_HAS_CONFIG = true;
- static final boolean APP_DOES_NOT_HAVE_CONFIG = false;
+ // Generic API - exact value doesn't matter
+ private static final @ApiType int API = API_TOPICS;
- static final boolean ENABLED_BY_DEFAULT = true;
- static final boolean NOT_ENABLED_BY_DEFAULT = false;
+ private static final String KEY_PKG_NAME_API =
+ String.format(Locale.US, PREFS_KEY_TEMPLATE, PKG_NAME, API);
@Mock private Context mMockContext;
@Mock private Flags mMockFlags;
@@ -101,119 +110,79 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
public void testLogUsage_nullArgs() throws Exception {
assertThrows(
NullPointerException.class,
- () ->
- logUsageAndDontWait(
- /* packageName= */ null,
- APP_EXISTS,
- APP_HAS_CONFIG,
- ENABLED_BY_DEFAULT));
+ () -> logUsageAndDontWait(/* packageName= */ null, RESULT_ALLOWED_APP_ALLOWS_ALL));
+ }
+
+ @Test
+ public void testLogUsage_callWithInvalidResult() throws Exception {
+ AppManifestConfigCall call = new AppManifestConfigCall(PKG_NAME, API);
+ call.result = RESULT_UNSPECIFIED;
+ mPrefs.onEditThrows(); // will throw if edit() is called
+
+ AppManifestConfigMetricsLogger.logUsage(call);
+
+ verifyErrorLogUtilError(
+ AD_SERVICES_ERROR_REPORTED__ERROR_CODE__APP_MANIFEST_CONFIG_LOGGING_ERROR,
+ AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__COMMON);
+ assertEditNotCalled();
}
@Test
public void testLogUsage_firstTime() throws Exception {
- logUsageAndWait(APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
Map<String, ?> allProps = mPrefs.getAll();
assertWithMessage("allProps").that(allProps).hasSize(1);
- assertWithMessage("properties keys").that(allProps.keySet()).containsExactly(PKG_NAME);
+ assertWithMessage("properties keys")
+ .that(allProps.keySet())
+ .containsExactly(KEY_PKG_NAME_API);
}
@Test
- public void testLogUsage_secondTimeSameArgs() throws Exception {
+ public void testLogUsage_secondTimeSameResult() throws Exception {
// 1st time is fine
- logUsageAndWait(APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
// 2nd time should not call edit
mPrefs.onEditThrows(); // will throw if edit() is called
- logUsageAndDontWait(PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndDontWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
Map<String, ?> allProps = mPrefs.getAll();
assertWithMessage("allProps").that(allProps).hasSize(1);
- assertWithMessage("properties keys").that(allProps.keySet()).containsExactly(PKG_NAME);
- }
+ assertWithMessage("properties keys")
+ .that(allProps.keySet())
+ .containsExactly(KEY_PKG_NAME_API);
- @FlakyTest(bugId = 315979774, detail = "Might need to split it into multiple tests")
- @Test
- public void testLogUsage_secondTimeDifferentArgs() throws Exception {
- callOnceWithAllTrueThenSecondWith(APP_EXISTS, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(
- APP_EXISTS, APP_DOES_NOT_HAVE_CONFIG, NOT_ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(APP_DOES_NOT_EXIST, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(
- APP_DOES_NOT_EXIST, APP_HAS_CONFIG, NOT_ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(
- APP_DOES_NOT_EXIST, APP_DOES_NOT_HAVE_CONFIG, ENABLED_BY_DEFAULT);
- callOnceWithAllTrueThenSecondWith(
- APP_DOES_NOT_EXIST, APP_DOES_NOT_HAVE_CONFIG, NOT_ENABLED_BY_DEFAULT);
+ assertEditNotCalled();
}
- private void callOnceWithAllTrueThenSecondWith(
- boolean appExists, boolean appHasConfig, boolean enabledByDefault) throws Exception {
- Log.i(
- mTag,
- "callOnceWithAllTrueThenSecondWith(appExists="
- + appExists
- + ", appHasConfig="
- + appHasConfig
- + ", enabledByDefault="
- + enabledByDefault
- + ")");
- // Need to use a new prefs because it's called multiple times (so it starts in a clean
- // state) - life would be so much easier if JUnit provided an easy way to run parameterized
- // tests per method (not class)
- FakeSharedPreferences prefs = new FakeSharedPreferences();
- when(mMockContext.getSharedPreferences(any(String.class), anyInt())).thenReturn(prefs);
-
+ @Test
+ public void testLogUsage_secondTimeDifferentResult() throws Exception {
+ int result = RESULT_ALLOWED_APP_ALLOWS_ALL;
// 1st call
- Log.d(
- mTag,
- "1st call: appExists="
- + APP_EXISTS
- + ", appHasConfig="
- + APP_HAS_CONFIG
- + ", enabledByDefault="
- + ENABLED_BY_DEFAULT
- + ")");
- logUsageAndWait(prefs, PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
-
- int valueBefore = prefs.getInt(PKG_NAME, -1);
- expect.withMessage(
- "stored value of %s after 1st call (appExists=%s, appHasConfig=%s,"
- + " enabledByDefault=%s)",
- PKG_NAME, APP_EXISTS, APP_EXISTS, ENABLED_BY_DEFAULT)
+ Log.d(mTag, "1st call: result=" + result);
+ logUsageAndWait(PKG_NAME, result);
+
+ int valueBefore = mPrefs.getInt(KEY_PKG_NAME_API, RESULT_UNSPECIFIED);
+ expect.withMessage("stored value of %s after 1st call (result=%s)", PKG_NAME, result)
.that(valueBefore)
- .isNotEqualTo(-1);
+ .isEqualTo(RESULT_ALLOWED_APP_ALLOWS_ALL);
// 2nd call
- Log.d(
- mTag,
- "2nd call: appExists="
- + appExists
- + ", appHasConfig="
- + appHasConfig
- + ", enabledByDefault="
- + enabledByDefault
- + ")");
- logUsageAndWait(prefs, PKG_NAME, appExists, appHasConfig, enabledByDefault);
-
- Map<String, ?> allProps = prefs.getAll();
+ result = RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG;
+ Log.d(mTag, "2nd call: result=" + result);
+ logUsageAndWait(PKG_NAME, result);
+
+ Map<String, ?> allProps = mPrefs.getAll();
expect.withMessage("allProps").that(allProps).hasSize(1);
- expect.withMessage("properties keys").that(allProps.keySet()).containsExactly(PKG_NAME);
+ expect.withMessage("properties keys")
+ .that(allProps.keySet())
+ .containsExactly(KEY_PKG_NAME_API);
- int valueAfter = prefs.getInt(PKG_NAME, -1);
- expect.withMessage(
- "stored value of %s after 2nd call (appExists=%s, appHasConfig=%s,"
- + " enabledByDefault=%s)",
- PKG_NAME, appExists, appHasConfig, enabledByDefault)
+ int valueAfter = mPrefs.getInt(KEY_PKG_NAME_API, RESULT_UNSPECIFIED);
+ expect.withMessage("stored value of %s after 2nd call (result=%s)", PKG_NAME, result)
.that(valueAfter)
- .isNotEqualTo(-1);
- expect.withMessage(
- "stored value of %s after 2nd call (appExists=%s, appHasConfig=%s,"
- + " enabledByDefault=%s)",
- PKG_NAME, appExists, appHasConfig, enabledByDefault)
- .that(valueAfter)
- .isNotEqualTo(valueBefore);
+ .isEqualTo(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG);
}
@Test
@@ -222,7 +191,7 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
when(mMockContext.getSharedPreferences(any(String.class), anyInt())).thenThrow(exception);
- logUsageAndDontWait(PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndDontWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
mErrorLogUtilWithThrowableCallback.assertReceived(
expect,
@@ -235,7 +204,7 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
public void testLogUsage_commitFailed() throws Exception {
mPrefs.onCommitReturns(/* result= */ false);
- logUsageAndDontWait(PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndDontWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
Map<String, ?> allProps = mPrefs.getAll();
assertWithMessage("allProps").that(allProps).isEmpty();
@@ -258,7 +227,7 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
return mPrefs;
});
- logUsageAndWait(mPrefs, PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndWait(PKG_NAME, RESULT_ALLOWED_APP_ALLOWS_ALL);
assertWithMessage("execution thread")
.that(executionThread.get())
@@ -288,63 +257,58 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
@Test
public void testDump_multipleEntries() throws Exception {
- logUsageAndWait(mPrefs, PKG_NAME, APP_EXISTS, APP_HAS_CONFIG, ENABLED_BY_DEFAULT);
+ logUsageAndWait(PKG_NAME, API_TOPICS, RESULT_ALLOWED_APP_ALLOWS_ALL);
+ logUsageAndWait(PKG_NAME, API_ATTRIBUTION, RESULT_DISALLOWED_BY_APP);
logUsageAndWait(
- mPrefs,
- PKG_NAME2,
- APP_DOES_NOT_EXIST,
- APP_DOES_NOT_HAVE_CONFIG,
- NOT_ENABLED_BY_DEFAULT);
+ PKG_NAME2, API_ATTRIBUTION, RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG);
String dump = DumpHelper.dump(pw -> AppManifestConfigMetricsLogger.dump(mMockContext, pw));
+ String entry1 =
+ ".*"
+ + PKG_NAME
+ + "-"
+ + apiToString(API_TOPICS)
+ + ": "
+ + resultToString(RESULT_ALLOWED_APP_ALLOWS_ALL)
+ + ".*\n";
+ String entry2 =
+ ".*"
+ + PKG_NAME
+ + "-"
+ + apiToString(API_ATTRIBUTION)
+ + ": "
+ + resultToString(RESULT_DISALLOWED_BY_APP)
+ + ".*\n";
+ String entry3 =
+ ".*"
+ + PKG_NAME2
+ + "-"
+ + apiToString(API_ATTRIBUTION)
+ + ": "
+ + resultToString(RESULT_ALLOWED_BY_DEFAULT_APP_DOES_NOT_HAVE_CONFIG)
+ + ".*\n";
expect.withMessage("dump")
.that(dump)
.matches(
Pattern.compile(
- ".*2 entries.*\n"
- + ".*"
- + PKG_NAME
- + ":.*appExists="
- + APP_EXISTS
- + ".*appHasConfig="
- + APP_HAS_CONFIG
- + ".*enabledByDefault="
- + ENABLED_BY_DEFAULT
- + "\n"
- + ".*"
- + PKG_NAME2
- + ":.*appExists="
- + APP_DOES_NOT_EXIST
- + ".*appHasConfig="
- + APP_DOES_NOT_HAVE_CONFIG
- + ".*enabledByDefault="
- + NOT_ENABLED_BY_DEFAULT
- + "\n",
- Pattern.DOTALL));
+ ".*3 entries.*\n" + entry1 + entry2 + entry3, Pattern.DOTALL));
}
// Needs to wait until the shared prefs is committed() as it happens in a separated thread
- private void logUsageAndWait(boolean appExists, boolean appHasConfig, boolean enabledByDefault)
+ private void logUsageAndWait(String appName, @Result int callResult)
throws InterruptedException {
- logUsageAndWait(mPrefs, PKG_NAME, appExists, appHasConfig, enabledByDefault);
+ logUsageAndWait(appName, API, callResult);
}
// Needs to wait until the shared prefs is committed() as it happens in a separated thread
- private void logUsageAndWait(
- SharedPreferences prefs,
- String appName,
- boolean appExists,
- boolean appHasConfig,
- boolean enabledByDefault)
+ private void logUsageAndWait(String appName, @ApiType int api, @Result int callResult)
throws InterruptedException {
SyncOnSharedPreferenceChangeListener listener = new SyncOnSharedPreferenceChangeListener();
- prefs.registerOnSharedPreferenceChangeListener(listener);
+ mPrefs.registerOnSharedPreferenceChangeListener(listener);
try {
- AppManifestConfigCall call = new AppManifestConfigCall(appName);
- call.appExists = appExists;
- call.appHasConfig = appHasConfig;
- call.enabledByDefault = enabledByDefault;
+ AppManifestConfigCall call = new AppManifestConfigCall(appName, api);
+ call.result = callResult;
Log.v(mTag, "logUsageAndWait(call=" + call + ", listener=" + listener + ")");
AppManifestConfigMetricsLogger.logUsage(call);
@@ -357,61 +321,24 @@ public final class AppManifestConfigMetricsLoggerTest extends AdServicesExtended
// Should only be used in cases where the call is expect to not change the shared preferences
// (in which case a listener would not be called)
- private void logUsageAndDontWait(
- String appName, boolean appExists, boolean appHasConfig, boolean enabledByDefault) {
- AppManifestConfigCall call = new AppManifestConfigCall(appName);
- call.appExists = appExists;
- call.appHasConfig = appHasConfig;
- call.enabledByDefault = enabledByDefault;
+ private void logUsageAndDontWait(String appName, @Result int callResult) {
+ AppManifestConfigCall call = new AppManifestConfigCall(appName, API);
+ call.result = callResult;
Log.v(mTag, "logUsageAndDontWait(call=" + call + ")");
AppManifestConfigMetricsLogger.logUsage(call);
}
- /** Gets a custom Mockito matcher for a {@link AppManifestConfigCall}, without the result. */
- static AppManifestConfigCall appManifestConfigCall(
- String packageName, boolean appExists, boolean appHasConfig, boolean enabledByDefault) {
- return argThat(
- new AppManifestConfigCallMatcher(
- packageName, appExists, appHasConfig, enabledByDefault));
- }
-
- private static final class AppManifestConfigCallMatcher
- implements ArgumentMatcher<AppManifestConfigCall> {
-
- private final String mPackageName;
- private final boolean mAppExists;
- private final boolean mAppHasConfig;
- private final boolean mEnabledByDefault;
-
- private AppManifestConfigCallMatcher(
- String packageName,
- boolean appExists,
- boolean appHasConfig,
- boolean enabledByDefault) {
- mPackageName = packageName;
- mAppExists = appExists;
- mAppHasConfig = appHasConfig;
- mEnabledByDefault = enabledByDefault;
- }
-
- @Override
- public boolean matches(AppManifestConfigCall arg) {
- return arg != null
- && arg.packageName.equals(mPackageName)
- && arg.appExists == mAppExists
- && arg.appHasConfig == mAppHasConfig
- && arg.enabledByDefault == mEnabledByDefault;
- }
+ // Must call mPrefs.onEditThrows() first
+ private void assertEditNotCalled() {
+ sleep(
+ 1_000,
+ "waiting to make sure edit() was not called in the background (which would "
+ + "have thrown an exception)");
- @Override
- public String toString() {
- AppManifestConfigCall call = new AppManifestConfigCall(mPackageName);
- call.appExists = mAppExists;
- call.appHasConfig = mAppHasConfig;
- call.enabledByDefault = mEnabledByDefault;
-
- return call.toString() + " {NOT CHECING RESULT}";
- }
+ verifyErrorLogUtilErrorWithAnyException(
+ AD_SERVICES_ERROR_REPORTED__ERROR_CODE__SHARED_PREF_EXCEPTION,
+ AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__COMMON,
+ never());
}
// TODO(b/309857141): move to its own class / common package (it will be done in a later CL so
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigParserTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigParserTest.java
index 10fd81c8aa..724b1087c2 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigParserTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/AppManifestConfigParserTest.java
@@ -16,6 +16,12 @@
package com.android.adservices.service.common;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION;
+import static com.android.adservices.service.common.AppManifestConfigCall.RESULT_DISALLOWED_BY_APP;
+import static com.android.adservices.service.common.AppManifestConfigCall.resultToString;
+
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertThrows;
@@ -82,10 +88,10 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
// Verify Attribution tags.
expect.withMessage("getAttributionConfig().getAllowAdPartnersToAccess()")
.that(appManifestConfig.isAllowedAttributionAccess("1234"))
- .isTrue();
+ .isEqualTo(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID);
expect.withMessage("isAllowedAttributionAccess()")
.that(appManifestConfig.isAllowedAttributionAccess("108"))
- .isFalse();
+ .isEqualTo(RESULT_DISALLOWED_BY_APP);
AppManifestAttributionConfig attributionConfig = appManifestConfig.getAttributionConfig();
expect.withMessage("getAttributionConfig()").that(attributionConfig).isNotNull();
if (attributionConfig != null) {
@@ -100,7 +106,7 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
// Verify Custom Audience tags.
expect.withMessage("isAllowedCustomAudiencesAccess()")
.that(appManifestConfig.isAllowedCustomAudiencesAccess("108"))
- .isFalse();
+ .isEqualTo(RESULT_DISALLOWED_BY_APP);
AppManifestCustomAudiencesConfig customAudiencesConfig =
appManifestConfig.getCustomAudiencesConfig();
expect.withMessage("getCustomAudiencesConfig()").that(customAudiencesConfig).isNotNull();
@@ -119,10 +125,10 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
// Verify Topics tags.
expect.withMessage("1234567()")
.that(appManifestConfig.isAllowedTopicsAccess("1234567"))
- .isTrue();
+ .isEqualTo(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID);
expect.withMessage("isAllowedTopicsAccess()")
.that(appManifestConfig.isAllowedTopicsAccess("108"))
- .isFalse();
+ .isEqualTo(RESULT_DISALLOWED_BY_APP);
AppManifestTopicsConfig topicsConfig = appManifestConfig.getTopicsConfig();
expect.withMessage("getTopicsConfig()").that(topicsConfig).isNotNull();
if (topicsConfig != null) {
@@ -137,10 +143,10 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
// Verify AppId tags.
expect.withMessage("isAllowedAdIdAccess()")
.that(appManifestConfig.isAllowedAdIdAccess("42"))
- .isTrue();
+ .isEqualTo(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID);
expect.withMessage("isAllowedAdIdAccess()")
.that(appManifestConfig.isAllowedAdIdAccess("108"))
- .isFalse();
+ .isEqualTo(RESULT_DISALLOWED_BY_APP);
AppManifestAdIdConfig adIdConfig = appManifestConfig.getAdIdConfig();
expect.withMessage("getAdIdConfig()").that(adIdConfig).isNotNull();
if (adIdConfig != null) {
@@ -155,10 +161,10 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
// Verify AppSetId tags.
expect.withMessage("isAllowedAppSetIdAccess()")
.that(appManifestConfig.isAllowedAppSetIdAccess("42"))
- .isTrue();
+ .isEqualTo(RESULT_ALLOWED_APP_ALLOWS_SPECIFIC_ID);
expect.withMessage("isAllowedAppSetIdAccess()")
.that(appManifestConfig.isAllowedAppSetIdAccess("108"))
- .isFalse();
+ .isEqualTo(RESULT_DISALLOWED_BY_APP);
AppManifestAppSetIdConfig appSetIdConfig = appManifestConfig.getAppSetIdConfig();
expect.withMessage("getAppSetIdConfig()").that(appSetIdConfig).isNotNull();
if (appSetIdConfig != null) {
@@ -216,34 +222,39 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
AppManifestAttributionConfig attributionConfig = appManifestConfig.getAttributionConfig();
expect.withMessage("getAttributionConfig()").that(attributionConfig).isNull();
- expect.withMessage("isAllowedAttributionAccess()")
- .that(appManifestConfig.isAllowedAttributionAccess("not actually there"))
- .isFalse();
+ assertResult(
+ "isAllowedAttributionAccess()",
+ appManifestConfig.isAllowedAttributionAccess("not actually there"),
+ RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION);
AppManifestCustomAudiencesConfig customAudiencesConfig =
appManifestConfig.getCustomAudiencesConfig();
expect.withMessage("getCustomAudiencesConfig()").that(attributionConfig).isNull();
- expect.withMessage("isAllowedCustomAudiencesAccess()")
- .that(appManifestConfig.isAllowedCustomAudiencesAccess("not actually there"))
- .isFalse();
+ assertResult(
+ "isAllowedCustomAudiencesAccess()",
+ appManifestConfig.isAllowedCustomAudiencesAccess("not actually there"),
+ RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION);
AppManifestTopicsConfig topicsConfig = appManifestConfig.getTopicsConfig();
expect.withMessage("getTopicsConfig()").that(topicsConfig).isNull();
- expect.withMessage("isAllowedTopicsAccess()")
- .that(appManifestConfig.isAllowedTopicsAccess("not actually there"))
- .isFalse();
+ assertResult(
+ "isAllowedTopicsAccess()",
+ appManifestConfig.isAllowedTopicsAccess("not actually there"),
+ RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION);
AppManifestAdIdConfig adIdConfig = appManifestConfig.getAdIdConfig();
expect.withMessage("getAdIdConfig()").that(adIdConfig).isNull();
- expect.withMessage("isAllowedAdIdAccess()")
- .that(appManifestConfig.isAllowedAdIdAccess("not actually there"))
- .isFalse();
+ assertResult(
+ "isAllowedAdIdAccess()",
+ appManifestConfig.isAllowedTopicsAccess("not actually there"),
+ RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION);
AppManifestAppSetIdConfig appSetIdConfig = appManifestConfig.getAppSetIdConfig();
expect.withMessage("getAppSetIdConfig()").that(appSetIdConfig).isNull();
- expect.withMessage("isAllowedAppSetIdAccess()")
- .that(appManifestConfig.isAllowedAppSetIdAccess("not actually there"))
- .isFalse();
+ assertResult(
+ "isAllowedAppSetIdAccess()",
+ appManifestConfig.isAllowedAppSetIdAccess("not actually there"),
+ RESULT_DISALLOWED_APP_HAS_CONFIG_WITHOUT_API_SECTION);
}
@Test
@@ -254,16 +265,21 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.getXml(R.xml.ad_services_config_missing_tags);
AppManifestConfig appManifestConfig =
AppManifestConfigParser.getConfig(parser, /* enabledByDefault= */ true);
- assertWithMessage("manifest for ad_services_config_all_false_missing_attribution")
+ assertWithMessage("manifest for ad_services_config_missing_tags")
.that(appManifestConfig)
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsDefault(appManifestConfig);
- assertCustomAudiencesConfigIsDefault(appManifestConfig);
- assertTopicsConfigIsDefault(appManifestConfig);
- assertAdIdConfigIsDefault(appManifestConfig);
- assertAppSetIdConfigIsDefault(appManifestConfig);
+ assertAttributionConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertCustomAudienceConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertTopicsConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertAdIdConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertAppSetIdConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
}
@Test
@@ -279,11 +295,12 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsDefault(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -299,11 +316,12 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsDefault(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -319,11 +337,12 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsDefault(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -339,11 +358,13 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsDefault(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -359,11 +380,12 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsDefault(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(
+ appManifestConfig, RESULT_ALLOWED_BY_DEFAULT_APP_HAS_CONFIG_WITHOUT_API_SECTION);
}
@Test
@@ -379,11 +401,11 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ true);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -415,11 +437,11 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.that(sdkLibrary.contains("4815162342"))
.isFalse();
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -434,11 +456,11 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
.isNotNull();
assertSdkLibraryConfigIsEmpty(appManifestConfig, /* containsByDefault= */ false);
- assertAttributionConfigIsFalse(appManifestConfig);
- assertCustomAudiencesConfigIsFalse(appManifestConfig);
- assertTopicsConfigIsFalse(appManifestConfig);
- assertAdIdConfigIsFalse(appManifestConfig);
- assertAppSetIdConfigIsFalse(appManifestConfig);
+ assertAttributionConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertCustomAudienceConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertTopicsConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAdIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
+ assertAppSetIdConfigIsAllowed(appManifestConfig, RESULT_DISALLOWED_BY_APP);
}
@Test
@@ -517,86 +539,46 @@ public final class AppManifestConfigParserTest extends AdServicesUnitTestCase {
}
}
- private void assertAttributionConfigIsDefault(AppManifestConfig appManifestConfig) {
- AppManifestAttributionConfig attributionConfig = appManifestConfig.getAttributionConfig();
- assertApiConfigIsDefault("getAttributionConfig()", attributionConfig);
- expect.withMessage("isAllowedAttributionAccess()")
- .that(appManifestConfig.isAllowedAttributionAccess("not actually there"))
- .isTrue();
- }
-
- private void assertAttributionConfigIsFalse(AppManifestConfig appManifestConfig) {
- AppManifestAttributionConfig attributionConfig = appManifestConfig.getAttributionConfig();
- assertApiConfigIsFalse("getAttributionConfig()", attributionConfig);
- expect.withMessage("isAllowedAttributionAccess()")
- .that(appManifestConfig.isAllowedAttributionAccess("not actually there"))
- .isFalse();
- }
-
- private void assertCustomAudiencesConfigIsDefault(AppManifestConfig appManifestConfig) {
- AppManifestCustomAudiencesConfig customAudiencesConfig =
- appManifestConfig.getCustomAudiencesConfig();
- assertApiConfigIsDefault("getCustomAudiencesConfig()", customAudiencesConfig);
- expect.withMessage("isAllowedCustomAudiencesAccess()")
- .that(appManifestConfig.isAllowedCustomAudiencesAccess("not actually there"))
- .isTrue();
+ private void assertResult(String method, int actualResult, int expectedResult) {
+ expect.withMessage(
+ "%s (where %s=%s and %s=%s)",
+ method,
+ actualResult,
+ resultToString(actualResult),
+ expectedResult,
+ resultToString(expectedResult))
+ .that(actualResult)
+ .isEqualTo(expectedResult);
}
- private void assertCustomAudiencesConfigIsFalse(AppManifestConfig appManifestConfig) {
- AppManifestCustomAudiencesConfig customAudiencesConfig =
- appManifestConfig.getCustomAudiencesConfig();
- assertApiConfigIsFalse("getCustomAudiencesConfig()", customAudiencesConfig);
- expect.withMessage("isAllowedCustomAudiencesAccess()")
- .that(appManifestConfig.isAllowedCustomAudiencesAccess("not actually there"))
- .isFalse();
+ private void assertAttributionConfigIsAllowed(
+ AppManifestConfig appManifestConfig, int expectedResult) {
+ int actualResult = appManifestConfig.isAllowedAttributionAccess("not actually there");
+ assertResult("getAttributionConfig()", actualResult, expectedResult);
}
- private void assertTopicsConfigIsDefault(AppManifestConfig appManifestConfig) {
- AppManifestTopicsConfig topicsConfig = appManifestConfig.getTopicsConfig();
- assertApiConfigIsDefault("getTopicsConfig()", topicsConfig);
- expect.withMessage("isAllowedTopicsAccess()")
- .that(appManifestConfig.isAllowedTopicsAccess("not actually there"))
- .isTrue();
+ private void assertCustomAudienceConfigIsAllowed(
+ AppManifestConfig appManifestConfig, int expectedResult) {
+ int actualResult = appManifestConfig.isAllowedCustomAudiencesAccess("not actually there");
+ assertResult("getCustomAudiencesConfig()", actualResult, expectedResult);
}
- private void assertTopicsConfigIsFalse(AppManifestConfig appManifestConfig) {
- AppManifestTopicsConfig topicsConfig = appManifestConfig.getTopicsConfig();
- assertApiConfigIsFalse("getTopicsConfig()", topicsConfig);
- expect.withMessage("isAllowedTopicsAccess()")
- .that(appManifestConfig.isAllowedTopicsAccess("not actually there"))
- .isFalse();
+ private void assertTopicsConfigIsAllowed(
+ AppManifestConfig appManifestConfig, int expectedResult) {
+ int actualResult = appManifestConfig.isAllowedTopicsAccess("not actually there");
+ assertResult("getTopicsConfig()", actualResult, expectedResult);
}
- private void assertAdIdConfigIsDefault(AppManifestConfig appManifestConfig) {
- AppManifestAdIdConfig adIdConfig = appManifestConfig.getAdIdConfig();
- assertApiConfigIsDefault("getAdIdConfig()", adIdConfig);
- expect.withMessage("isAllowedAdIdAccess()")
- .that(appManifestConfig.isAllowedAdIdAccess("not actually there"))
- .isTrue();
- }
-
- private void assertAdIdConfigIsFalse(AppManifestConfig appManifestConfig) {
- AppManifestAdIdConfig adIdConfig = appManifestConfig.getAdIdConfig();
- assertApiConfigIsFalse("getAdIdConfig()", adIdConfig);
- expect.withMessage("isAllowedAdIdAccess()")
- .that(appManifestConfig.isAllowedAdIdAccess("not actually there"))
- .isFalse();
+ private void assertAdIdConfigIsAllowed(
+ AppManifestConfig appManifestConfig, int expectedResult) {
+ int actualResult = appManifestConfig.isAllowedAdIdAccess("not actually there");
+ assertResult("getAdIdConfig()", actualResult, expectedResult);
}
- private void assertAppSetIdConfigIsDefault(AppManifestConfig appManifestConfig) {
- AppManifestAppSetIdConfig appSetIdConfig = appManifestConfig.getAppSetIdConfig();
- assertApiConfigIsDefault("getAppSetIdConfig()", appSetIdConfig);
- expect.withMessage("isAllowedAppSetIdAccess()")
- .that(appManifestConfig.isAllowedAppSetIdAccess("not actually there"))
- .isTrue();
- }
-
- private void assertAppSetIdConfigIsFalse(AppManifestConfig appManifestConfig) {
- AppManifestAppSetIdConfig appSetIdConfig = appManifestConfig.getAppSetIdConfig();
- assertApiConfigIsFalse("getAppSetIdConfig()", appSetIdConfig);
- expect.withMessage("isAllowedAppSetIdAccess()")
- .that(appManifestConfig.isAllowedAppSetIdAccess("not actually there"))
- .isFalse();
+ private void assertAppSetIdConfigIsAllowed(
+ AppManifestConfig appManifestConfig, int expectedResult) {
+ int actualResult = appManifestConfig.isAllowedAppSetIdAccess("not actually there");
+ assertResult("getAppSetIdConfig()", actualResult, expectedResult);
}
private void assertApiConfigIsDefault(String name, AppManifestApiConfig config) {
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeAuthorizationFilterTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeAuthorizationFilterTest.java
index c4c187946e..5460b2273e 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeAuthorizationFilterTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeAuthorizationFilterTest.java
@@ -17,7 +17,6 @@
package com.android.adservices.service.common;
import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE;
-import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_PROTECTED_SIGNALS;
import static android.adservices.common.AdServicesStatusUtils.STATUS_CALLER_NOT_ALLOWED;
import static android.adservices.common.AdServicesStatusUtils.STATUS_PERMISSION_NOT_REQUESTED;
import static android.adservices.common.AdServicesStatusUtils.STATUS_UNAUTHORIZED;
@@ -165,7 +164,7 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
}
@Test
- public void testAssertAppHasCaPermission_appHasPermission()
+ public void testAssertAppHasPermission_appHasPermission()
throws PackageManager.NameNotFoundException {
PackageInfo packageInfoGrant = new PackageInfo();
packageInfoGrant.requestedPermissions = new String[] {ACCESS_ADSERVICES_CUSTOM_AUDIENCE};
@@ -177,26 +176,7 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
when(PermissionHelper.hasCustomAudiencesPermission(CONTEXT, CONTEXT.getPackageName()))
.thenReturn(true);
- mChecker.assertAppDeclaredCustomAudiencePermission(
- CONTEXT, CustomAudienceFixture.VALID_OWNER, API_NAME_LOGGING_ID);
-
- verifyZeroInteractions(mPackageManagerMock, mEnrollmentDaoMock, mAdServicesLoggerMock);
- }
-
- @Test
- public void testAssertAppHasPasPermission_appHasPermission()
- throws PackageManager.NameNotFoundException {
- PackageInfo packageInfoGrant = new PackageInfo();
- packageInfoGrant.requestedPermissions = new String[] {ACCESS_ADSERVICES_PROTECTED_SIGNALS};
- doReturn(packageInfoGrant)
- .when(mPackageManagerMock)
- .getPackageInfo(
- eq(CustomAudienceFixture.VALID_OWNER), eq(PackageManager.GET_PERMISSIONS));
-
- when(PermissionHelper.hasProtectedSignalsPermission(CONTEXT, CONTEXT.getPackageName()))
- .thenReturn(true);
-
- mChecker.assertAppDeclaredProtectedSignalsPermission(
+ mChecker.assertAppDeclaredPermission(
CONTEXT, CustomAudienceFixture.VALID_OWNER, API_NAME_LOGGING_ID);
verifyZeroInteractions(mPackageManagerMock, mEnrollmentDaoMock, mAdServicesLoggerMock);
@@ -216,7 +196,7 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
assertThrows(
SecurityException.class,
() ->
- mChecker.assertAppDeclaredCustomAudiencePermission(
+ mChecker.assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
API_NAME_LOGGING_ID));
@@ -232,7 +212,7 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
}
@Test
- public void testAssertAppHasCaPermission_mismatchedAppPackageName_throwSecurityException()
+ public void testAssertAppHasPermission_mismatchedAppPackageName_throwSecurityException()
throws PackageManager.NameNotFoundException {
doReturn(new PackageInfo())
.when(mPackageManagerMock)
@@ -245,34 +225,7 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
assertThrows(
SecurityException.class,
() ->
- mChecker.assertAppDeclaredCustomAudiencePermission(
- CONTEXT, "mismatchedAppPackageName", API_NAME_LOGGING_ID));
-
- assertEquals(
- AdServicesStatusUtils.SECURITY_EXCEPTION_PERMISSION_NOT_REQUESTED_ERROR_MESSAGE,
- exception.getMessage());
- verify(mAdServicesLoggerMock)
- .logFledgeApiCallStats(
- eq(API_NAME_LOGGING_ID), eq(STATUS_PERMISSION_NOT_REQUESTED), anyInt());
- verifyNoMoreInteractions(mAdServicesLoggerMock);
- verifyZeroInteractions(mPackageManagerMock, mEnrollmentDaoMock);
- }
-
- @Test
- public void testAssertAppHasPasPermission_mismatchedAppPackageName_throwSecurityException()
- throws PackageManager.NameNotFoundException {
- doReturn(new PackageInfo())
- .when(mPackageManagerMock)
- .getPackageInfo(
- eq(CustomAudienceFixture.VALID_OWNER), eq(PackageManager.GET_PERMISSIONS));
- when(PermissionHelper.hasProtectedSignalsPermission(CONTEXT, CONTEXT.getPackageName()))
- .thenReturn(false);
-
- SecurityException exception =
- assertThrows(
- SecurityException.class,
- () ->
- mChecker.assertAppDeclaredProtectedSignalsPermission(
+ mChecker.assertAppDeclaredPermission(
CONTEXT, "mismatchedAppPackageName", API_NAME_LOGGING_ID));
assertEquals(
@@ -286,22 +239,11 @@ public final class FledgeAuthorizationFilterTest extends AdServicesExtendedMocki
}
@Test
- public void testAssertAppHasCaPermission_nullContext_throwNpe() {
- assertThrows(
- NullPointerException.class,
- () ->
- mChecker.assertAppDeclaredCustomAudiencePermission(
- null, CustomAudienceFixture.VALID_OWNER, API_NAME_LOGGING_ID));
-
- verifyZeroInteractions(mPackageManagerMock, mEnrollmentDaoMock, mAdServicesLoggerMock);
- }
-
- @Test
- public void testAssertAppHasPasPermission_nullContext_throwNpe() {
+ public void testAssertAppHasPermission_nullContext_throwNpe() {
assertThrows(
NullPointerException.class,
() ->
- mChecker.assertAppDeclaredProtectedSignalsPermission(
+ mChecker.assertAppDeclaredPermission(
null, CustomAudienceFixture.VALID_OWNER, API_NAME_LOGGING_ID));
verifyZeroInteractions(mPackageManagerMock, mEnrollmentDaoMock, mAdServicesLoggerMock);
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeE2ETest.java
index e0cd178463..8e77cfdc3d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/FledgeE2ETest.java
@@ -122,7 +122,6 @@ import com.android.adservices.data.adselection.AdSelectionServerDatabase;
import com.android.adservices.data.adselection.AppInstallDao;
import com.android.adservices.data.adselection.DBAdSelectionDebugReport;
import com.android.adservices.data.adselection.EncryptionContextDao;
-import com.android.adservices.data.adselection.EncryptionKeyDao;
import com.android.adservices.data.adselection.FrequencyCapDao;
import com.android.adservices.data.adselection.SharedStorageDatabase;
import com.android.adservices.data.common.DBAdData;
@@ -132,6 +131,8 @@ import com.android.adservices.data.customaudience.CustomAudienceDao;
import com.android.adservices.data.customaudience.CustomAudienceDatabase;
import com.android.adservices.data.customaudience.DBCustomAudience;
import com.android.adservices.data.customaudience.DBTrustedBiddingData;
+import com.android.adservices.data.encryptionkey.EncryptionKeyDao;
+import com.android.adservices.data.enrollment.EnrollmentDao;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.ProtectedSignalsDatabase;
import com.android.adservices.service.Flags;
@@ -323,6 +324,7 @@ public class FledgeE2ETest {
private AppInstallDao mAppInstallDao;
private FrequencyCapDao mFrequencyCapDao;
private EncryptionKeyDao mEncryptionKeyDao;
+ private EnrollmentDao mEnrollmentDao;
private EncryptionContextDao mEncryptionContextDao;
private ExecutorService mLightweightExecutorService;
private ExecutorService mBackgroundExecutorService;
@@ -389,8 +391,8 @@ public class FledgeE2ETest {
mFrequencyCapDao = sharedDb.frequencyCapDao();
AdSelectionServerDatabase serverDb =
Room.inMemoryDatabaseBuilder(CONTEXT_SPY, AdSelectionServerDatabase.class).build();
- mEncryptionContextDao = serverDb.encryptionContextDao();
- mEncryptionKeyDao = serverDb.encryptionKeyDao();
+ mEncryptionKeyDao = EncryptionKeyDao.getInstance(CONTEXT_SPY);
+ mEnrollmentDao = EnrollmentDao.getInstance(CONTEXT_SPY);
mAdFilteringFeatureFactory =
new AdFilteringFeatureFactory(mAppInstallDao, mFrequencyCapDao, DEFAULT_FLAGS);
@@ -1232,8 +1234,8 @@ public class FledgeE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -1393,8 +1395,8 @@ public class FledgeE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -2990,6 +2992,35 @@ public class FledgeE2ETest {
@Test
public void testFledgeFlowSuccessWithMockServer_ContextualAdsFlow() throws Exception {
+ // Reinitializing service so default flags are used
+ // Create an instance of AdSelection Service with real dependencies
+ mAdSelectionService =
+ new AdSelectionServiceImpl(
+ mAdSelectionEntryDao,
+ mAppInstallDao,
+ mCustomAudienceDao,
+ mEncodedPayloadDao,
+ mFrequencyCapDao,
+ mEncryptionKeyDao,
+ mEnrollmentDao,
+ mAdServicesHttpsClient,
+ mDevContextFilterMock,
+ mLightweightExecutorService,
+ mBackgroundExecutorService,
+ mScheduledExecutor,
+ CONTEXT_SPY,
+ mAdServicesLogger,
+ DEFAULT_FLAGS,
+ CallingAppUidSupplierProcessImpl.create(),
+ mFledgeAuthorizationFilterMock,
+ mAdSelectionServiceFilterMock,
+ mAdFilteringFeatureFactory,
+ mConsentManagerMock,
+ mObliviousHttpEncryptorMock,
+ mAdSelectionDebugReportDao,
+ mAdIdFetcher,
+ false);
+
doReturn(AdServicesApiConsent.GIVEN)
.when(mConsentManagerMock)
.getConsent(AdServicesApiType.FLEDGE);
@@ -4335,8 +4366,8 @@ public class FledgeE2ETest {
mCustomAudienceDao,
mEncodedPayloadDao,
mFrequencyCapDao,
- mEncryptionContextDao,
mEncryptionKeyDao,
+ mEnrollmentDao,
mAdServicesHttpsClient,
mDevContextFilterMock,
mLightweightExecutorService,
@@ -4955,11 +4986,12 @@ public class FledgeE2ETest {
AdTechIdentifier.fromString(
mockWebServerRule.uriForPath(BUYER_BIDDING_LOGIC_URI_PATH).getHost());
SignedContextualAds contextualAds =
- SignedContextualAdsFixture.generateSignedContextualAds(
- buyer, ImmutableList.of(100.0, 200.0, 300.0, 400.0, 500.0))
- .setDecisionLogicUri(
- mockWebServerRule.uriForPath(BUYER_BIDDING_LOGIC_URI_PATH))
- .build();
+ SignedContextualAdsFixture.signContextualAds(
+ SignedContextualAdsFixture.aContextualAdsWithEmptySignatureBuilder(
+ buyer, ImmutableList.of(100.0, 200.0, 300.0, 400.0, 500.0))
+ .setDecisionLogicUri(
+ mockWebServerRule.uriForPath(
+ BUYER_BIDDING_LOGIC_URI_PATH)));
buyerContextualAds.put(buyer, contextualAds);
return buyerContextualAds;
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PackageChangedReceiverTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PackageChangedReceiverTest.java
index 03635db388..7c4f4297c4 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PackageChangedReceiverTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PackageChangedReceiverTest.java
@@ -16,6 +16,8 @@
package com.android.adservices.service.common;
+import static android.adservices.common.CommonFixture.doSleep;
+
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyInt;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyLong;
@@ -64,6 +66,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.modules.utils.build.SdkLevel;
import org.junit.After;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -326,6 +329,7 @@ public class PackageChangedReceiverTest {
@Test
public void testReceivePackageFullyRemoved_consent_noPackageUid()
throws InterruptedException, IOException {
+ Assume.assumeTrue(SdkLevel.isAtLeastS());
Intent intent =
createIntentSentByAdServiceSystemService(
PackageChangedReceiver.PACKAGE_FULLY_REMOVED);
@@ -342,6 +346,7 @@ public class PackageChangedReceiverTest {
@Test
public void testReceivePackageFullyRemoved_consent_packageUidIsExplicitlyDefault()
throws InterruptedException, IOException {
+ Assume.assumeTrue(SdkLevel.isAtLeastS());
Intent intent =
createIntentSentByAdServiceSystemService(
PackageChangedReceiver.PACKAGE_FULLY_REMOVED);
@@ -354,6 +359,7 @@ public class PackageChangedReceiverTest {
@Test
public void testReceivePackageFullyRemoved_consent_noPackageUid_backCompat()
throws InterruptedException, IOException {
+ Assume.assumeTrue(SdkLevel.isAtLeastS());
Intent intent = createIntentSentBySystem(Intent.ACTION_PACKAGE_FULLY_REMOVED);
intent.removeExtra(Intent.EXTRA_UID);
@@ -364,6 +370,7 @@ public class PackageChangedReceiverTest {
@Test
public void testReceivePackageFullyRemoved_consent_packageUidIsExplicitlyDefault_backCompat()
throws InterruptedException, IOException {
+ Assume.assumeTrue(SdkLevel.isAtLeastS());
Intent intent = createIntentSentBySystem(Intent.ACTION_PACKAGE_FULLY_REMOVED);
intent.putExtra(Intent.EXTRA_UID, DEFAULT_PACKAGE_UID);
@@ -711,6 +718,7 @@ public class PackageChangedReceiverTest {
}
private void runPackageFullyRemovedForConsent(Intent intent) throws Exception {
+ Assume.assumeTrue(SdkLevel.isAtLeastS());
// Start a mockitoSession to mock static method
// Lenient added to allow easy disabling of other APIs' methods
MockitoSession session =
@@ -1159,4 +1167,35 @@ public class PackageChangedReceiverTest {
mMockitoSession.finishMocking();
}
}
+
+ @Test
+ public void testAppConsentDeletion_onR() throws Exception {
+ MockitoSession mMockitoSession =
+ ExtendedMockito.mockitoSession()
+ .mockStatic(SdkLevel.class)
+ .mockStatic(ConsentManager.class)
+ .strictness(Strictness.LENIENT)
+ .initMocks(this)
+ .startMocking();
+ try {
+ ExtendedMockito.doReturn(false).when(SdkLevel::isAtLeastS);
+ doReturn(mConsentManager).when(() -> ConsentManager.getInstance(any()));
+ PackageChangedReceiver spyReceiver = createSpyPackageReceiverForConsent();
+ Intent intent =
+ createIntentSentByAdServiceSystemService(
+ PackageChangedReceiver.PACKAGE_FULLY_REMOVED);
+ doReturn(false).when(spyReceiver).isPackageStillInstalled(any(), anyString());
+
+ // Invoke the onReceive method to test the behavior
+ spyReceiver.onReceive(sContext, intent);
+
+ verify(spyReceiver).consentOnPackageFullyRemoved(any(), any(), anyInt());
+ doSleep(BACKGROUND_THREAD_TIMEOUT_MS);
+
+ // On R App consent clear should not be called as it is not supported
+ verify(mConsentManager, never()).clearConsentForUninstalledApp(any(), anyInt());
+ } finally {
+ mMockitoSession.finishMocking();
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PermissionHelperTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PermissionHelperTest.java
index e723d48ab8..652ba36e6b 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PermissionHelperTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/common/PermissionHelperTest.java
@@ -19,7 +19,6 @@ package com.android.adservices.service.common;
import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID;
import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION;
import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE;
-import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_PROTECTED_SIGNALS;
import static android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS;
import static com.google.common.truth.Truth.assertThat;
@@ -67,8 +66,7 @@ public class PermissionHelperTest {
ACCESS_ADSERVICES_TOPICS,
ACCESS_ADSERVICES_AD_ID,
ACCESS_ADSERVICES_ATTRIBUTION,
- ACCESS_ADSERVICES_CUSTOM_AUDIENCE,
- ACCESS_ADSERVICES_PROTECTED_SIGNALS
+ ACCESS_ADSERVICES_CUSTOM_AUDIENCE
};
doReturn(packageInfoGrant)
.when(mMockPackageManagerGrant)
@@ -170,10 +168,6 @@ public class PermissionHelperTest {
getMockContext(ACCESS_ADSERVICES_CUSTOM_AUDIENCE, mMockPackageManagerGrant);
assertThat(PermissionHelper.hasCustomAudiencesPermission(mockContext3, APP_PACKAGE_NAME))
.isTrue();
- Context mockContext4 =
- getMockContext(ACCESS_ADSERVICES_PROTECTED_SIGNALS, mMockPackageManagerGrant);
- assertThat(PermissionHelper.hasProtectedSignalsPermission(mockContext4, APP_PACKAGE_NAME))
- .isTrue();
}
@Test
@@ -191,8 +185,6 @@ public class PermissionHelperTest {
.isFalse();
assertThat(PermissionHelper.hasCustomAudiencesPermission(mockContext, APP_PACKAGE_NAME))
.isFalse();
- assertThat(PermissionHelper.hasProtectedSignalsPermission(mockContext, APP_PACKAGE_NAME))
- .isFalse();
assertThat(PermissionHelper.hasAccessAdServicesStatePermission(mockContext)).isFalse();
assertThat(PermissionHelper.hasModifyAdServicesStatePermission(mockContext)).isFalse();
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/consent/ConsentMigrationUtilsTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/consent/ConsentMigrationUtilsTest.java
index 3525f21ad4..fd4e96d756 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/consent/ConsentMigrationUtilsTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/consent/ConsentMigrationUtilsTest.java
@@ -24,6 +24,7 @@ import static android.adservices.extdata.AdServicesExtDataParams.STATE_UNKNOWN;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.never;
@@ -42,6 +43,8 @@ import com.android.adservices.data.common.BooleanFileDatastore;
import com.android.adservices.mockito.AdServicesExtendedMockitoRule;
import com.android.adservices.service.appsearch.AppSearchConsentManager;
import com.android.adservices.service.extdata.AdServicesExtDataStorageServiceManager;
+import com.android.adservices.service.stats.ConsentMigrationStats;
+import com.android.adservices.service.stats.StatsdAdServicesLogger;
import com.android.modules.utils.build.SdkLevel;
import org.junit.Rule;
@@ -68,9 +71,14 @@ public class ConsentMigrationUtilsTest {
.setManualInteractionWithConsentStatus(STATE_UNKNOWN)
.build();
+ private static final int REGION_ROW_CODE = 2;
+
@Rule
public final AdServicesExtendedMockitoRule mExtendedMockitoRule =
- new AdServicesExtendedMockitoRule.Builder(this).spyStatic(SdkLevel.class).build();
+ new AdServicesExtendedMockitoRule.Builder(this)
+ .spyStatic(SdkLevel.class)
+ .spyStatic(DeviceRegionProvider.class)
+ .build();
@Spy private final Context mContextSpy = ApplicationProvider.getApplicationContext();
@Mock private BooleanFileDatastore mDatastoreMock;
@@ -79,6 +87,7 @@ public class ConsentMigrationUtilsTest {
@Mock private SharedPreferences mSharedPreferencesMock;
@Mock private SharedPreferences.Editor mSharedPreferencesEditorMock;
@Mock private AdServicesExtDataParams mAdServicesExtDataParamsMock;
+ @Mock private StatsdAdServicesLogger mStatsdAdServicesLoggerMock;
@Test
public void testHandleConsentMigrationToAppSearchIfNeeded_onR_skipsMigration() {
@@ -89,10 +98,12 @@ public class ConsentMigrationUtilsTest {
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verifyZeroInteractions(mAppSearchConsentManagerMock);
verifyZeroInteractions(mAdServicesExtDataManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -103,10 +114,12 @@ public class ConsentMigrationUtilsTest {
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verifyZeroInteractions(mAppSearchConsentManagerMock);
verifyZeroInteractions(mAdServicesExtDataManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -115,10 +128,15 @@ public class ConsentMigrationUtilsTest {
mockSDevice();
ConsentMigrationUtils.handleConsentMigrationToAppSearchIfNeeded(
- mContextSpy, mDatastoreMock, mAppSearchConsentManagerMock, null);
+ mContextSpy,
+ mDatastoreMock,
+ mAppSearchConsentManagerMock,
+ null,
+ mStatsdAdServicesLoggerMock);
verifyZeroInteractions(mAdServicesExtDataManagerMock);
verifyZeroInteractions(mAppSearchConsentManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -136,10 +154,12 @@ public class ConsentMigrationUtilsTest {
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verifyZeroInteractions(mAppSearchConsentManagerMock);
verifyZeroInteractions(mAdServicesExtDataManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -157,12 +177,14 @@ public class ConsentMigrationUtilsTest {
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verify(mAppSearchConsentManagerMock).wasU18NotificationDisplayed();
verifyNoMoreInteractions(mAppSearchConsentManagerMock);
verifyZeroInteractions(mAdServicesExtDataManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -183,7 +205,8 @@ public class ConsentMigrationUtilsTest {
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verify(mAppSearchConsentManagerMock).wasU18NotificationDisplayed();
verify(mAppSearchConsentManagerMock).wasGaUxNotificationDisplayed();
@@ -192,6 +215,7 @@ public class ConsentMigrationUtilsTest {
verify(mAdServicesExtDataManagerMock).getAdServicesExtData();
verifyNoMoreInteractions(mAdServicesExtDataManagerMock);
+ verifyZeroInteractions(mStatsdAdServicesLoggerMock);
}
@Test
@@ -211,11 +235,14 @@ public class ConsentMigrationUtilsTest {
when(mSharedPreferencesMock.edit()).thenReturn(mSharedPreferencesEditorMock);
when(mSharedPreferencesEditorMock.commit()).thenReturn(true);
+ doReturn(false).when(() -> DeviceRegionProvider.isEuDevice(any()));
+
ConsentMigrationUtils.handleConsentMigrationToAppSearchIfNeeded(
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verify(mAppSearchConsentManagerMock).wasU18NotificationDisplayed();
verify(mAppSearchConsentManagerMock).wasGaUxNotificationDisplayed();
@@ -241,6 +268,21 @@ public class ConsentMigrationUtilsTest {
verify(mAdServicesExtDataManagerMock).getAdServicesExtData();
verify(mAdServicesExtDataManagerMock).clearDataOnOtaAsync();
verifyNoMoreInteractions(mAdServicesExtDataManagerMock);
+
+ ConsentMigrationStats consentMigrationStats =
+ ConsentMigrationStats.builder()
+ .setTopicsConsent(false)
+ .setFledgeConsent(false)
+ .setMsmtConsent(false)
+ .setDefaultConsent(true)
+ .setMigrationStatus(
+ ConsentMigrationStats.MigrationStatus
+ .SUCCESS_WITH_SHARED_PREF_UPDATED)
+ .setMigrationType(
+ ConsentMigrationStats.MigrationType.ADEXT_SERVICE_TO_APPSEARCH)
+ .setRegion(REGION_ROW_CODE)
+ .build();
+ verify(mStatsdAdServicesLoggerMock).logConsentMigrationStats(consentMigrationStats);
}
@Test
@@ -260,11 +302,14 @@ public class ConsentMigrationUtilsTest {
when(mSharedPreferencesMock.edit()).thenReturn(mSharedPreferencesEditorMock);
when(mSharedPreferencesEditorMock.commit()).thenReturn(false);
+ doReturn(false).when(() -> DeviceRegionProvider.isEuDevice(any()));
+
ConsentMigrationUtils.handleConsentMigrationToAppSearchIfNeeded(
mContextSpy,
mDatastoreMock,
mAppSearchConsentManagerMock,
- mAdServicesExtDataManagerMock);
+ mAdServicesExtDataManagerMock,
+ mStatsdAdServicesLoggerMock);
verify(mAppSearchConsentManagerMock).wasU18NotificationDisplayed();
verify(mAppSearchConsentManagerMock).wasGaUxNotificationDisplayed();
@@ -291,6 +336,21 @@ public class ConsentMigrationUtilsTest {
verify(mAdServicesExtDataManagerMock).getAdServicesExtData();
verify(mAdServicesExtDataManagerMock).clearDataOnOtaAsync();
verifyNoMoreInteractions(mAdServicesExtDataManagerMock);
+
+ ConsentMigrationStats consentMigrationStats =
+ ConsentMigrationStats.builder()
+ .setTopicsConsent(false)
+ .setFledgeConsent(false)
+ .setMsmtConsent(true)
+ .setDefaultConsent(false)
+ .setMigrationStatus(
+ ConsentMigrationStats.MigrationStatus
+ .SUCCESS_WITH_SHARED_PREF_NOT_UPDATED)
+ .setMigrationType(
+ ConsentMigrationStats.MigrationType.ADEXT_SERVICE_TO_APPSEARCH)
+ .setRegion(REGION_ROW_CODE)
+ .build();
+ verify(mStatsdAdServicesLoggerMock).logConsentMigrationStats(consentMigrationStats);
}
private void mockNoNotifOnS() {
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceEndToEndTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceEndToEndTest.java
index a6b65749a6..6652bb25fe 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceEndToEndTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceEndToEndTest.java
@@ -359,7 +359,7 @@ public class CustomAudienceServiceEndToEndTest {
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
otherOwnerPackageName,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -381,7 +381,7 @@ public class CustomAudienceServiceEndToEndTest {
CommonFixture.VALID_BUYER_1,
VALID_NAME));
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
otherOwnerPackageName,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -752,7 +752,7 @@ public class CustomAudienceServiceEndToEndTest {
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
otherOwnerPackageName,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -766,7 +766,7 @@ public class CustomAudienceServiceEndToEndTest {
AdServicesStatusUtils.SECURITY_EXCEPTION_CALLER_NOT_ALLOWED_ON_BEHALF_ERROR_MESSAGE,
callback.getException().getMessage());
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
otherOwnerPackageName,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -971,7 +971,7 @@ public class CustomAudienceServiceEndToEndTest {
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
MY_APP_PACKAGE_NAME,
AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_CUSTOM_AUDIENCE_REMOTE_INFO);
@@ -995,7 +995,7 @@ public class CustomAudienceServiceEndToEndTest {
mCustomAudienceDao.doesCustomAudienceOverrideExist(otherOwner, BUYER_1, NAME_1));
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
MY_APP_PACKAGE_NAME,
AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_CUSTOM_AUDIENCE_REMOTE_INFO);
@@ -1107,7 +1107,7 @@ public class CustomAudienceServiceEndToEndTest {
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
incorrectPackageName,
AD_SERVICES_API_CALLED__API_NAME__REMOVE_CUSTOM_AUDIENCE_REMOTE_INFO_OVERRIDE);
@@ -1135,7 +1135,7 @@ public class CustomAudienceServiceEndToEndTest {
mCustomAudienceDao.doesCustomAudienceOverrideExist(
MY_APP_PACKAGE_NAME, BUYER_1, NAME_1));
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
incorrectPackageName,
AD_SERVICES_API_CALLED__API_NAME__REMOVE_CUSTOM_AUDIENCE_REMOTE_INFO_OVERRIDE);
@@ -1289,7 +1289,7 @@ public class CustomAudienceServiceEndToEndTest {
// Bypass the permission check since it's enforced before the package name check
doNothing()
.when(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
incorrectPackageName,
AD_SERVICES_API_CALLED__API_NAME__RESET_ALL_CUSTOM_AUDIENCE_OVERRIDES);
@@ -1334,7 +1334,7 @@ public class CustomAudienceServiceEndToEndTest {
mCustomAudienceDao.doesCustomAudienceOverrideExist(
MY_APP_PACKAGE_NAME, BUYER_2, NAME_2));
verify(mFledgeAuthorizationFilterSpy)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
incorrectPackageName,
AD_SERVICES_API_CALLED__API_NAME__RESET_ALL_CUSTOM_AUDIENCE_OVERRIDES);
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceImplTest.java
index 1073c08dac..709c6bd741 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/CustomAudienceServiceImplTest.java
@@ -212,7 +212,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_OWNER,
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -260,7 +260,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_OWNER,
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE));
@@ -326,7 +326,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock));
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -349,7 +349,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -416,7 +416,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -464,7 +464,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -513,7 +513,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_OWNER,
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -620,7 +620,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mFetchAndJoinCustomAudienceCallbackMock));
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__FETCH_AND_JOIN_CUSTOM_AUDIENCE);
@@ -638,7 +638,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -682,7 +682,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -749,7 +749,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock));
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -773,7 +773,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -862,7 +862,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -910,7 +910,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
.assertCallerIsInForeground(
MY_UID, AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE, null);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -954,7 +954,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1003,7 +1003,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_OWNER,
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1050,7 +1050,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -1102,7 +1102,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -1158,7 +1158,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mCustomAudienceOverrideCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
"",
AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_CUSTOM_AUDIENCE_REMOTE_INFO);
@@ -1222,7 +1222,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mCustomAudienceOverrideCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_CUSTOM_AUDIENCE_REMOTE_INFO);
@@ -1268,8 +1268,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_NAME,
mCustomAudienceOverrideCallbackMock);
- verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(CONTEXT, "", apiName);
+ verify(mFledgeAuthorizationFilterMock).assertAppDeclaredPermission(CONTEXT, "", apiName);
verify(mDevContextFilterMock).createDevContext();
verify(mCustomAudienceImplMock).getCustomAudienceDao();
verify(mAppImportanceFilterMock)
@@ -1322,8 +1321,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mCustomAudienceOverrideCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
- CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
+ .assertAppDeclaredPermission(CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
verify(mDevContextFilterMock).createDevContext();
verify(mCustomAudienceImplMock).getCustomAudienceDao();
verify(mConsentManagerMock).isFledgeConsentRevokedForApp(CustomAudienceFixture.VALID_OWNER);
@@ -1352,8 +1350,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mService.resetAllCustomAudienceOverrides(mCustomAudienceOverrideCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
- CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
+ .assertAppDeclaredPermission(CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
verify(mDevContextFilterMock).createDevContext();
verify(mCustomAudienceImplMock).getCustomAudienceDao();
verify(mAppImportanceFilterMock).assertCallerIsInForeground(Process.myUid(), apiName, null);
@@ -1400,7 +1397,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mService.resetAllCustomAudienceOverrides(mCustomAudienceOverrideCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__RESET_ALL_CUSTOM_AUDIENCE_OVERRIDES);
@@ -1419,7 +1416,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
public void testAppManifestPermissionNotRequested_joinCustomAudience_fails() {
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1437,7 +1434,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
public void testAppManifestPermissionNotRequested_fetchCustomAudience_fails() {
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__FETCH_AND_JOIN_CUSTOM_AUDIENCE);
@@ -1458,7 +1455,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
public void testAppManifestPermissionNotRequested_leaveCustomAudience_fails() {
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -1483,7 +1480,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
.build());
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_CUSTOM_AUDIENCE_REMOTE_INFO);
@@ -1513,8 +1510,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
int apiName = AD_SERVICES_API_CALLED__API_NAME__REMOVE_CUSTOM_AUDIENCE_REMOTE_INFO_OVERRIDE;
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
- CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
+ .assertAppDeclaredPermission(CONTEXT, CustomAudienceFixture.VALID_OWNER, apiName);
assertThrows(
SecurityException.class,
@@ -1536,7 +1532,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
.build());
doThrow(SecurityException.class)
.when(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__RESET_ALL_CUSTOM_AUDIENCE_OVERRIDES);
@@ -1565,7 +1561,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1621,7 +1617,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CustomAudienceFixture.VALID_OWNER,
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1667,7 +1663,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -1725,7 +1721,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
mICustomAudienceCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
any(),
eq(CustomAudienceFixture.VALID_OWNER),
eq(AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE));
@@ -1771,7 +1767,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CommonFixture.VALID_BUYER_1,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1811,7 +1807,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
CommonFixture.VALID_BUYER_1,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
@@ -1850,7 +1846,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
RATE_LIMIT_REACHED_ERROR_MESSAGE,
actualResponseCaptor.getValue().getErrorMessage());
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__JOIN_CUSTOM_AUDIENCE);
@@ -1881,7 +1877,7 @@ public final class CustomAudienceServiceImplTest extends AdServicesExtendedMocki
RATE_LIMIT_REACHED_ERROR_MESSAGE,
actualResponseCaptor.getValue().getErrorMessage());
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredCustomAudiencePermission(
+ .assertAppDeclaredPermission(
CONTEXT,
CustomAudienceFixture.VALID_OWNER,
AD_SERVICES_API_CALLED__API_NAME__LEAVE_CUSTOM_AUDIENCE);
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/E2EInteropMockTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/E2EInteropMockTest.java
index 0e5544e830..74f8761d6d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/E2EInteropMockTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/E2EInteropMockTest.java
@@ -21,7 +21,6 @@ import static java.util.Map.entry;
import android.adservices.measurement.RegistrationRequest;
import android.net.Uri;
import android.os.RemoteException;
-import android.provider.DeviceConfig;
import com.android.adservices.service.measurement.actions.Action;
import com.android.adservices.service.measurement.actions.RegisterSource;
@@ -35,7 +34,6 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Assert;
-import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -160,17 +158,6 @@ public class E2EInteropMockTest extends E2EMockTest {
mFlags);
}
- @Before
- public void setup() {
- // Chromium does not have a flag at dynamic noising based on expiry but Android does, so it
- // needs to be enabled.
- DeviceConfig.setProperty(
- DeviceConfig.NAMESPACE_ADSERVICES,
- "measurement_enable_configurable_event_reporting_windows",
- "true",
- false);
- }
-
@Override
void processAction(RegisterSource sourceRegistration) throws JSONException, IOException {
RegistrationRequest request = sourceRegistration.mRegistrationRequest;
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/EventReportTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/EventReportTest.java
index f0be0f6766..ca528c9a38 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/EventReportTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/EventReportTest.java
@@ -15,11 +15,7 @@
*/
package com.android.adservices.service.measurement;
-import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.Flags.MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS;
-import static com.android.adservices.service.Flags.MEASUREMENT_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.measurement.PrivacyParams.INSTALL_ATTR_NAVIGATION_EARLY_REPORTING_WINDOW_MILLISECONDS;
import static com.android.adservices.service.measurement.PrivacyParams.NAVIGATION_EARLY_REPORTING_WINDOW_MILLISECONDS;
import static com.android.adservices.service.measurement.SourceFixture.ValidSourceParams;
@@ -67,6 +63,11 @@ public final class EventReportTest {
public final TestableDeviceConfig.TestableDeviceConfigRule mDeviceConfigRule =
new TestableDeviceConfig.TestableDeviceConfigRule();
+ private static final double EVENT_NOISE_PROBABILITY = 0.0000025D;
+ private static final double INSTALL_ATTR_EVENT_NOISE_PROBABILITY = 0.0000125D;
+ private static final double INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY = 0.0024263D;
+ private static final double NAVIGATION_NOISE_PROBABILITY = 0.0024263D;
+
private static final double DOUBLE_MAX_DELTA = 0.0000001D;
private static final long TRIGGER_PRIORITY = 345678L;
@@ -288,7 +289,7 @@ public final class EventReportTest {
assertEquals(source.getEventReportWindow() + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
report.getReportTime());
assertEquals(source.getSourceType(), report.getSourceType());
- assertEquals(MEASUREMENT_EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ assertEquals(EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -297,7 +298,6 @@ public final class EventReportTest {
@Test
public void populate_eventSourceAppDestWithoutInstallConfigured() throws JSONException {
long baseTime = System.currentTimeMillis();
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
String earlyReportingWindows1h1d =
String.join(
",",
@@ -306,7 +306,6 @@ public final class EventReportTest {
doReturn(earlyReportingWindows1h1d)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(3).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source source =
createSourceForTest(
@@ -390,7 +389,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(Source.SourceType.NAVIGATION, report.getSourceType());
assertEquals(
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -430,7 +429,7 @@ public final class EventReportTest {
assertEquals(source.getEventReportWindow() + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
report.getReportTime());
assertEquals(Source.SourceType.EVENT, report.getSourceType());
- assertEquals(MEASUREMENT_EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ assertEquals(EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -468,7 +467,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(Source.SourceType.EVENT, report.getSourceType());
assertEquals(
- MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY,
+ INSTALL_ATTR_EVENT_NOISE_PROBABILITY,
report.getRandomizedTriggerRate(),
DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
@@ -507,7 +506,7 @@ public final class EventReportTest {
assertEquals(source.getEventReportWindow() + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
report.getReportTime());
assertEquals(Source.SourceType.EVENT, report.getSourceType());
- assertEquals(MEASUREMENT_EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ assertEquals(EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -548,7 +547,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(Source.SourceType.NAVIGATION, report.getSourceType());
assertEquals(
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -589,7 +588,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(source.getSourceType(), report.getSourceType());
assertEquals(
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -633,7 +632,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(Source.SourceType.NAVIGATION, report.getSourceType());
assertEquals(
- MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
+ INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
report.getRandomizedTriggerRate(),
DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
@@ -679,7 +678,7 @@ public final class EventReportTest {
report.getReportTime());
assertEquals(source.getSourceType(), report.getSourceType());
assertEquals(
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ NAVIGATION_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -698,6 +697,7 @@ public final class EventReportTest {
.setEnrollmentId("enrollment-id")
.setAppDestinations(Collections.singletonList(APP_DESTINATION))
.setWebDestinations(Collections.singletonList(WEB_DESTINATION))
+ .setExpiryTime(baseTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(baseTime + TimeUnit.DAYS.toMillis(10))
.setCoarseEventReportDestinations(true)
.build();
@@ -738,7 +738,7 @@ public final class EventReportTest {
assertEquals(source.getEventReportWindow() + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
report.getReportTime());
assertEquals(Source.SourceType.EVENT, report.getSourceType());
- assertEquals(MEASUREMENT_EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
+ assertEquals(EVENT_NOISE_PROBABILITY, report.getRandomizedTriggerRate(), DOUBLE_MAX_DELTA);
assertEquals(SOURCE_ID, report.getSourceId());
assertEquals(TRIGGER_ID, report.getTriggerId());
assertEquals(REGISTRATION_ORIGIN, report.getRegistrationOrigin());
@@ -855,6 +855,7 @@ public final class EventReportTest {
.setEnrollmentId("enrollment-id")
.setAppDestinations(getNullableUriList(appDestination))
.setWebDestinations(getNullableUriList(webDestination))
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/SourceTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/SourceTest.java
index 458efd4f06..f75c65e24a 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/SourceTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/SourceTest.java
@@ -1521,13 +1521,13 @@ public class SourceTest {
}
@Test
- public void getOrDefaultEventReportWindows() throws JSONException {
+ public void getOrDefaultEventReportWindowsForFlex() throws JSONException {
Flags flags = mock(Flags.class);
JSONObject windowsObj = new JSONObject("{'start_time': '2000000', 'end_times': "
+ "[3600000, 86400000, 172000000]}");
// Provided Windows
List<Pair<Long, Long>> eventReportWindows =
- Source.getOrDefaultEventReportWindows(
+ Source.getOrDefaultEventReportWindowsForFlex(
windowsObj,
Source.SourceType.EVENT,
8640000,
@@ -1543,7 +1543,7 @@ public class SourceTest {
when(flags.getMeasurementEventReportsCtcEarlyReportingWindows())
.thenReturn("172800,604800");
eventReportWindows =
- Source.getOrDefaultEventReportWindows(
+ Source.getOrDefaultEventReportWindowsForFlex(
null, Source.SourceType.EVENT, TimeUnit.DAYS.toMillis(15), flags);
assertNotNull(eventReportWindows);
assertEquals(2, eventReportWindows.size());
@@ -1552,7 +1552,7 @@ public class SourceTest {
// Default Windows - Navigation
eventReportWindows =
- Source.getOrDefaultEventReportWindows(
+ Source.getOrDefaultEventReportWindowsForFlex(
null, Source.SourceType.NAVIGATION, TimeUnit.DAYS.toMillis(15), flags);
assertNotNull(eventReportWindows);
assertEquals(3, eventReportWindows.size());
@@ -1608,29 +1608,31 @@ public class SourceTest {
}
@Test
- public void getProcessedEventReportWindow() {
+ public void getEffectiveEventReportWindow() {
+ long expiryTime = 7654321L;
// null eventReportWindow
Source sourceNullEventReportWindow =
SourceFixture.getMinimalValidSourceBuilder()
.setEventTime(10)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(null)
.build();
- assertNull(sourceNullEventReportWindow.getProcessedEventReportWindow());
+ assertEquals(expiryTime, sourceNullEventReportWindow.getEffectiveEventReportWindow());
// eventReportWindow Value < eventTime
Source sourceNewEventReportWindow =
SourceFixture.getMinimalValidSourceBuilder()
- .setEventTime(10)
+ .setEventTime(10L)
.setEventReportWindow(4L)
.build();
- assertEquals(Long.valueOf(14L), sourceNewEventReportWindow.getProcessedEventReportWindow());
+ assertEquals(14L, sourceNewEventReportWindow.getEffectiveEventReportWindow());
// eventReportWindow Value > eventTime
Source sourceOldEventReportWindow =
SourceFixture.getMinimalValidSourceBuilder()
- .setEventTime(10)
+ .setEventTime(10L)
.setEventReportWindow(15L)
.build();
- assertEquals(Long.valueOf(15L), sourceOldEventReportWindow.getProcessedEventReportWindow());
+ assertEquals(15L, sourceOldEventReportWindow.getEffectiveEventReportWindow());
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerIntegrationTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerIntegrationTest.java
index 6b8e4567a9..39f46f31e3 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerIntegrationTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerIntegrationTest.java
@@ -77,7 +77,7 @@ public class AttributionJobHandlerIntegrationTest extends AbstractDbIntegrationT
(new AttributionJobHandler(
datastoreManager,
FlagsFactory.getFlags(),
- new DebugReportApi(sContext, FlagsFactory.getFlagsForTest()),
+ new DebugReportApi(sContext, FlagsFactory.getFlags()),
new EventReportWindowCalcDelegate(FlagsFactory.getFlags()),
new SourceNoiseHandler(FlagsFactory.getFlags()),
mLogger,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerTest.java
index b34950e84c..c1cbe2ba85 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/attribution/AttributionJobHandlerTest.java
@@ -218,6 +218,12 @@ public class AttributionJobHandlerTest {
when(mFlags.getMeasurementNullAggReportRateInclSourceRegistrationTime()).thenReturn(0f);
when(mFlags.getMeasurementMinEventReportDelayMillis())
.thenReturn(Flags.MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS);
+ when(mFlags.getMeasurementVtcConfigurableMaxEventReportsCount())
+ .thenReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT);
+ when(mFlags.getMeasurementEventReportsVtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS);
+ when(mFlags.getMeasurementEventReportsCtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS);
}
@Test
@@ -659,7 +665,6 @@ public class AttributionJobHandlerTest {
public void performPendingAttributions_vtcWithConfiguredReportsCount_attributeUptoConfigLimit()
throws DatastoreException {
// Setup
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(3).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source source =
SourceFixture.getMinimalValidSourceBuilder()
@@ -1385,6 +1390,9 @@ public class AttributionJobHandlerTest {
doReturn(5L)
.when(mEventReportWindowCalcDelegate)
.getReportingTime(any(Source.class), anyLong(), anyInt());
+ doReturn(EventReportWindowCalcDelegate.MomentPlacement.WITHIN)
+ .when(mEventReportWindowCalcDelegate)
+ .fallsWithinWindow(any(Source.class), anyLong(), anyInt());
when(mMeasurementDao.getPendingTriggerIds())
.thenReturn(Collections.singletonList(trigger.getId()));
when(mMeasurementDao.getTrigger(trigger.getId())).thenReturn(trigger);
@@ -1658,6 +1666,7 @@ public class AttributionJobHandlerTest {
.setAttributionMode(Source.AttributionMode.TRUTHFULLY)
.setInstallAttributed(true)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(10))
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(28))
.setEventTime(eventTime - TimeUnit.DAYS.toMillis(2))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
@@ -1737,6 +1746,7 @@ public class AttributionJobHandlerTest {
.setInstallAttributed(true)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(3))
.setEventTime(eventTime - TimeUnit.DAYS.toMillis(2))
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -1747,6 +1757,7 @@ public class AttributionJobHandlerTest {
.setPriority(200L)
.setAttributionMode(Source.AttributionMode.TRUTHFULLY)
.setEventTime(eventTime)
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.build();
when(mMeasurementDao.getPendingTriggerIds())
@@ -3341,6 +3352,7 @@ public class AttributionJobHandlerTest {
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
.setId("sourceId")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -3436,6 +3448,7 @@ public class AttributionJobHandlerTest {
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
.setId("sourceId")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -3533,6 +3546,7 @@ public class AttributionJobHandlerTest {
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
.setId("sourceId")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -3628,6 +3642,7 @@ public class AttributionJobHandlerTest {
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
.setId("sourceId")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -3726,6 +3741,7 @@ public class AttributionJobHandlerTest {
+ "}\n")
.setId("sourceId")
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -3961,6 +3977,7 @@ public class AttributionJobHandlerTest {
+ " \"key_1\": [\"value_1\", \"value_2\"],\n"
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -4039,6 +4056,7 @@ public class AttributionJobHandlerTest {
+ " \"key_1\": [\"value_1\", \"value_2\"],\n"
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -4116,6 +4134,7 @@ public class AttributionJobHandlerTest {
+ " \"key_1\": [\"value_1\", \"value_2\"],\n"
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -4338,6 +4357,7 @@ public class AttributionJobHandlerTest {
+ " \"key_1\": [\"value_1\", \"value_2\"],\n"
+ " \"key_2\": [\"value_1\", \"value_2\"]\n"
+ "}\n")
+ .setExpiryTime(triggerTime + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(triggerTime + 1L)
.setAggregatableReportWindow(triggerTime + 1L)
.build();
@@ -6129,6 +6149,7 @@ public class AttributionJobHandlerTest {
.setId("sourceId")
.setEventTime(TRIGGER_TIME - TimeUnit.SECONDS.toMillis(LOOKBACK_WINDOW - 1))
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(TRIGGER_TIME + TimeUnit.DAYS.toMillis(28))
.setEventReportWindow(TRIGGER_TIME + 1)
.setAggregatableReportWindow(TRIGGER_TIME + 1)
.build();
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerAttributionProbabilityTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerAttributionProbabilityTest.java
index ef24154acd..a9fa269095 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerAttributionProbabilityTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerAttributionProbabilityTest.java
@@ -16,14 +16,6 @@
package com.android.adservices.service.measurement.noising;
-import static com.android.adservices.service.Flags.MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY;
-import static com.android.adservices.service.Flags.MEASUREMENT_NAVIGATION_NOISE_PROBABILITY;
import static com.android.adservices.service.measurement.SourceFixture.ValidSourceParams.ATTRIBUTION_DESTINATIONS;
import static com.android.adservices.service.measurement.SourceFixture.ValidSourceParams.WEB_DESTINATIONS;
@@ -61,18 +53,22 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
private static final String DELIMITER = ",";
private static final long CURRENT_TIME = System.currentTimeMillis();
+ private static final double INSTALL_ATTR_EVENT_NOISE_PROBABILITY = 0.0000125D;
+ private static final double INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY = 0.0024263D;
+ private static final double EVENT_NOISE_PROBABILITY = 0.0000025D;
+ private static final double NAVIGATION_NOISE_PROBABILITY = 0.0024263D;
+ private static final double INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY =
+ 0.0170218D;
+
private final String mDescription;
- private final boolean mIsEnableConfigurableEventReportingWindows;
private final Source mSource;
private final Long[] mEarlyReportingWindows;
private final double mExpectedProbability;
- private final boolean mEnableConfiguredMaxEventReports;
private final int mConfiguredMaxEventReportsCount;
/**
- * The data format is measurement_enable_configurable_event_reporting_windows flag, sourceType,
- * sourceEventReportWindow (limit), cooldown window, appDestination, webDestination
- * configuredEarlyReportingWindows, coarse destination, enable configured conversions,
+ * The data format is sourceType, sourceEventReportWindow (limit), cooldown window,
+ * appDestination, webDestination, configuredEarlyReportingWindows, coarse destination,
* configured conversions and expectedProbability. Each test description has numbers like 1-1-1,
* 2-1-2, 3-3-3 etc. These signify max reports, trigger data bits and reporting windows count
* respectively. For e.g., 2-1-2 stands for 2 maximum conversions, 1 trigger data bit (0 or 1)
@@ -85,7 +81,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
{
"non-configured reporting windows, EVENT, 1-1-1, app, fine "
+ "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -93,15 +88,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
"non-configured reporting windows, EVENT, 2-1-2, app, install "
+ "detection, fine "
+ "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -109,14 +102,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
1, // configured max reports
- MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY, // probability
+ INSTALL_ATTR_EVENT_NOISE_PROBABILITY, // probability
},
{
"non-configured reporting windows, EVENT, 1-1-1, web, fine "
+ "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -124,14 +115,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
"non-configured reporting windows, EVENT, 1-1-1, app and web, "
+ "fine destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -139,155 +128,56 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
1, // configured max reports
- MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY, // probability
+ 0.0000042, // probability
},
{
- "non-configured reporting windows, EVENT, 2-1-2, app & web, "
+ "non-configured reporting windows, EVENT, 2-1-2, app, "
+ "install "
+ "detection, fine"
+ " destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // app destination
+ null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
1, // configured max reports
- MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY,
+ 0.0000125,
},
{
- "non-configured reporting windows, EVENT, 2-1-2, app & web, "
+ "non-configured reporting windows, EVENT, 2-1-1, app, "
+ "install "
- + "detection, coarse"
+ + "detection, fine"
+ " destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
- DAYS.toMillis(10), // source event report window
+ DAYS.toMillis(1), // source event report window
DAYS.toMillis(1), // install cooldown window
ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // app destination
- new Long[] {}, // early reporting windows
- true, // coarse destinations
- false, // enable configurable max reports
- 1, // configured max reports
- MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY,
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, app, fine "
- + "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- 0, // install cooldown window
- ATTRIBUTION_DESTINATIONS, // app destination
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configured max reports
- 3, // configured max reports
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, // probability
+ 1, // configured max reports
+ 0.000005,
},
{
- "non-configured reporting windows, NAVIGATION, 3-3-3, app, install "
- + "detection, fine "
- + "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
+ "non-configured reporting windows, EVENT, 2-1-2, app, "
+ + "install "
+ + "detection, coarse"
+ + " destinations",
+ Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
ATTRIBUTION_DESTINATIONS, // app destination
null, // web destination
new Long[] {}, // early reporting windows
- false, // coarse destinations
- false, // enable configured max reports
- 3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY, // probability
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, web, fine "
- + "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- 0, // install cooldown window
- null,
- WEB_DESTINATIONS, // web destination
- new Long[] {}, // early reporting windows
- false, // coarse destinations
- false, // enable configurable max reports
- 3, // configured max reports
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, // probability
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, app & web, "
- + "fine destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- 0, // install cooldown window
- ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // web destination
- new Long[] {}, // early reporting windows
- false, // coarse destinations
- false, // enable configurable max reports
- 3, // configured max reports
- MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY, // probability
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, app & web, "
- + "coarse destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- 0, // install cooldown window
- ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // web destination
- new Long[] {}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
- 3, // configured max reports
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, // probability
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, app & web, "
- + "install detection,"
- + " fine destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- DAYS.toMillis(1), // install cooldown window
- ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // web destination
- new Long[] {}, // early reporting windows
- false, // coarse destinations
- false, // enable configurable max reports
- 3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY,
- },
- {
- "non-configured reporting windows, NAVIGATION, 3-3-3, app & web, "
- + "install detection,"
- + " coarse destinations",
- false, // measurement_enable_configurable_event_reporting_windows
- Source.SourceType.NAVIGATION, // source type
- DAYS.toMillis(10), // source event report window
- DAYS.toMillis(1), // install cooldown window
- ATTRIBUTION_DESTINATIONS, // app destination
- WEB_DESTINATIONS, // web destination
- new Long[] {}, // early reporting windows
- true, // coarse destinations
- false, // enable configurable max reports
- 3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
+ 1, // configured max reports
+ INSTALL_ATTR_EVENT_NOISE_PROBABILITY,
},
{
"configured reporting windows, EVENT, 1-1-1, app, fine " + "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -295,13 +185,11 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, EVENT, 1-1-2, app, fine " + "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -309,13 +197,11 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1)}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
0.0000042,
},
{
"configured reporting windows, EVENT, 1-1-3, app, fine " + "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -323,7 +209,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
0.0000058, // probability
},
@@ -331,7 +216,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, EVENT, 1-1-2(1 effective window), "
+ "app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -339,15 +223,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {DAYS.toSeconds(15)}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, EVENT, 1-1-3(2 effective window), "
+ "app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
HOURS.toMillis(6), // source event report window
0, // install cooldown window
@@ -355,15 +237,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
0.0000042,
},
{
- "configured reporting windows, EVENT, 2-1-3(2 effective windows), "
+ "configured reporting windows, EVENT, 1-1-2 (2 effective window), "
+ "app, install "
+ "detection, fine destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
HOURS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -373,15 +253,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY, // probability
+ 0.0000042, // probability
},
{
- "configured reporting windows, EVENT, 2-1-3, app, install "
+ "configured reporting windows, EVENT, 1-1-3, app, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -391,15 +269,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- 0.0000233, // probability
+ 0.0000058, // probability
},
{
- "configured reporting windows, EVENT, 2-1-3, app & web, install "
+ "configured reporting windows, EVENT, 1-1-3, app & web, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -409,15 +285,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- 0.0000757, // probability
+ 0.0000108, // probability
},
{
- "configured reporting windows, EVENT, 2-1-3, app & web, install "
+ "configured reporting windows, EVENT, 1-1-3, app & web, install "
+ "detection, coarse "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -427,16 +301,14 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- 0.0000233, // probability
+ 0.0000058, // probability
},
{
"configured reporting windows, EVENT, 1-1-1, web, (install "
+ "cooldown -"
+ " unused), fine"
+ " destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -444,21 +316,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
- // It is different from "non-configured reporting windows, 2-1-2,
- // app
- // & web, install
- // detection" because we reject 20 states resulting into only 25
- // states in
- // that case. Here we assume all 45 states to be valid.
- "configured reporting windows, EVENT, 2-1-2, app & web, install "
+ "configured reporting windows, EVENT, 1-1-2, app & web, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -466,21 +330,13 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(1)}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- 0.0000374, // probability
+ 0.0000075, // probability
},
{
- // It is different from "non-configured reporting windows, 2-1-2,
- // app
- // & web, install
- // detection, coarse destinations" because we reject 20 states
- // resulting into only 25 states in that case. Here we assume all
- // 45 states to be valid.
- "configured reporting windows, EVENT, 2-1-2, app & web, install "
+ "configured reporting windows, EVENT, 1-1-2, app & web, install "
+ "detection, coarse "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -488,14 +344,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(1)}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- 0.0000125, // probability
+ 0.0000042, // probability
},
{
"configured (ignored due to empty), EVENT, 2-1-2, app, install "
+ "detection, fine destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -503,14 +357,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY, // probability
+ INSTALL_ATTR_EVENT_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, EVENT, 1-1-1, app & web, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -518,14 +370,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY, // probability
+ 0.0000042, // probability
},
{
"configured reporting windows, EVENT, 1-1-1, app & web, coarse "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -533,14 +383,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
1, // configured max reports
- MEASUREMENT_EVENT_NOISE_PROBABILITY, // probability
+ EVENT_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-1, app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -548,14 +396,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-2, app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -563,14 +409,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1)}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0008051, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-3, app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -578,16 +422,14 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, // probability
+ NAVIGATION_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-2 (1 effective "
+ "window)"
+ ", app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(2), // source event report window
0, // install cooldown window
@@ -595,7 +437,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {DAYS.toMillis(3)}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
@@ -603,7 +444,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, NAVIGATION, 3-3-3 (2 effective "
+ "windows), app, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
HOURS.toMillis(6), // source event report window
0, // install cooldown window
@@ -611,7 +451,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0008051, // probability
},
@@ -619,7 +458,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, NAVIGATION, 3-3-1, app, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -627,7 +465,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
@@ -635,7 +472,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, NAVIGATION, 3-3-1, web, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -643,14 +479,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-1, app & web, fine"
+ " destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -658,14 +492,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0008051, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-1, app & web, "
+ "coarse destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -673,7 +505,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
@@ -682,7 +513,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
+ "install "
+ "detection, "
+ "fine destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -690,7 +520,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0008051, // probability
},
@@ -699,7 +528,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
+ "install "
+ "detection, "
+ "coarse destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -707,7 +535,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // app destination
new Long[] {}, // early reporting windows
true, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
0.0001372, // probability
},
@@ -716,7 +543,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
+ "install "
+ "detection, fine"
+ " destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -724,16 +550,14 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(2), DAYS.toSeconds(2)},
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY,
+ INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY,
},
{
"configured reporting windows, NAVIGATION, 3-3-3, app & web, "
+ "install "
+ "detection, "
+ "coarse destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -741,14 +565,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(2), DAYS.toSeconds(2)},
true, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
+ INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY,
},
{
"configured reporting windows, NAVIGATION, 3-3-3, app, install "
+ "detection, fine destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -756,14 +578,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(2), DAYS.toSeconds(2)},
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY, // probability
+ INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-3, app & web, fine"
+ " destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -771,14 +591,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(2), DAYS.toSeconds(2)},
false, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY, // probability
+ 0.0170218, // probability
},
{
"configured reporting windows, NAVIGATION, 3-3-3, app & web, "
+ "coarse destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.NAVIGATION, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -786,14 +604,12 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
WEB_DESTINATIONS, // web destination
new Long[] {HOURS.toSeconds(2), DAYS.toSeconds(2)},
true, // coarse destinations
- false, // enable configurable max reports
3, // configured max reports
- MEASUREMENT_NAVIGATION_NOISE_PROBABILITY, // probability
+ NAVIGATION_NOISE_PROBABILITY, // probability
},
{
"non-configured reporting windows, EVENT, 3-1-1, app, fine "
+ "destinations",
- false, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -801,13 +617,11 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {}, // early reporting windows
false, // coarse destinations
- true, // enable configured max reports
3, // configured max reports
0.0000083, // probability
},
{
"configured reporting windows, EVENT, 3-1-3, app, fine " + "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -815,13 +629,11 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- true, // enable configurable max reports
3, // configured max reports
0.0000698, // probability
},
{
"configured reporting windows, EVENT, 2-1-3, app, fine " + "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -829,7 +641,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- true, // enable configurable max reports
2, // configured max reports
0.0000233, // probability
},
@@ -837,7 +648,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, EVENT, 3-1-3, app, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
// not honored because conversions and windows are overridden
@@ -848,7 +658,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
false, // coarse destinations
- true, // enable configurable max reports
3, // configured max reports
0.0000698, // probability
},
@@ -856,7 +665,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, EVENT, 3-1-3, app & web, install "
+ "detection, fine "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -866,7 +674,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
false, // coarse destinations
- true, // enable configurable max reports
3, // configured max reports
0.0003782, // probability
},
@@ -874,7 +681,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
"configured reporting windows, EVENT, 3-1-3, app & web, install "
+ "detection, coarse "
+ "destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(6), // source event report window
DAYS.toMillis(1), // install cooldown window
@@ -884,13 +690,11 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
HOURS.toSeconds(1), DAYS.toSeconds(1)
}, // early reporting windows
true, // coarse destinations
- true, // enable configurable max reports
3, // configured max reports
0.0000698, // probability
},
{
"configured reporting windows, EVENT, 1-1-3, app, fine" + " destinations",
- true, // measurement_enable_configurable_event_reporting_windows
Source.SourceType.EVENT, // source type
DAYS.toMillis(10), // source event report window
0, // install cooldown window
@@ -898,7 +702,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
null, // web destination
new Long[] {HOURS.toSeconds(1), DAYS.toSeconds(1)},
false, // coarse destinations
- true, // enable configurable max reports
1, // configured max reports
0.0000058, // probability
},
@@ -907,7 +710,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
public SourceNoiseHandlerAttributionProbabilityTest(
String description,
- boolean isEnableConfigurableEventReportingWindows,
Source.SourceType sourceType,
long sourceEventReportWindow,
long coolDownWindow,
@@ -915,11 +717,9 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
List<Uri> webDestinations,
Long[] earlyReportingWindows,
boolean coarseDestination,
- boolean isEnableConfigurableMaxEventReports,
int configuredMaxEventReportsCount,
double expectedProbability) {
mDescription = description;
- mIsEnableConfigurableEventReportingWindows = isEnableConfigurableEventReportingWindows;
mSource =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(sourceType)
@@ -936,7 +736,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
BigDecimal.valueOf(expectedProbability)
.setScale(7, RoundingMode.HALF_UP)
.doubleValue();
- mEnableConfiguredMaxEventReports = isEnableConfigurableMaxEventReports;
mConfiguredMaxEventReportsCount = configuredMaxEventReportsCount;
}
@@ -944,9 +743,6 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
public void getRandomAttributionProbability_withParameterizedData() {
// Setup
Flags flags = mock(Flags.class);
- doReturn(mIsEnableConfigurableEventReportingWindows)
- .when(flags)
- .getMeasurementEnableConfigurableEventReportingWindows();
doReturn(convertEarlyReportingWindowFlagString(mEarlyReportingWindows))
.when(flags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -954,36 +750,9 @@ public class SourceNoiseHandlerAttributionProbabilityTest {
.when(flags)
.getMeasurementEventReportsCtcEarlyReportingWindows();
doReturn(true).when(flags).getMeasurementEnableCoarseEventReportDestinations();
- doReturn(mEnableConfiguredMaxEventReports)
- .when(flags)
- .getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(mConfiguredMaxEventReportsCount)
.when(flags)
.getMeasurementVtcConfigurableMaxEventReportsCount();
- doReturn(MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementInstallAttrDualDestinationEventNoiseProbability();
- doReturn(MEASUREMENT_INSTALL_ATTR_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementInstallAttrDualDestinationNavigationNoiseProbability();
- doReturn(MEASUREMENT_DUAL_DESTINATION_NAVIGATION_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementDualDestinationNavigationNoiseProbability();
- doReturn(MEASUREMENT_DUAL_DESTINATION_EVENT_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementDualDestinationEventNoiseProbability();
- doReturn(MEASUREMENT_INSTALL_ATTR_EVENT_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementInstallAttrEventNoiseProbability();
- doReturn(MEASUREMENT_INSTALL_ATTR_NAVIGATION_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementInstallAttrNavigationNoiseProbability();
- doReturn(MEASUREMENT_EVENT_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementEventNoiseProbability();
- doReturn(MEASUREMENT_NAVIGATION_NOISE_PROBABILITY)
- .when(flags)
- .getMeasurementNavigationNoiseProbability();
// Execution
double actualProbability =
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerTest.java
index 06a3dc6ae7..c9d0cf23a7 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/noising/SourceNoiseHandlerTest.java
@@ -50,49 +50,17 @@ public class SourceNoiseHandlerTest {
@Before
public void setup() {
mFlags = mock(Flags.class);
- doReturn(false).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
+ doReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT)
+ .when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
+ doReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS)
+ .when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
+ doReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS)
+ .when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
mSourceNoiseHandler =
spy(new SourceNoiseHandler(mFlags, new EventReportWindowCalcDelegate(mFlags)));
}
@Test
- public void fakeReports_eventSourceDualDestPostInstallMode_generatesFromStaticReportStates() {
- long expiry = System.currentTimeMillis();
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setWebDestinations(SourceFixture.ValidSourceParams.WEB_DESTINATIONS)
- .setEventReportWindow(expiry)
- .setInstallCooldownWindow(
- SourceFixture.ValidSourceParams.INSTALL_COOLDOWN_WINDOW)
- .build();
- // Force increase the probability of random attribution.
- doReturn(0.50D).when(mSourceNoiseHandler).getRandomAttributionProbability(source);
- int falseCount = 0;
- int neverCount = 0;
- int truthCount = 0;
- for (int i = 0; i < 500; i++) {
- List<Source.FakeReport> fakeReports =
- mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(source);
- if (source.getAttributionMode() == Source.AttributionMode.FALSELY) {
- falseCount++;
- assertNotEquals(0, fakeReports.size());
- assertTrue(
- isValidEventSourceDualDestPostInstallModeFakeReportState(
- source, fakeReports));
- } else if (source.getAttributionMode() == Source.AttributionMode.NEVER) {
- neverCount++;
- assertEquals(0, fakeReports.size());
- } else {
- truthCount++;
- }
- }
- assertNotEquals(0, falseCount);
- assertNotEquals(0, neverCount);
- assertNotEquals(0, truthCount);
- }
-
- @Test
public void fakeReports_flexEventReport_generatesFromStaticReportStates() {
Source source = SourceFixture.getValidSourceWithFlexEventReportWithFewerState();
// Force increase the probability of random attribution.
@@ -167,6 +135,7 @@ public class SourceNoiseHandlerTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(30))
.build();
assertEquals(
@@ -181,6 +150,7 @@ public class SourceNoiseHandlerTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(7))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
@@ -195,6 +165,7 @@ public class SourceNoiseHandlerTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(2))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
@@ -302,6 +273,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(30))
.build();
assertEquals(
@@ -318,6 +290,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(7))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
@@ -334,6 +307,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(2))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
@@ -350,6 +324,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(30))
.build();
assertEquals(
@@ -366,6 +341,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(7))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
@@ -382,6 +358,7 @@ public class SourceNoiseHandlerTest {
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(2))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
@@ -393,11 +370,11 @@ public class SourceNoiseHandlerTest {
mSourceNoiseHandler.getImpressionNoiseParams(navigationSource2dExpiry));
Source eventSourceWith2Destinations30dExpiry =
SourceFixture.getMinimalValidSourceBuilder()
- .setWebDestinations(SourceFixture.ValidSourceParams.WEB_DESTINATIONS)
.setSourceType(Source.SourceType.EVENT)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(2))
.setInstallAttributionWindow(TimeUnit.DAYS.toMillis(10))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(30))
.build();
assertEquals(
@@ -405,7 +382,7 @@ public class SourceNoiseHandlerTest {
/* reportCount= */ 2,
/* triggerDataCardinality= */ 2,
/* reportingWindowCount= */ 2,
- /* destinationMultiplier */ 2),
+ /* destinationMultiplier */ 1),
mSourceNoiseHandler.getImpressionNoiseParams(
eventSourceWith2Destinations30dExpiry));
}
@@ -491,14 +468,6 @@ public class SourceNoiseHandlerTest {
PrivacyParams.EVENT_TRIGGER_DATA_CARDINALITY);
}
- private boolean isValidEventSourceDualDestPostInstallModeFakeReportState(
- Source source, List<Source.FakeReport> fakeReportsState) {
- // Generated fake reports state matches one of the states
- return Arrays.stream(ImpressionNoiseUtil.DUAL_DESTINATION_POST_INSTALL_FAKE_REPORT_CONFIG)
- .map(reportsState -> convertToReportsState(reportsState, source))
- .anyMatch(fakeReportsState::equals);
- }
-
private List<Source.FakeReport> convertToReportsState(int[][] reportsState, Source source) {
return Arrays.stream(reportsState)
.map(
@@ -507,7 +476,7 @@ public class SourceNoiseHandlerTest {
new UnsignedLong(Long.valueOf(reportState[0])),
new EventReportWindowCalcDelegate(mFlags)
.getReportingTimeForNoising(
- source, reportState[1], true),
+ source, reportState[1]),
reportState[2] == 0
? source.getAppDestinations()
: source.getWebDestinations()))
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueJobServiceTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueJobServiceTest.java
index ee87776c5e..632838e411 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueJobServiceTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueJobServiceTest.java
@@ -20,7 +20,6 @@ import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockGet
import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockGetFlags;
import static com.android.adservices.mockito.MockitoExpectations.mockBackgroundJobsLoggingKillSwitch;
import static com.android.adservices.mockito.MockitoExpectations.syncLogExecutionStats;
-import static com.android.adservices.mockito.MockitoExpectations.syncPersistJobExecutionData;
import static com.android.adservices.mockito.MockitoExpectations.verifyBackgroundJobsSkipLogged;
import static com.android.adservices.mockito.MockitoExpectations.verifyLoggingNotHappened;
import static com.android.adservices.spe.AdservicesJobInfo.MEASUREMENT_ASYNC_REGISTRATION_JOB;
@@ -33,7 +32,6 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
@@ -79,7 +77,6 @@ import org.mockito.internal.stubbing.answers.CallsRealMethods;
import org.mockito.quality.Strictness;
import java.util.Optional;
-import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class AsyncRegistrationQueueJobServiceTest {
@@ -168,9 +165,6 @@ public class AsyncRegistrationQueueJobServiceTest {
runWithMocks(
() -> {
mockBackgroundJobsLoggingKillSwitch(mMockFlags, /* overrideValue= */ false);
- JobServiceLoggingCallback onStartJobCallback =
- syncPersistJobExecutionData(mSpyLogger);
- JobServiceLoggingCallback onJobDoneCallback = syncLogExecutionStats(mSpyLogger);
doReturn(
AsyncRegistrationQueueRunner.ProcessingResult
.SUCCESS_ALL_RECORDS_PROCESSED)
@@ -179,8 +173,7 @@ public class AsyncRegistrationQueueJobServiceTest {
onStartJob_killSwitchOff();
- verify(mSpyLogger).recordOnStartJob(anyInt());
- verify(mSpyLogger).persistJobExecutionData(anyInt(), anyLong());
+ verify(mSpyLogger, timeout(WAIT_IN_MILLIS)).recordOnStartJob(anyInt());
});
}
@@ -364,7 +357,7 @@ public class AsyncRegistrationQueueJobServiceTest {
// Validate jobInfo params to run immediately
ArgumentCaptor<JobInfo> captorJobInfo = ArgumentCaptor.forClass(JobInfo.class);
- verify(jobScheduler, times(1)).schedule(captorJobInfo.capture());
+ verify(jobScheduler, timeout(WAIT_IN_MILLIS).times(1)).schedule(captorJobInfo.capture());
JobInfo jobInfo = captorJobInfo.getValue();
assertNotNull(jobInfo);
assertNull(jobInfo.getTriggerContentUris());
@@ -559,8 +552,8 @@ public class AsyncRegistrationQueueJobServiceTest {
// Validate
ExtendedMockito.verify(
() -> AsyncRegistrationQueueJobService.schedule(any(), any()),
- times(1));
- verify(mMockJobScheduler, times(1))
+ timeout(WAIT_IN_MILLIS).times(1));
+ verify(mMockJobScheduler, timeout(WAIT_IN_MILLIS).times(1))
.getPendingJob(eq(MEASUREMENT_ASYNC_REGISTRATION_JOB_ID));
});
}
@@ -589,7 +582,8 @@ public class AsyncRegistrationQueueJobServiceTest {
times(1));
ArgumentCaptor<JobInfo> jobInfoArgumentCaptor =
ArgumentCaptor.forClass(JobInfo.class);
- verify(mMockJobScheduler, times(1)).schedule(jobInfoArgumentCaptor.capture());
+ verify(mMockJobScheduler, timeout(WAIT_IN_MILLIS).times(1))
+ .schedule(jobInfoArgumentCaptor.capture());
JobInfo job = jobInfoArgumentCaptor.getValue();
assertEquals(JOB_TRIGGER_MIN_DELAY_MS, job.getTriggerContentUpdateDelay());
assertEquals(JOB_TRIGGER_MAX_DELAY_MS, job.getTriggerContentMaxDelay());
@@ -612,7 +606,8 @@ public class AsyncRegistrationQueueJobServiceTest {
boolean onStopJobResult =
mSpyService.onStopJob(Mockito.mock(JobParameters.class));
- verify(mSpyService, times(0)).jobFinished(any(), anyBoolean());
+ verify(mSpyService, timeout(WAIT_IN_MILLIS).times(0))
+ .jobFinished(any(), anyBoolean());
assertTrue(onStopJobResult);
assertTrue(mSpyService.getFutureForTesting().isCancelled());
});
@@ -633,8 +628,9 @@ public class AsyncRegistrationQueueJobServiceTest {
assertFalse(result);
// Allow background thread to execute
Thread.sleep(WAIT_IN_MILLIS);
- verify(mSpyService, times(1)).jobFinished(any(), eq(false));
- verify(mMockJobScheduler, times(1)).cancel(eq(MEASUREMENT_ASYNC_REGISTRATION_JOB_ID));
+ verify(mSpyService, timeout(WAIT_IN_MILLIS).times(1)).jobFinished(any(), eq(false));
+ verify(mMockJobScheduler, timeout(WAIT_IN_MILLIS).times(1))
+ .cancel(eq(MEASUREMENT_ASYNC_REGISTRATION_JOB_ID));
}
private void onStartJob_killSwitchOn() throws Exception {
@@ -646,10 +642,9 @@ public class AsyncRegistrationQueueJobServiceTest {
// Validate
assertFalse(result);
- // Allow background thread to execute
- Thread.sleep(WAIT_IN_MILLIS);
- verify(mSpyService, times(1)).jobFinished(any(), eq(false));
- verify(mMockJobScheduler, times(1)).cancel(eq(MEASUREMENT_ASYNC_REGISTRATION_JOB_ID));
+ verify(mSpyService, timeout(WAIT_IN_MILLIS).times(1)).jobFinished(any(), eq(false));
+ verify(mMockJobScheduler, timeout(WAIT_IN_MILLIS).times(1))
+ .cancel(eq(MEASUREMENT_ASYNC_REGISTRATION_JOB_ID));
}
private void onStartJob_killSwitchOff() throws Exception {
@@ -701,9 +696,4 @@ public class AsyncRegistrationQueueJobServiceTest {
ExtendedMockito.doReturn(mMockFlags).when(FlagsFactory::getFlags);
ExtendedMockito.doReturn(value).when(mMockFlags).getAsyncRegistrationJobQueueKillSwitch();
}
-
- private Object countDown(CountDownLatch countDownLatch) {
- countDownLatch.countDown();
- return null;
- }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueRunnerTest.java
index 3322190ddb..2cfc9e6c46 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncRegistrationQueueRunnerTest.java
@@ -33,7 +33,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.adservices.measurement.RegistrationRequest;
import android.adservices.measurement.WebSourceParams;
import android.adservices.measurement.WebSourceRegistrationRequest;
import android.content.ContentProviderClient;
@@ -96,6 +95,7 @@ import org.mockito.stubbing.Answer;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -125,6 +125,10 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
private static final String LIST_TYPE_REDIRECT_URI_1 = WebUtil.validUrl("https://foo.test");
private static final String LIST_TYPE_REDIRECT_URI_2 = WebUtil.validUrl("https://bar.test");
private static final String LOCATION_TYPE_REDIRECT_URI = WebUtil.validUrl("https://baz.test");
+ private static final String LOCATION_TYPE_REDIRECT_URI_2 = WebUtil.validUrl("https://qux.test");
+ private static final String LOCATION_TYPE_REDIRECT_URI_3 =
+ WebUtil.validUrl("https://quux.test");
+
private static final Uri WEB_DESTINATION = WebUtil.validUri("https://web-destination.test");
private static final Uri APP_DESTINATION = Uri.parse("android-app://com.app_destination");
private static final Source SOURCE_1 =
@@ -265,6 +269,12 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mFlags.getMeasurementFlexApiMaxInformationGainDualDestinationNavigation())
.thenReturn(Flags
.MEASUREMENT_FLEX_API_MAX_INFORMATION_GAIN_DUAL_DESTINATION_NAVIGATION);
+ when(mFlags.getMeasurementVtcConfigurableMaxEventReportsCount())
+ .thenReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT);
+ when(mFlags.getMeasurementEventReportsVtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS);
+ when(mFlags.getMeasurementEventReportsCtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS);
when(mMeasurementDao.insertSource(any())).thenReturn(DEFAULT_SOURCE_ID);
mContext = spy(sDefaultContext);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
@@ -277,17 +287,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedSource);
};
doAnswer(answerAsyncSourceFetcher)
@@ -305,14 +316,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -339,17 +343,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedSource);
};
doAnswer(answerAsyncSourceFetcher)
@@ -367,14 +372,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
Thread.currentThread().interrupt();
@@ -420,16 +418,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(LIST_TYPE_REDIRECT_URI_1, LIST_TYPE_REDIRECT_URI_2));
Answer<Optional<Source>> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- Uri.parse(LIST_TYPE_REDIRECT_URI_1),
- Uri.parse(LIST_TYPE_REDIRECT_URI_2)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedSource);
};
doAnswer(answerAsyncSourceFetcher)
@@ -444,14 +442,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -496,14 +487,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ List.of(LOCATION_TYPE_REDIRECT_URI));
Answer<Optional<Source>> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LOCATION,
- List.of(Uri.parse(LOCATION_TYPE_REDIRECT_URI)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedSource);
};
doAnswer(answerAsyncSourceFetcher)
@@ -518,14 +511,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -562,14 +548,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ List.of(LOCATION_TYPE_REDIRECT_URI));
Answer<Optional<Source>> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LOCATION,
- List.of(Uri.parse(LOCATION_TYPE_REDIRECT_URI)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedSource);
};
doAnswer(answerAsyncSourceFetcher)
@@ -621,6 +609,338 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
}
@Test
+ public void runAsyncRegistrationQueueWorker_appSrc_defaultReg_redirectWellKnown_typeLocation()
+ throws DatastoreException {
+ // Setup
+ AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
+ getSpyAsyncRegistrationQueueRunner();
+ AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ Answer<Optional<Source>> answerAsyncSourceFetcher =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ LOCATION_TYPE_REDIRECT_URI, validAsyncRegistration);
+ doAnswer(answerAsyncSourceFetcher)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+
+ List<Source.FakeReport> eventReportList =
+ Collections.singletonList(
+ new Source.FakeReport(new UnsignedLong(1L), 1L, List.of(APP_DESTINATION)));
+ when(mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(mMockedSource))
+ .thenReturn(eventReportList);
+ when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
+ .thenReturn(validAsyncRegistration);
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
+ when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
+
+ // Execution
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor =
+ ArgumentCaptor.forClass(AsyncRegistration.class);
+
+ // Assertions
+ verify(mAsyncSourceFetcher, times(1))
+ .fetchSource(any(AsyncRegistration.class), any(), any());
+ verify(mMeasurementDao, times(1)).insertEventReport(any(EventReport.class));
+ verify(mMeasurementDao, times(1)).insertSource(any(Source.class));
+ verify(mMeasurementDao, times(1))
+ .insertAsyncRegistration(asyncRegistrationArgumentCaptor.capture());
+
+ Assert.assertEquals(1, asyncRegistrationArgumentCaptor.getAllValues().size());
+ AsyncRegistration asyncReg = asyncRegistrationArgumentCaptor.getAllValues().get(0);
+ Assert.assertEquals(
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI), LOCATION_TYPE_REDIRECT_URI),
+ asyncReg.getRegistrationUri());
+
+ ArgumentCaptor<KeyValueData> redirectCountCaptor =
+ ArgumentCaptor.forClass(KeyValueData.class);
+ verify(mMeasurementDao, times(1)).insertOrUpdateKeyValueData(redirectCountCaptor.capture());
+ assertEquals(2, redirectCountCaptor.getValue().getRegistrationRedirectCount());
+
+ verify(mMeasurementDao, times(1)).deleteAsyncRegistration(any(String.class));
+ }
+
+ @Test
+ public void runAsyncRegistrationQueueWorker_appSrc_defaultReg_redirectChain_typeLocation()
+ throws DatastoreException {
+ // Setup
+ AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
+ getSpyAsyncRegistrationQueueRunner();
+ AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ Answer<Optional<Source>> answerAsyncSourceFetcher =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ LOCATION_TYPE_REDIRECT_URI, validAsyncRegistration);
+ doAnswer(answerAsyncSourceFetcher)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+
+ List<Source.FakeReport> eventReportList =
+ Collections.singletonList(
+ new Source.FakeReport(new UnsignedLong(1L), 1L, List.of(APP_DESTINATION)));
+ when(mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(mMockedSource))
+ .thenReturn(eventReportList);
+ when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
+ .thenReturn(validAsyncRegistration);
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
+ when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
+
+ // Execution
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+ // Set up the second invocation.
+ Answer<Optional<Source>> answerAsyncSourceFetcher2 =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ LOCATION_TYPE_REDIRECT_URI_2, validAsyncRegistration);
+ doAnswer(answerAsyncSourceFetcher2)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ // Set up the third invocation.
+ Answer<Optional<Source>> answerAsyncSourceFetcher3 =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ LOCATION_TYPE_REDIRECT_URI_3, validAsyncRegistration);
+
+ doAnswer(answerAsyncSourceFetcher3)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ // Assertions for all invocations
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor =
+ ArgumentCaptor.forClass(AsyncRegistration.class);
+ verify(mMeasurementDao, times(3))
+ .insertAsyncRegistration(asyncRegistrationArgumentCaptor.capture());
+ Assert.assertEquals(3, asyncRegistrationArgumentCaptor.getAllValues().size());
+
+ ArgumentCaptor<KeyValueData> redirectCountCaptor =
+ ArgumentCaptor.forClass(KeyValueData.class);
+ verify(mMeasurementDao, times(3)).insertOrUpdateKeyValueData(redirectCountCaptor.capture());
+ assertEquals(4, redirectCountCaptor.getValue().getRegistrationRedirectCount());
+
+ // Assertions for first invocation
+ assertRepeatedAsyncRegistration(
+ asyncRegistrationArgumentCaptor,
+ 0,
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI),
+ LOCATION_TYPE_REDIRECT_URI.toString()));
+
+ // Assertions for second invocation
+ assertRepeatedAsyncRegistration(
+ asyncRegistrationArgumentCaptor,
+ 1,
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI_2),
+ LOCATION_TYPE_REDIRECT_URI_2.toString()));
+
+ // Assertions for third invocation
+ assertRepeatedAsyncRegistration(
+ asyncRegistrationArgumentCaptor,
+ 2,
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI_3),
+ LOCATION_TYPE_REDIRECT_URI_3.toString()));
+ }
+
+ @Test
+ public void runAsyncRegistrationQueueWorker_appSrc_defaultReg_redirectWithExistingPathAndQuery()
+ throws DatastoreException {
+ // Setup
+ AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
+ getSpyAsyncRegistrationQueueRunner();
+ AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ String redirectWithExistingPath = LOCATION_TYPE_REDIRECT_URI + "/path?key=value";
+ Answer<Optional<Source>> answerAsyncSourceFetcher =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ redirectWithExistingPath, validAsyncRegistration);
+ doAnswer(answerAsyncSourceFetcher)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+
+ List<Source.FakeReport> eventReportList =
+ Collections.singletonList(
+ new Source.FakeReport(new UnsignedLong(1L), 1L, List.of(APP_DESTINATION)));
+ when(mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(mMockedSource))
+ .thenReturn(eventReportList);
+ when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
+ .thenReturn(validAsyncRegistration);
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
+ when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
+
+ // Execution
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor =
+ ArgumentCaptor.forClass(AsyncRegistration.class);
+
+ // Assertions
+ verify(mAsyncSourceFetcher, times(1))
+ .fetchSource(any(AsyncRegistration.class), any(), any());
+ verify(mMeasurementDao, times(1)).insertEventReport(any(EventReport.class));
+ verify(mMeasurementDao, times(1)).insertSource(any(Source.class));
+ verify(mMeasurementDao, times(1))
+ .insertAsyncRegistration(asyncRegistrationArgumentCaptor.capture());
+
+ Assert.assertEquals(1, asyncRegistrationArgumentCaptor.getAllValues().size());
+ AsyncRegistration asyncReg = asyncRegistrationArgumentCaptor.getAllValues().get(0);
+
+ Uri expectedUri =
+ Uri.parse(
+ LOCATION_TYPE_REDIRECT_URI
+ + "/"
+ + AsyncRedirects.WELL_KNOWN_PATH_SEGMENT
+ + "?"
+ + AsyncRedirects.WELL_KNOWN_QUERY_PARAM
+ + "="
+ + Uri.encode(redirectWithExistingPath));
+ Assert.assertEquals(expectedUri, asyncReg.getRegistrationUri());
+ }
+
+ @Test
+ public void runAsyncRegistrationQueueWorker_noSourceReg_RedirectHasSource()
+ throws DatastoreException {
+ // Setup
+ AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
+ getSpyAsyncRegistrationQueueRunner();
+ AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+
+ // Create an empty response for fetchSource. This is necessary because we need to mock the
+ // addition of a redirect, despite a failing initial source registration.
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ List.of(LOCATION_TYPE_REDIRECT_URI));
+ redirectHeaders.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+ Answer<Optional<Source>> answerEmptySource =
+ invocation -> {
+ AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
+ asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
+ return Optional.empty();
+ };
+
+ doAnswer(answerEmptySource).when(mAsyncSourceFetcher).fetchSource(any(), any(), any());
+
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+
+ List<Source.FakeReport> eventReportList =
+ Collections.singletonList(
+ new Source.FakeReport(new UnsignedLong(1L), 1L, List.of(APP_DESTINATION)));
+ when(mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(mMockedSource))
+ .thenReturn(eventReportList);
+ when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
+ .thenReturn(validAsyncRegistration);
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
+ when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
+
+ // Execution
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ // Set up second invocation of runner. This time, do return a valid source.
+ Answer<Optional<Source>> answerAsyncSourceFetcher =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ LOCATION_TYPE_REDIRECT_URI_2, validAsyncRegistration);
+
+ doAnswer(answerAsyncSourceFetcher)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor =
+ ArgumentCaptor.forClass(AsyncRegistration.class);
+
+ // Assertions
+ verify(mAsyncSourceFetcher, times(2))
+ .fetchSource(any(AsyncRegistration.class), any(), any());
+ verify(mMeasurementDao, times(1)).insertEventReport(any(EventReport.class));
+ verify(mMeasurementDao, times(1)).insertSource(any(Source.class));
+ verify(mMeasurementDao, times(2))
+ .insertAsyncRegistration(asyncRegistrationArgumentCaptor.capture());
+
+ Assert.assertEquals(2, asyncRegistrationArgumentCaptor.getAllValues().size());
+ AsyncRegistration asyncReg = asyncRegistrationArgumentCaptor.getAllValues().get(0);
+
+ // Assert first invocation's redirect
+ Uri expectedUri =
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI),
+ LOCATION_TYPE_REDIRECT_URI.toString());
+ Assert.assertEquals(expectedUri, asyncReg.getRegistrationUri());
+
+ AsyncRegistration asyncReg2 = asyncRegistrationArgumentCaptor.getAllValues().get(1);
+
+ // Assert second invocation's redirect
+ expectedUri =
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI_2),
+ LOCATION_TYPE_REDIRECT_URI_2.toString());
+ Assert.assertEquals(expectedUri, asyncReg2.getRegistrationUri());
+ }
+
+ @Test
+ public void runAsyncRegistrationQueueWorker_appSrc_defaultReg_redirectAlreadyWellKnown()
+ throws DatastoreException {
+ // Setup
+ AsyncRegistrationQueueRunner asyncRegistrationQueueRunner =
+ getSpyAsyncRegistrationQueueRunner();
+ AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
+ String redirectAlreadyWellKnown =
+ LOCATION_TYPE_REDIRECT_URI + "/" + AsyncRedirects.WELL_KNOWN_PATH_SEGMENT;
+ Answer<Optional<Source>> answerAsyncSourceFetcher =
+ getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ redirectAlreadyWellKnown, validAsyncRegistration);
+ doAnswer(answerAsyncSourceFetcher)
+ .when(mAsyncSourceFetcher)
+ .fetchSource(any(), any(), any());
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+
+ List<Source.FakeReport> eventReportList =
+ Collections.singletonList(
+ new Source.FakeReport(new UnsignedLong(1L), 1L, List.of(APP_DESTINATION)));
+ when(mSourceNoiseHandler.assignAttributionModeAndGenerateFakeReports(mMockedSource))
+ .thenReturn(eventReportList);
+ when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
+ .thenReturn(validAsyncRegistration);
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
+ when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
+
+ // Execution
+
+ asyncRegistrationQueueRunner.runAsyncRegistrationQueueWorker();
+
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor =
+ ArgumentCaptor.forClass(AsyncRegistration.class);
+
+ // Assertions
+ verify(mAsyncSourceFetcher, times(1))
+ .fetchSource(any(AsyncRegistration.class), any(), any());
+ verify(mMeasurementDao, times(1)).insertEventReport(any(EventReport.class));
+ verify(mMeasurementDao, times(1)).insertSource(any(Source.class));
+ verify(mMeasurementDao, times(1))
+ .insertAsyncRegistration(asyncRegistrationArgumentCaptor.capture());
+
+ Assert.assertEquals(1, asyncRegistrationArgumentCaptor.getAllValues().size());
+ AsyncRegistration asyncReg = asyncRegistrationArgumentCaptor.getAllValues().get(0);
+ // Assert .well-known isn't duplicated in path.
+ Assert.assertEquals(
+ getRegistrationRedirectToWellKnownUri(
+ Uri.parse(LOCATION_TYPE_REDIRECT_URI), redirectAlreadyWellKnown.toString()),
+ asyncReg.getRegistrationUri());
+ }
+
+ @Test
public void runAsyncRegistrationQueueWorker_appInstalled_markToBeDeleted()
throws DatastoreException, PackageManager.NameNotFoundException {
// Setup
@@ -639,17 +959,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
mLogger);
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(
SourceFixture.getValidSourceBuilder()
.setDropSourceIfInstalled(true)
@@ -670,14 +991,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -713,17 +1027,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
mLogger);
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(
SourceFixture.getValidSourceBuilder()
.setDropSourceIfInstalled(true)
@@ -744,14 +1059,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -786,17 +1094,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
mLogger);
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(
SourceFixture.getValidSourceBuilder()
.setDropSourceIfInstalled(false)
@@ -817,14 +1126,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -860,17 +1162,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
mLogger);
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppSource();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncSourceFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(
SourceFixture.getValidSourceBuilder()
.setDropSourceIfInstalled(false)
@@ -891,14 +1194,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -922,17 +1218,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(LIST_TYPE_REDIRECT_URI_1, LIST_TYPE_REDIRECT_URI_2));
Answer<Optional<Trigger>> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- Uri.parse(LIST_TYPE_REDIRECT_URI_1),
- Uri.parse(LIST_TYPE_REDIRECT_URI_2)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -942,14 +1237,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -996,15 +1284,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ List.of(LOCATION_TYPE_REDIRECT_URI));
Answer<Optional<Trigger>> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LOCATION,
- List.of(Uri.parse(LOCATION_TYPE_REDIRECT_URI)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -1014,14 +1303,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
when(mMeasurementDao.fetchNextQueuedAsyncRegistration(anyInt(), any()))
.thenReturn(validAsyncRegistration)
.thenReturn(null);
- KeyValueData redirectCount =
- new KeyValueData.Builder()
- .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
- .setKey(
- AsyncRegistrationFixture.ValidAsyncRegistrationParams
- .REGISTRATION_ID)
- .setValue(null) // Should default to 1
- .build();
+ KeyValueData redirectCount = getKeyValueDataRedirectCount();
when(mMeasurementDao.getKeyValueData(anyString(), any())).thenReturn(redirectCount);
// Execution
@@ -1059,15 +1341,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ List.of(LOCATION_TYPE_REDIRECT_URI));
Answer<Optional<Trigger>> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LOCATION,
- List.of(Uri.parse(LOCATION_TYPE_REDIRECT_URI)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -1120,17 +1403,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ IntStream.range(1, 10)
+ .mapToObj((i) -> LIST_TYPE_REDIRECT_URI_1 + "/" + i)
+ .collect(Collectors.toList()));
Answer<Optional<Trigger>> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- IntStream.range(1, 10)
- .mapToObj((i) -> Uri.parse(LIST_TYPE_REDIRECT_URI_1 + "/" + i))
- .collect(Collectors.toList()));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -1189,15 +1473,16 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LOCATION,
+ Collections.singletonList((LOCATION_TYPE_REDIRECT_URI)));
Answer<Optional<Trigger>> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LOCATION,
- Collections.singletonList(Uri.parse(LOCATION_TYPE_REDIRECT_URI)));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -1433,17 +1718,18 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.of(mMockedTrigger);
};
doAnswer(answerAsyncTriggerFetcher)
@@ -1610,18 +1896,19 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
getSpyAsyncRegistrationQueueRunner();
AsyncRegistration validAsyncRegistration = createAsyncRegistrationForAppTrigger();
-
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(
+ AsyncRegistration.RedirectType.LIST,
+ List.of(
+ WebUtil.validUri("https://example.test/sF1").toString(),
+ WebUtil.validUri("https://example.test/sF2").toString()));
Answer<?> answerAsyncTriggerFetcher =
invocation -> {
AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
asyncFetchStatus.setEntityStatus(AsyncFetchStatus.EntityStatus.PARSING_ERROR);
- AsyncRedirect asyncRedirect = invocation.getArgument(2);
- asyncRedirect.addToRedirects(
- AsyncRegistration.RedirectType.LIST,
- List.of(
- WebUtil.validUri("https://example.test/sF1"),
- WebUtil.validUri("https://example.test/sF2")));
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, validAsyncRegistration);
return Optional.empty();
};
doAnswer(answerAsyncTriggerFetcher)
@@ -3285,12 +3572,56 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
assertTrue(status);
}
- private RegistrationRequest buildRequest(String registrationUri) {
- return new RegistrationRequest.Builder(
- RegistrationRequest.REGISTER_SOURCE,
- Uri.parse(registrationUri),
- sDefaultContext.getAttributionSource().getPackageName(),
- SDK_PACKAGE_NAME)
+ private static KeyValueData getKeyValueDataRedirectCount() {
+ return new KeyValueData.Builder()
+ .setDataType(KeyValueData.DataType.REGISTRATION_REDIRECT_COUNT)
+ .setKey(AsyncRegistrationFixture.ValidAsyncRegistrationParams.REGISTRATION_ID)
+ .setValue(null) // Should default to 1
+ .build();
+ }
+
+ private Map<String, List<String>> getRedirectHeaders(
+ AsyncRegistration.RedirectType redirectType, List<String> uris) {
+ Map<String, List<String>> headers = new HashMap<>();
+ if (redirectType.equals(AsyncRegistration.RedirectType.LOCATION)) {
+ headers.put(AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, uris);
+ } else {
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, uris);
+ }
+
+ return headers;
+ }
+
+ private void assertRepeatedAsyncRegistration(
+ ArgumentCaptor<AsyncRegistration> asyncRegistrationArgumentCaptor,
+ int index,
+ Uri redirectUri) {
+ AsyncRegistration asyncReg = asyncRegistrationArgumentCaptor.getAllValues().get(index);
+ Assert.assertEquals(redirectUri, asyncReg.getRegistrationUri());
+ }
+
+ private Answer<Optional<Source>> getAsyncSourceAnswerForLocationTypeRedirectToWellKnown(
+ String redirectUri, AsyncRegistration asyncRegistration) {
+ Map<String, List<String>> redirectHeaders =
+ getRedirectHeaders(AsyncRegistration.RedirectType.LOCATION, List.of(redirectUri));
+ redirectHeaders.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+ return invocation -> {
+ AsyncFetchStatus asyncFetchStatus = invocation.getArgument(1);
+ asyncFetchStatus.setResponseStatus(AsyncFetchStatus.ResponseStatus.SUCCESS);
+ AsyncRedirects asyncRedirects = invocation.getArgument(2);
+ asyncRedirects.configure(redirectHeaders, mFlags, asyncRegistration);
+ return Optional.of(mMockedSource);
+ };
+ }
+
+ private Uri getRegistrationRedirectToWellKnownUri(
+ Uri registrationUri, String originalUriString) {
+ return registrationUri
+ .buildUpon()
+ .encodedPath(AsyncRedirects.WELL_KNOWN_PATH_SEGMENT)
+ .appendQueryParameter(AsyncRedirects.WELL_KNOWN_QUERY_PARAM, originalUriString)
.build();
}
@@ -3316,7 +3647,7 @@ public final class AsyncRegistrationQueueRunnerTest extends AdServicesExtendedMo
new Source.FakeReport(
new UnsignedLong(0L),
new EventReportWindowCalcDelegate(mFlags)
- .getReportingTimeForNoising(source, 0, false),
+ .getReportingTimeForNoising(source, 0),
destinations))
.collect(Collectors.toList());
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncSourceFetcherTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncSourceFetcherTest.java
index 0489c91f50..aa07077e89 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncSourceFetcherTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncSourceFetcherTest.java
@@ -122,6 +122,15 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
private static final String LIST_TYPE_REDIRECT_URI = WebUtil.validUrl("https://bar.test");
private static final String LOCATION_TYPE_REDIRECT_URI =
WebUtil.validUrl("https://example.test");
+ private static final String LOCATION_TYPE_REDIRECT_WELLKNOWN_URI =
+ WebUtil.validUrl(
+ LOCATION_TYPE_REDIRECT_URI
+ + "/"
+ + AsyncRedirects.WELL_KNOWN_PATH_SEGMENT
+ + "?"
+ + AsyncRedirects.WELL_KNOWN_QUERY_PARAM
+ + "="
+ + Uri.encode(LOCATION_TYPE_REDIRECT_URI));
private static final long ALT_EVENT_ID = 123456789;
private static final long ALT_EXPIRY = 456790;
private static final Uri REGISTRATION_URI_1 = WebUtil.validUri("https://subdomain.foo.test");
@@ -226,6 +235,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
.thenReturn(Flags.MEASUREMENT_MAX_INSTALL_ATTRIBUTION_WINDOW);
when(mFlags.getMeasurementMinInstallAttributionWindow())
.thenReturn(Flags.MEASUREMENT_MIN_INSTALL_ATTRIBUTION_WINDOW);
+ when(mFlags.getMeasurementVtcConfigurableMaxEventReportsCount())
+ .thenReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT);
+ when(mFlags.getMeasurementEventReportsVtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS);
+ when(mFlags.getMeasurementEventReportsCtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS);
}
@Test
@@ -260,13 +275,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "}\n")));
when(mFlags.getMeasurementEnableXNA()).thenReturn(true);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
asyncFetchStatus.setRegistrationDelay(0L);
// Execution
AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -319,7 +334,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
when(mUrlConnection.getHeaderFields())
.thenReturn(
Map.of(
- "Attribution-Reporting-Redirect",
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY,
List.of(LIST_TYPE_REDIRECT_URI),
"Attribution-Reporting-Register-Source",
List.of(
@@ -340,19 +355,20 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
// Redirects should be parsed & added
verify(mFetcher, times(1)).openUrl(any());
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LIST_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI, asyncRedirects.getRedirects().get(0).getUri().toString());
// Source shouldn't be created
assertEquals(
@@ -385,12 +401,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -433,12 +449,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -476,12 +492,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -520,12 +536,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -555,12 +571,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -597,12 +613,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"install_attribution_window\": null,\n"
+ " \"post_install_exclusivity_window\": null\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -646,12 +662,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\":"
+ " \"9876543210\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -678,12 +694,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
WebUtil.validUri("http://foo.test"),
sContext.getPackageName(),
SDK_PACKAGE_NAME);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.INVALID_URL, asyncFetchStatus.getResponseStatus());
@@ -698,12 +714,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
WebUtil.validUri("bad-schema://foo.test"),
sContext.getPackageName(),
SDK_PACKAGE_NAME);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.INVALID_URL, asyncFetchStatus.getResponseStatus());
@@ -716,12 +732,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
doThrow(new IOException("Bad internet things"))
.when(mFetcher)
.openUrl(new URL(DEFAULT_REGISTRATION));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.NETWORK_ERROR,
@@ -743,12 +759,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"source_event_id\": \""
+ DEFAULT_EVENT_ID
+ "\"")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
@@ -762,12 +778,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(DEFAULT_REGISTRATION));
when(mUrlConnection.getResponseCode()).thenReturn(200);
when(mUrlConnection.getHeaderFields()).thenReturn(Collections.emptyMap());
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -790,12 +806,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"destination\": \""
+ DEFAULT_DESTINATION
+ "\"")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
@@ -821,12 +837,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -861,12 +877,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"source_event_id\":\"" + DEFAULT_EVENT_ID + "\","
+ "\"expiry\":\"-15\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -893,12 +909,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"86399\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -933,12 +949,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"2592001\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -980,12 +996,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ TimeUnit.DAYS.toSeconds(1) / 2L)
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1025,12 +1041,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
- 1L)
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1067,12 +1083,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ String.valueOf(TimeUnit.HOURS.toSeconds(25))
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1107,12 +1123,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"172800\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1149,12 +1165,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"86400\","
+ "\"aggregatable_report_window\":\"86400\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1192,12 +1208,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2000\","
+ "\"aggregatable_report_window\":\"1728\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1236,12 +1252,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2000\","
+ "\"aggregatable_report_window\":\"1728\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1279,12 +1295,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"172801\","
+ "\"aggregatable_report_window\":\"172801\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1323,12 +1339,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2592001\","
+ "\"aggregatable_report_window\":\"2592001\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1362,12 +1378,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":86400,"
+ "\"aggregatable_report_window\":86400"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -1397,12 +1413,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"-86400\","
+ "\"aggregatable_report_window\":\"86400\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -1428,12 +1444,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"86400\","
+ "\"aggregatable_report_window\":\"-86400\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -1457,12 +1473,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"source_event_id\":\"" + DEFAULT_EVENT_ID + "\","
+ "\"priority\":15"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -1486,13 +1502,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":35}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -1517,13 +1533,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"-35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1546,13 +1562,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"-35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -1577,13 +1593,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\",\"source_event_id\":\""
+ "18446744073709551616\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1606,13 +1622,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\",\"source_event_id\":\""
+ "18446744073709551616\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -1637,13 +1653,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"8l2\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1666,13 +1682,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"8l2\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -1713,13 +1729,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "}\n")));
when(mFlags.getMeasurementEnableXNA()).thenReturn(false);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -1751,13 +1767,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\",\"source_event_id\":\""
+ "18446744073709551615\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1793,13 +1809,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_key\":18}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1835,13 +1851,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_key\":\"-18\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1878,13 +1894,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"debug_key\":\"18446744073709551616\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1920,13 +1936,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_key\":\"987fs\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -1962,13 +1978,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_key\":\"18446744073709551615\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2005,12 +2021,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": null\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2047,12 +2063,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\",\n"
+ "\"expiry\": 1"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2089,12 +2105,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\",\n"
+ "\"expiry\": \"1\""
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2131,12 +2147,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\",\n"
+ "\"expiry\": 2678400"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2173,12 +2189,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\",\n"
+ "\"expiry\": \"2678400\""
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2213,13 +2229,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_reporting\":\"true\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2254,13 +2270,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_reporting\":\"invalid\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2295,13 +2311,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_reporting\":\"null\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2336,13 +2352,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\","
+ "\"debug_reporting\":null}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2376,13 +2392,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"source_event_id\":\""
+ DEFAULT_EVENT_ID
+ "\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
@@ -2421,12 +2437,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ""
+ "}\n"));
when(mUrlConnection.getHeaderFields()).thenReturn(headersSecondRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.SERVER_UNAVAILABLE,
@@ -2442,7 +2458,8 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
when(mUrlConnection.getResponseCode()).thenReturn(200);
Map<String, List<String>> headersFirstRequest = new HashMap<>();
headersFirstRequest.put("Attribution-Reporting-Register-Source", List.of("{}"));
- headersFirstRequest.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
+ headersFirstRequest.put(
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
Map<String, List<String>> headersSecondRequest = new HashMap<>();
headersSecondRequest.put(
"Attribution-Reporting-Register-Source",
@@ -2461,16 +2478,17 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
when(mUrlConnection.getHeaderFields())
.thenReturn(headersFirstRequest)
.thenReturn(headersSecondRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LIST_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI, asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
@@ -2500,14 +2518,15 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EXPIRY
+ ""
+ "}\n"));
- headersFirstRequest.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
+ headersFirstRequest.put(
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headersFirstRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(AsyncFetchStatus.EntityStatus.SUCCESS, asyncFetchStatus.getEntityStatus());
@@ -2520,8 +2539,9 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
assertEquals(
result.getEventTime() + TimeUnit.SECONDS.toMillis(DEFAULT_EXPIRY_ROUNDED),
result.getExpiryTime());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LIST_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI, asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
@@ -2549,14 +2569,15 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EXPIRY
+ "\""
+ "}\n"));
- headersFirstRequest.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
+ headersFirstRequest.put(
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headersFirstRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(AsyncFetchStatus.EntityStatus.SUCCESS, asyncFetchStatus.getEntityStatus());
@@ -2569,8 +2590,9 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
assertEquals(
result.getEventTime() + TimeUnit.SECONDS.toMillis(DEFAULT_EXPIRY_ROUNDED),
result.getExpiryTime());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LIST_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI, asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
@@ -2585,33 +2607,36 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
Map<String, List<String>> headers = getDefaultHeaders();
// Populate both 'list' and 'location' type headers
- headers.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
- headers.put("Location", List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
assertDefaultSourceRegistration(result);
- assertEquals(2, asyncRedirect.getRedirects().size());
+ assertEquals(2, asyncRedirects.getRedirects().size());
assertEquals(
LIST_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LIST)
.get(0)
+ .getUri()
.toString());
assertEquals(
LOCATION_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LOCATION)
.get(0)
+ .getUri()
.toString());
assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2625,22 +2650,25 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
Map<String, List<String>> headers = getDefaultHeaders();
// Populate only 'location' type header
- headers.put("Location", List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
assertDefaultSourceRegistration(result);
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LOCATION_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
@@ -2652,25 +2680,237 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
when(mUrlConnection.getResponseCode()).thenReturn(302);
Map<String, List<String>> headers = getDefaultHeaders();
- headers.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI, asyncRedirects.getRedirects().get(0).getUri().toString());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirects_locationRedirectHeadersToWellKnown() throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_WELLKNOWN_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirects_bothHeaders_locationTypeToWellKnown() throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
assertDefaultSourceRegistration(result);
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LIST_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(2, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_WELLKNOWN_URI,
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LOCATION)
+ .get(0)
+ .getUri()
+ .toString());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI,
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LIST)
+ .get(0)
+ .getUri()
+ .toString());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirects_wellKnownHeader_noop() throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ // Populate only redirect behavior header with no actual redirect
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(0, asyncRedirects.getRedirects().size());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirects_wellKnownHeader_acceptsListTypeWithNoLocationType() throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI,
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LIST)
+ .get(0)
+ .getUri()
+ .toString());
assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
+
+ @Test
+ public void testRedirects_locationRedirectHeaders_wellKnownHeaderMisconfigured()
+ throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG, List.of("BAD"));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirects_locationRedirectHeaders_wellKnownHeaderNull() throws Exception {
+ RegistrationRequest request = buildRequest(DEFAULT_REGISTRATION);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG, null);
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertDefaultSourceRegistration(result);
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+ assertEquals(DEFAULT_REGISTRATION, result.getRegistrationOrigin().toString());
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
// End tests for redirect types
@Test
@@ -2693,12 +2933,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -2736,12 +2976,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -2770,12 +3010,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2807,12 +3047,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2841,12 +3081,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2882,12 +3122,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2916,12 +3156,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2949,12 +3189,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\",\n"
+ filterData
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2967,8 +3207,10 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
when(mUrlConnection.getResponseCode()).thenReturn(200);
when(mUrlConnection.getHeaderFields())
- .thenReturn(Map.of(
- "Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI)))
+ .thenReturn(
+ Map.of(
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY,
+ List.of(LIST_TYPE_REDIRECT_URI)))
.thenReturn(
Map.of(
"Attribution-Reporting-Register-Source",
@@ -2987,22 +3229,23 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.HEADER_MISSING, asyncFetchStatus.getEntityStatus());
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
- assertEquals(1, asyncRedirect.getRedirects().size());
+ assertEquals(1, asyncRedirects.getRedirects().size());
assertEquals(
LIST_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LIST)
.get(0)
+ .getUri()
.toString());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -3027,12 +3270,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"aggregation_keys\": {\"campaignCounts\" :"
+ " \"0x159\", \"geoValue\" : \"0x5\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3065,12 +3308,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"aggregation_keys\": {\"campaignCounts\" :"
+ " \"0x159G\", \"geoValue\" : \"0x5\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -3098,12 +3341,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"aggregation_keys\": {\"campaignCounts\" :"
+ " \"0x159G\", \"geoValue\" : \"0x5\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3140,12 +3383,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\":"
+ " \"987654321\",\"aggregation_keys\": "
+ tooManyKeys)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
@@ -3176,12 +3419,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\":"
+ " \"987654321\",\"aggregation_keys\": "
+ tooManyKeys)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection).setRequestMethod("POST");
@@ -3207,12 +3450,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"aggregation_keys\": [\"campaignCounts\","
+ " \"0x159\", \"geoValue\", \"0x5\"]\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -3240,12 +3483,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\": \"0x159\","
+ "\"geoValue\": \"0x5\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -3272,12 +3515,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"aggregation_keys\": {\"campaignCounts\" :"
+ " \"0159\", \"geoValue\" : \"0x5\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -3305,12 +3548,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ LONG_AGGREGATE_KEY_PIECE
+ "\"}\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -3341,17 +3584,17 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
AsyncRegistration asyncRegistration = webSourceRegistrationRequest(request, true);
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -3392,14 +3635,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3443,14 +3686,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3489,14 +3732,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -3536,14 +3779,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"expiry\": \"432000\","
+ "\"source_event_id\": \"987654321\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -3573,14 +3816,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"2000\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3612,14 +3855,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"2592001\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3659,14 +3902,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ TimeUnit.DAYS.toSeconds(1) / 2L)
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true, Source.SourceType.EVENT),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3704,14 +3947,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
- 1L)
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true, Source.SourceType.EVENT),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3746,14 +3989,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ String.valueOf(TimeUnit.HOURS.toSeconds(25))
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true, Source.SourceType.NAVIGATION),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3786,14 +4029,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"expiry\":\"172800\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3828,14 +4071,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"86400\","
+ "\"aggregatable_report_window\":\"86400\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3872,14 +4115,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2000\","
+ "\"aggregatable_report_window\":\"1728\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3916,14 +4159,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2000\","
+ "\"aggregatable_report_window\":\"1728\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3959,14 +4202,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"172801\","
+ "\"aggregatable_report_window\":\"172801\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -4002,14 +4245,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_window\":\"2592001\","
+ "\"aggregatable_report_window\":\"2592001\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -4048,19 +4291,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -4100,18 +4343,18 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, false),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -4154,14 +4397,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -4201,19 +4444,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ aggregateSource
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(OS_DESTINATION, result.getAppDestinations().get(0));
assertEquals(filterData, result.getFilterDataString());
@@ -4257,24 +4500,24 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"aggregation_keys\": "
+ aggregateSource
+ "}"),
- "Attribution-Reporting-Redirect",
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY,
List.of(LIST_TYPE_REDIRECT_URI),
- "Location",
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY,
List.of(LOCATION_TYPE_REDIRECT_URI)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(filterData, result.getFilterDataString());
@@ -4318,14 +4561,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"filter_data\": "
+ filterData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -4362,19 +4605,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_JOIN_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -4419,19 +4662,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_JOIN_KEY
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -4483,14 +4726,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"filter_data\": "
+ filterData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -4529,20 +4772,20 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ WEB_DESTINATION
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(OS_DESTINATION, result.getAppDestinations().get(0));
assertNull(result.getFilterDataString());
@@ -4585,20 +4828,20 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(OS_DESTINATION, result.getAppDestinations().get(0));
assertNull(result.getFilterDataString());
@@ -4638,19 +4881,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(OS_DESTINATION, result.getAppDestinations().get(0));
assertNull(result.getFilterDataString());
@@ -4683,14 +4926,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_EVENT_ID
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
@@ -4723,19 +4966,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ EVENT_ID_1
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertNull(result.getFilterDataString());
@@ -4776,14 +5019,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ EVENT_ID_1
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -4813,13 +5056,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
asyncFetchStatus.setRegistrationDelay(0L);
AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
// Execution
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
FetcherUtil.emitHeaderMetrics(mFlags, mLogger, asyncRegistration, asyncFetchStatus);
@@ -4873,13 +5116,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_JOIN_KEY
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -4929,13 +5172,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_JOIN_KEY
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -4977,7 +5220,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
// Execution
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirect());
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5013,7 +5256,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
// Execution
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirect());
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5053,7 +5296,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\""
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
@@ -5061,7 +5304,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
mFetcher.fetchSource(
appSourceRegistrationRequestWithAdId(request),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5105,19 +5348,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_AD_ID_VALUE
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -5162,19 +5405,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_AD_ID_VALUE
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -5218,19 +5461,19 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEBUG_AD_ID_VALUE
+ "\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
assertEquals(Uri.parse(DEFAULT_DESTINATION), result.getAppDestinations().get(0));
assertEquals(EVENT_ID_1, result.getEventId());
@@ -5246,7 +5489,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
}
@Test
- public void fetchSource_setsFakeEnrollmentId_whenDisableEnrollmentFlagIsTrue()
+ public void fetchSource_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrue()
throws Exception {
String uri = "https://test1.example.com:8081";
RegistrationRequest request = buildRequest(uri);
@@ -5270,13 +5513,87 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
// Execution
Optional<Source> fetch =
- mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirect());
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Source result = fetch.get();
assertEquals("https://test1.example.com:8081", result.getRegistrationOrigin().toString());
- assertEquals(Enrollment.FAKE_ENROLLMENT, result.getEnrollmentId());
+ assertEquals("https://example.com", result.getEnrollmentId());
+ assertEquals(DEFAULT_DESTINATION, result.getAppDestinations().get(0).toString());
+ assertEquals(DEFAULT_EVENT_ID, result.getEventId());
+ verify(mUrlConnection).setRequestMethod("POST");
+ }
+
+ @Test
+ public void fetchSource_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrueForIP()
+ throws Exception {
+ String uri = "https://127.0.0.1:8081";
+ RegistrationRequest request = buildRequest(uri);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(uri));
+ doReturn(true).when(mFlags).isDisableMeasurementEnrollmentCheck();
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mUrlConnection.getHeaderFields())
+ .thenReturn(
+ Map.of(
+ "Attribution-Reporting-Register-Source",
+ List.of(
+ "{\n"
+ + "\"destination\": \""
+ + DEFAULT_DESTINATION
+ + "\",\n"
+ + "\"source_event_id\": \""
+ + DEFAULT_EVENT_ID
+ + "\"\n"
+ + "}\n")));
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertEquals("https://127.0.0.1:8081", result.getRegistrationOrigin().toString());
+ assertEquals("https://127.0.0.1", result.getEnrollmentId());
+ assertEquals(DEFAULT_DESTINATION, result.getAppDestinations().get(0).toString());
+ assertEquals(DEFAULT_EVENT_ID, result.getEventId());
+ verify(mUrlConnection).setRequestMethod("POST");
+ }
+
+ @Test
+ public void fetchSource_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrueForLocalhost()
+ throws Exception {
+ String uri = "https://localhost:8081";
+ RegistrationRequest request = buildRequest(uri);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(uri));
+ doReturn(true).when(mFlags).isDisableMeasurementEnrollmentCheck();
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mUrlConnection.getHeaderFields())
+ .thenReturn(
+ Map.of(
+ "Attribution-Reporting-Register-Source",
+ List.of(
+ "{\n"
+ + "\"destination\": \""
+ + DEFAULT_DESTINATION
+ + "\",\n"
+ + "\"source_event_id\": \""
+ + DEFAULT_EVENT_ID
+ + "\"\n"
+ + "}\n")));
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appSourceRegistrationRequest(request);
+ // Execution
+ Optional<Source> fetch =
+ mFetcher.fetchSource(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Source result = fetch.get();
+ assertEquals("https://localhost:8081", result.getRegistrationOrigin().toString());
+ assertEquals("https://localhost", result.getEnrollmentId());
assertEquals(DEFAULT_DESTINATION, result.getAppDestinations().get(0).toString());
assertEquals(DEFAULT_EVENT_ID, result.getEventId());
verify(mUrlConnection).setRequestMethod("POST");
@@ -5307,12 +5624,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5345,12 +5662,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5384,12 +5701,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5423,12 +5740,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5463,12 +5780,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5502,12 +5819,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\"\n"
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5537,12 +5854,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5574,12 +5891,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"trigger_data_matching\": \"INVALID\","
+ "\"post_install_exclusivity_window\": \"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -5623,12 +5940,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5693,12 +6010,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5775,12 +6092,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5837,12 +6154,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -5887,12 +6204,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5954,14 +6271,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -6040,12 +6357,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -6092,12 +6409,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6142,12 +6459,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6193,12 +6510,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -6248,12 +6565,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -6321,12 +6638,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -6376,12 +6693,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -6447,12 +6764,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6499,14 +6816,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6551,13 +6868,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6603,7 +6920,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
@@ -6611,7 +6928,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6667,13 +6984,13 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6731,7 +7048,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
@@ -6739,7 +7056,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertTrue(fetch.isEmpty());
}
@@ -6795,12 +7112,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -6878,14 +7195,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}\n")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -6951,12 +7268,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -7006,14 +7323,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
webSourceRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -7081,12 +7398,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7154,12 +7471,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7226,12 +7543,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7261,12 +7578,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\","
+ " \"max_event_level_reports\": 21"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7295,12 +7612,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\","
+ " \"max_event_level_reports\": -3"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7330,12 +7647,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"source_event_id\": \"987654321\","
+ " \"max_event_level_reports\": \"3\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7372,12 +7689,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7413,12 +7730,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7454,12 +7771,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -7506,12 +7823,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -7554,12 +7871,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7591,12 +7908,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7628,12 +7945,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7665,12 +7982,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\"event_report_windows\":"
+ eventReportWindows
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7705,12 +8022,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7744,12 +8061,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7783,12 +8100,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7822,12 +8139,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -7874,12 +8191,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -7927,12 +8244,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ " \"post_install_exclusivity_window\": "
+ "\"987654\""
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -7974,12 +8291,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -8023,12 +8340,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -8068,12 +8385,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -8113,12 +8430,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ ","
+ " \"max_event_level_reports\": 5"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -8144,14 +8461,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
appSourceRegistrationRequestWithPostBody(request, POST_BODY),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(POST_BODY, outputStream.toString());
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -8176,14 +8493,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
appSourceRegistrationRequestWithPostBody(request, null),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -8209,7 +8526,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
String emptyPostBody = "";
@@ -8217,7 +8534,7 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
mFetcher.fetchSource(
appSourceRegistrationRequestWithPostBody(request, emptyPostBody),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(emptyPostBody, outputStream.toString());
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -8242,14 +8559,14 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ DEFAULT_DESTINATION
+ "\","
+ "\"source_event_id\":\"35\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
appSourceRegistrationRequestWithPostBody(request, POST_BODY),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -8276,12 +8593,12 @@ public final class AsyncSourceFetcherTest extends AdServicesExtendedMockitoTestC
+ "\","
+ "\"source_event_id\":\"35\","
+ "\"drop_source_if_installed\":true}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Source> fetch =
mFetcher.fetchSource(
- appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appSourceRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncTriggerFetcherTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncTriggerFetcherTest.java
index f22a19eb9c..41605bc539 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncTriggerFetcherTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/AsyncTriggerFetcherTest.java
@@ -145,6 +145,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
WebUtil.validUrl("https://subdomain.bar.test");
private static final String LOCATION_TYPE_REDIRECT_URI =
WebUtil.validUrl("https://example.test");
+ private static final String LOCATION_TYPE_REDIRECT_WELLKNOWN_URI =
+ WebUtil.validUrl(
+ LOCATION_TYPE_REDIRECT_URI
+ + "/"
+ + AsyncRedirects.WELL_KNOWN_PATH_SEGMENT
+ + "?"
+ + AsyncRedirects.WELL_KNOWN_QUERY_PARAM
+ + "="
+ + Uri.encode(LOCATION_TYPE_REDIRECT_URI));
private static final Uri REGISTRATION_URI_1 = WebUtil.validUri("https://subdomain.foo.test");
private static final WebTriggerParams TRIGGER_REGISTRATION_1 =
new WebTriggerParams.Builder(REGISTRATION_URI_1).setDebugKeyAllowed(true).build();
@@ -248,13 +257,13 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
asyncFetchStatus.setRegistrationDelay(0L);
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -325,13 +334,13 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
asyncFetchStatus.setRegistrationDelay(0L);
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -385,12 +394,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -439,12 +448,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -488,12 +497,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -541,12 +550,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -590,12 +599,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -643,12 +652,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -692,12 +701,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -745,12 +754,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -792,12 +801,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregateDedupKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -816,34 +825,37 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map<String, List<String>> headers = getDefaultHeaders();
// Populate both 'list' and 'location' type headers
- headers.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
- headers.put("Location", List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertTriggerRegistration(asyncRegistration, result);
- assertEquals(2, asyncRedirect.getRedirects().size());
+ assertEquals(2, asyncRedirects.getRedirects().size());
assertEquals(
LIST_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LIST)
.get(0)
+ .getUri()
.toString());
assertEquals(
LOCATION_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LOCATION)
.get(0)
+ .getUri()
.toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -857,68 +869,295 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map<String, List<String>> headers = getDefaultHeaders();
// Populate only 'location' type header
- headers.put("Location", List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertTriggerRegistration(asyncRegistration, result);
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(LOCATION_TYPE_REDIRECT_URI, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
@Test
- public void testRedirectType_locationRedirectType_ignoresListType() throws Exception {
+ public void testRedirectType_locationRedirectType_acceptsListType() throws Exception {
RegistrationRequest request = buildRequest(TRIGGER_URI);
doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
when(mUrlConnection.getResponseCode()).thenReturn(302);
Map<String, List<String>> headers = getDefaultHeaders();
// Populate both 'list' and 'location' type headers
- headers.put("Attribution-Reporting-Redirect", List.of(LIST_TYPE_REDIRECT_URI));
- headers.put("Location", List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
when(mUrlConnection.getHeaderFields()).thenReturn(headers);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertTriggerRegistration(asyncRegistration, result);
- assertEquals(2, asyncRedirect.getRedirects().size());
+ assertEquals(2, asyncRedirects.getRedirects().size());
assertEquals(
LOCATION_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LOCATION)
+ .get(0)
+ .getUri()
+ .toString());
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI,
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LIST)
+ .get(0)
+ .getUri()
+ .toString());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirectType_locationRedirectHeaderType_wellKnownPath() throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ // Populate only 'location' type header
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_WELLKNOWN_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirectType_locationRedirectType_wellKnownPath_acceptsList() throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(2, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_WELLKNOWN_URI,
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LOCATION)
.get(0)
+ .getUri()
.toString());
assertEquals(
LIST_TYPE_REDIRECT_URI,
- asyncRedirect
+ asyncRedirects
.getRedirectsByType(AsyncRegistration.RedirectType.LIST)
.get(0)
+ .getUri()
.toString());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
}
+ @Test
+ public void testWellKnownPathHeader_noop() throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ // Populate behavior config header, but no redirects.
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(0, asyncRedirects.getRedirects().size());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testWellKnownPathHeader_acceptsListTypeWithNoLocationType() throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ // Populate behavior config header, but no Location type redirect.
+ headers.put(
+ AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG,
+ List.of(AsyncRedirects.REDIRECT_302_TO_WELL_KNOWN));
+ headers.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(LIST_TYPE_REDIRECT_URI));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(1, asyncRedirects.getRedirects().size());
+
+ assertEquals(
+ LIST_TYPE_REDIRECT_URI,
+ asyncRedirects
+ .getRedirectsByType(AsyncRegistration.RedirectType.LIST)
+ .get(0)
+ .getUri()
+ .toString());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirectType_locationRedirectHeaderType_wellKnownHeaderMisconfigured()
+ throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG, List.of("BAD"));
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
+ @Test
+ public void testRedirectType_locationRedirectHeaderType_wellKnownHeaderNull() throws Exception {
+ RegistrationRequest request = buildRequest(TRIGGER_URI);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(TRIGGER_URI));
+ when(mUrlConnection.getResponseCode()).thenReturn(302);
+ when(mFlags.getMeasurementEnableRedirectToWellKnownPath()).thenReturn(true);
+ Map<String, List<String>> headers = getDefaultHeaders();
+
+ headers.put(
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY, List.of(LOCATION_TYPE_REDIRECT_URI));
+ headers.put(AsyncRedirects.HEADER_ATTRIBUTION_REPORTING_REDIRECT_CONFIG, null);
+
+ when(mUrlConnection.getHeaderFields()).thenReturn(headers);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertTriggerRegistration(asyncRegistration, result);
+
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(
+ LOCATION_TYPE_REDIRECT_URI,
+ asyncRedirects.getRedirects().get(0).getUri().toString());
+
+ verify(mUrlConnection, times(1)).setRequestMethod("POST");
+ }
+
// End tests for redirect types
@Test
@@ -935,12 +1174,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -966,12 +1205,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggers + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -991,12 +1230,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"debug_key\": \"" + DEBUG_KEY + "\"}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1021,12 +1260,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1055,12 +1294,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggers + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -1080,15 +1319,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1107,15 +1346,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1135,12 +1374,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1165,15 +1404,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1194,12 +1433,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1223,15 +1462,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1251,12 +1490,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1280,12 +1519,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1309,12 +1548,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1338,15 +1577,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1366,15 +1605,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1394,15 +1633,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1422,12 +1661,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1452,12 +1691,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1482,15 +1721,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1510,15 +1749,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1539,12 +1778,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1568,15 +1807,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1596,12 +1835,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1628,15 +1867,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1658,15 +1897,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1689,12 +1928,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1721,15 +1960,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1752,12 +1991,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1784,15 +2023,15 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
- assertEquals(AsyncFetchStatus.EntityStatus.VALIDATION_ERROR,
- asyncFetchStatus.getEntityStatus());
+ assertEquals(
+ AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -1815,12 +2054,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1845,12 +2084,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1875,12 +2114,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -1905,12 +2144,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -1935,12 +2174,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -1961,12 +2200,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -1995,12 +2234,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2021,12 +2260,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2047,12 +2286,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -2080,12 +2319,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2113,12 +2352,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2142,12 +2381,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2179,12 +2418,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2208,12 +2447,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + eventTriggerData + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2234,12 +2473,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -2265,12 +2504,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2289,12 +2528,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2325,12 +2564,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_deduplication_keys\":"
+ tooManyEntries
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2362,12 +2601,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_deduplication_keys\":"
+ deduplicationKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2421,12 +2660,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ ",\"aggregatable_deduplication_keys\":"
+ deduplicationKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2481,12 +2720,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_deduplication_keys\":"
+ deduplicationKeys
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2509,12 +2748,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ ","
+ "\"aggregatable_deduplication_keys\":{}"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2537,12 +2776,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ ","
+ "\"aggregatable_deduplication_keys\":"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2565,12 +2804,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2589,12 +2828,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2621,12 +2860,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2645,12 +2884,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2669,12 +2908,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
when(mFlags.getMeasurementEnableLookbackWindowFilter()).thenReturn(true);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2693,12 +2932,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
when(mFlags.getMeasurementEnableLookbackWindowFilter()).thenReturn(true);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2717,12 +2956,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
when(mFlags.getMeasurementEnableLookbackWindowFilter()).thenReturn(true);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2741,12 +2980,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\":" + filters + "}")));
when(mFlags.getMeasurementEnableLookbackWindowFilter()).thenReturn(true);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2767,12 +3006,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -2798,12 +3037,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2822,12 +3061,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2850,12 +3089,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2874,12 +3113,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2906,12 +3145,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2930,12 +3169,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"not_filters\":" + notFilters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
@@ -2956,21 +3195,21 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields())
.thenReturn(
Map.of(
- "Attribution-Reporting-Redirect",
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY,
List.of(DEFAULT_REDIRECT),
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
verify(mFetcher, times(1)).openUrl(any());
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(DEFAULT_REDIRECT, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(DEFAULT_REDIRECT, asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(
AsyncFetchStatus.EntityStatus.INVALID_ENROLLMENT,
asyncFetchStatus.getEntityStatus());
@@ -2994,12 +3233,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3030,12 +3269,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -3062,12 +3301,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -3094,12 +3333,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -3126,12 +3365,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -3149,12 +3388,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
WebUtil.validUri("http://foo.test"),
CONTEXT.getPackageName(),
SDK_PACKAGE_NAME);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.INVALID_URL, asyncFetchStatus.getResponseStatus());
@@ -3178,11 +3417,11 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
false,
false,
null);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(registration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(registration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.INVALID_URL, asyncFetchStatus.getResponseStatus());
@@ -3195,12 +3434,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
doThrow(new IOException("Bad internet things"))
.when(mFetcher)
.openUrl(new URL(TRIGGER_URI));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.NETWORK_ERROR,
@@ -3219,12 +3458,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.ResponseStatus.SERVER_UNAVAILABLE,
@@ -3243,12 +3482,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\": [{}]}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3271,14 +3510,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
headersFirstRequest.put(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}"));
- headersFirstRequest.put("Attribution-Reporting-Redirect", List.of(DEFAULT_REDIRECT));
+ headersFirstRequest.put(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(DEFAULT_REDIRECT));
when(mUrlConnection.getHeaderFields()).thenReturn(headersFirstRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3298,21 +3537,22 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
doReturn(mUrlConnection).when(mFetcher).openUrl(any(URL.class));
when(mUrlConnection.getResponseCode()).thenReturn(200);
when(mUrlConnection.getHeaderFields())
- .thenReturn(Map.of("Attribution-Reporting-Redirect", List.of(DEFAULT_REDIRECT)))
+ .thenReturn(
+ Map.of(AsyncRedirects.REDIRECT_LIST_HEADER_KEY, List.of(DEFAULT_REDIRECT)))
.thenReturn(
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
- assertEquals(1, asyncRedirect.getRedirects().size());
- assertEquals(DEFAULT_REDIRECT, asyncRedirect.getRedirects().get(0).toString());
+ assertEquals(1, asyncRedirects.getRedirects().size());
+ assertEquals(DEFAULT_REDIRECT, asyncRedirects.getRedirects().get(0).getUri().toString());
assertEquals(
AsyncFetchStatus.EntityStatus.HEADER_MISSING, asyncFetchStatus.getEntityStatus());
@@ -3342,12 +3582,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3383,12 +3623,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.PARSING_ERROR, asyncFetchStatus.getEntityStatus());
@@ -3418,12 +3658,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3460,12 +3700,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3504,12 +3744,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"{\"aggregatable_trigger_data\":"
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -3543,12 +3783,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"{\"aggregatable_trigger_data\":"
+ aggregateTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -3572,12 +3812,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3603,12 +3843,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"aggregatable_values\": " + tooManyKeys + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
@@ -3632,12 +3872,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"filters\": " + filters + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3668,14 +3908,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3722,14 +3962,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -3758,24 +3998,24 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\": " + EVENT_TRIGGERS_1 + "}"),
- "Attribution-Reporting-Redirect",
+ AsyncRedirects.REDIRECT_LIST_HEADER_KEY,
List.of(LIST_TYPE_REDIRECT_URI),
- "Location",
+ AsyncRedirects.REDIRECT_LOCATION_HEADER_KEY,
List.of(LOCATION_TYPE_REDIRECT_URI)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
- assertEquals(0, asyncRedirect.getRedirects().size());
+ assertEquals(0, asyncRedirects.getRedirects().size());
assertEquals(new JSONArray(EVENT_TRIGGERS_1).toString(), result.getEventTriggers());
assertEquals(REGISTRATION_URI_1, result.getRegistrationOrigin());
verify(mUrlConnection).setRequestMethod("POST");
@@ -3802,11 +4042,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
- Optional<Trigger> fetch = mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -3833,12 +4074,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -3867,12 +4108,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -3907,12 +4148,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -3942,12 +4183,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -3974,12 +4215,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4016,12 +4257,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4049,12 +4290,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4082,12 +4323,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4118,12 +4359,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4157,12 +4398,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4191,12 +4432,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4234,12 +4475,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4268,12 +4509,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4307,12 +4548,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4342,12 +4583,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4385,12 +4626,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4420,12 +4661,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_trigger_data\": "
+ aggregatableTriggerData
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4447,12 +4688,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4479,12 +4720,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4511,12 +4752,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4543,12 +4784,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4572,12 +4813,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -4603,12 +4844,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -4633,12 +4874,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
@@ -4662,12 +4903,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -4692,12 +4933,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
@@ -4721,12 +4962,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -4753,12 +4994,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
@@ -4784,12 +5025,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -4816,12 +5057,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertEquals(
AsyncFetchStatus.EntityStatus.VALIDATION_ERROR, asyncFetchStatus.getEntityStatus());
assertFalse(fetch.isPresent());
@@ -4847,12 +5088,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -4876,12 +5117,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4905,12 +5146,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{\"aggregatable_values\": " + tooManyKeys + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4932,12 +5173,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\"aggregatable_values\": "
+ aggregatableValues
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
- appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirect);
+ appTriggerRegistrationRequest(request), asyncFetchStatus, asyncRedirects);
assertFalse(fetch.isPresent());
verify(mUrlConnection, times(1)).setRequestMethod("POST");
verify(mFetcher, times(1)).openUrl(any());
@@ -4970,14 +5211,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
"Attribution-Reporting-Register-Trigger",
List.of("{\"event_trigger_data\":" + EVENT_TRIGGERS_1 + "}")));
doReturn(5L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
asyncFetchStatus.setRegistrationDelay(0L);
asyncFetchStatus.setRetryCount(0);
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
assertEquals(ENROLLMENT_ID, result.getEnrollmentId());
@@ -5073,7 +5314,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
attributionConfig1.serializeAsJson(mFlags),
attributionConfig2.serializeAsJson(mFlags)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
@@ -5081,7 +5322,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5180,7 +5421,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
attributionConfig1.serializeAsJson(mFlags),
attributionConfig2.serializeAsJson(mFlags)));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = webTriggerRegistrationRequest(request, true);
@@ -5188,7 +5429,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5245,7 +5486,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = webTriggerRegistrationRequest(request, true);
@@ -5253,7 +5494,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5289,7 +5530,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, new AsyncRedirect());
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, new AsyncRedirects());
// Assertion
assertEquals(
@@ -5318,7 +5559,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
@@ -5326,7 +5567,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5361,7 +5602,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
@@ -5369,7 +5610,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5426,7 +5667,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "}")));
doReturn(5000L).when(mFlags).getMaxResponseBasedRegistrationPayloadSizeBytes();
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
@@ -5434,7 +5675,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
@@ -5469,14 +5710,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5514,14 +5755,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5552,12 +5793,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -5591,12 +5832,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -5627,12 +5868,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5665,12 +5906,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5702,12 +5943,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequestWithAdId(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertTrue(fetch.isPresent());
Trigger result = fetch.get();
@@ -5742,14 +5983,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5786,14 +6027,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5829,14 +6070,14 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection1.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
// Execution
Optional<Trigger> fetch =
mFetcher.fetchTrigger(
webTriggerRegistrationRequest(request, true),
asyncFetchStatus,
- asyncRedirect);
+ asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5847,7 +6088,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
}
@Test
- public void fetchTrigger_setsFakeEnrollmentId_whenDisableEnrollmentFlagIsTrue()
+ public void fetchTrigger_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrue()
throws Exception {
String uri = WebUtil.validUrl("https://test1.example.test:8081");
RegistrationRequest request = buildRequest(uri);
@@ -5866,12 +6107,12 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "\""
+ "}"));
when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertTrue(fetch.isPresent());
@@ -5879,7 +6120,85 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
assertEquals(
WebUtil.validUrl("https://test1.example.test:8081"),
result.getRegistrationOrigin().toString());
- assertEquals(Enrollment.FAKE_ENROLLMENT, result.getEnrollmentId());
+ assertEquals("https://example.com", result.getEnrollmentId());
+ assertEquals(new JSONArray(EVENT_TRIGGERS_1).toString(), result.getEventTriggers());
+ assertEquals(DEBUG_KEY, result.getDebugKey());
+ verify(mUrlConnection).setRequestMethod("POST");
+ }
+
+ @Test
+ public void fetchTrigger_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrueForLocalhost()
+ throws Exception {
+ String uri = WebUtil.validUrl("https://localhost:8081");
+ RegistrationRequest request = buildRequest(uri);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(uri));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ doReturn(true).when(mFlags).isDisableMeasurementEnrollmentCheck();
+ Map<String, List<String>> headersRequest = new HashMap<>();
+ headersRequest.put(
+ "Attribution-Reporting-Register-Trigger",
+ List.of(
+ "{"
+ + "\"event_trigger_data\": "
+ + EVENT_TRIGGERS_1
+ + ", \"debug_key\": \""
+ + DEBUG_KEY
+ + "\""
+ + "}"));
+ when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertEquals(
+ WebUtil.validUrl("https://localhost:8081"),
+ result.getRegistrationOrigin().toString());
+ assertEquals("https://localhost", result.getEnrollmentId());
+ assertEquals(new JSONArray(EVENT_TRIGGERS_1).toString(), result.getEventTriggers());
+ assertEquals(DEBUG_KEY, result.getDebugKey());
+ verify(mUrlConnection).setRequestMethod("POST");
+ }
+
+ @Test
+ public void fetchTrigger_setsSiteEnrollmentId_whenDisableEnrollmentFlagIsTrueForIP()
+ throws Exception {
+ String uri = WebUtil.validUrl("https://127.0.0.1:8081");
+ RegistrationRequest request = buildRequest(uri);
+ doReturn(mUrlConnection).when(mFetcher).openUrl(new URL(uri));
+ when(mUrlConnection.getResponseCode()).thenReturn(200);
+ doReturn(true).when(mFlags).isDisableMeasurementEnrollmentCheck();
+ Map<String, List<String>> headersRequest = new HashMap<>();
+ headersRequest.put(
+ "Attribution-Reporting-Register-Trigger",
+ List.of(
+ "{"
+ + "\"event_trigger_data\": "
+ + EVENT_TRIGGERS_1
+ + ", \"debug_key\": \""
+ + DEBUG_KEY
+ + "\""
+ + "}"));
+ when(mUrlConnection.getHeaderFields()).thenReturn(headersRequest);
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
+ AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
+ AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
+ // Execution
+ Optional<Trigger> fetch =
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
+ // Assertion
+ assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
+ assertTrue(fetch.isPresent());
+ Trigger result = fetch.get();
+ assertEquals(
+ WebUtil.validUrl("https://127.0.0.1:8081"),
+ result.getRegistrationOrigin().toString());
+ assertEquals("https://127.0.0.1", result.getEnrollmentId());
assertEquals(new JSONArray(EVENT_TRIGGERS_1).toString(), result.getEventTriggers());
assertEquals(DEBUG_KEY, result.getDebugKey());
verify(mUrlConnection).setRequestMethod("POST");
@@ -5900,7 +6219,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "'aggregation_coordinator_origin': "
+ "'https://cloud.coordination.test'"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
when(mFlags.getMeasurementAggregationCoordinatorOriginEnabled()).thenReturn(true);
@@ -5908,7 +6227,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
.thenReturn("https://cloud.coordination.test");
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(AsyncFetchStatus.EntityStatus.SUCCESS, asyncFetchStatus.getEntityStatus());
@@ -5941,7 +6260,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "'aggregation_coordinator_origin': "
+ "'https://invalid.cloud.coordination.test'"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
when(mFlags.getMeasurementAggregationCoordinatorOriginEnabled()).thenReturn(true);
@@ -5949,7 +6268,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
.thenReturn("https://cloud.coordination.test");
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -5968,13 +6287,13 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
Map.of(
"Attribution-Reporting-Register-Trigger",
List.of("{" + "\"event_trigger_data\": " + "[{}]" + "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
when(mFlags.getMeasurementAggregationCoordinatorOriginEnabled()).thenReturn(true);
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(AsyncFetchStatus.EntityStatus.SUCCESS, asyncFetchStatus.getEntityStatus());
@@ -6005,7 +6324,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
+ "'aggregation_coordinator_origin': "
+ "'https://invalid.cloud.coordination.test'"
+ "}")));
- AsyncRedirect asyncRedirect = new AsyncRedirect();
+ AsyncRedirects asyncRedirects = new AsyncRedirects();
AsyncFetchStatus asyncFetchStatus = new AsyncFetchStatus();
AsyncRegistration asyncRegistration = appTriggerRegistrationRequest(request);
when(mFlags.getMeasurementAggregationCoordinatorOriginEnabled()).thenReturn(true);
@@ -6013,7 +6332,7 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
.thenReturn("https://cloud.coordination.test");
// Execution
Optional<Trigger> fetch =
- mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirect);
+ mFetcher.fetchTrigger(asyncRegistration, asyncFetchStatus, asyncRedirects);
// Assertion
assertEquals(AsyncFetchStatus.ResponseStatus.SUCCESS, asyncFetchStatus.getResponseStatus());
assertEquals(
@@ -6050,26 +6369,6 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
private static AsyncRegistration appTriggerRegistrationRequest(
RegistrationRequest registrationRequest) {
- // Necessary for testing
- String enrollmentId = "";
- if (EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- registrationRequest
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- != null) {
- enrollmentId =
- EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- registrationRequest
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- .getEnrollmentId();
- }
return createAsyncRegistration(
UUID.randomUUID().toString(),
registrationRequest.getRegistrationUri(),
@@ -6091,26 +6390,6 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
private static AsyncRegistration appTriggerRegistrationRequestWithAdId(
RegistrationRequest registrationRequest) {
- // Necessary for testing
- String enrollmentId = "";
- if (EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- registrationRequest
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- != null) {
- enrollmentId =
- EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- registrationRequest
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- .getEnrollmentId();
- }
return createAsyncRegistration(
UUID.randomUUID().toString(),
registrationRequest.getRegistrationUri(),
@@ -6136,28 +6415,6 @@ public final class AsyncTriggerFetcherTest extends AdServicesExtendedMockitoTest
if (webTriggerRegistrationRequest.getTriggerParams().size() > 0) {
WebTriggerParams webTriggerParams =
webTriggerRegistrationRequest.getTriggerParams().get(0);
- // Necessary for testing
- String enrollmentId = "";
- if (EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- webTriggerRegistrationRequest
- .getTriggerParams()
- .get(0)
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- != null) {
- enrollmentId =
- EnrollmentDao.getInstance(CONTEXT)
- .getEnrollmentDataFromMeasurementUrl(
- webTriggerParams
- .getRegistrationUri()
- .buildUpon()
- .clearQuery()
- .build())
- .getEnrollmentId();
- }
return createAsyncRegistration(
UUID.randomUUID().toString(),
webTriggerParams.getRegistrationUri(),
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/EnqueueAsyncRegistrationTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/EnqueueAsyncRegistrationTest.java
index 847dc6ab3a..7b6e78903d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/EnqueueAsyncRegistrationTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/registration/EnqueueAsyncRegistrationTest.java
@@ -243,6 +243,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertNotNull(asyncRegistration.getType());
Assert.assertEquals(
AsyncRegistration.RegistrationType.APP_SOURCE, asyncRegistration.getType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration.getRedirectBehavior());
}
}
@@ -300,6 +302,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertNotNull(asyncRegistration.getType());
Assert.assertEquals(
AsyncRegistration.RegistrationType.APP_SOURCE, asyncRegistration.getType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration.getRedirectBehavior());
}
}
@@ -390,6 +394,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertEquals(
Uri.parse("android-app://test.destination"), asyncRegistration.getRegistrant());
Assert.assertNull(asyncRegistration.getSourceType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration.getRedirectBehavior());
}
}
@@ -523,6 +529,8 @@ public class EnqueueAsyncRegistrationTest {
VALID_WEB_SOURCE_REGISTRATION_NULL_INPUT_EVENT.getTopOriginUri(),
asyncRegistration1.getTopOrigin());
assertEqualsWebSourceRegistrationCommon(asyncRegistration1);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
@@ -533,6 +541,8 @@ public class EnqueueAsyncRegistrationTest {
VALID_WEB_SOURCE_REGISTRATION_NULL_INPUT_EVENT.getTopOriginUri(),
asyncRegistration2.getTopOrigin());
assertEqualsWebSourceRegistrationCommon(asyncRegistration2);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(),
@@ -591,6 +601,8 @@ public class EnqueueAsyncRegistrationTest {
validWebSourceRegistration.getTopOriginUri(),
asyncRegistration1.getTopOrigin());
assertEqualsWebSourceRegistrationCommon(asyncRegistration1);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
@@ -601,6 +613,8 @@ public class EnqueueAsyncRegistrationTest {
validWebSourceRegistration.getTopOriginUri(),
asyncRegistration2.getTopOrigin());
assertEqualsWebSourceRegistrationCommon(asyncRegistration2);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(),
@@ -642,12 +656,16 @@ public class EnqueueAsyncRegistrationTest {
SqliteObjectMapper.constructAsyncRegistration(cursor);
Assert.assertEquals(REGISTRATION_URI_1, asyncRegistration1.getRegistrationUri());
assertEqualsWebTriggerRegistrationCommon(asyncRegistration1);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
SqliteObjectMapper.constructAsyncRegistration(cursor);
Assert.assertEquals(REGISTRATION_URI_2, asyncRegistration2.getRegistrationUri());
assertEqualsWebTriggerRegistrationCommon(asyncRegistration2);
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(),
@@ -656,7 +674,7 @@ public class EnqueueAsyncRegistrationTest {
}
@Test
- public void testRunInTransactionFail_inValid() {
+ public void testRunInTransactionFail_invalid() {
when(mDatastoreManagerMock.runInTransaction(any())).thenReturn(false);
Assert.assertFalse(
EnqueueAsyncRegistration.webTriggerRegistrationRequest(
@@ -722,6 +740,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertNotNull(asyncRegistration.getType());
Assert.assertEquals(
AsyncRegistration.RegistrationType.APP_SOURCE, asyncRegistration.getType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration.getRedirectBehavior());
}
}
@@ -773,6 +793,8 @@ public class EnqueueAsyncRegistrationTest {
assertEqualsAppSourcesRegistrationCommon(asyncRegistration1);
Assert.assertEquals(REGISTRATION_URI_1, asyncRegistration1.getRegistrationUri());
Assert.assertEquals(Source.SourceType.EVENT, asyncRegistration1.getSourceType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
@@ -780,6 +802,8 @@ public class EnqueueAsyncRegistrationTest {
assertEqualsAppSourcesRegistrationCommon(asyncRegistration2);
Assert.assertEquals(REGISTRATION_URI_2, asyncRegistration2.getRegistrationUri());
Assert.assertEquals(Source.SourceType.EVENT, asyncRegistration2.getSourceType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(), asyncRegistration2.getRegistrationId());
@@ -835,6 +859,8 @@ public class EnqueueAsyncRegistrationTest {
assertEqualsAppSourcesRegistrationCommon(asyncRegistration1);
Assert.assertEquals(REGISTRATION_URI_1, asyncRegistration1.getRegistrationUri());
Assert.assertEquals(Source.SourceType.NAVIGATION, asyncRegistration1.getSourceType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
@@ -842,6 +868,8 @@ public class EnqueueAsyncRegistrationTest {
assertEqualsAppSourcesRegistrationCommon(asyncRegistration2);
Assert.assertEquals(REGISTRATION_URI_2, asyncRegistration2.getRegistrationUri());
Assert.assertEquals(Source.SourceType.NAVIGATION, asyncRegistration2.getSourceType());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(), asyncRegistration2.getRegistrationId());
@@ -898,6 +926,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertEquals(REGISTRATION_URI_1, asyncRegistration1.getRegistrationUri());
Assert.assertEquals(Source.SourceType.NAVIGATION, asyncRegistration1.getSourceType());
Assert.assertNull(asyncRegistration1.getPostBody());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration1.getRedirectBehavior());
Assert.assertTrue(cursor.moveToNext());
AsyncRegistration asyncRegistration2 =
@@ -906,6 +936,8 @@ public class EnqueueAsyncRegistrationTest {
Assert.assertEquals(REGISTRATION_URI_2, asyncRegistration2.getRegistrationUri());
Assert.assertEquals(Source.SourceType.NAVIGATION, asyncRegistration2.getSourceType());
Assert.assertNull(asyncRegistration2.getPostBody());
+ Assert.assertEquals(
+ AsyncRedirect.RedirectBehavior.AS_IS, asyncRegistration2.getRedirectBehavior());
Assert.assertEquals(
asyncRegistration1.getRegistrationId(), asyncRegistration2.getRegistrationId());
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/AggregateReportingJobHandlerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/AggregateReportingJobHandlerTest.java
index e5700638e2..fd7668d937 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/AggregateReportingJobHandlerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/AggregateReportingJobHandlerTest.java
@@ -54,6 +54,7 @@ import com.android.adservices.service.measurement.aggregation.AggregateCryptoFix
import com.android.adservices.service.measurement.aggregation.AggregateEncryptionKey;
import com.android.adservices.service.measurement.aggregation.AggregateEncryptionKeyManager;
import com.android.adservices.service.measurement.aggregation.AggregateReport;
+import com.android.adservices.service.measurement.aggregation.AggregateReportFixture;
import com.android.adservices.service.measurement.util.UnsignedLong;
import com.android.adservices.service.stats.AdServicesLogger;
import com.android.adservices.service.stats.MeasurementReportsStats;
@@ -989,6 +990,164 @@ public class AggregateReportingJobHandlerTest {
verify(mTransaction, times(1)).end();
}
+ @Test
+ public void performReport_normalReportWithDebugKeys_hasDebugModeEnabled()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.SOURCE_DEBUG_KEY)
+ .setTriggerDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.TRIGGER_DEBUG_KEY)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyAggregateReportingJobHandler, "enabled");
+ verify(mMeasurementDao, times(1))
+ .markAggregateReportStatus(
+ eq(aggregateReport.getId()), eq(AggregateReport.Status.DELIVERED));
+ }
+
+ @Test
+ public void performReport_normalReportWithOnlySourceDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ // Setup
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.SOURCE_DEBUG_KEY)
+ .setTriggerDebugKey(null)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyAggregateReportingJobHandler, "");
+ verify(mMeasurementDao, times(1))
+ .markAggregateReportStatus(
+ eq(aggregateReport.getId()), eq(AggregateReport.Status.DELIVERED));
+ }
+
+ @Test
+ public void performReport_normalReportWithOnlyTriggerDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(null)
+ .setTriggerDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.TRIGGER_DEBUG_KEY)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyAggregateReportingJobHandler, "");
+ verify(mMeasurementDao, times(1))
+ .markAggregateReportStatus(
+ eq(aggregateReport.getId()), eq(AggregateReport.Status.DELIVERED));
+ }
+
+ @Test
+ public void performReport_normalReportWithNoDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(null)
+ .setTriggerDebugKey(null)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyAggregateReportingJobHandler, "");
+ verify(mMeasurementDao, times(1))
+ .markAggregateReportStatus(
+ eq(aggregateReport.getId()), eq(AggregateReport.Status.DELIVERED));
+ }
+
+ @Test
+ public void performReport_debugReportWithDebugKeys_hasDebugModeEnabled()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.SOURCE_DEBUG_KEY)
+ .setTriggerDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.TRIGGER_DEBUG_KEY)
+ .build();
+ executeDebugModeVerification(
+ aggregateReport, mSpyDebugAggregateReportingJobHandler, "enabled");
+ verify(mMeasurementDao, times(1))
+ .markAggregateDebugReportDelivered(eq(aggregateReport.getId()));
+ }
+
+ @Test
+ public void performReport_debugReportWithOnlySourceDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.SOURCE_DEBUG_KEY)
+ .setTriggerDebugKey(null)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyDebugAggregateReportingJobHandler, "");
+ verify(mMeasurementDao, times(1))
+ .markAggregateDebugReportDelivered(eq(aggregateReport.getId()));
+ }
+
+ @Test
+ public void performReport_debugReportWithOnlyTriggerDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(null)
+ .setTriggerDebugKey(
+ AggregateReportFixture.ValidAggregateReportParams.TRIGGER_DEBUG_KEY)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyDebugAggregateReportingJobHandler, "");
+ }
+
+ @Test
+ public void performReport_debugReportWithNoDebugKey_hasDebugModeNull()
+ throws DatastoreException, IOException, JSONException {
+ AggregateReport aggregateReport =
+ AggregateReportFixture.getValidAggregateReportBuilder()
+ .setSourceDebugKey(null)
+ .setTriggerDebugKey(null)
+ .build();
+ executeDebugModeVerification(aggregateReport, mSpyDebugAggregateReportingJobHandler, "");
+ verify(mMeasurementDao, times(1))
+ .markAggregateDebugReportDelivered(eq(aggregateReport.getId()));
+ }
+
+ private void executeDebugModeVerification(
+ AggregateReport aggregateReport,
+ AggregateReportingJobHandler aggregateReportingJobHandler,
+ String expectedDebugMode)
+ throws DatastoreException, IOException, JSONException {
+ when(mMeasurementDao.getAggregateReport(aggregateReport.getId()))
+ .thenReturn(aggregateReport);
+ doReturn(HttpURLConnection.HTTP_OK)
+ .when(aggregateReportingJobHandler)
+ .makeHttpPostRequest(eq(REPORTING_URI), Mockito.any());
+
+ doNothing()
+ .when(mMeasurementDao)
+ .markAggregateReportStatus(
+ aggregateReport.getId(), AggregateReport.Status.DELIVERED);
+ ArgumentCaptor<JSONObject> aggregateReportBodyCaptor =
+ ArgumentCaptor.forClass(JSONObject.class);
+
+ // Execution
+ Assert.assertEquals(
+ AdServicesStatusUtils.STATUS_SUCCESS,
+ aggregateReportingJobHandler.performReport(
+ aggregateReport.getId(),
+ AggregateCryptoFixture.getKey(),
+ new ReportingStatus()));
+
+ // Assertion
+ verify(aggregateReportingJobHandler)
+ .makeHttpPostRequest(eq(REPORTING_URI), aggregateReportBodyCaptor.capture());
+ verify(mTransaction, times(2)).begin();
+ verify(mTransaction, times(2)).end();
+
+ JSONObject aggregateReportBody = aggregateReportBodyCaptor.getValue();
+ JSONObject sharedInfo =
+ new JSONObject(
+ aggregateReportBody.getString(
+ AggregateReportBody.PayloadBodyKeys.SHARED_INFO));
+ assertEquals(
+ expectedDebugMode,
+ sharedInfo.optString(AggregateReportBody.SharedInfoKeys.DEBUG_MODE));
+ }
+
private static JSONObject createASampleAggregateReportBody(AggregateReport aggregateReport)
throws JSONException {
return new AggregateReportBody.Builder()
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/DebugReportApiTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/DebugReportApiTest.java
index 8e1a178aba..5656ba0079 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/DebugReportApiTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/DebugReportApiTest.java
@@ -92,6 +92,12 @@ public final class DebugReportApiTest {
when(mFlags.getMeasurementEnableDebugReport()).thenReturn(true);
when(mFlags.getMeasurementEnableSourceDebugReport()).thenReturn(true);
when(mFlags.getMeasurementEnableTriggerDebugReport()).thenReturn(true);
+ when(mFlags.getMeasurementVtcConfigurableMaxEventReportsCount())
+ .thenReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT);
+ when(mFlags.getMeasurementEventReportsVtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS);
+ when(mFlags.getMeasurementEventReportsCtcEarlyReportingWindows())
+ .thenReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS);
}
@Test
@@ -3650,6 +3656,194 @@ public final class DebugReportApiTest {
verify(mMeasurementDao, never()).insertDebugReport(any());
}
+ @Test
+ public void testScheduleTriggerEventWindowNotStartedDebugReport_triggerNotOpIn_dontSchedule()
+ throws Exception {
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(false)
+ .setAdIdPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
+ @Test
+ public void testScheduleTriggerEventWindowNotStartedDebugReport_sourceNoAdId_dontSchedule()
+ throws Exception {
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(false)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
+ @Test
+ public void testScheduleTriggerEventWindowNotStartedDebugReport_sourceNoArDebug_dontSchedule()
+ throws Exception {
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setPublisherType(EventSurfaceType.WEB)
+ .setPublisher(SourceFixture.ValidSourceParams.WEB_PUBLISHER)
+ .setAppDestinations(null)
+ .setWebDestinations(SourceFixture.ValidSourceParams.WEB_DESTINATIONS)
+ .setArDebugPermission(false)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(true)
+ .setDestinationType(EventSurfaceType.WEB)
+ .setAttributionDestination(
+ SourceFixture.ValidSourceParams.WEB_DESTINATIONS.get(0))
+ .setArDebugPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
+ @Test
+ public void testScheduleTriggerEventWindowNotStartedDebugReport_success() throws Exception {
+ Source source =
+ SourceFixture.getValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, times(1)).insertDebugReport(any());
+ }
+
+ @Test
+ public void testScheduleTriggerEventWindowNotStartedDebugReport_debugFlagDisabled_dontSchedule()
+ throws Exception {
+ when(mFlags.getMeasurementEnableDebugReport()).thenReturn(false);
+ Source source =
+ SourceFixture.getValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
+ @Test
+ public void
+ testScheduleTriggerEventWindowNotStartedDebugReport_triggerFlagDisabled_dontSchedule()
+ throws Exception {
+ when(mFlags.getMeasurementEnableTriggerDebugReport()).thenReturn(false);
+ Source source =
+ SourceFixture.getValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ Trigger trigger =
+ TriggerFixture.getValidTriggerBuilder()
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
+ @Test
+ public void
+ testScheduleTriggerEventWindowNotStartedDebugReport_noTriggerPermission_dontSchedule()
+ throws Exception {
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventId(SOURCE_EVENT_ID)
+ .setIsDebugReporting(true)
+ .setAdIdPermission(true)
+ .build();
+ Trigger trigger = TriggerFixture.getValidTriggerBuilder().setIsDebugReporting(true).build();
+ ExtendedMockito.doNothing()
+ .when(() -> VerboseDebugReportingJobService.scheduleIfNeeded(any(), anyBoolean()));
+
+ mDebugReportApi.scheduleTriggerDebugReport(
+ source,
+ trigger,
+ /* limit =*/ null,
+ mMeasurementDao,
+ DebugReportApi.Type.TRIGGER_EVENT_REPORT_WINDOW_NOT_STARTED);
+ verify(mMeasurementDao, never()).insertDebugReport(any());
+ }
+
private static void assertSourceDebugReportParameters(
DebugReport actualReport,
String expectedReportType,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/EventReportWindowCalcDelegateTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/EventReportWindowCalcDelegateTest.java
index 713ce8e982..756c5434cd 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/EventReportWindowCalcDelegateTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/reporting/EventReportWindowCalcDelegateTest.java
@@ -61,6 +61,9 @@ public class EventReportWindowCalcDelegateTest {
private static final String EVENT_REPORT_WINDOWS_2_WINDOWS_NO_START =
"{'end_times': [172800000, 432000000]}";
+ private static final String EVENT_REPORT_WINDOWS_2_WINDOWS_WITH_START =
+ "{ 'start_time': 3600000, 'end_times': [86400000, 1728000000]}";
+
private static final String EVENT_REPORT_WINDOWS_5_WINDOWS_WITH_START =
"{'start_time': 86400000, 'end_times': [172800000, 432000000, 604800000, 864000000,"
+ " 1728000000]}";
@@ -71,9 +74,14 @@ public class EventReportWindowCalcDelegateTest {
@Before
public void setup() {
- doReturn(false).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS)
.when(mFlags).getMeasurementMinEventReportDelayMillis();
+ doReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT)
+ .when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
+ doReturn(Flags.MEASUREMENT_EVENT_REPORTS_VTC_EARLY_REPORTING_WINDOWS)
+ .when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
+ doReturn(Flags.MEASUREMENT_EVENT_REPORTS_CTC_EARLY_REPORTING_WINDOWS)
+ .when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
mEventReportWindowCalcDelegate = new EventReportWindowCalcDelegate(mFlags);
}
@@ -85,6 +93,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -104,6 +113,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -121,6 +131,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -141,6 +152,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -159,6 +171,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -177,6 +190,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -195,6 +209,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -212,6 +227,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -231,6 +247,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -250,6 +267,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -267,6 +285,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -278,6 +297,9 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void testMaxReportCount() {
+ doReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT)
+ .when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
+
Source eventSourceInstallNotAttributed =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
@@ -285,12 +307,7 @@ public class EventReportWindowCalcDelegateTest {
.build();
assertEquals(
PrivacyParams.EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- eventSourceInstallNotAttributed, false));
- assertEquals(
- PrivacyParams.EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- eventSourceInstallNotAttributed, false));
+ mEventReportWindowCalcDelegate.getMaxReportCount(eventSourceInstallNotAttributed));
Source navigationSourceInstallNotAttributed =
SourceFixture.getMinimalValidSourceBuilder()
@@ -300,46 +317,33 @@ public class EventReportWindowCalcDelegateTest {
assertEquals(
PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
mEventReportWindowCalcDelegate.getMaxReportCount(
- navigationSourceInstallNotAttributed, false));
- assertEquals(
- PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- navigationSourceInstallNotAttributed, false));
+ navigationSourceInstallNotAttributed));
Source eventSourceInstallAttributed =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
.build();
assertEquals(
PrivacyParams.INSTALL_ATTR_EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- eventSourceInstallAttributed, true));
- // Install attribution state does not matter for web destination
- assertEquals(
- PrivacyParams.EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- eventSourceInstallAttributed, false));
+ mEventReportWindowCalcDelegate.getMaxReportCount(eventSourceInstallAttributed));
Source navigationSourceInstallAttributed =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
.build();
assertEquals(
PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
mEventReportWindowCalcDelegate.getMaxReportCount(
- navigationSourceInstallAttributed, true));
- assertEquals(
- PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(
- navigationSourceInstallAttributed, true));
+ navigationSourceInstallAttributed));
}
@Test
public void getMaxReportCount_configuredConversionsNonInstall_returnsConfiguredCount() {
// Setup
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(3).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source nonInstallEventSource =
SourceFixture.getMinimalValidSourceBuilder()
@@ -349,13 +353,12 @@ public class EventReportWindowCalcDelegateTest {
// Execution & assertion
Assert.assertEquals(
- 3, mEventReportWindowCalcDelegate.getMaxReportCount(nonInstallEventSource, false));
+ 3, mEventReportWindowCalcDelegate.getMaxReportCount(nonInstallEventSource));
}
@Test
public void getMaxReportCount_configuredConversionsInstallCase_returnsConfiguredCount() {
// Setup
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(2).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source installEventSource =
SourceFixture.getMinimalValidSourceBuilder()
@@ -365,29 +368,28 @@ public class EventReportWindowCalcDelegateTest {
// Execution & assertion
Assert.assertEquals(
- 2, mEventReportWindowCalcDelegate.getMaxReportCount(installEventSource, true));
+ 2, mEventReportWindowCalcDelegate.getMaxReportCount(installEventSource));
}
@Test
public void getMaxReportCount_configuredConversionsToOneInstallCase_incrementConfiguredCount() {
// Setup
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(1).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source installEventSource =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
.build();
// Execution & assertion
Assert.assertEquals(
- 2, mEventReportWindowCalcDelegate.getMaxReportCount(installEventSource, true));
+ 2, mEventReportWindowCalcDelegate.getMaxReportCount(installEventSource));
}
@Test
public void getMaxReportCount_configuredConversionsToOneInstallCase_noEffectOnCtc() {
// Setup
- doReturn(true).when(mFlags).getMeasurementEnableVtcConfigurableMaxEventReports();
doReturn(2).when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
Source navigationSource =
SourceFixture.getMinimalValidSourceBuilder()
@@ -397,7 +399,7 @@ public class EventReportWindowCalcDelegateTest {
// Execution & assertion
Assert.assertEquals(
- 3, mEventReportWindowCalcDelegate.getMaxReportCount(navigationSource, false));
+ 3, mEventReportWindowCalcDelegate.getMaxReportCount(navigationSource));
}
@Test
@@ -409,48 +411,51 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 1));
// Expected: 1 window at expiry
Source eventSource7d =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource7d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource7d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource7d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource7d, /* windowIndex= */ 1));
// Expected: 1 window at expiry
Source eventSource2d =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource2d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource2d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource2d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource2d, /* windowIndex= */ 1));
}
@Test
@@ -465,21 +470,21 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + minDelayMillis,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + minDelayMillis,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 1));
}
@Test
public void getReportingTimeForNoising_eventSrcWithConfiguredReportingWindows() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -493,27 +498,27 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
assertEquals(
eventTime + TimeUnit.HOURS.toMillis(1) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(1) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 2));
}
@Test
public void getReportingTimeForNoising_eventSrcInstallAttWithConfiguredReportingWindows() {
// Addition another window for install attribution is ignored when configurable windows
// are applied.
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -528,28 +533,28 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(expiry)
.setEventReportWindow(expiry)
.setInstallCooldownWindow(expiry)
.build();
assertEquals(
eventTime + TimeUnit.HOURS.toMillis(1) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(1) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 2, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 2));
}
@Test
public void getReportingTimeForNoising_navigationSrcWithConfiguredReportingWindows() {
// Addition another window for install attribution is ignored when configurable windows
// are applied.
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -563,27 +568,27 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
assertEquals(
eventTime + TimeUnit.HOURS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ eventSource10d, /* windowIndex= */ 2));
}
@Test
public void getReportingTimeForNoising_navigationSrcInstallAttWithConfiguredReportingWindows() {
// Addition another window for install attribution is ignored when configurable windows
// are applied.
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -598,21 +603,22 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(expiry)
.setEventReportWindow(expiry)
.setInstallCooldownWindow(expiry)
.build();
assertEquals(
eventTime + TimeUnit.HOURS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 2, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 2));
}
@Test
@@ -625,36 +631,38 @@ public class EventReportWindowCalcDelegateTest {
.setSourceType(Source.SourceType.EVENT)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(1))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(10))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 0, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 1, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource10d, /* windowIndex= */ 2, /* isInstallCase */ true));
+ eventSource10d, /* windowIndex= */ 2));
// Expected: 1 window at 2d(expiry)
Source eventSource2d =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource2d, /* windowIndex= */ 0, /* isInstallCase */ true));
+ eventSource2d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- eventSource2d, /* windowIndex= */ 1, /* isInstallCase */ true));
+ eventSource2d, /* windowIndex= */ 1));
}
@Test
@@ -666,56 +674,59 @@ public class EventReportWindowCalcDelegateTest {
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(20))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(20) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 2));
// Expected: 2 windows at 2d & expiry(7d)
Source navigationSource7d =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 2));
// Expected: 1 window at 2d(expiry)
Source navigationSource2d =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource2d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource2d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource2d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ navigationSource2d, /* windowIndex= */ 1));
}
@Test
@@ -728,20 +739,21 @@ public class EventReportWindowCalcDelegateTest {
.setSourceType(Source.SourceType.NAVIGATION)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(1))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(20))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(20) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource20d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ navigationSource20d, /* windowIndex= */ 2));
// Expected: 2 windows at 2d & expiry(7d)
Source navigationSource7d =
@@ -749,20 +761,21 @@ public class EventReportWindowCalcDelegateTest {
.setSourceType(Source.SourceType.NAVIGATION)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(1))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(7))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 1, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 1));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource7d, /* windowIndex= */ 2, /* isInstallCase */ false));
+ navigationSource7d, /* windowIndex= */ 2));
// Expected: 1 window at 2d(expiry)
Source navigationSource2d =
@@ -770,169 +783,21 @@ public class EventReportWindowCalcDelegateTest {
.setSourceType(Source.SourceType.NAVIGATION)
.setInstallCooldownWindow(TimeUnit.DAYS.toMillis(1))
.setEventTime(eventTime)
+ .setExpiryTime(eventTime + TimeUnit.DAYS.toMillis(30))
.setEventReportWindow(eventTime + TimeUnit.DAYS.toMillis(2))
.build();
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource2d, /* windowIndex= */ 0, /* isInstallCase */ false));
+ navigationSource2d, /* windowIndex= */ 0));
assertEquals(
eventTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- navigationSource2d, /* windowIndex= */ 1, /* isInstallCase */ false));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSrcAppDest_fallbackToDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(1);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- expiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSrcInstallAttAppDestTrigger1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(1);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .setInstallAttributed(true)
- .build();
- assertEquals(
- sourceEventTime
- + PrivacyParams.INSTALL_ATTR_EVENT_EARLY_REPORTING_WINDOW_MILLISECONDS[0]
- + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSrcInstallAttAppDestTrigger2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(3);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .setInstallAttributed(true)
- .build();
- assertEquals(
- expiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSrcInstallAttWebDestTrigger1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(1);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .setInstallAttributed(true)
- .build();
- assertEquals(
- expiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.WEB));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSrcInstallAttWebDestTrigger2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(3);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .setInstallAttributed(true)
- .build();
- assertEquals(
- expiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.WEB));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigEventSourceWebDestination_fallbackToDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long expiryTime = triggerTime + TimeUnit.DAYS.toMillis(30);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(1);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.EVENT)
- .setEventReportWindow(expiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- expiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.WEB));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigNavigationSourceTriggerInFirstWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long sourceExpiryTime = triggerTime + TimeUnit.DAYS.toMillis(25);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(1);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.NAVIGATION)
- .setEventReportWindow(sourceExpiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- sourceEventTime
- + PrivacyParams.NAVIGATION_EARLY_REPORTING_WINDOW_MILLISECONDS[0]
- + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
+ navigationSource2d, /* windowIndex= */ 1));
}
@Test
public void getReportingTime_emptyWindowConfigNavigationSourceTriggerNextHour() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
long triggerTime = System.currentTimeMillis();
@@ -941,6 +806,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -952,7 +818,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_emptyWindowConfigEventSrcTriggerNextHour() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
long triggerTime = System.currentTimeMillis();
@@ -963,6 +828,7 @@ public class EventReportWindowCalcDelegateTest {
.setAppDestinations(
SourceFixture.ValidSourceParams.ATTRIBUTION_DESTINATIONS)
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -974,7 +840,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_emptyWindowConfigEventSrcInstallAttTriggerNextHour() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
long triggerTime = System.currentTimeMillis();
@@ -985,6 +850,7 @@ public class EventReportWindowCalcDelegateTest {
.setAppDestinations(
SourceFixture.ValidSourceParams.ATTRIBUTION_DESTINATIONS)
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -999,7 +865,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_emptyWindowConfigNavigationSrcInstallAttTriggerNextHour() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
doReturn("").when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
long triggerTime = System.currentTimeMillis();
@@ -1010,6 +875,7 @@ public class EventReportWindowCalcDelegateTest {
.setAppDestinations(
SourceFixture.ValidSourceParams.ATTRIBUTION_DESTINATIONS)
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1021,70 +887,7 @@ public class EventReportWindowCalcDelegateTest {
}
@Test
- public void getReportingTime_nullWindowConfigNavigationSourceTriggerInSecondWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long sourceExpiryTime = triggerTime + TimeUnit.DAYS.toMillis(25);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(3);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.NAVIGATION)
- .setEventReportWindow(sourceExpiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- sourceEventTime
- + PrivacyParams.NAVIGATION_EARLY_REPORTING_WINDOW_MILLISECONDS[1]
- + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigNavigationSecondExpiry() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long sourceExpiryTime = triggerTime + TimeUnit.DAYS.toMillis(2);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(3);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.NAVIGATION)
- .setEventReportWindow(sourceExpiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- sourceExpiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
- public void getReportingTime_nullWindowConfigNavigationLast_fallbackToDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsVtcEarlyReportingWindows();
- doReturn(null).when(mFlags).getMeasurementEventReportsCtcEarlyReportingWindows();
- long triggerTime = System.currentTimeMillis();
- long sourceExpiryTime = triggerTime + TimeUnit.DAYS.toMillis(1);
- long sourceEventTime = triggerTime - TimeUnit.DAYS.toMillis(20);
- Source source =
- SourceFixture.getMinimalValidSourceBuilder()
- .setSourceType(Source.SourceType.NAVIGATION)
- .setEventReportWindow(sourceExpiryTime)
- .setEventTime(sourceEventTime)
- .build();
- assertEquals(
- sourceExpiryTime + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
- mEventReportWindowCalcDelegate.getReportingTime(
- source, triggerTime, EventSurfaceType.APP));
- }
-
- @Test
public void getReportingTime_MalformedWindowConfigEventSourceAppDestination_returnsDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1097,6 +900,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1108,7 +912,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigEventSrcInstallAttAppDestTrigger1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1121,6 +924,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1135,7 +939,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigEventSrcInstallAttAppDestTrigger2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1148,6 +951,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1160,7 +964,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigEventSrcInstallAttWebDestTrigger1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1173,6 +976,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1185,7 +989,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigEventSrcInstallAttWebDestTrigger2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1198,6 +1001,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1210,7 +1014,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigEventSourceWebDestination() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1223,6 +1026,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1234,7 +1038,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigNavigationSourceTriggerInFirstWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1247,6 +1050,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1260,7 +1064,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigNavigationSourceTriggerInSecondWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1273,6 +1076,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1286,7 +1090,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigNavigationSecondExpiry_fallbackToDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1299,6 +1102,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1310,7 +1114,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_MalformedWindowConfigNavigationLast_fallbackToDefault() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1323,6 +1126,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(sourceExpiryTime)
.setEventReportWindow(sourceExpiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1334,7 +1138,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigEventSourceTriggerIn1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1347,6 +1150,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1358,7 +1162,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigEventSourceTriggerIn2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1371,6 +1174,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1383,7 +1187,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigEventSourceTriggerInLastWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1396,6 +1199,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1408,7 +1212,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigNavigationSourceTriggerIn1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1421,6 +1224,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1432,7 +1236,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigNavigationSourceTriggerIn2ndWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1445,6 +1248,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1457,7 +1261,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_validWindowConfigNavigationSourceTriggerInLastWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(MALFORMED_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1470,6 +1273,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.setInstallAttributed(true)
@@ -1482,7 +1286,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_invalidWindowConfigEventSourceTriggerIn1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(INVALID_1H_1D_2D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1495,6 +1298,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.EVENT)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1506,7 +1310,6 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getReportingTime_invalidWindowConfigNavigationSourceTriggerIn1stWindow() {
- doReturn(true).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
doReturn(VALID_1H_1D_WINDOW_CONFIG)
.when(mFlags)
.getMeasurementEventReportsVtcEarlyReportingWindows();
@@ -1519,6 +1322,7 @@ public class EventReportWindowCalcDelegateTest {
Source source =
SourceFixture.getMinimalValidSourceBuilder()
.setSourceType(Source.SourceType.NAVIGATION)
+ .setExpiryTime(expiryTime)
.setEventReportWindow(expiryTime)
.setEventTime(sourceEventTime)
.build();
@@ -1713,49 +1517,49 @@ public class EventReportWindowCalcDelegateTest {
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- oneWindowNoStart, 0, false));
+ oneWindowNoStart, 0));
// InstallCase doesn't affect the report time
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- oneWindowNoStart, 0, true));
+ oneWindowNoStart, 0));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- oneWindowWithStart, 0, false));
+ oneWindowWithStart, 0));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- twoWindowsNoStart, 0, false));
+ twoWindowsNoStart, 0));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(5) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- twoWindowsNoStart, 1, false));
+ twoWindowsNoStart, 1));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(2) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- fiveWindowsWithStart, 0, false));
+ fiveWindowsWithStart, 0));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(5) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- fiveWindowsWithStart, 1, false));
+ fiveWindowsWithStart, 1));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(7) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- fiveWindowsWithStart, 2, false));
+ fiveWindowsWithStart, 2));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(10) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- fiveWindowsWithStart, 3, false));
+ fiveWindowsWithStart, 3));
assertEquals(
sourceTime + TimeUnit.DAYS.toMillis(20) + MEASUREMENT_MIN_EVENT_REPORT_DELAY_MILLIS,
mEventReportWindowCalcDelegate.getReportingTimeForNoising(
- fiveWindowsWithStart, 4, false));
+ fiveWindowsWithStart, 4));
}
@Test
@@ -1863,7 +1667,8 @@ public class EventReportWindowCalcDelegateTest {
@Test
public void getMaxReportCount_flexLiteApi() {
doReturn(true).when(mFlags).getMeasurementFlexLiteApiEnabled();
- doReturn(false).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
+ doReturn(Flags.DEFAULT_MEASUREMENT_VTC_CONFIGURABLE_MAX_EVENT_REPORTS_COUNT)
+ .when(mFlags).getMeasurementVtcConfigurableMaxEventReportsCount();
long sourceTime = System.currentTimeMillis();
Source source10Reports =
SourceFixture.getMinimalValidSourceBuilder()
@@ -1871,10 +1676,20 @@ public class EventReportWindowCalcDelegateTest {
.setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
.setEventTime(sourceTime)
.build();
- assertEquals(10, mEventReportWindowCalcDelegate.getMaxReportCount(source10Reports, true));
- assertEquals(10, mEventReportWindowCalcDelegate.getMaxReportCount(source10Reports, false));
+ assertEquals(10, mEventReportWindowCalcDelegate.getMaxReportCount(source10Reports));
+ assertEquals(10, mEventReportWindowCalcDelegate.getMaxReportCount(source10Reports));
- Source sourceDefaultEvent =
+ Source eventSourceInstallAttributed =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventReportWindows(EVENT_REPORT_WINDOWS_5_WINDOWS_WITH_START)
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
+ .setEventTime(sourceTime)
+ .setSourceType(Source.SourceType.EVENT)
+ .setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
+ .build();
+
+ Source eventSource =
SourceFixture.getMinimalValidSourceBuilder()
.setEventReportWindows(EVENT_REPORT_WINDOWS_5_WINDOWS_WITH_START)
.setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
@@ -1884,12 +1699,23 @@ public class EventReportWindowCalcDelegateTest {
assertEquals(
PrivacyParams.INSTALL_ATTR_EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(sourceDefaultEvent, true));
+ mEventReportWindowCalcDelegate.getMaxReportCount(
+ eventSourceInstallAttributed));
assertEquals(
PrivacyParams.EVENT_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(sourceDefaultEvent, false));
+ mEventReportWindowCalcDelegate.getMaxReportCount(eventSource));
- Source sourceDefaultNavigation =
+ Source navigationSourceInstallAttributed =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setEventReportWindows(EVENT_REPORT_WINDOWS_5_WINDOWS_WITH_START)
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
+ .setEventTime(sourceTime)
+ .setSourceType(Source.SourceType.NAVIGATION)
+ .setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
+ .build();
+
+ Source navigationSource =
SourceFixture.getMinimalValidSourceBuilder()
.setEventReportWindows(EVENT_REPORT_WINDOWS_5_WINDOWS_WITH_START)
.setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
@@ -1898,18 +1724,27 @@ public class EventReportWindowCalcDelegateTest {
.build();
assertEquals(
- PrivacyParams.INSTALL_ATTR_NAVIGATION_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(sourceDefaultNavigation, true));
+ PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
+ mEventReportWindowCalcDelegate.getMaxReportCount(
+ navigationSourceInstallAttributed));
assertEquals(
PrivacyParams.NAVIGATION_SOURCE_MAX_REPORTS,
- mEventReportWindowCalcDelegate.getMaxReportCount(sourceDefaultNavigation, false));
+ mEventReportWindowCalcDelegate.getMaxReportCount(navigationSource));
}
@Test
public void getReportingWindowCountForNoising_flexLiteApi() {
doReturn(true).when(mFlags).getMeasurementFlexLiteApiEnabled();
- doReturn(false).when(mFlags).getMeasurementEnableConfigurableEventReportingWindows();
long sourceTime = System.currentTimeMillis();
+ Source defaultSourceEventInstallAttributed =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
+ .setEventTime(sourceTime)
+ .setSourceType(Source.SourceType.EVENT)
+ .setInstallAttributed(true)
+ .setInstallCooldownWindow(1L)
+ .build();
+
Source defaultSourceEvent =
SourceFixture.getMinimalValidSourceBuilder()
.setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(30))
@@ -1952,56 +1787,110 @@ public class EventReportWindowCalcDelegateTest {
assertEquals(
2,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- defaultSourceEvent, true));
+ defaultSourceEventInstallAttributed));
assertEquals(
1,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- defaultSourceEvent, false));
+ defaultSourceEvent));
assertEquals(
3,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- defaultSourceNavigation, true));
+ defaultSourceNavigation));
assertEquals(
3,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- defaultSourceNavigation, false));
+ defaultSourceNavigation));
// InstallCase doesn't affect the report count
assertEquals(
1,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- oneWindowNoStart, true));
+ oneWindowNoStart));
assertEquals(
1,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- oneWindowNoStart, false));
+ oneWindowNoStart));
assertEquals(
1,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- oneWindowWithStart, true));
+ oneWindowWithStart));
assertEquals(
1,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- oneWindowWithStart, false));
+ oneWindowWithStart));
assertEquals(
2,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- twoWindowsNoStart, true));
+ twoWindowsNoStart));
assertEquals(
2,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- twoWindowsNoStart, false));
+ twoWindowsNoStart));
assertEquals(
5,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- fiveWindowsWithStart, true));
+ fiveWindowsWithStart));
assertEquals(
5,
mEventReportWindowCalcDelegate.getReportingWindowCountForNoising(
- fiveWindowsWithStart, false));
+ fiveWindowsWithStart));
+ }
+
+ @Test
+ public void fallsWithinWindow_windowNotStarted() {
+ doReturn(true).when(mFlags).getMeasurementFlexLiteApiEnabled();
+ long sourceTime = System.currentTimeMillis();
+ long triggerTime = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(1) - 1;
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setSourceType(Source.SourceType.EVENT)
+ .setEventTime(sourceTime)
+ .setEventReportWindows(EVENT_REPORT_WINDOWS_2_WINDOWS_WITH_START)
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(25))
+ .build();
+ assertEquals(
+ EventReportWindowCalcDelegate.MomentPlacement.BEFORE,
+ mEventReportWindowCalcDelegate.fallsWithinWindow(
+ source, triggerTime, EventSurfaceType.APP));
+ }
+
+ @Test
+ public void fallsWithinWindow_windowWithin() {
+ doReturn(true).when(mFlags).getMeasurementFlexLiteApiEnabled();
+ long sourceTime = System.currentTimeMillis();
+ long triggerTime = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(1);
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setSourceType(Source.SourceType.EVENT)
+ .setEventTime(sourceTime)
+ .setEventReportWindows(EVENT_REPORT_WINDOWS_2_WINDOWS_WITH_START)
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(25))
+ .build();
+ assertEquals(
+ EventReportWindowCalcDelegate.MomentPlacement.WITHIN,
+ mEventReportWindowCalcDelegate.fallsWithinWindow(
+ source, triggerTime, EventSurfaceType.APP));
+ }
+
+ @Test
+ public void fallsWithinWindow_windowPassed() {
+ doReturn(true).when(mFlags).getMeasurementFlexLiteApiEnabled();
+ long sourceTime = System.currentTimeMillis();
+ long triggerTime = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(20);
+ Source source =
+ SourceFixture.getMinimalValidSourceBuilder()
+ .setSourceType(Source.SourceType.EVENT)
+ .setEventTime(sourceTime)
+ .setEventReportWindows(EVENT_REPORT_WINDOWS_2_WINDOWS_WITH_START)
+ .setExpiryTime(sourceTime + TimeUnit.DAYS.toMillis(25))
+ .build();
+ assertEquals(
+ EventReportWindowCalcDelegate.MomentPlacement.AFTER,
+ mEventReportWindowCalcDelegate.fallsWithinWindow(
+ source, triggerTime, EventSurfaceType.APP));
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/AdServicesShellCommandHandlerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/AdServicesShellCommandHandlerTest.java
index 7341b1d33f..0d2c088449 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/AdServicesShellCommandHandlerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/AdServicesShellCommandHandlerTest.java
@@ -70,14 +70,14 @@ public final class AdServicesShellCommandHandlerTest extends AdServicesExtendedM
@Test
public void testRunHelp() throws Exception {
- String result = mCmd.runInvalid(CMD_HELP);
+ String result = mCmd.runValid(CMD_HELP);
assertHelpContents(result);
}
@Test
public void testRunHelpShort() throws Exception {
- String result = mCmd.runInvalid(CMD_SHORT_HELP);
+ String result = mCmd.runValid(CMD_SHORT_HELP);
assertHelpContents(result);
}
@@ -283,7 +283,10 @@ public final class AdServicesShellCommandHandlerTest extends AdServicesExtendedM
private final StringWriter mOutStringWriter = new StringWriter();
private final PrintWriter mOut = new PrintWriter(mOutStringWriter);
- public final AdServicesShellCommandHandler cmd = new AdServicesShellCommandHandler(mOut);
+ private final StringWriter mErrStringWriter = new StringWriter();
+ private final PrintWriter mErr = new PrintWriter(mErrStringWriter);
+ public final AdServicesShellCommandHandler cmd =
+ new AdServicesShellCommandHandler(mOut, mErr);
private boolean mOutCalled;
@@ -302,7 +305,7 @@ public final class AdServicesShellCommandHandlerTest extends AdServicesExtendedM
.that(result)
.isAtLeast(0);
- return getOut();
+ return getResult(mOut, mOutStringWriter);
}
/**
@@ -316,7 +319,7 @@ public final class AdServicesShellCommandHandlerTest extends AdServicesExtendedM
.that(result)
.isLessThan(0);
- return getOut();
+ return getResult(mErr, mErrStringWriter);
}
/**
@@ -334,13 +337,13 @@ public final class AdServicesShellCommandHandlerTest extends AdServicesExtendedM
* <p>Can only be called once per test, as there is no way to reset it, which could cause
* confusion for the test developer.
*/
- String getOut() throws IOException {
+ String getResult(PrintWriter pw, StringWriter sw) throws IOException {
if (mOutCalled) {
throw new IllegalStateException("getOut() already called");
}
- mOut.flush();
- String out = mOutStringWriter.toString();
- mOut.close();
+ pw.flush();
+ String out = sw.toString();
+ pw.close();
mOutCalled = true;
return out;
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/ShellCommandServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/ShellCommandServiceImplTest.java
new file mode 100644
index 0000000000..a07a5f6503
--- /dev/null
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/shell/ShellCommandServiceImplTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.adservices.service.shell;
+
+import android.adservices.shell.IShellCommandCallback;
+import android.adservices.shell.ShellCommandParam;
+import android.adservices.shell.ShellCommandResult;
+import android.os.IBinder;
+
+import com.android.adservices.common.AdServicesUnitTestCase;
+import com.android.adservices.common.NoFailureSyncCallback;
+
+import org.junit.Test;
+
+public final class ShellCommandServiceImplTest extends AdServicesUnitTestCase {
+
+ @Test
+ public void testRunShellCommand() throws Exception {
+ ShellCommandServiceImpl service = new ShellCommandServiceImpl();
+ SyncIShellCommandCallback callback = new SyncIShellCommandCallback();
+
+ service.runShellCommand(new ShellCommandParam("echo", "xxx"), callback);
+
+ ShellCommandResult response = callback.assertResultReceived();
+ expect.withMessage("result").that(response.getResultCode()).isEqualTo(0);
+ expect.withMessage("out").that(response.getOut()).contains("xxx");
+ expect.withMessage("err").that(response.getErr()).isEmpty();
+ }
+
+ @Test
+ public void testRunShellCommand_invalidCommand() throws Exception {
+ ShellCommandServiceImpl service = new ShellCommandServiceImpl();
+ SyncIShellCommandCallback callback = new SyncIShellCommandCallback();
+
+ service.runShellCommand(new ShellCommandParam("invalid-cmd"), callback);
+
+ ShellCommandResult response = callback.assertResultReceived();
+ expect.withMessage("result").that(response.getResultCode()).isEqualTo(-1);
+ expect.withMessage("out").that(response.getOut()).isEmpty();
+ expect.withMessage("err").that(response.getErr()).contains("Unknown command");
+ }
+
+ private static final class SyncIShellCommandCallback
+ extends NoFailureSyncCallback<ShellCommandResult> implements IShellCommandCallback {
+
+ @Override
+ public void onResult(ShellCommandResult response) {
+ injectResult(response);
+ }
+
+ @Override
+ public IBinder asBinder() {
+ return null;
+ }
+ }
+}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/PeriodicEncodingJobWorkerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/PeriodicEncodingJobWorkerTest.java
index 3be31f28b1..1bf8fb9b98 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/PeriodicEncodingJobWorkerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/PeriodicEncodingJobWorkerTest.java
@@ -37,10 +37,12 @@ import android.adservices.common.CommonFixture;
import com.android.adservices.concurrency.AdServicesExecutors;
import com.android.adservices.data.signals.DBEncodedPayload;
import com.android.adservices.data.signals.DBEncoderLogicMetadata;
+import com.android.adservices.data.signals.DBSignalsUpdateMetadata;
import com.android.adservices.data.signals.EncodedPayloadDao;
import com.android.adservices.data.signals.EncoderLogicHandler;
import com.android.adservices.data.signals.EncoderLogicMetadataDao;
import com.android.adservices.data.signals.EncoderPersistenceDao;
+import com.android.adservices.data.signals.ProtectedSignalsDao;
import com.android.adservices.service.Flags;
import com.android.adservices.service.adselection.AdSelectionScriptEngine;
import com.android.adservices.service.devapi.DevContextFilter;
@@ -113,6 +115,7 @@ public class PeriodicEncodingJobWorkerTest {
@Mock private EncoderLogicMetadataDao mEncoderLogicMetadataDao;
@Mock private EncoderPersistenceDao mEncoderPersistenceDao;
@Mock private EncodedPayloadDao mEncodedPayloadDao;
+ @Mock private ProtectedSignalsDao mProtectedSignalsDao;
@Mock private SignalsProviderImpl mSignalStorageManager;
@Mock private AdSelectionScriptEngine mScriptEngine;
@Mock private DevContextFilter mDevContextFilter;
@@ -138,9 +141,9 @@ public class PeriodicEncodingJobWorkerTest {
new PeriodicEncodingJobWorker(
mEncoderLogicHandler,
mEncoderLogicMetadataDao,
- mEncoderPersistenceDao,
mEncodedPayloadDao,
mSignalStorageManager,
+ mProtectedSignalsDao,
mScriptEngine,
mBackgroundExecutor,
mLightWeightExecutor,
@@ -172,9 +175,9 @@ public class PeriodicEncodingJobWorkerTest {
new PeriodicEncodingJobWorker(
mEncoderLogicHandler,
mEncoderLogicMetadataDao,
- mEncoderPersistenceDao,
mEncodedPayloadDao,
mSignalStorageManager,
+ mProtectedSignalsDao,
mScriptEngine,
mBackgroundExecutor,
mLightWeightExecutor,
@@ -243,7 +246,8 @@ public class PeriodicEncodingJobWorkerTest {
.get(5, TimeUnit.SECONDS));
assertEquals(IllegalStateException.class, e.getCause().getClass());
assertEquals(PAYLOAD_PERSISTENCE_ERROR_MSG, e.getCause().getMessage());
- Mockito.verifyZeroInteractions(mEncodedPayloadDao);
+ verify(mEncodedPayloadDao).getEncodedPayload(BUYER);
+ verifyNoMoreInteractions(mEncodedPayloadDao);
}
@Test
@@ -267,7 +271,8 @@ public class PeriodicEncodingJobWorkerTest {
});
assertEquals(IllegalStateException.class, e.getCause().getClass());
assertEquals(PAYLOAD_PERSISTENCE_ERROR_MSG, e.getCause().getMessage());
- Mockito.verifyZeroInteractions(mEncodedPayloadDao);
+ verify(mEncodedPayloadDao).getEncodedPayload(BUYER);
+ verifyNoMoreInteractions(mEncodedPayloadDao);
}
@Test
@@ -328,7 +333,8 @@ public class PeriodicEncodingJobWorkerTest {
stallEncodingLatch.getCount());
// e is TimeoutFuture$TimeoutFutureException which extends TimeoutException
assertTrue(TimeoutException.class.isAssignableFrom(e.getCause().getClass()));
- Mockito.verifyZeroInteractions(mEncodedPayloadDao);
+ verify(mEncodedPayloadDao).getEncodedPayload(BUYER);
+ verifyNoMoreInteractions(mEncodedPayloadDao);
}
@Test
@@ -361,6 +367,8 @@ public class PeriodicEncodingJobWorkerTest {
verify(mEncoderLogicHandler).getAllRegisteredEncoders();
verify(mEncoderLogicHandler).getEncoder(BUYER);
verify(mSignalStorageManager).getSignals(BUYER);
+ verify(mEncodedPayloadDao, times(1)).getEncodedPayload(BUYER);
+ verify(mEncodedPayloadDao, times(1)).getEncodedPayload(BUYER_2);
verify(mEncodedPayloadDao, times(1)).persistEncodedPayload(mEncodedPayloadCaptor.capture());
verify(mEncoderLogicHandler).updateEncoderFailedCount(BUYER_2, 1);
assertEquals(BUYER, mEncodedPayloadCaptor.getValue().getBuyer());
@@ -368,7 +376,6 @@ public class PeriodicEncodingJobWorkerTest {
assertEquals(
getSetFromBytes(validResponse),
getSetFromBytes(mEncodedPayloadCaptor.getValue().getEncodedPayload()));
- verify(mEncoderLogicHandler).updateEncoderFailedCount(BUYER_2, 1);
}
@Test
@@ -417,6 +424,39 @@ public class PeriodicEncodingJobWorkerTest {
}
@Test
+ public void testEncodeSignals_noUpdateToBuyer_skipEncoding()
+ throws ExecutionException, InterruptedException, TimeoutException {
+ when(mSignalStorageManager.getSignals(BUYER)).thenReturn(FAKE_SIGNALS);
+ when(mProtectedSignalsDao.getSignalsUpdateMetadata(BUYER))
+ .thenReturn(
+ DBSignalsUpdateMetadata.builder()
+ .setBuyer(BUYER)
+ .setLastSignalsUpdatedTime(CommonFixture.FIXED_EARLIER_ONE_DAY)
+ .build());
+ when(mEncodedPayloadDao.getEncodedPayload(BUYER))
+ .thenReturn(
+ DBEncodedPayload.create(
+ BUYER, 1, CommonFixture.FIXED_NOW, new byte[] {0x22, 0x33}));
+
+ mJobWorker
+ .runEncodingPerBuyer(
+ DBEncoderLogicMetadata.builder()
+ .setBuyer(BUYER)
+ .setCreationTime(CommonFixture.FIXED_EARLIER_ONE_DAY)
+ .setVersion(1)
+ .setFailedEncodingCount(1)
+ .build(),
+ TIMEOUT_SECONDS)
+ .get(TIMEOUT_SECONDS, TimeUnit.SECONDS);
+
+ verify(mSignalStorageManager).getSignals(BUYER);
+ verify(mProtectedSignalsDao).getSignalsUpdateMetadata(BUYER);
+ verify(mEncodedPayloadDao).getEncodedPayload(BUYER);
+ verifyNoMoreInteractions(mSignalStorageManager, mProtectedSignalsDao, mEncodedPayloadDao);
+ verifyZeroInteractions(mEncoderLogicHandler, mScriptEngine);
+ }
+
+ @Test
public void testUpdatesEncodersAllUpdatedEncodersDoNotDownloadAgain() {
when(mEncoderLogicMetadataDao.getBuyersWithEncodersBeforeTime(any()))
.thenReturn(Collections.emptyList());
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/ProtectedSignalsServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/ProtectedSignalsServiceImplTest.java
index 07ca5a5b4c..079d586128 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/ProtectedSignalsServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/ProtectedSignalsServiceImplTest.java
@@ -170,8 +170,7 @@ public class ProtectedSignalsServiceImplTest {
mProtectedSignalsService.updateSignals(mInput, mUpdateSignalsCallbackMock);
verify(mFledgeAuthorizationFilterMock)
- .assertAppDeclaredProtectedSignalsPermission(
- eq(CONTEXT), eq(PACKAGE), eq(API_NAME));
+ .assertAppDeclaredPermission(eq(CONTEXT), eq(PACKAGE), eq(API_NAME));
verify(mCallingAppUidSupplierMock).getCallingAppUid();
verify(mDevContextFilterMock).createDevContext();
verify(mFlagsMock).getDisableFledgeEnrollmentCheck();
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsEncodingE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsEncodingE2ETest.java
index 3c8e73dfc4..f877873f91 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsEncodingE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsEncodingE2ETest.java
@@ -25,7 +25,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
@@ -199,6 +198,7 @@ public class SignalsEncodingE2ETest {
mEncoderPersistenceDao,
mEncoderEndpointsDao,
mEncoderLogicMetadataDao,
+ mSignalsDao,
mAdServicesHttpsClient,
mBackgroundExecutorService);
mUpdateEncoderEventHandler =
@@ -244,7 +244,8 @@ public class SignalsEncodingE2ETest {
mBackgroundExecutorService,
mUpdatesDownloader,
mUpdateProcessingOrchestrator,
- mAdtechUriValidator);
+ mAdtechUriValidator,
+ CommonFixture.FIXED_CLOCK_TRUNCATED_TO_MILLI);
mService =
new ProtectedSignalsServiceImpl(
mContextSpy,
@@ -277,9 +278,9 @@ public class SignalsEncodingE2ETest {
new PeriodicEncodingJobWorker(
mEncoderLogicHandler,
mEncoderLogicMetadataDao,
- mEncoderPersistenceDao,
mEncodedPayloadDao,
mSignalStorageManager,
+ mSignalsDao,
mAdSelectionScriptEngine,
mBackgroundExecutorService,
mLightweightExecutorService,
@@ -650,9 +651,9 @@ public class SignalsEncodingE2ETest {
new PeriodicEncodingJobWorker(
mEncoderLogicHandler,
mEncoderLogicMetadataDao,
- mEncoderPersistenceDao,
mEncodedPayloadDao,
mSignalStorageManager,
+ mSignalsDao,
mAdSelectionScriptEngine,
mBackgroundExecutorService,
mLightweightExecutorService,
@@ -686,9 +687,9 @@ public class SignalsEncodingE2ETest {
new PeriodicEncodingJobWorker(
mEncoderLogicHandler,
mEncoderLogicMetadataDao,
- mEncoderPersistenceDao,
mEncodedPayloadDao,
mSignalStorageManager,
+ mSignalsDao,
mAdSelectionScriptEngine,
mBackgroundExecutorService,
mLightweightExecutorService,
@@ -705,7 +706,9 @@ public class SignalsEncodingE2ETest {
"Encoding JS should have returned size of signals as result",
new byte[] {(byte) expected.size()},
payload2);
- assertTrue(secondEncodingRun.getCreationTime().isAfter(firstEncodingRun.getCreationTime()));
+ // The second run should skip based on the logic that we will skip encoding for unchanged
+ // buyer.
+ assertEquals(secondEncodingRun.getCreationTime(), firstEncodingRun.getCreationTime());
encoderLogicDownloadedLatch.await(5, TimeUnit.SECONDS);
assertEquals(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsIntakeE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsIntakeE2ETest.java
index d57f6adf11..c158543e1b 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsIntakeE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsIntakeE2ETest.java
@@ -172,6 +172,7 @@ public class SignalsIntakeE2ETest {
mEncoderPersistenceDao,
mEncoderEndpointsDao,
mEncoderLogicMetadataDao,
+ mSignalsDao,
mAdServicesHttpsClientMock,
mBackgroundExecutorService);
mUpdateEncoderEventHandler =
@@ -235,7 +236,8 @@ public class SignalsIntakeE2ETest {
mBackgroundExecutorService,
mUpdatesDownloader,
mUpdateProcessingOrchestrator,
- mAdtechUriValidator);
+ mAdtechUriValidator,
+ CommonFixture.FIXED_CLOCK_TRUNCATED_TO_MILLI);
mService =
new ProtectedSignalsServiceImpl(
mContextSpy,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsMaintenanceTasksWorkerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsMaintenanceTasksWorkerTest.java
index ab251d56a4..60d8859ac3 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsMaintenanceTasksWorkerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/SignalsMaintenanceTasksWorkerTest.java
@@ -17,6 +17,7 @@
package com.android.adservices.service.signals;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
@@ -55,6 +56,7 @@ public class SignalsMaintenanceTasksWorkerTest {
@Mock private PackageManager mPackageManagerMock;
SignalsMaintenanceTasksWorker mSignalsMaintenanceTasksWorker;
+ Instant mNow;
Instant mExpirationTime;
@Before
@@ -69,6 +71,7 @@ public class SignalsMaintenanceTasksWorkerTest {
mClockMock,
mPackageManagerMock);
when(mClockMock.instant()).thenReturn(CommonFixture.FIXED_NOW);
+ mNow = CommonFixture.FIXED_NOW;
mExpirationTime = CommonFixture.FIXED_NOW.minusSeconds(ProtectedSignal.EXPIRATION_SECONDS);
}
@@ -76,21 +79,25 @@ public class SignalsMaintenanceTasksWorkerTest {
public void testClearInvalidSignalsEnrollmentEnabled() throws Exception {
when(mFlagsMock.getDisableFledgeEnrollmentCheck()).thenReturn(false);
- mSignalsMaintenanceTasksWorker.clearInvalidSignals(mExpirationTime);
+ mSignalsMaintenanceTasksWorker.clearInvalidSignals(mExpirationTime, mNow);
- verify(mProtectedSignalsDaoMock).deleteSignalsBeforeTime(mExpirationTime);
+ verify(mProtectedSignalsDaoMock)
+ .deleteExpiredSignalsAndUpdateSignalsUpdateMetadata(mExpirationTime, mNow);
verify(mFlagsMock).getDisableFledgeEnrollmentCheck();
verify(mProtectedSignalsDaoMock).deleteDisallowedBuyerSignals(any());
- verify(mProtectedSignalsDaoMock).deleteAllDisallowedPackageSignals(any(), any());
+ verify(mProtectedSignalsDaoMock)
+ .deleteAllDisallowedPackageSignalsAndUpdateSignalUpdateMetadata(
+ any(), any(), eq(mNow));
}
@Test
public void testClearInvalidSignalsEnrollmentDisabled() throws Exception {
when(mFlagsMock.getDisableFledgeEnrollmentCheck()).thenReturn(true);
- mSignalsMaintenanceTasksWorker.clearInvalidSignals(mExpirationTime);
+ mSignalsMaintenanceTasksWorker.clearInvalidSignals(mExpirationTime, mNow);
- verify(mProtectedSignalsDaoMock).deleteSignalsBeforeTime(mExpirationTime);
+ verify(mProtectedSignalsDaoMock)
+ .deleteExpiredSignalsAndUpdateSignalsUpdateMetadata(mExpirationTime, mNow);
verify(mFlagsMock).getDisableFledgeEnrollmentCheck();
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateProcessingOrchestratorTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateProcessingOrchestratorTest.java
index 4b6b57b398..346f969a0c 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateProcessingOrchestratorTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateProcessingOrchestratorTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
@@ -97,7 +98,7 @@ public class UpdateProcessingOrchestratorTest {
ADTECH, PACKAGE, NOW, new JSONObject(), DEV_CONTEXT);
verify(mProtectedSignalsDaoMock).getSignalsByBuyer(eq(ADTECH));
verify(mProtectedSignalsDaoMock)
- .insertAndDelete(Collections.emptyList(), Collections.emptyList());
+ .insertAndDelete(ADTECH, NOW, Collections.emptyList(), Collections.emptyList());
verifyZeroInteractions(mUpdateProcessorSelectorMock);
verify(mSignalEvictionControllerMock)
.evict(
@@ -136,7 +137,9 @@ public class UpdateProcessingOrchestratorTest {
mUpdateProcessingOrchestrator.processUpdates(
ADTECH, PACKAGE, NOW, commandToNumber, DEV_CONTEXT));
assertEquals(exception, t.getCause());
+ verify(mProtectedSignalsDaoMock).getSignalsByBuyer(ADTECH);
verifyZeroInteractions(mSignalEvictionControllerMock);
+ verifyNoMoreInteractions(mProtectedSignalsDaoMock);
}
@Test
@@ -156,8 +159,9 @@ public class UpdateProcessingOrchestratorTest {
mUpdateProcessingOrchestrator.processUpdates(ADTECH, PACKAGE, NOW, json, DEV_CONTEXT);
- List<DBProtectedSignal> expected = Arrays.asList(createSignal(KEY_1, VALUE));
- verify(mProtectedSignalsDaoMock).insertAndDelete(eq(expected), eq(Collections.emptyList()));
+ List<DBProtectedSignal> expected = List.of(createSignal(KEY_1, VALUE));
+ verify(mProtectedSignalsDaoMock)
+ .insertAndDelete(ADTECH, NOW, expected, Collections.emptyList());
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR));
verify(mSignalEvictionControllerMock)
.evict(
@@ -185,7 +189,8 @@ public class UpdateProcessingOrchestratorTest {
mUpdateProcessingOrchestrator.processUpdates(ADTECH, PACKAGE, NOW, json, DEV_CONTEXT);
List<DBProtectedSignal> expected = Arrays.asList(createSignal(KEY_1, VALUE));
- verify(mProtectedSignalsDaoMock).insertAndDelete(eq(expected), eq(Collections.emptyList()));
+ verify(mProtectedSignalsDaoMock)
+ .insertAndDelete(ADTECH, NOW, expected, Collections.emptyList());
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR));
verify(mSignalEvictionControllerMock)
.evict(
@@ -214,7 +219,7 @@ public class UpdateProcessingOrchestratorTest {
verify(mProtectedSignalsDaoMock).getSignalsByBuyer(eq(ADTECH));
verify(mProtectedSignalsDaoMock)
- .insertAndDelete(eq(Collections.emptyList()), eq(Arrays.asList(toRemove)));
+ .insertAndDelete(ADTECH, NOW, Collections.emptyList(), Arrays.asList(toRemove));
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR));
verify(mSignalEvictionControllerMock)
.evict(eq(ADTECH), eq(List.of(toKeep)), mUpdateOutputArgumentCaptor.capture());
@@ -250,7 +255,8 @@ public class UpdateProcessingOrchestratorTest {
DBProtectedSignal expected1 = createSignal(KEY_1, VALUE);
DBProtectedSignal expected2 = createSignal(KEY_2, VALUE);
verify(mProtectedSignalsDaoMock)
- .insertAndDelete(mInsertCaptor.capture(), eq(Collections.emptyList()));
+ .insertAndDelete(
+ eq(ADTECH), eq(NOW), mInsertCaptor.capture(), eq(Collections.emptyList()));
assertThat(mInsertCaptor.getValue())
.containsExactlyElementsIn(Arrays.asList(expected1, expected2));
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR + 1));
@@ -317,7 +323,7 @@ public class UpdateProcessingOrchestratorTest {
verify(mProtectedSignalsDaoMock).getSignalsByBuyer(eq(ADTECH));
verify(mProtectedSignalsDaoMock)
.insertAndDelete(
- eq(Collections.emptyList()), eq(Arrays.asList(toRemove1, toRemove2)));
+ ADTECH, NOW, Collections.emptyList(), Arrays.asList(toRemove1, toRemove2));
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR));
verify(mSignalEvictionControllerMock)
.evict(eq(ADTECH), eq(List.of()), mUpdateOutputArgumentCaptor.capture());
@@ -441,7 +447,7 @@ public class UpdateProcessingOrchestratorTest {
mUpdateProcessingOrchestrator.processUpdates(ADTECH, PACKAGE, NOW, json, DEV_CONTEXT);
List<DBProtectedSignal> expected = Arrays.asList(createSignal(KEY_1, VALUE));
- verify(mProtectedSignalsDaoMock).insertAndDelete(eq(expected), eq(expected));
+ verify(mProtectedSignalsDaoMock).insertAndDelete(ADTECH, NOW, expected, expected);
verify(mUpdateProcessorSelectorMock).getUpdateProcessor(eq(TEST_PROCESSOR));
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateSignalsOrchestratorTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateSignalsOrchestratorTest.java
index 0e693ffd35..9fea32c037 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateSignalsOrchestratorTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/signals/UpdateSignalsOrchestratorTest.java
@@ -66,7 +66,8 @@ public class UpdateSignalsOrchestratorTest {
AdServicesExecutors.getBackgroundExecutor(),
mUpdatesDownloader,
mUpdateProcessingOrchestrator,
- mAdTechUriValidator);
+ mAdTechUriValidator,
+ CommonFixture.FIXED_CLOCK_TRUNCATED_TO_MILLI);
}
@Test
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/AdServicesLoggerImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/AdServicesLoggerImplTest.java
index 7e63a2ced9..4fbe03c82c 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/AdServicesLoggerImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/AdServicesLoggerImplTest.java
@@ -88,48 +88,37 @@ import static com.android.adservices.service.stats.RunAdSelectionProcessReported
import static com.android.adservices.service.stats.UpdateCustomAudienceProcessReportedStatsTest.DATA_SIZE_OF_ADS_IN_BYTES;
import static com.android.adservices.service.stats.UpdateCustomAudienceProcessReportedStatsTest.NUM_OF_ADS;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import android.adservices.adselection.ReportEventRequest;
+import com.android.adservices.common.AdServicesMockitoTestCase;
import com.android.adservices.service.enrollment.EnrollmentStatus;
import com.android.adservices.service.measurement.Source;
import com.android.adservices.service.measurement.WipeoutStatus;
import com.android.adservices.service.measurement.attribution.AttributionStatus;
-import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** Unit tests for {@link AdServicesLoggerImpl}. */
-public class AdServicesLoggerImplTest {
- @Mock StatsdAdServicesLogger mStatsdLoggerMock;
- private static final String SOURCE_REGISTRANT = "android-app://com.registrant";
+public final class AdServicesLoggerImplTest extends AdServicesMockitoTestCase {
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- }
+ @Mock private StatsdAdServicesLogger mStatsdLoggerMock;
@Test
public void testLogFledgeApiCallStats() {
- final int latencyMs = 10;
+ int latencyMs = 10;
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
adServicesLogger.logFledgeApiCallStats(
AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS, STATUS_SUCCESS, latencyMs);
verify(mStatsdLoggerMock)
.logFledgeApiCallStats(
- eq(AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS),
- eq(STATUS_SUCCESS),
- eq(latencyMs));
+ AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS, STATUS_SUCCESS, latencyMs);
}
@Test
@@ -149,22 +138,18 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<RunAdSelectionProcessReportedStats> argumentCaptor =
ArgumentCaptor.forClass(RunAdSelectionProcessReportedStats.class);
verify(mStatsdLoggerMock).logRunAdSelectionProcessReportedStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getIsRemarketingAdsWon(), IS_RMKT_ADS_WON);
- assertEquals(
- argumentCaptor.getValue().getDBAdSelectionSizeInBytes(),
- DB_AD_SELECTION_SIZE_IN_BYTES);
- assertEquals(
- argumentCaptor.getValue().getPersistAdSelectionLatencyInMillis(),
- PERSIST_AD_SELECTION_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunAdSelectionResultCode(),
- PERSIST_AD_SELECTION_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getRunAdSelectionLatencyInMillis(),
- RUN_AD_SELECTION_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunAdSelectionResultCode(),
- RUN_AD_SELECTION_RESULT_CODE);
+ RunAdSelectionProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getIsRemarketingAdsWon()).isEqualTo(IS_RMKT_ADS_WON);
+ expect.that(loggedStats.getDBAdSelectionSizeInBytes())
+ .isEqualTo(DB_AD_SELECTION_SIZE_IN_BYTES);
+ expect.that(loggedStats.getPersistAdSelectionLatencyInMillis())
+ .isEqualTo(PERSIST_AD_SELECTION_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunAdSelectionResultCode())
+ .isEqualTo(PERSIST_AD_SELECTION_RESULT_CODE);
+ expect.that(loggedStats.getRunAdSelectionLatencyInMillis())
+ .isEqualTo(RUN_AD_SELECTION_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunAdSelectionResultCode())
+ .isEqualTo(RUN_AD_SELECTION_RESULT_CODE);
}
@Test
@@ -200,49 +185,35 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<RunAdScoringProcessReportedStats> argumentCaptor =
ArgumentCaptor.forClass(RunAdScoringProcessReportedStats.class);
verify(mStatsdLoggerMock).logRunAdScoringProcessReportedStats(argumentCaptor.capture());
- assertEquals(
- argumentCaptor.getValue().getGetAdSelectionLogicLatencyInMillis(),
- GET_AD_SELECTION_LOGIC_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetAdSelectionLogicResultCode(),
- GET_AD_SELECTION_LOGIC_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getGetAdSelectionLogicScriptType(),
- GET_AD_SELECTION_LOGIC_SCRIPT_TYPE);
- assertEquals(
- argumentCaptor.getValue().getFetchedAdSelectionLogicScriptSizeInBytes(),
- FETCHED_AD_SELECTION_LOGIC_SCRIPT_SIZE_IN_BYTES);
- assertEquals(
- argumentCaptor.getValue().getGetTrustedScoringSignalsLatencyInMillis(),
- GET_TRUSTED_SCORING_SIGNALS_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetTrustedScoringSignalsResultCode(),
- GET_TRUSTED_SCORING_SIGNALS_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getFetchedTrustedScoringSignalsDataSizeInBytes(),
- FETCHED_TRUSTED_SCORING_SIGNALS_DATA_SIZE_IN_BYTES);
- assertEquals(
- argumentCaptor.getValue().getScoreAdsLatencyInMillis(),
- SCORE_ADS_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetAdScoresLatencyInMillis(),
- GET_AD_SCORES_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetAdScoresResultCode(), GET_AD_SCORES_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getNumOfCasEnteringScoring(),
- NUM_OF_CAS_ENTERING_SCORING);
- assertEquals(
- argumentCaptor.getValue().getNumOfRemarketingAdsEnteringScoring(),
- NUM_OF_REMARKETING_ADS_ENTERING_SCORING);
- assertEquals(
- argumentCaptor.getValue().getNumOfContextualAdsEnteringScoring(),
- NUM_OF_CONTEXTUAL_ADS_ENTERING_SCORING);
- assertEquals(
- argumentCaptor.getValue().getRunAdScoringLatencyInMillis(),
- RUN_AD_SCORING_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunAdScoringResultCode(), RUN_AD_SCORING_RESULT_CODE);
+ RunAdScoringProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getGetAdSelectionLogicLatencyInMillis())
+ .isEqualTo(GET_AD_SELECTION_LOGIC_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetAdSelectionLogicResultCode())
+ .isEqualTo(GET_AD_SELECTION_LOGIC_RESULT_CODE);
+ expect.that(loggedStats.getGetAdSelectionLogicScriptType())
+ .isEqualTo(GET_AD_SELECTION_LOGIC_SCRIPT_TYPE);
+ expect.that(loggedStats.getFetchedAdSelectionLogicScriptSizeInBytes())
+ .isEqualTo(FETCHED_AD_SELECTION_LOGIC_SCRIPT_SIZE_IN_BYTES);
+ expect.that(loggedStats.getGetTrustedScoringSignalsLatencyInMillis())
+ .isEqualTo(GET_TRUSTED_SCORING_SIGNALS_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetTrustedScoringSignalsResultCode())
+ .isEqualTo(GET_TRUSTED_SCORING_SIGNALS_RESULT_CODE);
+ expect.that(loggedStats.getFetchedTrustedScoringSignalsDataSizeInBytes())
+ .isEqualTo(FETCHED_TRUSTED_SCORING_SIGNALS_DATA_SIZE_IN_BYTES);
+ expect.that(loggedStats.getScoreAdsLatencyInMillis())
+ .isEqualTo(SCORE_ADS_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetAdScoresLatencyInMillis())
+ .isEqualTo(GET_AD_SCORES_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetAdScoresResultCode()).isEqualTo(GET_AD_SCORES_RESULT_CODE);
+ expect.that(loggedStats.getNumOfCasEnteringScoring())
+ .isEqualTo(NUM_OF_CAS_ENTERING_SCORING);
+ expect.that(loggedStats.getNumOfRemarketingAdsEnteringScoring())
+ .isEqualTo(NUM_OF_REMARKETING_ADS_ENTERING_SCORING);
+ expect.that(loggedStats.getNumOfContextualAdsEnteringScoring())
+ .isEqualTo(NUM_OF_CONTEXTUAL_ADS_ENTERING_SCORING);
+ expect.that(loggedStats.getRunAdScoringLatencyInMillis())
+ .isEqualTo(RUN_AD_SCORING_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunAdScoringResultCode()).isEqualTo(RUN_AD_SCORING_RESULT_CODE);
}
@Test
@@ -270,34 +241,26 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<RunAdBiddingProcessReportedStats> argumentCaptor =
ArgumentCaptor.forClass(RunAdBiddingProcessReportedStats.class);
verify(mStatsdLoggerMock).logRunAdBiddingProcessReportedStats(argumentCaptor.capture());
- assertEquals(
- argumentCaptor.getValue().getGetBuyersCustomAudienceLatencyInMills(),
- GET_BUYERS_CUSTOM_AUDIENCE_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetBuyersCustomAudienceResultCode(),
- GET_BUYERS_CUSTOM_AUDIENCE_RESULT_CODE);
- assertEquals(argumentCaptor.getValue().getNumBuyersRequested(), NUM_BUYERS_REQUESTED);
- assertEquals(argumentCaptor.getValue().getNumBuyersFetched(), NUM_BUYERS_FETCHED);
- assertEquals(
- argumentCaptor.getValue().getNumOfAdsEnteringBidding(),
- NUM_OF_ADS_ENTERING_BIDDING);
- assertEquals(
- argumentCaptor.getValue().getNumOfCasEnteringBidding(),
- NUM_OF_CAS_ENTERING_BIDDING);
- assertEquals(
- argumentCaptor.getValue().getNumOfCasPostBidding(), NUM_OF_CAS_POSTING_BIDDING);
- assertEquals(
- argumentCaptor.getValue().getRatioOfCasSelectingRmktAds(),
- RATIO_OF_CAS_SELECTING_RMKT_ADS,
- 0.0f);
- assertEquals(
- argumentCaptor.getValue().getRunAdBiddingLatencyInMillis(),
- RUN_AD_BIDDING_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunAdBiddingResultCode(), RUN_AD_BIDDING_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getTotalAdBiddingStageLatencyInMillis(),
- TOTAL_AD_BIDDING_STAGE_LATENCY_IN_MILLIS);
+ RunAdBiddingProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getGetBuyersCustomAudienceLatencyInMills())
+ .isEqualTo(GET_BUYERS_CUSTOM_AUDIENCE_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetBuyersCustomAudienceResultCode())
+ .isEqualTo(GET_BUYERS_CUSTOM_AUDIENCE_RESULT_CODE);
+ expect.that(loggedStats.getNumBuyersRequested()).isEqualTo(NUM_BUYERS_REQUESTED);
+ expect.that(loggedStats.getNumBuyersFetched()).isEqualTo(NUM_BUYERS_FETCHED);
+ expect.that(loggedStats.getNumOfAdsEnteringBidding())
+ .isEqualTo(NUM_OF_ADS_ENTERING_BIDDING);
+ expect.that(loggedStats.getNumOfCasEnteringBidding())
+ .isEqualTo(NUM_OF_CAS_ENTERING_BIDDING);
+ expect.that(loggedStats.getNumOfCasPostBidding()).isEqualTo(NUM_OF_CAS_POSTING_BIDDING);
+ expect.that(loggedStats.getRatioOfCasSelectingRmktAds())
+ .isWithin(0.0f)
+ .of(RATIO_OF_CAS_SELECTING_RMKT_ADS);
+ expect.that(loggedStats.getRunAdBiddingLatencyInMillis())
+ .isEqualTo(RUN_AD_BIDDING_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunAdBiddingResultCode()).isEqualTo(RUN_AD_BIDDING_RESULT_CODE);
+ expect.that(loggedStats.getTotalAdBiddingStageLatencyInMillis())
+ .isEqualTo(TOTAL_AD_BIDDING_STAGE_LATENCY_IN_MILLIS);
}
@Test
@@ -332,44 +295,33 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(RunAdBiddingPerCAProcessReportedStats.class);
verify(mStatsdLoggerMock)
.logRunAdBiddingPerCAProcessReportedStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getNumOfAdsForBidding(), NUM_OF_ADS_FOR_BIDDING);
- assertEquals(
- argumentCaptor.getValue().getRunAdBiddingPerCaLatencyInMillis(),
- RUN_AD_BIDDING_PER_CA_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunAdBiddingPerCaResultCode(),
- RUN_AD_BIDDING_PER_CA_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getGetBuyerDecisionLogicLatencyInMillis(),
- GET_BUYER_DECISION_LOGIC_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetBuyerDecisionLogicResultCode(),
- GET_BUYER_DECISION_LOGIC_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getBuyerDecisionLogicScriptType(),
- BUYER_DECISION_LOGIC_SCRIPT_TYPE);
- assertEquals(
- argumentCaptor.getValue().getFetchedBuyerDecisionLogicScriptSizeInBytes(),
- FETCHED_BUYER_DECISION_LOGIC_SCRIPT_SIZE_IN_BYTES);
- assertEquals(
- argumentCaptor.getValue().getNumOfKeysOfTrustedBiddingSignals(),
- NUM_OF_KEYS_OF_TRUSTED_BIDDING_SIGNALS);
- assertEquals(
- argumentCaptor.getValue().getFetchedTrustedBiddingSignalsDataSizeInBytes(),
- FETCHED_TRUSTED_BIDDING_SIGNALS_DATA_SIZE_IN_BYTES);
- assertEquals(
- argumentCaptor.getValue().getGetTrustedBiddingSignalsLatencyInMillis(),
- GET_TRUSTED_BIDDING_SIGNALS_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getGetTrustedBiddingSignalsResultCode(),
- GET_TRUSTED_BIDDING_SIGNALS_RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getGenerateBidsLatencyInMillis(),
- GENERATE_BIDS_LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getRunBiddingLatencyInMillis(),
- RUN_BIDDING_LATENCY_IN_MILLIS);
- assertEquals(argumentCaptor.getValue().getRunBiddingResultCode(), RUN_BIDDING_RESULT_CODE);
+ RunAdBiddingPerCAProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getNumOfAdsForBidding()).isEqualTo(NUM_OF_ADS_FOR_BIDDING);
+ expect.that(loggedStats.getRunAdBiddingPerCaLatencyInMillis())
+ .isEqualTo(RUN_AD_BIDDING_PER_CA_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunAdBiddingPerCaResultCode())
+ .isEqualTo(RUN_AD_BIDDING_PER_CA_RESULT_CODE);
+ expect.that(loggedStats.getGetBuyerDecisionLogicLatencyInMillis())
+ .isEqualTo(GET_BUYER_DECISION_LOGIC_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetBuyerDecisionLogicResultCode())
+ .isEqualTo(GET_BUYER_DECISION_LOGIC_RESULT_CODE);
+ expect.that(loggedStats.getBuyerDecisionLogicScriptType())
+ .isEqualTo(BUYER_DECISION_LOGIC_SCRIPT_TYPE);
+ expect.that(loggedStats.getFetchedBuyerDecisionLogicScriptSizeInBytes())
+ .isEqualTo(FETCHED_BUYER_DECISION_LOGIC_SCRIPT_SIZE_IN_BYTES);
+ expect.that(loggedStats.getNumOfKeysOfTrustedBiddingSignals())
+ .isEqualTo(NUM_OF_KEYS_OF_TRUSTED_BIDDING_SIGNALS);
+ expect.that(loggedStats.getFetchedTrustedBiddingSignalsDataSizeInBytes())
+ .isEqualTo(FETCHED_TRUSTED_BIDDING_SIGNALS_DATA_SIZE_IN_BYTES);
+ expect.that(loggedStats.getGetTrustedBiddingSignalsLatencyInMillis())
+ .isEqualTo(GET_TRUSTED_BIDDING_SIGNALS_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getGetTrustedBiddingSignalsResultCode())
+ .isEqualTo(GET_TRUSTED_BIDDING_SIGNALS_RESULT_CODE);
+ expect.that(loggedStats.getGenerateBidsLatencyInMillis())
+ .isEqualTo(GENERATE_BIDS_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunBiddingLatencyInMillis())
+ .isEqualTo(RUN_BIDDING_LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getRunBiddingResultCode()).isEqualTo(RUN_BIDDING_RESULT_CODE);
}
@Test
@@ -386,11 +338,11 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<BackgroundFetchProcessReportedStats> argumentCaptor =
ArgumentCaptor.forClass(BackgroundFetchProcessReportedStats.class);
verify(mStatsdLoggerMock).logBackgroundFetchProcessReportedStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getLatencyInMillis(), LATENCY_IN_MILLIS);
- assertEquals(
- argumentCaptor.getValue().getNumOfEligibleToUpdateCas(),
- NUM_OF_ELIGIBLE_TO_UPDATE_CAS);
- assertEquals(argumentCaptor.getValue().getResultCode(), RESULT_CODE);
+ BackgroundFetchProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getLatencyInMillis()).isEqualTo(LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getNumOfEligibleToUpdateCas())
+ .isEqualTo(NUM_OF_ELIGIBLE_TO_UPDATE_CAS);
+ expect.that(loggedStats.getResultCode()).isEqualTo(RESULT_CODE);
}
@Test
@@ -408,11 +360,11 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(UpdateCustomAudienceProcessReportedStats.class);
verify(mStatsdLoggerMock)
.logUpdateCustomAudienceProcessReportedStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getLatencyInMills(), LATENCY_IN_MILLIS);
- assertEquals(argumentCaptor.getValue().getResultCode(), RESULT_CODE);
- assertEquals(
- argumentCaptor.getValue().getDataSizeOfAdsInBytes(), DATA_SIZE_OF_ADS_IN_BYTES);
- assertEquals(argumentCaptor.getValue().getNumOfAds(), NUM_OF_ADS);
+ UpdateCustomAudienceProcessReportedStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getLatencyInMills()).isEqualTo(LATENCY_IN_MILLIS);
+ expect.that(loggedStats.getResultCode()).isEqualTo(RESULT_CODE);
+ expect.that(loggedStats.getDataSizeOfAdsInBytes()).isEqualTo(DATA_SIZE_OF_ADS_IN_BYTES);
+ expect.that(loggedStats.getNumOfAds()).isEqualTo(NUM_OF_ADS);
}
@Test
@@ -428,18 +380,18 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<MeasurementReportsStats> argumentCaptor =
ArgumentCaptor.forClass(MeasurementReportsStats.class);
verify(mStatsdLoggerMock).logMeasurementReports(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MESUREMENT_REPORTS_UPLOADED);
- assertEquals(
- argumentCaptor.getValue().getType(),
- AD_SERVICES_MEASUREMENT_REPORTS_UPLOADED__TYPE__EVENT);
- assertEquals(argumentCaptor.getValue().getResultCode(), STATUS_SUCCESS);
+ MeasurementReportsStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode()).isEqualTo(AD_SERVICES_MESUREMENT_REPORTS_UPLOADED);
+ expect.that(loggedStats.getType())
+ .isEqualTo(AD_SERVICES_MEASUREMENT_REPORTS_UPLOADED__TYPE__EVENT);
+ expect.that(loggedStats.getResultCode()).isEqualTo(STATUS_SUCCESS);
}
@Test
public void testLogApiCallStats() {
- final String packageName = "com.android.test";
- final String sdkName = "com.android.container";
- final int latency = 100;
+ String packageName = "com.android.test";
+ String sdkName = "com.android.container";
+ int latency = 100;
ApiCallStats stats =
new ApiCallStats.Builder()
.setCode(AD_SERVICES_API_CALLED)
@@ -454,17 +406,16 @@ public class AdServicesLoggerImplTest {
adServicesLogger.logApiCallStats(stats);
ArgumentCaptor<ApiCallStats> argumentCaptor = ArgumentCaptor.forClass(ApiCallStats.class);
verify(mStatsdLoggerMock).logApiCallStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_API_CALLED);
- assertEquals(
- argumentCaptor.getValue().getApiClass(),
- AD_SERVICES_API_CALLED__API_CLASS__TARGETING);
- assertEquals(
- argumentCaptor.getValue().getApiName(),
- AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS);
- assertEquals(argumentCaptor.getValue().getAppPackageName(), packageName);
- assertEquals(argumentCaptor.getValue().getSdkPackageName(), sdkName);
- assertEquals(argumentCaptor.getValue().getLatencyMillisecond(), latency);
- assertEquals(argumentCaptor.getValue().getResultCode(), STATUS_SUCCESS);
+ ApiCallStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode()).isEqualTo(AD_SERVICES_API_CALLED);
+ expect.that(loggedStats.getApiClass())
+ .isEqualTo(AD_SERVICES_API_CALLED__API_CLASS__TARGETING);
+ expect.that(loggedStats.getApiName())
+ .isEqualTo(AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS);
+ expect.that(loggedStats.getAppPackageName()).isEqualTo(packageName);
+ expect.that(loggedStats.getSdkPackageName()).isEqualTo(sdkName);
+ expect.that(loggedStats.getLatencyMillisecond()).isEqualTo(latency);
+ expect.that(loggedStats.getResultCode()).isEqualTo(STATUS_SUCCESS);
}
@Test
@@ -479,18 +430,18 @@ public class AdServicesLoggerImplTest {
adServicesLogger.logUIStats(stats);
ArgumentCaptor<UIStats> argumentCaptor = ArgumentCaptor.forClass(UIStats.class);
verify(mStatsdLoggerMock).logUIStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_SETTINGS_USAGE_REPORTED);
- assertEquals(
- argumentCaptor.getValue().getRegion(),
- AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW);
- assertEquals(
- argumentCaptor.getValue().getAction(),
- AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED);
+ UIStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode()).isEqualTo(AD_SERVICES_SETTINGS_USAGE_REPORTED);
+ expect.that(loggedStats.getRegion())
+ .isEqualTo(AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW);
+ expect.that(loggedStats.getAction())
+ .isEqualTo(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED);
}
@Test
public void testLogMsmtDebugKeyMatchStats() {
- final String enrollmentId = "EnrollmentId";
+ String sourceRegistrant = "android-app://com.registrant";
+ String enrollmentId = "EnrollmentId";
long hashedValue = 5000L;
long hashLimit = 10000L;
MsmtDebugKeysMatchStats stats =
@@ -501,19 +452,20 @@ public class AdServicesLoggerImplTest {
AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB)
.setDebugJoinKeyHashedValue(hashedValue)
.setDebugJoinKeyHashLimit(hashLimit)
- .setSourceRegistrant(SOURCE_REGISTRANT)
+ .setSourceRegistrant(sourceRegistrant)
.build();
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
adServicesLogger.logMeasurementDebugKeysMatch(stats);
ArgumentCaptor<MsmtDebugKeysMatchStats> argumentCaptor =
ArgumentCaptor.forClass(MsmtDebugKeysMatchStats.class);
verify(mStatsdLoggerMock).logMeasurementDebugKeysMatch(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
public void testLogMsmtAdIdMatchForDebugKeysStats() {
- final String enrollmentId = "enrollmentId";
+ String sourceRegistrant = "android-app://com.registrant";
+ String enrollmentId = "enrollmentId";
long uniqueAdIds = 2L;
long uniqueAdIdLimit = 5L;
MsmtAdIdMatchForDebugKeysStats stats =
@@ -524,7 +476,7 @@ public class AdServicesLoggerImplTest {
AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB)
.setNumUniqueAdIds(uniqueAdIds)
.setNumUniqueAdIdsLimit(uniqueAdIdLimit)
- .setSourceRegistrant(SOURCE_REGISTRANT)
+ .setSourceRegistrant(sourceRegistrant)
.build();
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
@@ -533,7 +485,7 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(MsmtAdIdMatchForDebugKeysStats.class);
verify(mStatsdLoggerMock)
.logMeasurementAdIdMatchForDebugKeysStats(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
@@ -554,22 +506,19 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<MeasurementAttributionStats> argumentCaptor =
ArgumentCaptor.forClass(MeasurementAttributionStats.class);
verify(mStatsdLoggerMock).logMeasurementAttributionStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MEASUREMENT_ATTRIBUTION);
- assertEquals(
- argumentCaptor.getValue().getSourceType(),
- AttributionStatus.SourceType.VIEW.getValue());
- assertEquals(
- argumentCaptor.getValue().getSurfaceType(),
- AttributionStatus.AttributionSurface.APP_WEB.getValue());
- assertEquals(
- argumentCaptor.getValue().getResult(),
- AttributionStatus.AttributionResult.SUCCESS.getValue());
- assertEquals(
- argumentCaptor.getValue().getFailureType(),
- AttributionStatus.FailureType.UNKNOWN.getValue());
- assertEquals(argumentCaptor.getValue().isSourceDerived(), false);
- assertEquals(argumentCaptor.getValue().isInstallAttribution(), true);
- assertEquals(argumentCaptor.getValue().getAttributionDelay(), 100L);
+ MeasurementAttributionStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode()).isEqualTo(AD_SERVICES_MEASUREMENT_ATTRIBUTION);
+ expect.that(loggedStats.getSourceType())
+ .isEqualTo(AttributionStatus.SourceType.VIEW.getValue());
+ expect.that(loggedStats.getSurfaceType())
+ .isEqualTo(AttributionStatus.AttributionSurface.APP_WEB.getValue());
+ expect.that(loggedStats.getResult())
+ .isEqualTo(AttributionStatus.AttributionResult.SUCCESS.getValue());
+ expect.that(loggedStats.getFailureType())
+ .isEqualTo(AttributionStatus.FailureType.UNKNOWN.getValue());
+ expect.that(loggedStats.isSourceDerived()).isFalse();
+ expect.that(loggedStats.isInstallAttribution()).isTrue();
+ expect.that(loggedStats.getAttributionDelay()).isEqualTo(100L);
}
@Test
@@ -585,10 +534,10 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<MeasurementWipeoutStats> argumentCaptor =
ArgumentCaptor.forClass(MeasurementWipeoutStats.class);
verify(mStatsdLoggerMock).logMeasurementWipeoutStats(argumentCaptor.capture());
- assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MEASUREMENT_WIPEOUT);
- assertEquals(
- argumentCaptor.getValue().getWipeoutType(),
- WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal());
+ MeasurementWipeoutStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode()).isEqualTo(AD_SERVICES_MEASUREMENT_WIPEOUT);
+ expect.that(loggedStats.getWipeoutType())
+ .isEqualTo(WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal());
}
@Test
@@ -608,11 +557,11 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(MeasurementDelayedSourceRegistrationStats.class);
verify(mStatsdLoggerMock)
.logMeasurementDelayedSourceRegistrationStats(argumentCaptor.capture());
- assertEquals(
- argumentCaptor.getValue().getCode(),
- AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION);
- assertEquals(argumentCaptor.getValue().getRegistrationStatus(), UnknownEnumValue);
- assertEquals(argumentCaptor.getValue().getRegistrationDelay(), registrationDelay);
+ MeasurementDelayedSourceRegistrationStats loggedStats = argumentCaptor.getValue();
+ expect.that(loggedStats.getCode())
+ .isEqualTo(AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION);
+ expect.that(loggedStats.getRegistrationStatus()).isEqualTo(UnknownEnumValue);
+ expect.that(loggedStats.getRegistrationDelay()).isEqualTo(registrationDelay);
}
@Test
@@ -621,22 +570,21 @@ public class AdServicesLoggerImplTest {
EnrollmentStatus.TransactionType.READ_TRANSACTION_TYPE.ordinal();
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
adServicesLogger.logEnrollmentDataStats(transactionTypeEnumValue, true, 100);
- verify(mStatsdLoggerMock)
- .logEnrollmentDataStats(eq(transactionTypeEnumValue), eq(true), eq(100));
+ verify(mStatsdLoggerMock).logEnrollmentDataStats(transactionTypeEnumValue, true, 100);
}
@Test
public void testLogEnrollmentMatchStats() {
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
adServicesLogger.logEnrollmentMatchStats(true, 100);
- verify(mStatsdLoggerMock).logEnrollmentMatchStats(eq(true), eq(100));
+ verify(mStatsdLoggerMock).logEnrollmentMatchStats(true, 100);
}
@Test
public void testLogEnrollmentFileDownloadStats() {
AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
adServicesLogger.logEnrollmentFileDownloadStats(true, 100);
- verify(mStatsdLoggerMock).logEnrollmentFileDownloadStats(eq(true), eq(100));
+ verify(mStatsdLoggerMock).logEnrollmentFileDownloadStats(true, 100);
}
@Test
@@ -650,11 +598,7 @@ public class AdServicesLoggerImplTest {
100, dataFileGroupStatusEnumValue, 10, "SomeSdkName", errorCauseEnumValue);
verify(mStatsdLoggerMock)
.logEnrollmentFailedStats(
- eq(100),
- eq(dataFileGroupStatusEnumValue),
- eq(10),
- eq("SomeSdkName"),
- eq(errorCauseEnumValue));
+ 100, dataFileGroupStatusEnumValue, 10, "SomeSdkName", errorCauseEnumValue);
}
@Test
@@ -683,14 +627,14 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<MeasurementClickVerificationStats> argumentCaptor =
ArgumentCaptor.forClass(MeasurementClickVerificationStats.class);
verify(mStatsdLoggerMock).logMeasurementClickVerificationStats(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
public void testLogEncryptionKeyFetchedStats() {
- final String enrollmentId = "enrollmentId";
- final String companyId = "companyId";
- final String encryptionKeyUrl = "https://www.adtech1.com/.well-known/encryption-keys";
+ String enrollmentId = "enrollmentId";
+ String companyId = "companyId";
+ String encryptionKeyUrl = "https://www.adtech1.com/.well-known/encryption-keys";
AdServicesEncryptionKeyFetchedStats stats =
AdServicesEncryptionKeyFetchedStats.builder()
@@ -708,7 +652,7 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<AdServicesEncryptionKeyFetchedStats> argumentCaptor =
ArgumentCaptor.forClass(AdServicesEncryptionKeyFetchedStats.class);
verify(mStatsdLoggerMock).logEncryptionKeyFetchedStats(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
@@ -726,7 +670,7 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<AdServicesEncryptionKeyDbTransactionEndedStats> argumentCaptor =
ArgumentCaptor.forClass(AdServicesEncryptionKeyDbTransactionEndedStats.class);
verify(mStatsdLoggerMock).logEncryptionKeyDbTransactionEndedStats(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
@@ -760,7 +704,7 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(DestinationRegisteredBeaconsReportedStats.class);
verify(mStatsdLoggerMock).logDestinationRegisteredBeaconsReportedStats(
argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
@@ -778,7 +722,7 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor<ReportInteractionApiCalledStats> argumentCaptor =
ArgumentCaptor.forClass(ReportInteractionApiCalledStats.class);
verify(mStatsdLoggerMock).logReportInteractionApiCalledStats(argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
@Test
@@ -796,6 +740,6 @@ public class AdServicesLoggerImplTest {
ArgumentCaptor.forClass(InteractionReportingTableClearedStats.class);
verify(mStatsdLoggerMock).logInteractionReportingTableClearedStats(
argumentCaptor.capture());
- assertEquals(stats, argumentCaptor.getValue());
+ expect.that(stats).isEqualTo(argumentCaptor.getValue());
}
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/StatsdAdServicesLoggerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/StatsdAdServicesLoggerTest.java
index 50dfe87bec..8ef66086ba 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/StatsdAdServicesLoggerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/stats/StatsdAdServicesLoggerTest.java
@@ -16,6 +16,7 @@
package com.android.adservices.service.stats;
+import static com.android.adservices.mockito.ExtendedMockitoExpectations.mockIsAtLeastT;
import static com.android.adservices.service.stats.AdServicesEncryptionKeyDbTransactionEndedStats.DbTransactionStatus.INSERT_EXCEPTION;
import static com.android.adservices.service.stats.AdServicesEncryptionKeyDbTransactionEndedStats.DbTransactionType.WRITE_TRANSACTION_TYPE;
import static com.android.adservices.service.stats.AdServicesEncryptionKeyDbTransactionEndedStats.MethodName.INSERT_KEY;
@@ -36,18 +37,18 @@ import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICE
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_WIPEOUT;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_CLICK_VERIFICATION;
import static com.android.adservices.service.stats.AdServicesStatsLog.DESTINATION_REGISTERED_BEACONS;
-import static com.android.adservices.service.stats.AdServicesStatsLog.DESTINATION_REGISTERED_BEACONS__DESTINATION__SELLER_DESTINATION;
import static com.android.adservices.service.stats.AdServicesStatsLog.INTERACTION_REPORTING_TABLE_CLEARED;
import static com.android.adservices.service.stats.AdServicesStatsLog.REPORT_INTERACTION_API_CALLED;
import static com.android.adservices.service.stats.EpochComputationClassifierStats.ClassifierType;
import static com.android.adservices.service.stats.EpochComputationClassifierStats.OnDeviceClassifierStatus;
import static com.android.adservices.service.stats.EpochComputationClassifierStats.PrecomputedClassifierStatus;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.staticMockMarker;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyIterable;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -57,28 +58,29 @@ import static org.mockito.Mockito.when;
import android.adservices.adselection.ReportEventRequest;
+import com.android.adservices.common.AdServicesExtendedMockitoTestCase;
import com.android.adservices.service.Flags;
import com.android.adservices.service.enrollment.EnrollmentStatus;
import com.android.adservices.service.measurement.Source;
import com.android.adservices.service.measurement.WipeoutStatus;
import com.android.adservices.service.measurement.attribution.AttributionStatus;
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.dx.mockito.inline.extended.MockedVoidMethod;
import com.android.modules.utils.build.SdkLevel;
+import com.android.modules.utils.testing.ExtendedMockitoRule.SpyStatic;
import com.google.common.collect.ImmutableList;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
import java.util.Arrays;
import java.util.List;
-public class StatsdAdServicesLoggerTest {
+@SpyStatic(SdkLevel.class)
+@SpyStatic(AdServicesStatsLog.class)
+public final class StatsdAdServicesLoggerTest extends AdServicesExtendedMockitoTestCase {
+
// Atom IDs
private static final int TOPICS_REPORTED_ATOM_ID = 535;
private static final int EPOCH_COMPUTATION_CLASSIFIER_ATOM_ID = 537;
@@ -119,39 +121,25 @@ public class StatsdAdServicesLoggerTest {
private static final int SELLER_DESTINATION =
ReportEventRequest.FLAG_REPORTING_DESTINATION_SELLER;
- private MockitoSession mMockitoSession;
private StatsdAdServicesLogger mLogger;
@Mock private Flags mFlags;
@Before
public void setUp() {
- mMockitoSession =
- ExtendedMockito.mockitoSession()
- .mockStatic(SdkLevel.class)
- .mockStatic(AdServicesStatsLog.class)
- .strictness(Strictness.LENIENT)
- .initMocks(this)
- .startMocking();
-
mLogger = new StatsdAdServicesLogger(mFlags);
}
- @After
- public void tearDown() {
- mMockitoSession.finishMocking();
- }
-
@Test
public void testLogGetTopicsReportedStats_tPlus() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(false);
- ExtendedMockito.doReturn(true).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(true);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
anyInt(), anyInt(), anyInt(), anyInt(), any(byte[].class)));
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -161,7 +149,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logGetTopicsReportedStats(TOPICS_REPORTED_STATS_DATA);
// Verify compat logging
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
eq(TOPICS_REPORTED_COMPAT_ATOM_ID),
@@ -170,7 +158,7 @@ public class StatsdAdServicesLoggerTest {
eq(TOPIC_IDS_COUNT),
any(byte[].class)));
// Verify T+ logging
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
TOPICS_REPORTED_ATOM_ID,
@@ -186,8 +174,8 @@ public class StatsdAdServicesLoggerTest {
public void testLogGetTopicsReportedStats_tPlus_noCompatLoggingDueToKillSwitch() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(true);
- ExtendedMockito.doReturn(true).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(true);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -197,7 +185,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logGetTopicsReportedStats(TOPICS_REPORTED_STATS_DATA);
// Verify T+ logging only
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
TOPICS_REPORTED_ATOM_ID,
@@ -213,8 +201,8 @@ public class StatsdAdServicesLoggerTest {
public void testLogGetTopicsReportedStats_sMinus() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(false);
- ExtendedMockito.doReturn(false).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(false);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -224,7 +212,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logGetTopicsReportedStats(TOPICS_REPORTED_STATS_DATA);
// Verify only compat logging took place
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
eq(TOPICS_REPORTED_COMPAT_ATOM_ID),
@@ -240,7 +228,7 @@ public class StatsdAdServicesLoggerTest {
public void testLogGetTopicsReportedStats_sMinus_noLoggingDueToKillSwitch() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(true);
- ExtendedMockito.doReturn(false).when(SdkLevel::isAtLeastT);
+ mockIsAtLeastT(false);
// Invoke logging call
mLogger.logGetTopicsReportedStats(TOPICS_REPORTED_STATS_DATA);
@@ -253,8 +241,8 @@ public class StatsdAdServicesLoggerTest {
public void testLogEpochComputationClassifierStats_tPlus() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(false);
- ExtendedMockito.doReturn(true).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(true);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -265,7 +253,7 @@ public class StatsdAdServicesLoggerTest {
anyInt(),
anyInt(),
anyInt()));
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -281,7 +269,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logEpochComputationClassifierStats(EPOCH_COMPUTATION_CLASSIFIER_STATS_DATA);
// Verify compat logging
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
eq(EPOCH_COMPUTATION_CLASSIFIER_COMPAT_ATOM_ID),
@@ -297,7 +285,7 @@ public class StatsdAdServicesLoggerTest {
.PRECOMPUTED_CLASSIFIER_STATUS_NOT_INVOKED
.getCompatLoggingValue())));
// Verify T+ logging
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
EPOCH_COMPUTATION_CLASSIFIER_ATOM_ID,
@@ -318,8 +306,8 @@ public class StatsdAdServicesLoggerTest {
public void testLogEpochComputationClassifierStats_tPlus_noCompatLoggingDueToKillSwitch() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(true);
- ExtendedMockito.doReturn(true).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(true);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -335,7 +323,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logEpochComputationClassifierStats(EPOCH_COMPUTATION_CLASSIFIER_STATS_DATA);
// Verify T+ logging
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
EPOCH_COMPUTATION_CLASSIFIER_ATOM_ID,
@@ -356,8 +344,8 @@ public class StatsdAdServicesLoggerTest {
public void testLogEpochComputationClassifierStats_sMinus() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(false);
- ExtendedMockito.doReturn(false).when(SdkLevel::isAtLeastT);
- ExtendedMockito.doNothing()
+ mockIsAtLeastT(false);
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -373,7 +361,7 @@ public class StatsdAdServicesLoggerTest {
mLogger.logEpochComputationClassifierStats(EPOCH_COMPUTATION_CLASSIFIER_STATS_DATA);
// Verify only compat logging took place
- ExtendedMockito.verify(
+ verify(
() ->
AdServicesStatsLog.write(
eq(EPOCH_COMPUTATION_CLASSIFIER_COMPAT_ATOM_ID),
@@ -396,7 +384,7 @@ public class StatsdAdServicesLoggerTest {
public void testLogEpochComputationClassifierStats_sMinus_noLoggingDueToKillSwitch() {
// Mocks
when(mFlags.getCompatLoggingKillSwitch()).thenReturn(true);
- ExtendedMockito.doReturn(false).when(SdkLevel::isAtLeastT);
+ mockIsAtLeastT(false);
// Invoke logging call
mLogger.logEpochComputationClassifierStats(EPOCH_COMPUTATION_CLASSIFIER_STATS_DATA);
@@ -409,7 +397,7 @@ public class StatsdAdServicesLoggerTest {
public void logMeasurementDebugKeysMatch_success() {
when(mFlags.getMeasurementEnableAppPackageNameLogging()).thenReturn(true);
when(mFlags.getMeasurementAppPackageNameLoggingAllowlist()).thenReturn(SOURCE_REGISTRANT);
- final String enrollmentId = "EnrollmentId";
+ String enrollmentId = "EnrollmentId";
long hashedValue = 5000L;
long hashLimit = 10000L;
int attributionType = AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB;
@@ -422,7 +410,7 @@ public class StatsdAdServicesLoggerTest {
.setDebugJoinKeyHashLimit(hashLimit)
.setSourceRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -449,7 +437,7 @@ public class StatsdAdServicesLoggerTest {
eq(hashedValue),
eq(hashLimit),
eq(SOURCE_REGISTRANT));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -474,7 +462,7 @@ public class StatsdAdServicesLoggerTest {
.setEventReportCount(3)
.setEventDebugReportCount(1)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -515,7 +503,7 @@ public class StatsdAdServicesLoggerTest {
eq(1),
eq(0));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -530,8 +518,7 @@ public class StatsdAdServicesLoggerTest {
.setWipeoutType(WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal())
.setSourceRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyString()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyString()));
// Invoke logging call
mLogger.logMeasurementWipeoutStats(stats);
@@ -544,7 +531,7 @@ public class StatsdAdServicesLoggerTest {
eq(WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal()),
eq(SOURCE_REGISTRANT));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -562,7 +549,7 @@ public class StatsdAdServicesLoggerTest {
.setRegistrationDelay(registrationDelay)
.setRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyLong(), anyString()));
// Invoke logging call
@@ -577,7 +564,7 @@ public class StatsdAdServicesLoggerTest {
eq(registrationDelay),
eq(SOURCE_REGISTRANT));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -585,7 +572,7 @@ public class StatsdAdServicesLoggerTest {
@Test
public void logConsentMigrationStats_success() {
when(mFlags.getAdservicesConsentMigrationLoggingEnabled()).thenReturn(true);
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -627,7 +614,7 @@ public class StatsdAdServicesLoggerTest {
eq(2),
eq(2),
eq(2));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -660,7 +647,7 @@ public class StatsdAdServicesLoggerTest {
public void logMeasurementAdIdMatchForDebugKeys_success() {
when(mFlags.getMeasurementEnableAppPackageNameLogging()).thenReturn(true);
when(mFlags.getMeasurementAppPackageNameLoggingAllowlist()).thenReturn(SOURCE_REGISTRANT);
- final String enrollmentId = "EnrollmentId";
+ String enrollmentId = "EnrollmentId";
long uniqueAdIdValue = 1L;
long uniqueAdIdLimit = 5L;
int attributionType = AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB;
@@ -673,7 +660,7 @@ public class StatsdAdServicesLoggerTest {
.setNumUniqueAdIdsLimit(uniqueAdIdLimit)
.setSourceRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -700,7 +687,7 @@ public class StatsdAdServicesLoggerTest {
eq(uniqueAdIdLimit),
eq(SOURCE_REGISTRANT));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -708,7 +695,7 @@ public class StatsdAdServicesLoggerTest {
@Test
public void logMeasurementAdIdMatchForDebugKeys_appLoggingDisabled_emptyString() {
when(mFlags.getMeasurementEnableAppPackageNameLogging()).thenReturn(false);
- final String enrollmentId = "EnrollmentId";
+ String enrollmentId = "EnrollmentId";
long uniqueAdIdValue = 1L;
long uniqueAdIdLimit = 5L;
int attributionType = AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB;
@@ -721,7 +708,7 @@ public class StatsdAdServicesLoggerTest {
.setNumUniqueAdIdsLimit(uniqueAdIdLimit)
.setSourceRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -748,7 +735,7 @@ public class StatsdAdServicesLoggerTest {
eq(uniqueAdIdLimit),
eq(""));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -757,7 +744,7 @@ public class StatsdAdServicesLoggerTest {
public void logMeasurementAdIdMatchForDebugKeys_appNotAllowlisted_emptyString() {
when(mFlags.getMeasurementEnableAppPackageNameLogging()).thenReturn(true);
when(mFlags.getMeasurementAppPackageNameLoggingAllowlist()).thenReturn("");
- final String enrollmentId = "EnrollmentId";
+ String enrollmentId = "EnrollmentId";
long uniqueAdIdValue = 1L;
long uniqueAdIdLimit = 5L;
int attributionType = AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB;
@@ -770,7 +757,7 @@ public class StatsdAdServicesLoggerTest {
.setNumUniqueAdIdsLimit(uniqueAdIdLimit)
.setSourceRegistrant(SOURCE_REGISTRANT)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -797,7 +784,7 @@ public class StatsdAdServicesLoggerTest {
eq(uniqueAdIdLimit),
eq(""));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -806,7 +793,7 @@ public class StatsdAdServicesLoggerTest {
public void logEnrollmentData_success() {
int transactionTypeEnumValue =
EnrollmentStatus.TransactionType.WRITE_TRANSACTION_TYPE.ordinal();
- ExtendedMockito.doNothing()
+ doNothing()
.when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyBoolean(), anyInt()));
// Invoke logging call
@@ -821,15 +808,14 @@ public class StatsdAdServicesLoggerTest {
eq(true),
eq(100));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@Test
public void logEnrollmentMatch_success() {
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(anyInt(), anyBoolean(), anyInt()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyBoolean(), anyInt()));
// Invoke logging call
mLogger.logEnrollmentMatchStats(true, 100);
@@ -840,15 +826,14 @@ public class StatsdAdServicesLoggerTest {
AdServicesStatsLog.write(
eq(AD_SERVICES_ENROLLMENT_MATCHED), eq(true), eq(100));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@Test
public void logEnrollmentFileDownload_success() {
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(anyInt(), anyBoolean(), anyInt()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyBoolean(), anyInt()));
// Invoke logging call
mLogger.logEnrollmentFileDownloadStats(true, 100);
@@ -859,7 +844,7 @@ public class StatsdAdServicesLoggerTest {
AdServicesStatsLog.write(
eq(AD_SERVICES_ENROLLMENT_FILE_DOWNLOADED), eq(true), eq(100));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -870,7 +855,7 @@ public class StatsdAdServicesLoggerTest {
EnrollmentStatus.DataFileGroupStatus.PENDING_CUSTOM_VALIDATION.ordinal();
int errorCauseEnumValue =
EnrollmentStatus.ErrorCause.ENROLLMENT_BLOCKLISTED_ERROR_CAUSE.ordinal();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -896,7 +881,7 @@ public class StatsdAdServicesLoggerTest {
eq("SomeSdkName"),
eq(errorCauseEnumValue));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -922,7 +907,7 @@ public class StatsdAdServicesLoggerTest {
.setSourceRegistrant(sourceRegistrant)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -951,16 +936,16 @@ public class StatsdAdServicesLoggerTest {
eq(validDelayWindowMs),
eq("")); // App package name not in allow list.
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@Test
public void logEncryptionKeyFetchedStats_success() {
- final String enrollmentId = "enrollmentId";
- final String companyId = "companyId";
- final String encryptionKeyUrl = "https://www.adtech1.com/.well-known/encryption-keys";
+ String enrollmentId = "enrollmentId";
+ String companyId = "companyId";
+ String encryptionKeyUrl = "https://www.adtech1.com/.well-known/encryption-keys";
AdServicesEncryptionKeyFetchedStats stats =
AdServicesEncryptionKeyFetchedStats.builder()
@@ -972,7 +957,7 @@ public class StatsdAdServicesLoggerTest {
.setEncryptionKeyUrl(encryptionKeyUrl)
.build();
- ExtendedMockito.doNothing()
+ doNothing()
.when(
() ->
AdServicesStatsLog.write(
@@ -999,7 +984,7 @@ public class StatsdAdServicesLoggerTest {
eq(companyId),
eq(encryptionKeyUrl));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -1013,8 +998,7 @@ public class StatsdAdServicesLoggerTest {
.setMethodName(INSERT_KEY)
.build();
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyInt(), anyInt()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyInt(), anyInt()));
// Invoke logging call.
mLogger.logEncryptionKeyDbTransactionEndedStats(stats);
@@ -1028,7 +1012,7 @@ public class StatsdAdServicesLoggerTest {
eq(INSERT_EXCEPTION.getValue()),
eq(INSERT_KEY.getValue()));
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -1060,9 +1044,11 @@ public class StatsdAdServicesLoggerTest {
.setAdServicesStatusCode(0)
.build();
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(
- anyInt(), anyInt(), anyInt(), any(), anyInt(), anyInt()));
+ doNothing()
+ .when(
+ () ->
+ AdServicesStatsLog.write(
+ anyInt(), anyInt(), anyInt(), any(), anyInt(), anyInt()));
// Invoke logging call.
mLogger.logDestinationRegisteredBeaconsReportedStats(stats);
@@ -1079,7 +1065,7 @@ public class StatsdAdServicesLoggerTest {
eq(/* adServicesStatusCode */ 0)
);
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -1092,9 +1078,7 @@ public class StatsdAdServicesLoggerTest {
.setNumMatchingUris(5)
.build();
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(
- anyInt(), anyInt(), anyInt()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyInt()));
// Invoke logging call.
mLogger.logReportInteractionApiCalledStats(stats);
@@ -1108,7 +1092,7 @@ public class StatsdAdServicesLoggerTest {
eq(/* numMatchingUris */ 5)
);
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
@@ -1121,9 +1105,7 @@ public class StatsdAdServicesLoggerTest {
.setNumUnreportedUris(5)
.build();
- ExtendedMockito.doNothing()
- .when(() -> AdServicesStatsLog.write(
- anyInt(), anyInt(), anyInt()));
+ doNothing().when(() -> AdServicesStatsLog.write(anyInt(), anyInt(), anyInt()));
// Invoke logging call.
mLogger.logInteractionReportingTableClearedStats(stats);
@@ -1137,7 +1119,7 @@ public class StatsdAdServicesLoggerTest {
eq(/* numUnreportedUris */ 5)
);
- ExtendedMockito.verify(writeInvocation);
+ verify(writeInvocation);
verifyNoMoreInteractions(staticMockMarker(AdServicesStatsLog.class));
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/EncryptionManagerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/EncryptionManagerTest.java
index 23b3494051..afc827a759 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/EncryptionManagerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/EncryptionManagerTest.java
@@ -127,6 +127,7 @@ public final class EncryptionManagerTest {
when(mFlags.getEnableDatabaseSchemaVersion9()).thenReturn(true);
when(mFlags.getTopicsEncryptionEnabled()).thenReturn(true);
+ when(mFlags.getTopicsTestEncryptionPublicKey()).thenReturn("");
}
@Test
@@ -184,6 +185,23 @@ public final class EncryptionManagerTest {
}
@Test
+ public void testEncryption_useTestingKeys() {
+ String overrideTestKey = "YVfr8K7rpuv45LtaCv9L1eIGxBv/UK22WugJBjg53fo";
+ when(mFlags.getTopicsTestEncryptionPublicKey()).thenReturn(overrideTestKey);
+ Topic topic = Topic.create(/* topic */ 5, /* taxonomyVersion */ 6L, /* modelVersion */ 7L);
+
+ Optional<EncryptedTopic> optionalEncryptedTopic =
+ mEncryptionManager.encryptTopic(topic, SDK_NAME);
+
+ // Verify EncryptedTopic is not empty.
+ assertThat(optionalEncryptedTopic.isPresent()).isTrue();
+ assertThat(optionalEncryptedTopic.get().getEncryptedTopic()).isNotEmpty();
+ // Verify test key used to override has been used.
+ assertThat(optionalEncryptedTopic.get().getKeyIdentifier()).isEqualTo(overrideTestKey);
+ assertThat(optionalEncryptedTopic.get().getEncapsulatedKey()).isNotEmpty();
+ }
+
+ @Test
public void testEncryption_missingKeys() {
doNothingOnErrorLogUtilError();
when(mEnrollmentDao.getEnrollmentDataFromSdkName(SDK_NAME)).thenReturn(ENROLLMENT_DATA);
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/TopicsServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/TopicsServiceImplTest.java
index fbd5fb26d4..16f20a54e6 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/TopicsServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/TopicsServiceImplTest.java
@@ -32,6 +32,7 @@ import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICE
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS_PREVIEW_API;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__PACKAGE_NAME_NOT_FOUND_EXCEPTION;
+import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__ERROR_CODE__TOPICS_REQUEST_EMPTY_SDK_NAME;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__TOPICS;
import static com.google.common.truth.Truth.assertThat;
@@ -287,6 +288,7 @@ public final class TopicsServiceImplTest extends AdServicesExtendedMockitoTestCa
}
@Test
public void checkEmptySdkNameRequests() throws Exception {
+ ExtendedMockito.doNothing().when(() -> ErrorLogUtil.e(anyInt(), anyInt()));
mockGetTopicsDisableDirectAppCalls(true);
GetTopicsParam request =
@@ -297,6 +299,12 @@ public final class TopicsServiceImplTest extends AdServicesExtendedMockitoTestCa
.build();
invokeGetTopicsAndVerifyError(mSpyContext, STATUS_INVALID_ARGUMENT, request, false);
+ ExtendedMockito.verify(
+ () ->
+ ErrorLogUtil.e(
+ eq(
+ AD_SERVICES_ERROR_REPORTED__ERROR_CODE__TOPICS_REQUEST_EMPTY_SDK_NAME),
+ eq(AD_SERVICES_ERROR_REPORTED__PPAPI_NAME__TOPICS)));
}
@Test