summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrishang Garodia <krishang@google.com>2023-12-06 12:32:50 +0000
committerKrishang Garodia <krishang@google.com>2023-12-07 10:40:55 +0000
commita401aa3ce9c509a307a953ba9fa63b9852822793 (patch)
tree02f853b5f2132e94162469f4296bd614cb26efbf
parenteb017c00c62e463a653bbce1d1c4ed9043728673 (diff)
downloadMediaProvider-a401aa3ce9c509a307a953ba9fa63b9852822793.tar.gz
Add picker sync worker tests
Test: atest MediaProviderTests Bug: 313504896 Change-Id: Id98d1ea9ea7d63cbeece73e59f36fdc3c7d561e0
-rw-r--r--src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorker.java6
-rw-r--r--src/com/android/providers/media/photopicker/sync/ImmediateSyncWorker.java6
-rw-r--r--src/com/android/providers/media/photopicker/sync/PickerSyncNotificationHelper.java7
-rw-r--r--src/com/android/providers/media/photopicker/sync/ProactiveSyncWorker.java6
-rw-r--r--tests/src/com/android/providers/media/photopicker/sync/ImmediateAlbumSyncWorkerTest.java37
-rw-r--r--tests/src/com/android/providers/media/photopicker/sync/ImmediateSyncWorkerTest.java37
-rw-r--r--tests/src/com/android/providers/media/photopicker/sync/MediaResetWorkerTest.java29
-rw-r--r--tests/src/com/android/providers/media/photopicker/sync/ProactiveSyncWorkerTest.java37
-rw-r--r--tests/src/com/android/providers/media/photopicker/sync/SyncWorkerTestUtils.java30
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));
+ }
}