Extending timeouts to accommodate slow devices
Bug: 271621178
Bug: 271671403
Bug: 271672007
Bug: 271653822
Bug: 271755589
Test: ABDT
Change-Id: I4f5a6daad2b7c29e6ff5d49fc93744267a329273
diff --git a/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java b/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
index f24aaad..2262fde 100644
--- a/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
+++ b/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
@@ -16,6 +16,14 @@
package com.android.adservices.service;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
import static com.android.adservices.service.Flags.SDK_REQUEST_PERMITS_PER_SECOND;
import static com.android.adservices.service.PhFlags.KEY_ENFORCE_FOREGROUND_STATUS_FLEDGE_OVERRIDE;
import static com.android.adservices.service.PhFlags.KEY_ENFORCE_FOREGROUND_STATUS_FLEDGE_REPORT_IMPRESSION;
@@ -50,6 +58,25 @@
public static final long DEFAULT_API_RATE_LIMIT_SLEEP_MS =
(long) (1000 / SDK_REQUEST_PERMITS_PER_SECOND) + 10L;
+ // TODO(b/273656890): Investigate dynamic timeouts for device types
+ public static final long ADDITIONAL_TIMEOUT = 3_000L;
+ public static final long EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS =
+ FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS + ADDITIONAL_TIMEOUT;
+ public static final long EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS =
+ FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+ public static final long EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS =
+ FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+ public static final long EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS =
+ FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+ public static final long EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS =
+ FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+ public static final long EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS =
+ FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+ public static final int EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS =
+ FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS + (int) ADDITIONAL_TIMEOUT;
+ public static final int EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS =
+ FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS + (int) ADDITIONAL_TIMEOUT;
+
public static void configureFledgeBackgroundFetchEligibleUpdateBaseIntervalS(
final long phOverridingValue) {
DeviceConfig.setProperty(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
index 2ab63ba..ace590b 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
@@ -20,6 +20,7 @@
import static android.adservices.common.AdServicesStatusUtils.STATUS_SUCCESS;
import static android.adservices.common.AdServicesStatusUtils.STATUS_UNSET;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
import static com.android.adservices.service.adselection.AdBidGeneratorImpl.BIDDING_TIMED_OUT;
import static com.android.adservices.service.adselection.AdBidGeneratorImpl.MISSING_TRUSTED_BIDDING_SIGNALS;
import static com.android.adservices.service.stats.AdSelectionExecutionLogger.SCRIPT_JAVASCRIPT;
@@ -78,7 +79,6 @@
import com.android.adservices.data.customaudience.DBCustomAudienceOverride;
import com.android.adservices.data.customaudience.DBTrustedBiddingData;
import com.android.adservices.service.Flags;
-import com.android.adservices.service.FlagsFactory;
import com.android.adservices.service.common.cache.CacheProviderFactory;
import com.android.adservices.service.common.httpclient.AdServicesHttpsClient;
import com.android.adservices.service.devapi.CustomAudienceDevOverridesHelper;
@@ -281,6 +281,7 @@
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
+ mFlags = new AdBidGeneratorImplTestFlags();
mDevContext = DevContext.createForDevOptionsDisabled();
mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
@@ -316,8 +317,6 @@
CustomAudienceBiddingInfo.create(
mDecisionLogicUri, BUYER_DECISION_LOGIC_JS, mCustomAudienceSignals);
- mFlags = FlagsFactory.getFlagsForTest();
-
mIsolateSettings = IsolateSettings.forMaxHeapSizeEnforcementDisabled();
mRequestMatcherExactMatch =
@@ -1753,4 +1752,11 @@
return true;
}
}
+
+ private static class AdBidGeneratorImplTestFlags implements Flags {
+ @Override
+ public long getAdSelectionBiddingTimeoutPerCaMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
index 618e967..262ba58 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
@@ -16,6 +16,7 @@
package com.android.adservices.service.adselection;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
import static com.android.adservices.service.adselection.AdOutcomeSelectorImpl.OUTCOME_SELECTION_TIMED_OUT;
import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_OUTCOME_SELECTION_WATERFALL_MEDIATION_TRUNCATION;
import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_SELECTION_FROM_OUTCOMES_USE_CASE;
@@ -96,6 +97,7 @@
public void setup() {
MockitoAnnotations.initMocks(this);
+ mFlags = new AdOutcomeSelectorImplTestFlags();
mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
mBlockingExecutorService = AdServicesExecutors.getBlockingExecutor();
@@ -128,13 +130,6 @@
AdSelectionDatabase.class)
.build()
.adSelectionEntryDao();
- mFlags =
- new Flags() {
- @Override
- public long getAdSelectionSelectingOutcomeTimeoutMs() {
- return 300;
- }
- };
mAdOutcomeSelector =
new AdOutcomeSelectorImpl(
@@ -277,6 +272,17 @@
}
};
+ AdOutcomeSelector adOutcomeSelector =
+ new AdOutcomeSelectorImpl(
+ mMockAdSelectionScriptEngine,
+ mLightweightExecutorService,
+ mBackgroundExecutorService,
+ mSchedulingExecutor,
+ mWebClient,
+ new AdSelectionDevOverridesHelper(
+ DevContext.createForDevOptionsDisabled(), mAdSelectionEntryDao),
+ flagsWithSmallerLimits);
+
List<AdSelectionIdWithBidAndRenderUri> adverts =
Collections.singletonList(
AdSelectionIdWithBidAndRenderUri.builder()
@@ -307,7 +313,7 @@
() ->
waitForFuture(
() ->
- mAdOutcomeSelector.runAdOutcomeSelector(
+ adOutcomeSelector.runAdOutcomeSelector(
adverts, config)));
Assert.assertTrue(exception.getCause() instanceof UncheckedTimeoutException);
Assert.assertEquals(exception.getCause().getMessage(), OUTCOME_SELECTION_TIMED_OUT);
@@ -388,4 +394,11 @@
resultLatch.await();
return futureResult.get();
}
+
+ private static class AdOutcomeSelectorImplTestFlags implements Flags {
+ @Override
+ public long getAdSelectionSelectingOutcomeTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+ }
+ }
}
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 ef64991..c085c3c 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
@@ -26,6 +26,14 @@
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.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;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_AD_SELECTION_FAILURE;
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_BUYERS_OR_CONTEXTUAL_ADS_AVAILABLE;
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_CA_AND_CONTEXTUAL_ADS_AVAILABLE;
@@ -5172,6 +5180,46 @@
}
@Override
+ public long getAdSelectionBiddingTimeoutPerCaMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+ }
+
+ @Override
+ public long getAdSelectionScoringTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionSelectingOutcomeTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getReportImpressionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public int getFledgeBackgroundFetchNetworkConnectTimeoutMs() {
+ return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+ }
+
+ @Override
+ public int getFledgeBackgroundFetchNetworkReadTimeoutMs() {
+ return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+ }
+
+ @Override
public float getSdkRequestPermitsPerSecond() {
// Unlimited rate for unit tests to avoid flake in tests due to rate
// limiting
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 964e790..988dba8 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
@@ -21,6 +21,8 @@
import static android.adservices.common.AdServicesStatusUtils.STATUS_INVALID_ARGUMENT;
import static com.android.adservices.data.adselection.AdSelectionDatabase.DATABASE_NAME;
+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_SELECTING_OUTCOME_TIMEOUT_MS;
import static com.android.adservices.service.adselection.OutcomeSelectionRunner.SELECTED_OUTCOME_MUST_BE_ONE_OF_THE_INPUTS;
import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.DB_AD_SELECTION_FILE_SIZE;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -577,6 +579,16 @@
}
@Override
+ public long getAdSelectionSelectingOutcomeTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
public float getSdkRequestPermitsPerSecond() {
// Unlimited rate for unit tests to avoid flake in tests due to rate
// limiting
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 ed1f257..dcc6a34 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
@@ -28,6 +28,11 @@
import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
import static android.adservices.common.CommonFixture.TEST_PACKAGE_NAME;
+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;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_CLASS__UNKNOWN;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__API_NAME_UNKNOWN;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_AD_SELECTION_CONFIG_REMOTE_INFO;
@@ -255,8 +260,7 @@
new EnrollmentDao(CONTEXT, DbTestUtil.getDbHelperForTest()),
mAdServicesLoggerMock);
- private Flags mFlags = new FlagsWithEnrollmentCheckEnabledSwitch(false);
-
+ private Flags mFlags;
private MockitoSession mStaticMockSession = null;
@Mock private ConsentManager mConsentManagerMock;
private CustomAudienceDao mCustomAudienceDao;
@@ -274,6 +278,7 @@
@Before
public void setUp() {
+ mFlags = new AdSelectionServicesTestsFlags(false);
mStaticMockSession =
ExtendedMockito.mockitoSession()
.spyStatic(JSScriptEngine.class)
@@ -366,8 +371,9 @@
public void testReportImpressionSuccessWithRegisterAdBeaconDisabled() throws Exception {
Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
// Re init flags with registerAdBeaconDisabled
+ boolean enrollmentCheckDisabled = false;
mFlags =
- new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+ new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
@Override
public boolean getFledgeRegisterAdBeaconEnabled() {
return false;
@@ -1072,8 +1078,9 @@
public void testReportImpressionFailsWithRegisterAdBeaconDisabled() throws Exception {
Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
// Re init flags with registerAdBeaconDisabled
+ boolean enrollmentCheckDisabled = false;
mFlags =
- new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+ new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
@Override
public boolean getFledgeRegisterAdBeaconEnabled() {
return false;
@@ -1868,8 +1875,9 @@
long maxRegisteredAdBeacons = 3;
// Create new flag with overridden value so that only 3 entries can be registered
+ boolean enrollmentCheckDisabled = false;
Flags flagsWithSmallerMaxEventUris =
- new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+ new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
@Override
public long getFledgeReportImpressionMaxRegisteredAdBeaconsTotalCount() {
return maxRegisteredAdBeacons;
@@ -1955,8 +1963,9 @@
Uri hoverUriBuyer = mMockWebServerRule.uriForPath(HOVER_BUYER_PATH);
// Override flags to return a smaller max interaction key size
+ boolean enrollmentCheckDisabled = false;
Flags flagsWithSmallerMaxInteractionKeySize =
- new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+ new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
@Override
public long
getFledgeReportImpressionRegisteredAdBeaconsMaxInteractionKeySizeB() {
@@ -4703,7 +4712,8 @@
Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
// Reset flags to perform enrollment check
- mFlags = new FlagsWithEnrollmentCheckEnabledSwitch(true);
+ boolean enrollmentCheckEnabled = true;
+ mFlags = new AdSelectionServicesTestsFlags(enrollmentCheckEnabled);
Uri sellerReportingUri = mMockWebServerRule.uriForPath(mSellerReportingPath);
Uri buyerReportingUri = mMockWebServerRule.uriForPath(mBuyerReportingPath);
@@ -7424,10 +7434,10 @@
}
}
- private static class FlagsWithEnrollmentCheckEnabledSwitch implements Flags {
+ private static class AdSelectionServicesTestsFlags implements Flags {
private final boolean mEnrollmentCheckEnabled;
- FlagsWithEnrollmentCheckEnabledSwitch(boolean enrollmentCheckEnabled) {
+ AdSelectionServicesTestsFlags(boolean enrollmentCheckEnabled) {
mEnrollmentCheckEnabled = enrollmentCheckEnabled;
}
@@ -7452,11 +7462,6 @@
}
@Override
- public long getReportImpressionOverallTimeoutMs() {
- return 1000;
- }
-
- @Override
public boolean getEnforceIsolateMaxHeapSize() {
return false;
}
@@ -7476,5 +7481,30 @@
public boolean getFledgeAdSelectionFilteringEnabled() {
return false;
}
+
+ @Override
+ public long getAdSelectionBiddingTimeoutPerCaMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+ }
+
+ @Override
+ public long getAdSelectionScoringTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getReportImpressionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+ }
}
}
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 3e6befd..a1617f4 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
@@ -19,6 +19,8 @@
import static android.adservices.common.AdServicesStatusUtils.STATUS_SUCCESS;
import static android.adservices.common.AdServicesStatusUtils.STATUS_UNSET;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.MISSING_TRUSTED_SCORING_SIGNALS;
import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.QUERY_PARAM_RENDER_URIS;
import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.SCORES_COUNT_LESS_THAN_EXPECTED;
@@ -164,6 +166,8 @@
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
+
+ mFlags = new AdsScoreGeneratorImplTestFlags();
mDevContext = DevContext.createForDevOptionsDisabled();
mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
@@ -249,18 +253,7 @@
mRequestMatcherExactMatch =
(actualRequest, expectedRequest) -> actualRequest.equals(expectedRequest);
- mFlags =
- new Flags() {
- @Override
- public long getAdSelectionScoringTimeoutMs() {
- return 300;
- }
- @Override
- public boolean getFledgeAdSelectionContextualAdsEnabled() {
- return true;
- }
- };
when(mAdSelectionExecutionLoggerClock.elapsedRealtime())
.thenReturn(START_ELAPSED_TIMESTAMP);
mAdSelectionExecutionLogger =
@@ -1172,5 +1165,22 @@
interface ThrowingSupplier<T> {
T get() throws Exception;
}
+
+ private static class AdsScoreGeneratorImplTestFlags implements Flags {
+ @Override
+ public boolean getFledgeAdSelectionContextualAdsEnabled() {
+ return true;
+ }
+
+ @Override
+ public long getAdSelectionScoringTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+ }
+ }
}
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 9ad8868..06f8e94 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
@@ -27,6 +27,12 @@
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.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;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
import static com.android.adservices.service.adselection.AdSelectionRunner.AD_SELECTION_TIMED_OUT;
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_AD_SELECTION_FAILURE;
import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_CA_AND_CONTEXTUAL_ADS_AVAILABLE;
@@ -216,23 +222,7 @@
@Mock private PerBuyerBiddingRunner mPerBuyerBiddingRunner;
- private final Flags mFlags =
- new Flags() {
- @Override
- public long getAdSelectionOverallTimeoutMs() {
- return 300;
- }
-
- @Override
- public boolean getDisableFledgeEnrollmentCheck() {
- return true;
- }
-
- @Override
- public boolean getFledgeAdSelectionFilteringEnabled() {
- return true;
- }
- };
+ private Flags mFlags = new OnDeviceAdSelectionRunnerTestFlags();
@Spy private Context mContext = ApplicationProvider.getApplicationContext();
private AdServicesHttpsClient mAdServicesHttpsClient;
private ExecutorService mLightweightExecutorService;
@@ -1740,10 +1730,10 @@
doReturn(mFlags).when(FlagsFactory::getFlags);
Flags flagsWithSmallerLimits =
- new Flags() {
+ new OnDeviceAdSelectionRunnerTestFlags() {
@Override
public long getAdSelectionOverallTimeoutMs() {
- return 100;
+ return 1000;
}
@Override
@@ -2806,4 +2796,46 @@
when(mMockAdSelectionIdGenerator.generateId()).thenReturn(AD_SELECTION_ID);
assertFalse(mAdSelectionEntryDao.doesAdSelectionIdExist(AD_SELECTION_ID));
}
+
+ private static class OnDeviceAdSelectionRunnerTestFlags implements Flags {
+ @Override
+ public boolean getDisableFledgeEnrollmentCheck() {
+ return true;
+ }
+
+ @Override
+ public boolean getFledgeAdSelectionFilteringEnabled() {
+ return true;
+ }
+
+ @Override
+ public long getAdSelectionBiddingTimeoutPerCaMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+ }
+
+ @Override
+ public long getAdSelectionScoringTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionSelectingOutcomeTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getReportImpressionOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
index 986fd7d..91c52a3 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
@@ -21,6 +21,8 @@
import static android.adservices.common.AdServicesStatusUtils.STATUS_TIMEOUT;
import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
+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_SELECTING_OUTCOME_TIMEOUT_MS;
import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__API_NAME_UNKNOWN;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -125,23 +127,7 @@
private AdSelectionEntryDao mAdSelectionEntryDao;
@Mock private AdOutcomeSelector mAdOutcomeSelectorMock;
private OutcomeSelectionRunner mOutcomeSelectionRunner;
- private Flags mFlags =
- new Flags() {
- @Override
- public long getAdSelectionSelectingOutcomeTimeoutMs() {
- return 300;
- }
-
- @Override
- public boolean getDisableFledgeEnrollmentCheck() {
- return true;
- }
-
- @Override
- public long getAdSelectionFromOutcomesOverallTimeoutMs() {
- return 1000;
- }
- };
+ private Flags mFlags = new OutcomeSelectionRunnerTestFlags();
private final AdServicesLogger mAdServicesLoggerMock =
ExtendedMockito.mock(AdServicesLoggerImpl.class);
private MockitoSession mStaticMockSession = null;
@@ -443,4 +429,16 @@
&& new HashSet<>(mTruth).equals(new HashSet<>(argument));
}
}
+
+ private static class OutcomeSelectionRunnerTestFlags implements Flags {
+ @Override
+ public long getAdSelectionSelectingOutcomeTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+ }
+
+ @Override
+ public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+ return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+ }
+ }
}
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
index 43e7718..3f3e699 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
@@ -16,6 +16,9 @@
package com.android.adservices.service.customaudience;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.util.concurrent.Futures.immediateFuture;
import static com.google.common.util.concurrent.Futures.immediateVoidFuture;
@@ -80,7 +83,7 @@
private static final LoggerFactory.Logger sLogger = LoggerFactory.getFledgeLogger();
private static final Context CONTEXT = ApplicationProvider.getApplicationContext();
- private Flags mFlags;
+ private final Flags mFlags = new BackgroundFetchWorkerTestFlags(true);
private final ExecutorService mExecutorService = Executors.newFixedThreadPool(8);
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -96,18 +99,6 @@
@Before
public void setup() {
- mFlags =
- new Flags() {
- @Override
- public int getFledgeBackgroundFetchThreadPoolSize() {
- return 4;
- }
-
- @Override
- public boolean getFledgeAdSelectionFilteringEnabled() {
- return true;
- }
- };
mCustomAudienceDaoSpy =
Mockito.spy(
Room.inMemoryDatabaseBuilder(CONTEXT, CustomAudienceDatabase.class)
@@ -269,21 +260,13 @@
@Test
public void testRunBackgroundFetchNothingToUpdateNoFilters()
throws ExecutionException, InterruptedException {
- mFlags =
- new Flags() {
- @Override
- public int getFledgeBackgroundFetchThreadPoolSize() {
- return 4;
- }
-
- @Override
- public boolean getFledgeAdSelectionFilteringEnabled() {
- return false;
- }
- };
+ Flags flagsFilteringDisabled = new BackgroundFetchWorkerTestFlags(false);
mBackgroundFetchWorker =
new BackgroundFetchWorker(
- mCustomAudienceDaoSpy, mFlags, mBackgroundFetchRunnerSpy, mClock);
+ mCustomAudienceDaoSpy,
+ flagsFilteringDisabled,
+ mBackgroundFetchRunnerSpy,
+ mClock);
assertTrue(
mCustomAudienceDaoSpy
.getActiveEligibleCustomAudienceBackgroundFetchData(
@@ -593,4 +576,32 @@
.updateCustomAudience(any(), any());
assertThat(completionCount.get()).isEqualTo(numEligibleCustomAudiences);
}
+
+ private static class BackgroundFetchWorkerTestFlags implements Flags {
+ private final boolean mFledgeAdSelectionFilteringEnabled;
+
+ BackgroundFetchWorkerTestFlags(boolean fledgeAdSelectionFilteringEnabled) {
+ mFledgeAdSelectionFilteringEnabled = fledgeAdSelectionFilteringEnabled;
+ }
+
+ @Override
+ public int getFledgeBackgroundFetchThreadPoolSize() {
+ return 4;
+ }
+
+ @Override
+ public boolean getFledgeAdSelectionFilteringEnabled() {
+ return mFledgeAdSelectionFilteringEnabled;
+ }
+
+ @Override
+ public int getFledgeBackgroundFetchNetworkConnectTimeoutMs() {
+ return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+ }
+
+ @Override
+ public int getFledgeBackgroundFetchNetworkReadTimeoutMs() {
+ return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+ }
+ }
}