Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Side by Side Diff: chrome/android/junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java

Issue 2830843002: [Offline pages] Updates to background scheduling to use BTS (Closed)
Patch Set: Addressing CR feedback from Pete Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.offlinepages; 5 package org.chromium.chrome.browser.offlinepages;
6 6
7 import static org.junit.Assert.assertEquals; 7 import static org.junit.Assert.assertEquals;
8 import static org.junit.Assert.assertNotNull; 8 import static org.junit.Assert.assertFalse;
9 import static org.junit.Assert.assertNull;
10 import static org.junit.Assert.assertTrue; 9 import static org.junit.Assert.assertTrue;
11 10 import static org.mockito.Mockito.doNothing;
12 import android.content.Context; 11 import static org.mockito.Mockito.doReturn;
13 12 import static org.mockito.Mockito.eq;
14 import com.google.android.gms.common.ConnectionResult; 13 import static org.mockito.Mockito.times;
15 import com.google.android.gms.common.GoogleApiAvailability; 14 import static org.mockito.Mockito.verify;
16 import com.google.android.gms.gcm.GcmNetworkManager;
17 import com.google.android.gms.gcm.Task;
18 15
19 import org.junit.Before; 16 import org.junit.Before;
20 import org.junit.Test; 17 import org.junit.Test;
21 import org.junit.runner.RunWith; 18 import org.junit.runner.RunWith;
19 import org.mockito.ArgumentCaptor;
20 import org.mockito.Captor;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
22 import org.robolectric.RuntimeEnvironment; 23 import org.robolectric.RuntimeEnvironment;
23 import org.robolectric.annotation.Config; 24 import org.robolectric.annotation.Config;
24 import org.robolectric.internal.ShadowExtractor;
25 import org.robolectric.shadows.gms.Shadows;
26 import org.robolectric.shadows.gms.common.ShadowGoogleApiAvailability;
27 25
28 import org.chromium.base.BaseChromiumApplication; 26 import org.chromium.base.ContextUtils;
29 import org.chromium.base.test.util.Feature; 27 import org.chromium.base.test.util.Feature;
28 import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler ;
29 import org.chromium.components.background_task_scheduler.BackgroundTaskScheduler Factory;
30 import org.chromium.components.background_task_scheduler.TaskIds;
31 import org.chromium.components.background_task_scheduler.TaskInfo;
30 import org.chromium.testing.local.LocalRobolectricTestRunner; 32 import org.chromium.testing.local.LocalRobolectricTestRunner;
31 33
32 /** 34 /**
33 * Unit tests for BackgroundScheduler. 35 * Unit tests for BackgroundScheduler.
34 */ 36 */
35 @RunWith(LocalRobolectricTestRunner.class) 37 @RunWith(LocalRobolectricTestRunner.class)
36 @Config(manifest = Config.NONE, application = BaseChromiumApplication.class, sdk = 21, 38 @Config(manifest = Config.NONE)
37 shadows = {ShadowGcmNetworkManager.class, ShadowGoogleApiAvailability.cl ass})
38 public class BackgroundSchedulerTest { 39 public class BackgroundSchedulerTest {
39 private Context mContext;
40 private TriggerConditions mConditions1 = new TriggerConditions( 40 private TriggerConditions mConditions1 = new TriggerConditions(
41 true /* power */, 10 /* battery percentage */, false /* unmetered */ ); 41 true /* power */, 10 /* battery percentage */, true /* requires unme tered */);
42 private TriggerConditions mConditions2 = new TriggerConditions( 42 private TriggerConditions mConditions2 = new TriggerConditions(
43 false /* power */, 0 /* battery percentage */, false /* unmetered */ ); 43 false /* power */, 0 /* battery percentage */, false /* does not req uire unmetered */);
44 private ShadowGcmNetworkManager mGcmNetworkManager; 44
45 @Mock
46 private BackgroundTaskScheduler mTaskScheduler;
47 @Captor
48 ArgumentCaptor<TaskInfo> mTaskInfo;
45 49
46 @Before 50 @Before
47 public void setUp() throws Exception { 51 public void setUp() throws Exception {
48 Shadows.shadowOf(GoogleApiAvailability.getInstance()) 52 MockitoAnnotations.initMocks(this);
49 .setIsGooglePlayServicesAvailable(ConnectionResult.SUCCESS); 53 ContextUtils.initApplicationContextForTests(RuntimeEnvironment.applicati on);
54 BackgroundTaskSchedulerFactory.setSchedulerForTesting(mTaskScheduler);
55 doReturn(true)
56 .when(mTaskScheduler)
57 .schedule(eq(RuntimeEnvironment.application), mTaskInfo.capture( ));
58 }
50 59
51 mContext = RuntimeEnvironment.application; 60 private void verifyFixedTaskInfoValues(TaskInfo info) {
52 mGcmNetworkManager = (ShadowGcmNetworkManager) ShadowExtractor.extract( 61 assertEquals(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, info.getTaskId());
53 GcmNetworkManager.getInstance(mContext)); 62 assertEquals(OfflineBackgroundTask.class, info.getBackgroundTaskClass()) ;
54 mGcmNetworkManager.clear(); 63 assertTrue(info.isPersisted());
64 assertFalse(info.isPeriodic());
65 assertEquals(BackgroundScheduler.ONE_WEEK_IN_MILLISECONDS,
66 info.getOneOffInfo().getWindowEndTimeMs());
67 assertTrue(info.getOneOffInfo().hasWindowStartTimeConstraint());
68
69 long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(info.ge tExtras());
70 assertTrue(scheduledTimeMillis > 0L);
55 } 71 }
56 72
57 @Test 73 @Test
58 @Feature({"OfflinePages"}) 74 @Feature({"OfflinePages"})
59 public void testSchedule() { 75 public void testScheduleUnmeteredAndCharging() {
60 assertNull(mGcmNetworkManager.getScheduledTask()); 76 BackgroundScheduler.getInstance().schedule(mConditions1);
61 BackgroundScheduler.getInstance(mContext).schedule(mConditions1); 77 verify(mTaskScheduler, times(1))
62 // Check with gcmNetworkManagerShadow that schedule got called. 78 .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getVa lue()));
63 assertNotNull(mGcmNetworkManager.getScheduledTask());
64 79
65 // Verify details of the scheduled task. 80 TaskInfo info = mTaskInfo.getValue();
66 Task task = mGcmNetworkManager.getScheduledTask(); 81 verifyFixedTaskInfoValues(info);
67 assertEquals(OfflinePageUtils.TASK_TAG, task.getTag()); 82
68 long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(task.ge tExtras()); 83 assertEquals(TaskInfo.NETWORK_TYPE_UNMETERED, info.getRequiredNetworkTyp e());
69 assertTrue(scheduledTimeMillis > 0L); 84 assertTrue(info.requiresCharging());
85
86 assertTrue(info.shouldUpdateCurrent());
87 assertEquals(BackgroundScheduler.NO_DELAY, info.getOneOffInfo().getWindo wStartTimeMs());
88
70 assertEquals( 89 assertEquals(
71 mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle (task.getExtras())); 90 mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle (info.getExtras()));
91 }
92
93 @Test
94 @Feature({"OfflinePages"})
95 public void testScheduleMeteredAndNotCharging() {
96 BackgroundScheduler.getInstance().schedule(mConditions2);
97 verify(mTaskScheduler, times(1))
98 .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getVa lue()));
99
100 TaskInfo info = mTaskInfo.getValue();
101 verifyFixedTaskInfoValues(info);
102
103 // 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.
104 assertEquals(TaskInfo.NETWORK_TYPE_ANY, info.getRequiredNetworkType());
105 assertFalse(info.requiresCharging());
106
107 assertTrue(info.shouldUpdateCurrent());
108 assertEquals(BackgroundScheduler.NO_DELAY, info.getOneOffInfo().getWindo wStartTimeMs());
109
110 // And the line below.
111 assertEquals(
112 mConditions2, TaskExtrasPacker.unpackTriggerConditionsFromBundle (info.getExtras()));
113 }
114
115 @Test
116 @Feature({"OfflinePages"})
117 public void testScheduleBackup() {
118 BackgroundScheduler.getInstance().scheduleBackup(
119 mConditions1, BackgroundScheduler.FIVE_MINUTES_IN_MILLISECONDS);
120 verify(mTaskScheduler, times(1))
121 .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getVa lue()));
122
123 TaskInfo info = mTaskInfo.getValue();
124 verifyFixedTaskInfoValues(info);
125
126 assertEquals(TaskInfo.NETWORK_TYPE_UNMETERED, info.getRequiredNetworkTyp e());
127 assertTrue(info.requiresCharging());
128
129 // These 2 lines are different.
130 assertFalse(info.shouldUpdateCurrent());
131 assertEquals(BackgroundScheduler.FIVE_MINUTES_IN_MILLISECONDS,
132 info.getOneOffInfo().getWindowStartTimeMs());
133
134 assertEquals(
135 mConditions1, TaskExtrasPacker.unpackTriggerConditionsFromBundle (info.getExtras()));
72 } 136 }
73 137
74 @Test 138 @Test
75 @Feature({"OfflinePages"}) 139 @Feature({"OfflinePages"})
76 public void testCancel() { 140 public void testCancel() {
77 assertNull(mGcmNetworkManager.getScheduledTask()); 141 BackgroundScheduler.getInstance().schedule(mConditions1);
78 BackgroundScheduler.getInstance(mContext).schedule(mConditions1); 142 verify(mTaskScheduler, times(1))
79 assertNotNull(mGcmNetworkManager.getScheduledTask()); 143 .schedule(eq(RuntimeEnvironment.application), eq(mTaskInfo.getVa lue()));
80 144
81 assertNull(mGcmNetworkManager.getCanceledTask()); 145 doNothing()
82 BackgroundScheduler.getInstance(mContext).cancel(); 146 .when(mTaskScheduler)
83 assertNotNull(mGcmNetworkManager.getCanceledTask()); 147 .cancel(eq(RuntimeEnvironment.application),
84 } 148 eq(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID));
85 149 BackgroundScheduler.getInstance().cancel();
86 @Test 150 verify(mTaskScheduler, times(1))
87 @Feature({"OfflinePages"}) 151 .cancel(eq(RuntimeEnvironment.application),
88 public void testReschedulOnUpgrade() { 152 eq(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID));
89 assertNull(mGcmNetworkManager.getScheduledTask());
90 BackgroundScheduler.getInstance(mContext).rescheduleOfflinePagesTasksOnU pgrade();
91 // Check with gcmNetworkManagerShadow that schedule got called.
92 assertNotNull(mGcmNetworkManager.getScheduledTask());
93
94 // Verify details of the scheduled task.
95 Task task = mGcmNetworkManager.getScheduledTask();
96 assertEquals(OfflinePageUtils.TASK_TAG, task.getTag());
97 long scheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(task.ge tExtras());
98 assertTrue(scheduledTimeMillis > 0L);
99 assertEquals(
100 mConditions2, TaskExtrasPacker.unpackTriggerConditionsFromBundle (task.getExtras()));
101 } 153 }
102 } 154 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698