Per-Job Policy SPE Migration for ODP/FCP
Flag: EXEMPT (bug 337358613)
PS_FLAG: FcpBackgroundJobs__enable_per_job_policy
Bug: 405397835
Test: atest MddJobTest OnDevicePersonalizationDownloadProcessingJobTests OnDevicePersonalizationDownloadProcessingJobTests ResetDataJobTest UserDataCollectionJobTest AggregateErrorDataReportingJobTest DeleteExpiredJobTest BackgroundKeyFetchJobTest
Change-Id: I2febd4bdd1e5b4bcf8ffdd2359e0e7fe9c17911c
diff --git a/federatedcompute/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJob.java b/federatedcompute/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJob.java
index 5a643de..b246304 100644
--- a/federatedcompute/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJob.java
+++ b/federatedcompute/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJob.java
@@ -128,15 +128,22 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getBackgroundKeyFetchJobPolicy();
+ }
+
/** Schedules a unique instance of {@link BackgroundKeyFetchJobService}. */
public static void schedule(Context context) {
// If SPE is not enabled, force to schedule the job with the old JobService.
if (!FlagsFactory.getFlags().getSpeOnBackgroundKeyFetchJobEnabled()) {
- LogUtil.d(TAG, "SPE is not enabled. Schedule the job with "
- + "BackgroundKeyFetchJobService.");
+ LogUtil.d(
+ TAG,
+ "SPE is not enabled. Schedule the job with " + "BackgroundKeyFetchJobService.");
- int resultCode = BackgroundKeyFetchJobService.scheduleJobIfNeeded(
- context, FlagsFactory.getFlags(), /* forceSchedule */ false);
+ int resultCode =
+ BackgroundKeyFetchJobService.scheduleJobIfNeeded(
+ context, FlagsFactory.getFlags(), /* forceSchedule */ false);
FederatedComputeJobServiceFactory.getInstance(context)
.getJobSchedulingLogger()
.recordOnSchedulingLegacy(ENCRYPTION_KEY_FETCH_JOB_ID, resultCode);
diff --git a/federatedcompute/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJob.java b/federatedcompute/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJob.java
index c8696ad..395a7c2 100644
--- a/federatedcompute/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJob.java
+++ b/federatedcompute/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJob.java
@@ -135,6 +135,11 @@
return JOB_ENABLED_STATUS_ENABLED;
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getDeleteExpiredDataJobPolicy();
+ }
+
/** Schedule the periodic {@link DeleteExpiredJob}. */
public static void schedule(Context context, Flags flags) {
// If SPE is not enabled, force to schedule the job with the old JobService.
diff --git a/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJob.java b/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJob.java
index 847075a..fee34f5 100644
--- a/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJob.java
+++ b/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJob.java
@@ -132,15 +132,22 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getAggregateErrorDataReportingJobPolicy();
+ }
+
/** Schedules a unique instance of {@link AggregateErrorDataReportingJob}. */
public static void schedule(Context context) {
// If SPE is not enabled, force to schedule the job with the old JobService.
if (!FlagsFactory.getFlags().getSpeOnAggregateErrorDataReportingJobEnabled()) {
- sLogger.d("SPE is not enabled. Schedule the job with"
- + " AggregateErrorDataReportingService.");
+ sLogger.d(
+ "SPE is not enabled. Schedule the job with"
+ + " AggregateErrorDataReportingService.");
- int resultCode = AggregateErrorDataReportingService
- .scheduleIfNeeded(context, /* forceSchedule */ false);
+ int resultCode =
+ AggregateErrorDataReportingService.scheduleIfNeeded(
+ context, /* forceSchedule */ false);
OdpJobServiceFactory.getInstance(context)
.getJobSchedulingLogger()
.recordOnSchedulingLegacy(AGGREGATE_ERROR_DATA_REPORTING_JOB_ID, resultCode);
diff --git a/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJob.java b/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJob.java
index 3d7a6b2..e20b22a 100644
--- a/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJob.java
+++ b/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJob.java
@@ -107,6 +107,11 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getUserDataCollectionJobPolicy();
+ }
+
/** Schedules a unique instance of {@link UserDataCollectionJob}. */
public static void schedule(Context context) {
// If SPE is not enabled, force to schedule the job with the old JobService.
diff --git a/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJob.java b/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJob.java
index d07e8ae..6cbdf24 100644
--- a/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJob.java
+++ b/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJob.java
@@ -122,15 +122,22 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getDownloadProcessingJobPolicy();
+ }
+
/** Schedules a unique instance of {@link OnDevicePersonalizationDownloadProcessingJob}. */
public static void schedule(Context context) {
// If SPE is not enabled, force to schedule the job with the old JobService.
if (!FlagsFactory.getFlags().getSpeOnOdpDownloadProcessingJobEnabled()) {
- sLogger.d("SPE is not enabled. Schedule the job with "
- + "OnDevicePersonalizationDownloadProcessingJobService.");
+ sLogger.d(
+ "SPE is not enabled. Schedule the job with "
+ + "OnDevicePersonalizationDownloadProcessingJobService.");
- int resultCode = OnDevicePersonalizationDownloadProcessingJobService.schedule(
- context, /* forceSchedule */ false);
+ int resultCode =
+ OnDevicePersonalizationDownloadProcessingJobService.schedule(
+ context, /* forceSchedule */ false);
OdpJobServiceFactory.getInstance(context)
.getJobSchedulingLogger()
.recordOnSchedulingLegacy(DOWNLOAD_PROCESSING_TASK_JOB_ID, resultCode);
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/MddJob.java b/src/com/android/ondevicepersonalization/services/download/mdd/MddJob.java
index 62d12dc..3c1cd6a 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/MddJob.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/MddJob.java
@@ -16,13 +16,17 @@
package com.android.ondevicepersonalization.services.download.mdd;
-
import static com.android.adservices.shared.spe.JobServiceConstants.JOB_ENABLED_STATUS_DISABLED_FOR_KILL_SWITCH_ON;
import static com.android.adservices.shared.spe.JobServiceConstants.JOB_ENABLED_STATUS_DISABLED_FOR_USER_CONSENT_REVOKED;
import static com.android.adservices.shared.spe.JobServiceConstants.JOB_ENABLED_STATUS_ENABLED;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_CELLULAR_CHARGING_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_CHARGING_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_MAINTENANCE_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_WIFI_CHARGING_PERIODIC_TASK_JOB_ID;
import static com.google.android.libraries.mobiledatadownload.TaskScheduler.WIFI_CHARGING_PERIODIC_TASK;
+import android.annotation.Nullable;
import android.content.Context;
import com.android.adservices.shared.spe.framework.ExecutionResult;
@@ -121,4 +125,22 @@
public BackoffPolicy getBackoffPolicy() {
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+
+ @Override
+ @Nullable
+ public String getJobPolicyString(int jobId) {
+ Flags flags = FlagsFactory.getFlags();
+
+ if (jobId == MDD_MAINTENANCE_PERIODIC_TASK_JOB_ID) {
+ return flags.getMddMaintenanceJobPolicy();
+ } else if (jobId == MDD_CHARGING_PERIODIC_TASK_JOB_ID) {
+ return flags.getMddChargingJobPolicy();
+ } else if (jobId == MDD_CELLULAR_CHARGING_PERIODIC_TASK_JOB_ID) {
+ return flags.getMddCellularChargingJobPolicy();
+ } else if (jobId == MDD_WIFI_CHARGING_PERIODIC_TASK_JOB_ID) {
+ return flags.getMddWifiChargingJobPolicy();
+ }
+
+ return null;
+ }
}
diff --git a/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJob.java b/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJob.java
index e83315c..c2aac9a 100644
--- a/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJob.java
+++ b/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJob.java
@@ -88,6 +88,11 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getMaintenanceJobPolicy();
+ }
+
/** Schedules a unique instance of {@link OnDevicePersonalizationMaintenanceJob}. */
public static void schedule(Context context) {
// If SPE is not enabled, force to schedule the job with the old JobService.
diff --git a/src/com/android/ondevicepersonalization/services/reset/ResetDataJob.java b/src/com/android/ondevicepersonalization/services/reset/ResetDataJob.java
index 02452cf..9a09624 100644
--- a/src/com/android/ondevicepersonalization/services/reset/ResetDataJob.java
+++ b/src/com/android/ondevicepersonalization/services/reset/ResetDataJob.java
@@ -110,6 +110,11 @@
return new BackoffPolicy.Builder().setShouldRetryOnExecutionStop(true).build();
}
+ @Override
+ public String getJobPolicyString(int jobId) {
+ return FlagsFactory.getFlags().getResetDataJobPolicy();
+ }
+
@VisibleForTesting
void deleteMeasurementData() {
ResetDataTask.deleteMeasurementData();
diff --git a/tests/federatedcomputetests/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJobTest.java b/tests/federatedcomputetests/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJobTest.java
index 03ac6b3..13b5669 100644
--- a/tests/federatedcomputetests/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJobTest.java
+++ b/tests/federatedcomputetests/src/com/android/federatedcompute/services/encryption/BackgroundKeyFetchJobTest.java
@@ -25,6 +25,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.federatedcompute.services.common.FederatedComputeJobInfo.ENCRYPTION_KEY_FETCH_JOB_ID;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertThrows;
@@ -238,6 +239,16 @@
.isEqualTo(expectedBackoffPolicy);
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getBackgroundKeyFetchJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mBackgroundKeyFetchJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
+
public class TestInjector extends BackgroundKeyFetchJob.Injector {
@Override
ListeningExecutorService getLightWeightExecutor() {
diff --git a/tests/federatedcomputetests/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJobTest.java b/tests/federatedcomputetests/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJobTest.java
index 4067e76..a70e4b1 100644
--- a/tests/federatedcomputetests/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJobTest.java
+++ b/tests/federatedcomputetests/src/com/android/federatedcompute/services/scheduling/DeleteExpiredJobTest.java
@@ -27,6 +27,7 @@
import static com.android.federatedcompute.services.common.Flags.DEFAULT_TASK_HISTORY_TTL_MILLIS;
import static com.android.federatedcompute.services.common.Flags.ODP_AUTHORIZATION_TOKEN_DELETION_PERIOD_SECONDs;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
@@ -195,6 +196,16 @@
.isEqualTo(new JobSpec.Builder(expectedJobPolicy).build());
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getDeleteExpiredDataJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mDeleteExpiredJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
+
private class TestInjector extends Injector {
@Override
ListeningExecutorService getExecutor() {
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJobTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJobTest.java
index 40eb693..7656b38 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJobTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/data/errors/AggregateErrorDataReportingJobTest.java
@@ -26,6 +26,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.AGGREGATE_ERROR_DATA_REPORTING_JOB_ID;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
@@ -81,18 +82,12 @@
private static final Context sContext = ApplicationProvider.getApplicationContext();
private AggregateErrorDataReportingJob mSpyAggregateErrorDataReportingJob;
- @Mock
- private Flags mMockFlags;
- @Mock
- private ExecutionRuntimeParameters mMockParams;
- @Mock
- private OdpJobScheduler mMockOdpJobScheduler;
- @Mock
- private OdpJobServiceFactory mMockOdpJobServiceFactory;
- @Mock
- private AggregatedErrorReportingWorker mMockReportingWorker;
- @Mock
- private OdpEncryptionKeyManager mMockEncryptionKeyManager;
+ @Mock private Flags mMockFlags;
+ @Mock private ExecutionRuntimeParameters mMockParams;
+ @Mock private OdpJobScheduler mMockOdpJobScheduler;
+ @Mock private OdpJobServiceFactory mMockOdpJobServiceFactory;
+ @Mock private AggregatedErrorReportingWorker mMockReportingWorker;
+ @Mock private OdpEncryptionKeyManager mMockEncryptionKeyManager;
@Before
public void setup() throws Exception {
@@ -121,8 +116,7 @@
@Test
public void testGetExecutionFuture_encryptedFlow() throws Exception {
- when(mMockFlags.getAllowUnencryptedAggregatedErrorReportingPayload())
- .thenReturn(false);
+ when(mMockFlags.getAllowUnencryptedAggregatedErrorReportingPayload()).thenReturn(false);
when(mMockReportingWorker.reportAggregateErrors(any(), any()))
.thenReturn(Futures.immediateVoidFuture());
when(mMockEncryptionKeyManager.fetchAndPersistActiveKeys(anyInt(), anyBoolean(), any()))
@@ -184,16 +178,21 @@
JobSchedulingLogger loggerMock = mock(JobSchedulingLogger.class);
when(mMockOdpJobServiceFactory.getJobSchedulingLogger()).thenReturn(loggerMock);
- doReturn(resultCode).when(() -> AggregateErrorDataReportingService
- .scheduleIfNeeded(any(), /* forceSchedule */ eq(false)));
+ doReturn(resultCode)
+ .when(
+ () ->
+ AggregateErrorDataReportingService.scheduleIfNeeded(
+ any(), /* forceSchedule */ eq(false)));
AggregateErrorDataReportingJob.schedule(sContext);
verify(mMockOdpJobScheduler, never()).schedule(eq(sContext), any());
- verify(() -> AggregateErrorDataReportingService
- .scheduleIfNeeded(any(), /* forceSchedule */ eq(false)));
- verify(loggerMock).recordOnSchedulingLegacy(AGGREGATE_ERROR_DATA_REPORTING_JOB_ID,
- resultCode);
+ verify(
+ () ->
+ AggregateErrorDataReportingService.scheduleIfNeeded(
+ any(), /* forceSchedule */ eq(false)));
+ verify(loggerMock)
+ .recordOnSchedulingLegacy(AGGREGATE_ERROR_DATA_REPORTING_JOB_ID, resultCode);
}
@Test
@@ -206,10 +205,13 @@
.setRequireStorageNotLow(true)
.setNetworkType(NETWORK_TYPE_UNMETERED)
.setPeriodicJobParams(
- JobPolicy.PeriodicJobParams.newBuilder().setPeriodicIntervalMs(
- mMockFlags.getAggregatedErrorReportingIntervalInHours()
- * 1000L * 3600L
- ).build())
+ JobPolicy.PeriodicJobParams.newBuilder()
+ .setPeriodicIntervalMs(
+ mMockFlags
+ .getAggregatedErrorReportingIntervalInHours()
+ * 1000L
+ * 3600L)
+ .build())
.setIsPersisted(true)
.build();
@@ -228,6 +230,16 @@
.isEqualTo(expectedBackoffPolicy);
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getAggregateErrorDataReportingJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mSpyAggregateErrorDataReportingJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
+
public class TestInjector extends AggregateErrorDataReportingJob.Injector {
@Override
ListeningExecutorService getExecutor() {
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJobTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJobTest.java
index e1145d2..e0135ef 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJobTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/data/user/UserDataCollectionJobTest.java
@@ -27,6 +27,7 @@
import static com.android.modules.utils.testing.ExtendedMockitoRule.MockStatic;
import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.USER_DATA_COLLECTION_ID;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
@@ -217,11 +218,22 @@
.isEqualTo(expectedBackoffPolicy);
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getUserDataCollectionJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mSpyUserDataCollectionJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
+
public class TestInjector extends UserDataCollectionJob.Injector {
@Override
ListeningExecutorService getExecutor() {
return MoreExecutors.newDirectExecutorService();
}
+
@Override
Flags getFlags() {
return mMockFlags;
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJobTests.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJobTests.java
index 779c548..2236431 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJobTests.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/OnDevicePersonalizationDownloadProcessingJobTests.java
@@ -25,6 +25,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.DOWNLOAD_PROCESSING_TASK_JOB_ID;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
@@ -202,4 +203,14 @@
.that(new OnDevicePersonalizationDownloadProcessingJob().getBackoffPolicy())
.isEqualTo(expectedBackoffPolicy);
}
+
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getDownloadProcessingJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mSpyOdpDownloadProcessingJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
}
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/MddJobTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/MddJobTest.java
index ac7736f..50b73f4 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/MddJobTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/MddJobTest.java
@@ -21,9 +21,14 @@
import static com.android.adservices.shared.spe.JobServiceConstants.JOB_ENABLED_STATUS_ENABLED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_CELLULAR_CHARGING_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_CHARGING_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_MAINTENANCE_PERIODIC_TASK_JOB_ID;
+import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.MDD_WIFI_CHARGING_PERIODIC_TASK_JOB_ID;
import static com.google.android.libraries.mobiledatadownload.TaskScheduler.CHARGING_PERIODIC_TASK;
import static com.google.android.libraries.mobiledatadownload.TaskScheduler.WIFI_CHARGING_PERIODIC_TASK;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.common.util.concurrent.Futures.immediateVoidFuture;
@@ -73,18 +78,12 @@
private static final Context sContext = ApplicationProvider.getApplicationContext();
private MddJob mMddJobChargingPeriodic;
- @Mock
- private Flags mMockFlags;
- @Mock
- private UserPrivacyStatus mMockUserPrivacyStatus;
- @Mock
- private MobileDataDownload mMockMobileDataDownload;
- @Mock
- private ExecutionRuntimeParameters mMockParams;
- @Mock
- private OdpJobScheduler mMockOdpJobScheduler;
- @Mock
- private OdpJobServiceFactory mMockOdpJobServiceFactory;
+ @Mock private Flags mMockFlags;
+ @Mock private UserPrivacyStatus mMockUserPrivacyStatus;
+ @Mock private MobileDataDownload mMockMobileDataDownload;
+ @Mock private ExecutionRuntimeParameters mMockParams;
+ @Mock private OdpJobScheduler mMockOdpJobScheduler;
+ @Mock private OdpJobServiceFactory mMockOdpJobServiceFactory;
@Before
public void setup() throws Exception {
@@ -102,8 +101,7 @@
ListenableFuture<ExecutionResult> executionFuture =
mMddJobChargingPeriodic.getExecutionFuture(sContext, mMockParams);
- assertWithMessage(
- "testGetExecutionFuture_executionSuccess()")
+ assertWithMessage("testGetExecutionFuture_executionSuccess()")
.that(executionFuture.get())
.isEqualTo(ExecutionResult.SUCCESS);
verify(() -> OnDevicePersonalizationDownloadProcessingJob.schedule(any()), never());
@@ -115,8 +113,7 @@
ListenableFuture<ExecutionResult> executionFuture =
mddWifiChargingPeriodicJob.getExecutionFuture(sContext, mMockParams);
- assertWithMessage(
- "testGetExecutionFuture_wifiChargingPeriodic_scheduleDownloadJob()")
+ assertWithMessage("testGetExecutionFuture_wifiChargingPeriodic_scheduleDownloadJob()")
.that(executionFuture.get())
.isEqualTo(ExecutionResult.SUCCESS);
verify(() -> OnDevicePersonalizationDownloadProcessingJob.schedule(any()));
@@ -129,7 +126,7 @@
mMddJobChargingPeriodic.getExecutionStopFuture(sContext, mMockParams);
assertWithMessage(
- "testGetExecutionStopFuture_notWifiChargingPeriodic_dontScheduleDownloadJob()")
+ "testGetExecutionStopFuture_notWifiChargingPeriodic_dontScheduleDownloadJob()")
.that(executionFuture.get())
.isNull();
verify(() -> OnDevicePersonalizationDownloadProcessingJob.schedule(any()), never());
@@ -142,8 +139,7 @@
ListenableFuture<Void> executionFuture =
mddWifiChargingPeriodicJob.getExecutionStopFuture(sContext, mMockParams);
- assertWithMessage(
- "testGetExecutionStopFuture_wifiChargingPeriodic_scheduleDownloadJob()")
+ assertWithMessage("testGetExecutionStopFuture_wifiChargingPeriodic_scheduleDownloadJob()")
.that(executionFuture.get())
.isNull();
verify(() -> OnDevicePersonalizationDownloadProcessingJob.schedule(any()));
@@ -153,8 +149,8 @@
public void testGetJobEnablementStatus_enabled() {
when(mMockFlags.getGlobalKillSwitch()).thenReturn(false);
when(mMockFlags.getSpeOnMddJobEnabled()).thenReturn(true);
- when(mMockUserPrivacyStatus
- .isProtectedAudienceAndMeasurementBothDisabled()).thenReturn(false);
+ when(mMockUserPrivacyStatus.isProtectedAudienceAndMeasurementBothDisabled())
+ .thenReturn(false);
assertWithMessage("testGetJobEnablementStatus_enabled()")
.that(mMddJobChargingPeriodic.getJobEnablementStatus())
@@ -165,8 +161,8 @@
public void testGetJobEnablementStatus_disabled_globalKillSwitch() {
when(mMockFlags.getGlobalKillSwitch()).thenReturn(true);
when(mMockFlags.getSpeOnMddJobEnabled()).thenReturn(true);
- when(mMockUserPrivacyStatus
- .isProtectedAudienceAndMeasurementBothDisabled()).thenReturn(false);
+ when(mMockUserPrivacyStatus.isProtectedAudienceAndMeasurementBothDisabled())
+ .thenReturn(false);
assertWithMessage("testGetJobEnablementStatus_disabled_globalKillSwitch()")
.that(mMddJobChargingPeriodic.getJobEnablementStatus())
@@ -177,8 +173,8 @@
public void testGetJobEnablementStatus_disabled_speOff() {
when(mMockFlags.getGlobalKillSwitch()).thenReturn(false);
when(mMockFlags.getSpeOnMddJobEnabled()).thenReturn(false);
- when(mMockUserPrivacyStatus
- .isProtectedAudienceAndMeasurementBothDisabled()).thenReturn(false);
+ when(mMockUserPrivacyStatus.isProtectedAudienceAndMeasurementBothDisabled())
+ .thenReturn(false);
assertWithMessage("testGetJobEnablementStatus_disabled_speOff()")
.that(mMddJobChargingPeriodic.getJobEnablementStatus())
@@ -189,11 +185,11 @@
public void testGetJobEnablementStatus_disabled_noMeasurementNorProtectedAudienceConsent() {
when(mMockFlags.getGlobalKillSwitch()).thenReturn(false);
when(mMockFlags.getSpeOnMddJobEnabled()).thenReturn(true);
- when(mMockUserPrivacyStatus
- .isProtectedAudienceAndMeasurementBothDisabled()).thenReturn(true);
+ when(mMockUserPrivacyStatus.isProtectedAudienceAndMeasurementBothDisabled())
+ .thenReturn(true);
assertWithMessage(
- "testGetJobEnablementStatus_disabled_noMeasurementNorProtectedAudienceConsent()")
+ "testGetJobEnablementStatus_disabled_noMeasurementNorProtectedAudienceConsent()")
.that(mMddJobChargingPeriodic.getJobEnablementStatus())
.isEqualTo(JOB_ENABLED_STATUS_DISABLED_FOR_USER_CONSENT_REVOKED);
}
@@ -208,6 +204,36 @@
.isEqualTo(expectedBackoffPolicy);
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testMddMaintenanceJobPolicyString = "mdd_maintenance_job_policy_string";
+ String testMddChargingJobPolicyString = "mdd_charging_job_policy_string";
+ String testMddCellularChargingJobPolicyString = "mdd_cellular_charging_job_policy_string";
+ String testMddWifiChargingJobPolicyString = "mdd_wifi_charging_job_policy_string";
+
+ when(mMockFlags.getMddMaintenanceJobPolicy()).thenReturn(testMddMaintenanceJobPolicyString);
+ when(mMockFlags.getMddChargingJobPolicy()).thenReturn(testMddChargingJobPolicyString);
+ when(mMockFlags.getMddCellularChargingJobPolicy())
+ .thenReturn(testMddCellularChargingJobPolicyString);
+ when(mMockFlags.getMddWifiChargingJobPolicy())
+ .thenReturn(testMddWifiChargingJobPolicyString);
+
+ assertThat(mMddJobChargingPeriodic.getJobPolicyString(MDD_MAINTENANCE_PERIODIC_TASK_JOB_ID))
+ .isEqualTo(testMddMaintenanceJobPolicyString);
+ assertThat(mMddJobChargingPeriodic.getJobPolicyString(MDD_CHARGING_PERIODIC_TASK_JOB_ID))
+ .isEqualTo(testMddChargingJobPolicyString);
+ assertThat(
+ mMddJobChargingPeriodic.getJobPolicyString(
+ MDD_CELLULAR_CHARGING_PERIODIC_TASK_JOB_ID))
+ .isEqualTo(testMddCellularChargingJobPolicyString);
+ assertThat(
+ mMddJobChargingPeriodic.getJobPolicyString(
+ MDD_WIFI_CHARGING_PERIODIC_TASK_JOB_ID))
+ .isEqualTo(testMddWifiChargingJobPolicyString);
+
+ assertThat(mMddJobChargingPeriodic.getJobPolicyString(/* jobId= */ 0)).isNull();
+ }
+
private MddJob createWifiChargingPeriodicMddJob() {
return new MddJob(WIFI_CHARGING_PERIODIC_TASK);
}
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJobTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJobTest.java
index d0019a3..c6c2a8a 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJobTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/maintenance/OnDevicePersonalizationMaintenanceJobTest.java
@@ -371,6 +371,16 @@
assertThat(localDir.listFiles()).hasLength(1);
}
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getMaintenanceJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mSpyOnDevicePersonalizationMaintenanceJob.getJobPolicyString(/* jobId= */ 0))
+ .isEqualTo(testPolicyString);
+ }
+
private static void addTestData(long timestamp, OnDevicePersonalizationVendorDataDao dao) {
String key1 = "key1";
String key2 = "key2";
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/reset/ResetDataJobTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/reset/ResetDataJobTest.java
index 3adbe5c..f69a8de 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/reset/ResetDataJobTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/reset/ResetDataJobTest.java
@@ -26,6 +26,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.ondevicepersonalization.services.OnDevicePersonalizationConfig.RESET_DATA_JOB_ID;
+import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
@@ -185,4 +186,13 @@
.that(new ResetDataJob().getBackoffPolicy())
.isEqualTo(expectedBackoffPolicy);
}
+
+ @Test
+ public void testGetJobPolicyString() {
+ String testPolicyString = "test_string";
+
+ when(mMockFlags.getResetDataJobPolicy()).thenReturn(testPolicyString);
+
+ assertThat(mSpyResetDataJob.getJobPolicyString(/* jobId= */ 0)).isEqualTo(testPolicyString);
+ }
}