diff options
author | Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> | 2023-12-07 11:09:45 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-12-07 11:09:45 +0000 |
commit | 6e99e92d2ef7ed0e990ec8a7e5ac9a37020153ff (patch) | |
tree | 6b6e7fba1e3e32692ae6aae50d76a3227b2b1740 | |
parent | 544dfde5192b68472fe350c502e5b84b9689f157 (diff) | |
parent | 434f20581a4089f869685684ad48a90942540584 (diff) | |
download | MediaProvider-6e99e92d2ef7ed0e990ec8a7e5ac9a37020153ff.tar.gz |
Merge "Add picker sync worker tests" into udc-mainline-prod am: 434f20581a
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/providers/MediaProvider/+/25559684
Change-Id: I5f0f9d14756ba5de3475203d708534cc8732aa68
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
9 files changed, 193 insertions, 2 deletions
diff --git a/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorker.java b/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorker.java index a0032d48e..71cd5b397 100644 --- a/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorker.java +++ b/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorker.java @@ -30,6 +30,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import androidx.work.ForegroundInfo; import androidx.work.ListenableWorker; import androidx.work.Worker; @@ -143,4 +144,9 @@ public class ImmediateAlbumSyncWorker extends Worker { .getInt(SYNC_WORKER_INPUT_SYNC_SOURCE, /* defaultValue */ SYNC_LOCAL_ONLY); markAlbumMediaSyncAsComplete(syncSource, getId()); } + + @VisibleForTesting + CancellationSignal getCancellationSignal() { + return mCancellationSignal; + } } diff --git a/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorker.java b/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorker.java index 56a699817..a284d313f 100644 --- a/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorker.java +++ b/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorker.java @@ -30,6 +30,7 @@ import android.os.CancellationSignal; import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.work.ForegroundInfo; import androidx.work.ListenableWorker; import androidx.work.Worker; @@ -123,4 +124,9 @@ public class ImmediateSyncWorker extends Worker { .getInt(SYNC_WORKER_INPUT_SYNC_SOURCE, /* defaultValue */ SYNC_LOCAL_AND_CLOUD); markSyncAsComplete(syncSource, getId()); } + + @VisibleForTesting + CancellationSignal getCancellationSignal() { + return mCancellationSignal; + } } diff --git a/src/com/android/providers/media/photopicker/sync/PickerSyncNotificationHelper.java b/src/com/android/providers/media/photopicker/sync/PickerSyncNotificationHelper.java index e30f2eb49..9579ccf5d 100644 --- a/src/com/android/providers/media/photopicker/sync/PickerSyncNotificationHelper.java +++ b/src/com/android/providers/media/photopicker/sync/PickerSyncNotificationHelper.java @@ -24,6 +24,7 @@ import android.content.res.Resources; import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.core.app.NotificationCompat; import androidx.work.ForegroundInfo; @@ -35,8 +36,10 @@ import com.android.providers.media.R; */ public class PickerSyncNotificationHelper { private static final String TAG = "SyncNotifHelper"; - private static final String NOTIFICATION_CHANNEL_ID = "PhotoPickerSyncChannel"; - private static final int NOTIFICATION_ID = 0; + @VisibleForTesting + static final String NOTIFICATION_CHANNEL_ID = "PhotoPickerSyncChannel"; + @VisibleForTesting + static final int NOTIFICATION_ID = 0; private static final int NOTIFICATION_TIMEOUT_MILLIS = 1000; diff --git a/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorker.java b/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorker.java index 178710d54..c93d74f8f 100644 --- a/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorker.java +++ b/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorker.java @@ -29,6 +29,7 @@ import android.os.CancellationSignal; import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.work.ForegroundInfo; import androidx.work.ListenableWorker; import androidx.work.Worker; @@ -134,4 +135,9 @@ public class ProactiveSyncWorker extends Worker { .getInt(SYNC_WORKER_INPUT_SYNC_SOURCE, /* defaultValue */ SYNC_LOCAL_AND_CLOUD); markSyncAsComplete(syncSource, getId()); } + + @VisibleForTesting + CancellationSignal getCancellationSignal() { + return mCancellationSignal; + } } diff --git a/tests/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorkerTest.java b/tests/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorkerTest.java index 6ce403175..aa1f2f467 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorkerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorkerTest.java @@ -16,10 +16,13 @@ package com.android.providers.media.photopicker.sync; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_CHANNEL_ID; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_ID; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getCloudAlbumSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAlbumSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudAlbumSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncInputData; +import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncTestWorkParams; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.initializeTestWorkManager; import static com.google.common.truth.Truth.assertThat; @@ -36,6 +39,7 @@ import android.os.CancellationSignal; import androidx.test.filters.SdkSuppress; import androidx.test.platform.app.InstrumentationRegistry; +import androidx.work.ForegroundInfo; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; @@ -246,4 +250,37 @@ public class ImmediateAlbumSyncWorkerTest { verify(mMockCloudAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 0)) .markSyncCompleted(any()); } + + @Test + public void testImmediateAlbumSyncWorkerOnStopped() { + // Setup + final ImmediateAlbumSyncWorker immediateAlbumSyncWorker = + new ImmediateAlbumSyncWorker(mContext, getLocalAndCloudSyncTestWorkParams()); + + // Test onStopped + immediateAlbumSyncWorker.onStopped(); + + // Verify + assertThat(immediateAlbumSyncWorker.getCancellationSignal().isCanceled()).isTrue(); + + verify(mMockLocalAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockLocalAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + + verify(mMockCloudAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockCloudAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + } + + @Test + public void testGetForegroundInfo() { + final ForegroundInfo foregroundInfo = new ImmediateAlbumSyncWorker( + mContext, getLocalAndCloudSyncTestWorkParams()).getForegroundInfo(); + + assertThat(foregroundInfo.getNotificationId()).isEqualTo(NOTIFICATION_ID); + assertThat(foregroundInfo.getNotification().getChannelId()) + .isEqualTo(NOTIFICATION_CHANNEL_ID); + } } diff --git a/tests/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorkerTest.java b/tests/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorkerTest.java index b74d9e8d9..c28e3b203 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorkerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorkerTest.java @@ -16,9 +16,12 @@ package com.android.providers.media.photopicker.sync; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_CHANNEL_ID; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_ID; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getCloudSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalSyncInputData; +import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncTestWorkParams; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.initializeTestWorkManager; import static com.google.common.truth.Truth.assertThat; @@ -34,6 +37,7 @@ import android.os.CancellationSignal; import androidx.test.filters.SdkSuppress; import androidx.test.platform.app.InstrumentationRegistry; +import androidx.work.ForegroundInfo; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; @@ -208,4 +212,37 @@ public class ImmediateSyncWorkerTest { verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 1)) .markSyncCompleted(any()); } + + @Test + public void testImmediateSyncWorkerOnStopped() { + // Setup + final ImmediateSyncWorker immediateSyncWorker = + new ImmediateSyncWorker(mContext, getLocalAndCloudSyncTestWorkParams()); + + // Test onStopped + immediateSyncWorker.onStopped(); + + // Verify + assertThat(immediateSyncWorker.getCancellationSignal().isCanceled()).isTrue(); + + verify(mMockLocalSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockLocalSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + + verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + } + + @Test + public void testGetForegroundInfo() { + final ForegroundInfo foregroundInfo = new ImmediateSyncWorker( + mContext, getLocalAndCloudSyncTestWorkParams()).getForegroundInfo(); + + assertThat(foregroundInfo.getNotificationId()).isEqualTo(NOTIFICATION_ID); + assertThat(foregroundInfo.getNotification().getChannelId()) + .isEqualTo(NOTIFICATION_CHANNEL_ID); + } } diff --git a/tests/src/com/android/providers/media/photopicker/sync/MediaResetWorkerTest.java b/tests/src/com/android/providers/media/photopicker/sync/MediaResetWorkerTest.java index 617028fd4..18f89fb19 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/MediaResetWorkerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/MediaResetWorkerTest.java @@ -22,7 +22,10 @@ import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYN import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_RESET_TYPE; import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_SYNC_SOURCE; import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_TAG_IS_PERIODIC; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_CHANNEL_ID; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_ID; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getAlbumResetInputData; +import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncTestWorkParams; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.initializeTestWorkManager; import static com.google.common.truth.Truth.assertThat; @@ -42,6 +45,7 @@ import android.provider.CloudMediaProviderContract.MediaColumns; import androidx.test.filters.SdkSuppress; import androidx.test.platform.app.InstrumentationRegistry; import androidx.work.Data; +import androidx.work.ForegroundInfo; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; @@ -361,6 +365,31 @@ public class MediaResetWorkerTest { cursor.close(); } + @Test + public void testMediaResetWorkerOnStopped() { + new MediaResetWorker(mContext, getLocalAndCloudSyncTestWorkParams()).onStopped(); + + verify(mMockLocalAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockLocalAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + + verify(mMockCloudAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockCloudAlbumSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + } + + @Test + public void testGetForegroundInfo() { + final ForegroundInfo foregroundInfo = new MediaResetWorker( + mContext, getLocalAndCloudSyncTestWorkParams()).getForegroundInfo(); + + assertThat(foregroundInfo.getNotificationId()).isEqualTo(NOTIFICATION_ID); + assertThat(foregroundInfo.getNotification().getChannelId()) + .isEqualTo(NOTIFICATION_CHANNEL_ID); + } + /** * Builds a suitible mock Album media cursor that could be returned from a provider. * diff --git a/tests/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorkerTest.java b/tests/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorkerTest.java index d2537837a..5d11b3e11 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorkerTest.java +++ b/tests/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorkerTest.java @@ -16,8 +16,11 @@ package com.android.providers.media.photopicker.sync; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_CHANNEL_ID; +import static com.android.providers.media.photopicker.sync.PickerSyncNotificationHelper.NOTIFICATION_ID; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getCloudSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncInputData; +import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalAndCloudSyncTestWorkParams; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.getLocalSyncInputData; import static com.android.providers.media.photopicker.sync.SyncWorkerTestUtils.initializeTestWorkManager; @@ -34,6 +37,7 @@ import android.os.CancellationSignal; import androidx.test.filters.SdkSuppress; import androidx.test.platform.app.InstrumentationRegistry; +import androidx.work.ForegroundInfo; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkInfo; import androidx.work.WorkManager; @@ -204,4 +208,37 @@ public class ProactiveSyncWorkerTest { verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 1)) .markSyncCompleted(any()); } + + @Test + public void testProactiveSyncWorkerOnStopped() { + // Setup + final ProactiveSyncWorker proactiveSyncWorker = + new ProactiveSyncWorker(mContext, getLocalAndCloudSyncTestWorkParams()); + + // Test onStopped + proactiveSyncWorker.onStopped(); + + // Verify + assertThat(proactiveSyncWorker.getCancellationSignal().isCanceled()).isTrue(); + + verify(mMockLocalSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockLocalSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + + verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 0)) + .createSyncFuture(any()); + verify(mMockCloudSyncTracker, times(/* wantedNumberOfInvocations */ 1)) + .markSyncCompleted(any()); + } + + @Test + public void testGetForegroundInfo() { + final ForegroundInfo foregroundInfo = new ProactiveSyncWorker( + mContext, getLocalAndCloudSyncTestWorkParams()).getForegroundInfo(); + + assertThat(foregroundInfo.getNotificationId()).isEqualTo(NOTIFICATION_ID); + assertThat(foregroundInfo.getNotification().getChannelId()) + .isEqualTo(NOTIFICATION_CHANNEL_ID); + } } diff --git a/tests/src/com/android/providers/media/photopicker/sync/SyncWorkerTestUtils.java b/tests/src/com/android/providers/media/photopicker/sync/SyncWorkerTestUtils.java index de621d9f3..7307c157b 100644 --- a/tests/src/com/android/providers/media/photopicker/sync/SyncWorkerTestUtils.java +++ b/tests/src/com/android/providers/media/photopicker/sync/SyncWorkerTestUtils.java @@ -25,17 +25,27 @@ import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYN import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_RESET_TYPE; import static com.android.providers.media.photopicker.sync.PickerSyncManager.SYNC_WORKER_INPUT_SYNC_SOURCE; +import static org.mockito.Mockito.mock; + import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.work.Configuration; import androidx.work.Data; +import androidx.work.ForegroundUpdater; +import androidx.work.ProgressUpdater; +import androidx.work.WorkerFactory; +import androidx.work.WorkerParameters; +import androidx.work.impl.utils.taskexecutor.TaskExecutor; import androidx.work.testing.SynchronousExecutor; import androidx.work.testing.WorkManagerTestInitHelper; +import java.util.Collections; import java.util.Map; import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.Executor; public class SyncWorkerTestUtils { public static void initializeTestWorkManager(@NonNull Context context) { @@ -95,4 +105,24 @@ public class SyncWorkerTestUtils { return new Data(Map.of(SYNC_WORKER_INPUT_SYNC_SOURCE, SYNC_LOCAL_AND_CLOUD, SYNC_WORKER_INPUT_ALBUM_ID, albumId)); } + + /** + * All the values used in the construction of {@link WorkerParameters} here are default + * {@link NonNull} values except the {@link Data inputData} which is derived from + * {@link SyncWorkerTestUtils#getLocalAndCloudSyncInputData()}. + */ + static WorkerParameters getLocalAndCloudSyncTestWorkParams() { + return new WorkerParameters( + UUID.randomUUID(), + getLocalAndCloudSyncInputData(), + /* tags= */ Collections.emptyList(), + new WorkerParameters.RuntimeExtras(), + /* runAttemptCount= */ 0, + /* generation= */ 0, + mock(Executor.class), + mock(TaskExecutor.class), + mock(WorkerFactory.class), + mock(ProgressUpdater.class), + mock(ForegroundUpdater.class)); + } } |