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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/precache/PrecacheServiceLauncherTest.java

Issue 1751183002: Precache uses GcmNetworkManager for task scheduling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments and fixed tests Created 4 years, 8 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.precache;
6
7 import android.app.PendingIntent;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.content.pm.ApplicationInfo;
11 import android.preference.PreferenceManager;
12 import android.test.InstrumentationTestCase;
13 import android.test.suitebuilder.annotation.SmallTest;
14
15 import org.chromium.base.test.util.AdvancedMockContext;
16 import org.chromium.base.test.util.Feature;
17 import org.chromium.components.precache.MockDeviceState;
18
19 import java.util.EnumSet;
20
21 /**
22 * Tests the |PrecacheServiceLauncher|.
23 */
24 public class PrecacheServiceLauncherTest extends InstrumentationTestCase {
25 private MockPrecacheServiceLauncher mLauncher;
26 private MockPrecacheLauncher mPrecacheLauncher;
27 private Context mContext;
28
29 class PrecacheMockContext extends AdvancedMockContext {
30 @Override
31 public String getPackageName() {
32 return getInstrumentation().getTargetContext().getPackageName();
33 }
34
35 @Override
36 public ApplicationInfo getApplicationInfo() {
37 return getInstrumentation().getTargetContext().getApplicationInfo();
38 }
39 }
40
41 static class MockPrecacheLauncher extends PrecacheLauncher {
42 @Override
43 public EnumSet<FailureReason> failureReasons() {
44 return mFailureReasons;
45 }
46
47 public void setFailureReasons(EnumSet<FailureReason> reasons) {
48 mFailureReasons = reasons;
49 }
50
51 @Override
52 public void onPrecacheCompleted(boolean tryAgainSoon) {}
53
54 private EnumSet<FailureReason> mFailureReasons = EnumSet.noneOf(FailureR eason.class);
55 }
56
57 /**
58 * Class mocks out the system-related function of |PrecacheServiceLauncher|
59 * and provides a method to set a mocked elapsed realtime.
60 */
61 static class MockPrecacheServiceLauncher extends PrecacheServiceLauncher {
62 private long mElapsedRealtime;
63 protected boolean mCancelAlarmCalled;
64 protected boolean mSetAlarmCalled;
65 protected boolean mStartPrecacheCalled;
66
67 @Override
68 protected void setAlarmOnSystem(Context context, int type, long triggerA tMillis,
69 PendingIntent operation) {
70 mSetAlarmCalled = true;
71 }
72
73 @Override
74 protected void cancelAlarmOnSystem(Context context, PendingIntent operat ion) {
75 mCancelAlarmCalled = true;
76 }
77
78 @Override
79 protected long getElapsedRealtimeOnSystem() {
80 return mElapsedRealtime;
81 }
82
83 @Override
84 protected void startPrecacheService(Context context) {
85 mStartPrecacheCalled = true;
86 }
87
88 @Override
89 protected void acquireWakeLock(Context context) {}
90
91 protected void setElapsedRealtime(long elapsedRealtime) {
92 mElapsedRealtime = elapsedRealtime;
93 }
94 }
95
96 @Override
97 public void setUp() throws Exception {
98 super.setUp();
99 mLauncher = new MockPrecacheServiceLauncher();
100 mPrecacheLauncher = new MockPrecacheLauncher();
101 mLauncher.setPrecacheLauncher(mPrecacheLauncher);
102 mContext = new PrecacheMockContext();
103 setPrecachingEnabled(true);
104 }
105
106 @Override
107 public void tearDown() throws Exception {
108 PrecacheService.setIsPrecaching(false);
109 super.tearDown();
110 }
111
112 @SmallTest
113 @Feature({"Precache"})
114 public void testDoNothingIfNotEnabled() {
115 setPrecachingEnabled(false);
116 mPrecacheLauncher.setFailureReasons(EnumSet.of(FailureReason.NATIVE_SHOU LD_RUN_IS_FALSE));
117 mLauncher.setDeviceState(new MockDeviceState(0 /* stickyBatteryStatus */ ,
118 true /* powerIsConnected */, true /* wifiIsAvailable */));
119 mLauncher.setElapsedRealtime(PrecacheServiceLauncher.WAIT_UNTIL_NEXT_PRE CACHE_MS);
120
121 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
122
123 assertFalse(mLauncher.mSetAlarmCalled);
124 assertFalse(mLauncher.mCancelAlarmCalled);
125 assertFalse(mLauncher.mStartPrecacheCalled);
126 assertEquals(EnumSet.of(FailureReason.NATIVE_SHOULD_RUN_IS_FALSE),
127 mLauncher.failureReasons(mContext));
128 }
129
130 @SmallTest
131 @Feature({"Precache"})
132 public void testGoodConditions() {
133 mLauncher.setDeviceState(new MockDeviceState(0, true, true));
134
135 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
136
137 assertFalse(mLauncher.mSetAlarmCalled);
138 assertFalse(mLauncher.mCancelAlarmCalled);
139 assertTrue(mLauncher.mStartPrecacheCalled);
140 assertEquals(EnumSet.noneOf(FailureReason.class), mLauncher.failureReaso ns(mContext));
141 }
142
143 @SmallTest
144 @Feature({"Precache"})
145 public void testNotEnoughTimeButGoodConditionsOtherwise() {
146 mLauncher.setDeviceState(new MockDeviceState(0, true, true));
147 setLastPrecacheMs(0L);
148
149 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
150
151 assertTrue(mLauncher.mSetAlarmCalled);
152 assertFalse(mLauncher.mCancelAlarmCalled);
153 assertFalse(mLauncher.mStartPrecacheCalled);
154 assertEquals(EnumSet.of(FailureReason.NOT_ENOUGH_TIME_SINCE_LAST_PRECACH E),
155 mLauncher.failureReasons(mContext));
156 }
157
158 @SmallTest
159 @Feature({"Precache"})
160 public void testEnoughTimeButNoPower() {
161 mLauncher.setDeviceState(new MockDeviceState(0, false, true));
162 mLauncher.setElapsedRealtime(PrecacheServiceLauncher.WAIT_UNTIL_NEXT_PRE CACHE_MS);
163
164 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
165
166 assertFalse(mLauncher.mSetAlarmCalled);
167 assertTrue(mLauncher.mCancelAlarmCalled);
168 assertFalse(mLauncher.mStartPrecacheCalled);
169 assertEquals(EnumSet.of(FailureReason.NO_POWER), mLauncher.failureReason s(mContext));
170 }
171
172 @SmallTest
173 @Feature({"Precache"})
174 public void testAllFailureReasons() {
175 mPrecacheLauncher.setFailureReasons(
176 EnumSet.of(FailureReason.UPDATE_PRECACHING_ENABLED_NEVER_CALLED,
177 FailureReason.SYNC_NOT_INITIALIZED,
178 FailureReason.PRERENDER_PRIVACY_PREFERENCE_NOT_ENABLED,
179 FailureReason.NATIVE_SHOULD_RUN_IS_FALSE));
180 mLauncher.setDeviceState(new MockDeviceState(0, false, false));
181 setLastPrecacheMs(0L);
182 PrecacheService.setIsPrecaching(true);
183
184 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
185
186 assertFalse(mLauncher.mSetAlarmCalled);
187 assertTrue(mLauncher.mCancelAlarmCalled);
188 assertFalse(mLauncher.mStartPrecacheCalled);
189 assertEquals(EnumSet.allOf(FailureReason.class), mLauncher.failureReason s(mContext));
190 }
191
192 @SmallTest
193 @Feature({"Precache"})
194 public void testStateIsResetAfterReboot() {
195 // 1. Precache is successfully run at time X.
196 mLauncher.setDeviceState(new MockDeviceState(0, true, true));
197 mLauncher.setElapsedRealtime(PrecacheServiceLauncher.WAIT_UNTIL_NEXT_PRE CACHE_MS);
198 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
199
200 // precachingFinishedInternal() is not called in the test. Fake the time being updated.
201 setLastPrecacheMs(PrecacheServiceLauncher.WAIT_UNTIL_NEXT_PRECACHE_MS);
202
203 assertTrue(mLauncher.mStartPrecacheCalled);
204 mLauncher.mStartPrecacheCalled = false;
205
206 // 2. The device loses power and reboots.
207 mLauncher.setDeviceState(new MockDeviceState(0, false /* power */, true) );
208 mLauncher.setElapsedRealtime(0);
209
210 // 3. Some intent is triggered, which allows the reciever to notice the reboot and reset
211 // lastPrecacheTimeMs.
212 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
213
214 assertTrue(mLauncher.mCancelAlarmCalled);
215 assertEquals(EnumSet.of(FailureReason.NO_POWER), mLauncher.failureReason s(mContext));
216 mLauncher.mCancelAlarmCalled = false;
217
218 // 4. Precache is successfully run at time X+1.
219 mLauncher.setDeviceState(new MockDeviceState(0, true, true));
220 mLauncher.setElapsedRealtime(PrecacheServiceLauncher.WAIT_UNTIL_NEXT_PRE CACHE_MS + 1);
221
222 mLauncher.onReceive(mContext, new Intent(PrecacheServiceLauncher.ACTION_ ALARM));
223
224 assertEquals(EnumSet.noneOf(FailureReason.class), mLauncher.failureReaso ns(mContext));
225 assertTrue(mLauncher.mStartPrecacheCalled);
226 }
227
228 private void setPrecachingEnabled(boolean enabled) {
229 PreferenceManager.getDefaultSharedPreferences(mContext)
230 .edit()
231 .putBoolean(PrecacheServiceLauncher.PREF_IS_PRECACHING_ENABLED, enabled)
232 .commit();
233 }
234
235 private void setLastPrecacheMs(long ms) {
236 PreferenceManager.getDefaultSharedPreferences(mContext)
237 .edit()
238 .putLong(PrecacheServiceLauncher.PREF_PRECACHE_LAST_TIME, ms)
239 .apply();
240 }
241 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698