Index: chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java |
index 32b959e8b9865d5cc3acbcf5d786914efb7b3957..f2db4569e44548dd04435c212d8d437e02444533 100644 |
--- a/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java |
@@ -5,98 +5,150 @@ |
package org.chromium.chrome.browser.offlinepages; |
import static org.junit.Assert.assertEquals; |
-import static org.junit.Assert.assertNotNull; |
-import static org.junit.Assert.assertNull; |
+import static org.junit.Assert.assertFalse; |
import static org.junit.Assert.assertTrue; |
- |
-import android.content.Context; |
- |
-import com.google.android.gms.common.ConnectionResult; |
-import com.google.android.gms.common.GoogleApiAvailability; |
-import com.google.android.gms.gcm.GcmNetworkManager; |
-import com.google.android.gms.gcm.Task; |
+import static org.mockito.Mockito.doNothing; |
+import static org.mockito.Mockito.doReturn; |
+import static org.mockito.Mockito.eq; |
+import static org.mockito.Mockito.times; |
+import static org.mockito.Mockito.verify; |
import org.junit.Before; |
import org.junit.Test; |
import org.junit.runner.RunWith; |
+import org.mockito.ArgumentCaptor; |
+import org.mockito.Captor; |
+import org.mockito.Mock; |
+import org.mockito.MockitoAnnotations; |
import org.robolectric.RuntimeEnvironment; |
import org.robolectric.annotation.Config; |
-import org.robolectric.internal.ShadowExtractor; |
-import org.robolectric.shadows.gms.Shadows; |
-import org.robolectric.shadows.gms.common.ShadowGoogleApiAvailability; |
-import org.chromium.base.BaseChromiumApplication; |
+import org.chromium.base.ContextUtils; |
import org.chromium.base.test.util.Feature; |
+import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler; |
+import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory; |
+import org.chromium.components.background_task_scheduler.TaskIds; |
+import org.chromium.components.background_task_scheduler.TaskInfo; |
import org.chromium.testing.local.LocalRobolectricTestRunner; |
/** |
* Unit tests for BackgroundScheduler. |
*/ |
@RunWith(LocalRobolectricTestRunner.class) |
-@Config(manifest = Config.NONE, application = BaseChromiumApplication.class, sdk = 21, |
- shadows = {ShadowGcmNetworkManager.class, ShadowGoogleApiAvailability.class}) |
+@Config(manifest = Config.NONE) |
public class BackgroundSchedulerTest { |
- private Context mContext; |
private TriggerConditions mConditions1 = new TriggerConditions( |
- true /* power */, 10 /* battery percentage */, false /* unmetered */); |
+ true /* power */, 10 /* battery percentage */, true /* requires unmetered */); |
private TriggerConditions mConditions2 = new TriggerConditions( |
- false /* power */, 0 /* battery percentage */, false /* unmetered */); |
- private ShadowGcmNetworkManager mGcmNetworkManager; |
+ false /* power */, 0 /* battery percentage */, false /* does not require unmetered */); |
+ |
+ @Mock |
+ private BackgroundTaskScheduler mTaskScheduler; |
+ @Captor |
+ ArgumentCaptor<TaskInfo> mTaskInfo; |
@Before |
public void setUp() throws Exception { |
- Shadows.shadowOf(GoogleApiAvailability.getInstance()) |
- .setIsGooglePlayServicesAvailable(ConnectionResult.SUCCESS); |
+ MockitoAnnotations.initMocks(this); |
+ ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application); |
+ BackgroundTaskSchedulerFactory.setSchedulerForTesting(mTaskScheduler); |
+ doReturn(true) |
+ .when(mTaskScheduler) |
+ .schedule(eq(RuntimeEnvironment.application), mTaskInfo.capture()); |
+ } |
- mContext = RuntimeEnvironment.application; |
- mGcmNetworkManager = (ShadowGcmNetworkManager) ShadowExtractor.extract( |
- GcmNetworkManager.getInstance(mContext)); |
- mGcmNetworkManager.clear(); |
+ private void verifyFixedTaskInfoValues(TaskInfo info) { |
+ assertEquals(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, info.getTaskId()); |
+ assertEquals(OfflineBackgroundTask.class, info.getBackgroundTaskClass()); |
+ assertTrue(info.isPersisted()); |
+ assertFalse(info.isPeriodic()); |
+ assertEquals(BackgroundScheduler.ONE_WEEK_IN_MILLISECONDS, |
+ info.getOneOffInfo().getWindowEndTimeMs()); |
+ assertTrue(info.getOneOffInfo().hasWindowStartTimeConstraint()); |
+ |
+ long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(info.getExtras()); |
+ assertTrue(scheduledTimeMillis > 0L); |
} |
@Test |
@Feature({"OfflinePages"}) |
- public void testSchedule() { |
- assertNull(mGcmNetworkManager.getScheduledTask()); |
- BackgroundScheduler.getInstance(mContext).schedule(mConditions1); |
- // Check with gcmNetworkManagerShadow that schedule got called. |
- assertNotNull(mGcmNetworkManager.getScheduledTask()); |
- |
- // Verify details of the scheduled task. |
- Task task = mGcmNetworkManager.getScheduledTask(); |
- assertEquals(OfflinePageUtils.TASK_TAG, task.getTag()); |
- long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(task.getExtras()); |
- assertTrue(scheduledTimeMillis > 0L); |
+ public void testScheduleUnmeteredAndCharging() { |
+ BackgroundScheduler.getInstance().schedule(mConditions1); |
+ verify(mTaskScheduler, times(1)) |
+ .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getValue())); |
+ |
+ TaskInfo info = mTaskInfo.getValue(); |
+ verifyFixedTaskInfoValues(info); |
+ |
+ assertEquals(TaskInfo.NETWORK_TYPE_UNMETERED, info.getRequiredNetworkType()); |
+ assertTrue(info.requiresCharging()); |
+ |
+ assertTrue(info.shouldUpdateCurrent()); |
+ assertEquals(BackgroundScheduler.NO_DELAY, info.getOneOffInfo().getWindowStartTimeMs()); |
+ |
assertEquals( |
- mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle(task.getExtras())); |
+ mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle(info.getExtras())); |
} |
@Test |
@Feature({"OfflinePages"}) |
- public void testCancel() { |
- assertNull(mGcmNetworkManager.getScheduledTask()); |
- BackgroundScheduler.getInstance(mContext).schedule(mConditions1); |
- assertNotNull(mGcmNetworkManager.getScheduledTask()); |
+ public void testScheduleMeteredAndNotCharging() { |
+ BackgroundScheduler.getInstance().schedule(mConditions2); |
+ verify(mTaskScheduler, times(1)) |
+ .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getValue())); |
+ |
+ TaskInfo info = mTaskInfo.getValue(); |
+ verifyFixedTaskInfoValues(info); |
+ |
+ // These 2 lines are different. |
Pete Williamson
2017/05/25 17:30:53
This comment can probably be removed now that a co
fgorski
2017/05/25 21:41:50
Done.
|
+ assertEquals(TaskInfo.NETWORK_TYPE_ANY, info.getRequiredNetworkType()); |
+ assertFalse(info.requiresCharging()); |
- assertNull(mGcmNetworkManager.getCanceledTask()); |
- BackgroundScheduler.getInstance(mContext).cancel(); |
- assertNotNull(mGcmNetworkManager.getCanceledTask()); |
+ assertTrue(info.shouldUpdateCurrent()); |
+ assertEquals(BackgroundScheduler.NO_DELAY, info.getOneOffInfo().getWindowStartTimeMs()); |
+ |
+ // And the line below. |
+ assertEquals( |
+ mConditions2, TaskExtrasPacker.unpackTriggerConditionsFromBundle(info.getExtras())); |
} |
@Test |
@Feature({"OfflinePages"}) |
- public void testReschedulOnUpgrade() { |
- assertNull(mGcmNetworkManager.getScheduledTask()); |
- BackgroundScheduler.getInstance(mContext).rescheduleOfflinePagesTasksOnUpgrade(); |
- // Check with gcmNetworkManagerShadow that schedule got called. |
- assertNotNull(mGcmNetworkManager.getScheduledTask()); |
- |
- // Verify details of the scheduled task. |
- Task task = mGcmNetworkManager.getScheduledTask(); |
- assertEquals(OfflinePageUtils.TASK_TAG, task.getTag()); |
- long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(task.getExtras()); |
- assertTrue(scheduledTimeMillis > 0L); |
+ public void testScheduleBackup() { |
+ BackgroundScheduler.getInstance().scheduleBackup( |
+ mConditions1, BackgroundScheduler.FIVE_MINUTES_IN_MILLISECONDS); |
+ verify(mTaskScheduler, times(1)) |
+ .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getValue())); |
+ |
+ TaskInfo info = mTaskInfo.getValue(); |
+ verifyFixedTaskInfoValues(info); |
+ |
+ assertEquals(TaskInfo.NETWORK_TYPE_UNMETERED, info.getRequiredNetworkType()); |
+ assertTrue(info.requiresCharging()); |
+ |
+ // These 2 lines are different. |
+ assertFalse(info.shouldUpdateCurrent()); |
+ assertEquals(BackgroundScheduler.FIVE_MINUTES_IN_MILLISECONDS, |
+ info.getOneOffInfo().getWindowStartTimeMs()); |
+ |
assertEquals( |
- mConditions2, TaskExtrasPacker.unpackTriggerConditionsFromBundle(task.getExtras())); |
+ mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle(info.getExtras())); |
+ } |
+ |
+ @Test |
+ @Feature({"OfflinePages"}) |
+ public void testCancel() { |
+ BackgroundScheduler.getInstance().schedule(mConditions1); |
+ verify(mTaskScheduler, times(1)) |
+ .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getValue())); |
+ |
+ doNothing() |
+ .when(mTaskScheduler) |
+ .cancel(eq(RuntimeEnvironment.application), |
+ eq(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID)); |
+ BackgroundScheduler.getInstance().cancel(); |
+ verify(mTaskScheduler, times(1)) |
+ .cancel(eq(RuntimeEnvironment.application), |
+ eq(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID)); |
} |
} |