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

Side by Side Diff: components/offline_pages/background/request_picker_unittest.cc

Issue 2218403002: Change database scheme - add state and start tracking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Stop clearing last request time Created 4 years, 4 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 #include "components/offline_pages/background/request_picker.h" 5 #include "components/offline_pages/background/request_picker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/test/test_simple_task_runner.h" 8 #include "base/test/test_simple_task_runner.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 11 matching lines...) Expand all
22 const int64_t kRequestId1 = 17; 22 const int64_t kRequestId1 = 17;
23 const GURL kUrl1("https://google.com"); 23 const GURL kUrl1("https://google.com");
24 const ClientId kClientId1("bookmark", "1234"); 24 const ClientId kClientId1("bookmark", "1234");
25 // Data for request 2. 25 // Data for request 2.
26 const int64_t kRequestId2 = 42; 26 const int64_t kRequestId2 = 42;
27 const GURL kUrl2("http://nytimes.com"); 27 const GURL kUrl2("http://nytimes.com");
28 const ClientId kClientId2("bookmark", "5678"); 28 const ClientId kClientId2("bookmark", "5678");
29 const bool kUserRequested = true; 29 const bool kUserRequested = true;
30 const int kAttemptCount = 1; 30 const int kAttemptCount = 1;
31 const int kTwoWeeksInSeconds = 60 * 60 * 24 * 7 * 2; 31 const int kTwoWeeksInSeconds = 60 * 60 * 24 * 7 * 2;
32 const int kMaxStartedTries = 5;
33 const int kMaxCompletedTries = 1;
32 34
33 // Constants for policy values - These settings represent the default values. 35 // Constants for policy values - These settings represent the default values.
34 const bool kPreferUntried = false; 36 const bool kPreferUntried = false;
35 const bool kPreferEarlier = true; 37 const bool kPreferEarlier = true;
36 const bool kPreferRetryCount = true; 38 const bool kPreferRetryCount = true;
37 } // namespace 39 } // namespace
38 40
39 class RequestPickerTest : public testing::Test { 41 class RequestPickerTest : public testing::Test {
40 public: 42 public:
41 RequestPickerTest(); 43 RequestPickerTest();
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 137
136 // Pump the loop again to give the async queue the opportunity to return 138 // Pump the loop again to give the async queue the opportunity to return
137 // results from the Get operation, and for the picker to call the "QueueEmpty" 139 // results from the Get operation, and for the picker to call the "QueueEmpty"
138 // callback. 140 // callback.
139 PumpLoop(); 141 PumpLoop();
140 142
141 EXPECT_TRUE(request_queue_empty_called_); 143 EXPECT_TRUE(request_queue_empty_called_);
142 } 144 }
143 145
144 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) { 146 TEST_F(RequestPickerTest, ChooseRequestWithHigherRetryCount) {
147 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
148 kPreferRetryCount, kMaxStartedTries,
149 kMaxCompletedTries + 1));
150 picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
151
145 base::Time creation_time = base::Time::Now(); 152 base::Time creation_time = base::Time::Now();
146 SavePageRequest request1( 153 SavePageRequest request1(
147 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested); 154 kRequestId1, kUrl1, kClientId1, creation_time, kUserRequested);
148 SavePageRequest request2( 155 SavePageRequest request2(
149 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); 156 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested);
150 request2.set_attempt_count(kAttemptCount); 157 request2.set_completed_attempt_count(kAttemptCount);
151 158
152 QueueRequestsAndChooseOne(request1, request2); 159 QueueRequestsAndChooseOne(request1, request2);
153 160
154 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 161 EXPECT_EQ(kRequestId2, last_picked_->request_id());
155 EXPECT_FALSE(request_queue_empty_called_); 162 EXPECT_FALSE(request_queue_empty_called_);
156 } 163 }
157 164
158 TEST_F(RequestPickerTest, ChooseRequestWithSameRetryCountButEarlier) { 165 TEST_F(RequestPickerTest, ChooseRequestWithSameRetryCountButEarlier) {
159 base::Time creation_time1 = 166 base::Time creation_time1 =
160 base::Time::Now() - base::TimeDelta::FromSeconds(10); 167 base::Time::Now() - base::TimeDelta::FromSeconds(10);
161 base::Time creation_time2 = base::Time::Now(); 168 base::Time creation_time2 = base::Time::Now();
162 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 169 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
163 kUserRequested); 170 kUserRequested);
164 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 171 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
165 kUserRequested); 172 kUserRequested);
166 173
167 QueueRequestsAndChooseOne(request1, request2); 174 QueueRequestsAndChooseOne(request1, request2);
168 175
169 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 176 EXPECT_EQ(kRequestId1, last_picked_->request_id());
170 EXPECT_FALSE(request_queue_empty_called_); 177 EXPECT_FALSE(request_queue_empty_called_);
171 } 178 }
172 179
173 TEST_F(RequestPickerTest, ChooseEarlierRequest) { 180 TEST_F(RequestPickerTest, ChooseEarlierRequest) {
174 // We need a custom policy object prefering recency to retry count. 181 // We need a custom policy object prefering recency to retry count.
175 policy_.reset( 182 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
176 new OfflinerPolicy(kPreferUntried, kPreferEarlier, !kPreferRetryCount)); 183 !kPreferRetryCount, kMaxStartedTries,
184 kMaxCompletedTries));
177 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); 185 picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
178 186
179 base::Time creation_time1 = 187 base::Time creation_time1 =
180 base::Time::Now() - base::TimeDelta::FromSeconds(10); 188 base::Time::Now() - base::TimeDelta::FromSeconds(10);
181 base::Time creation_time2 = base::Time::Now(); 189 base::Time creation_time2 = base::Time::Now();
182 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 190 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
183 kUserRequested); 191 kUserRequested);
184 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 192 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
185 kUserRequested); 193 kUserRequested);
186 request2.set_attempt_count(kAttemptCount); 194 request2.set_completed_attempt_count(kAttemptCount);
187 195
188 QueueRequestsAndChooseOne(request1, request2); 196 QueueRequestsAndChooseOne(request1, request2);
189 197
190 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 198 EXPECT_EQ(kRequestId1, last_picked_->request_id());
191 EXPECT_FALSE(request_queue_empty_called_); 199 EXPECT_FALSE(request_queue_empty_called_);
192 } 200 }
193 201
194 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) { 202 TEST_F(RequestPickerTest, ChooseSameTimeRequestWithHigherRetryCount) {
195 // We need a custom policy object preferring recency to retry count. 203 // We need a custom policy object preferring recency to retry count.
196 policy_.reset( 204 policy_.reset(new OfflinerPolicy(kPreferUntried, kPreferEarlier,
197 new OfflinerPolicy(kPreferUntried, kPreferEarlier, !kPreferRetryCount)); 205 !kPreferRetryCount, kMaxStartedTries,
206 kMaxCompletedTries + 1));
198 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); 207 picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
199 208
200 base::Time creation_time = base::Time::Now(); 209 base::Time creation_time = base::Time::Now();
201 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 210 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
202 kUserRequested); 211 kUserRequested);
203 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 212 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
204 kUserRequested); 213 kUserRequested);
205 request2.set_attempt_count(kAttemptCount); 214 request2.set_completed_attempt_count(kAttemptCount);
206 215
207 QueueRequestsAndChooseOne(request1, request2); 216 QueueRequestsAndChooseOne(request1, request2);
208 217
209 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 218 EXPECT_EQ(kRequestId2, last_picked_->request_id());
210 EXPECT_FALSE(request_queue_empty_called_); 219 EXPECT_FALSE(request_queue_empty_called_);
211 } 220 }
212 221
213 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) { 222 TEST_F(RequestPickerTest, ChooseRequestWithLowerRetryCount) {
214 // We need a custom policy object preferring lower retry count. 223 // We need a custom policy object preferring lower retry count.
215 policy_.reset( 224 policy_.reset(new OfflinerPolicy(!kPreferUntried, kPreferEarlier,
216 new OfflinerPolicy(!kPreferUntried, kPreferEarlier, kPreferRetryCount)); 225 kPreferRetryCount, kMaxStartedTries,
226 kMaxCompletedTries + 1));
217 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); 227 picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
218 228
219 base::Time creation_time = base::Time::Now(); 229 base::Time creation_time = base::Time::Now();
220 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 230 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
221 kUserRequested); 231 kUserRequested);
222 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 232 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
223 kUserRequested); 233 kUserRequested);
224 request2.set_attempt_count(kAttemptCount); 234 request2.set_completed_attempt_count(kAttemptCount);
225 235
226 QueueRequestsAndChooseOne(request1, request2); 236 QueueRequestsAndChooseOne(request1, request2);
227 237
228 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 238 EXPECT_EQ(kRequestId1, last_picked_->request_id());
229 EXPECT_FALSE(request_queue_empty_called_); 239 EXPECT_FALSE(request_queue_empty_called_);
230 } 240 }
231 241
232 TEST_F(RequestPickerTest, ChooseLaterRequest) { 242 TEST_F(RequestPickerTest, ChooseLaterRequest) {
233 // We need a custom policy preferring recency over retry, and later requests. 243 // We need a custom policy preferring recency over retry, and later requests.
234 policy_.reset( 244 policy_.reset(new OfflinerPolicy(kPreferUntried, !kPreferEarlier,
235 new OfflinerPolicy(kPreferUntried, !kPreferEarlier, !kPreferRetryCount)); 245 !kPreferRetryCount, kMaxStartedTries,
246 kMaxCompletedTries));
236 picker_.reset(new RequestPicker(queue_.get(), policy_.get())); 247 picker_.reset(new RequestPicker(queue_.get(), policy_.get()));
237 248
238 base::Time creation_time1 = 249 base::Time creation_time1 =
239 base::Time::Now() - base::TimeDelta::FromSeconds(10); 250 base::Time::Now() - base::TimeDelta::FromSeconds(10);
240 base::Time creation_time2 = base::Time::Now(); 251 base::Time creation_time2 = base::Time::Now();
241 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 252 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
242 kUserRequested); 253 kUserRequested);
243 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 254 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
244 kUserRequested); 255 kUserRequested);
245 256
(...skipping 11 matching lines...) Expand all
257 kUserRequested); 268 kUserRequested);
258 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 269 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
259 kUserRequested); 270 kUserRequested);
260 271
261 QueueRequestsAndChooseOne(request1, request2); 272 QueueRequestsAndChooseOne(request1, request2);
262 273
263 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 274 EXPECT_EQ(kRequestId2, last_picked_->request_id());
264 EXPECT_FALSE(request_queue_empty_called_); 275 EXPECT_FALSE(request_queue_empty_called_);
265 } 276 }
266 277
278 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededStartLimit) {
279 base::Time creation_time1 =
280 base::Time::Now() - base::TimeDelta::FromSeconds(1);
281 base::Time creation_time2 = base::Time::Now();
282 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
283 kUserRequested);
284 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
285 kUserRequested);
286
287 // With default policy settings, we should choose the earlier request.
288 // However, we will make the earlier reqeust exceed the limit.
289 request1.set_started_attempt_count(policy_->GetMaxStartedTries());
290
291 QueueRequestsAndChooseOne(request1, request2);
292
293 EXPECT_EQ(kRequestId2, last_picked_->request_id());
294 EXPECT_FALSE(request_queue_empty_called_);
295 }
296
297 TEST_F(RequestPickerTest, ChooseRequestThatHasNotExceededCompletionLimit) {
298 base::Time creation_time1 =
299 base::Time::Now() - base::TimeDelta::FromSeconds(1);
300 base::Time creation_time2 = base::Time::Now();
301 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
302 kUserRequested);
303 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
304 kUserRequested);
305
306 // With default policy settings, we should choose the earlier request.
307 // However, we will make the earlier reqeust exceed the limit.
308 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries());
309
310 QueueRequestsAndChooseOne(request1, request2);
311
312 EXPECT_EQ(kRequestId2, last_picked_->request_id());
313 EXPECT_FALSE(request_queue_empty_called_);
314 }
267 } // namespace offline_pages 315 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698