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

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

Issue 2543093002: Split the RequestPicker task into two separate tasks. (Closed)
Patch Set: ADD TODO Created 4 years 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/pick_request_task.h" 5 #include "components/offline_pages/background/pick_request_task.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 PickRequestTaskTest(); 88 PickRequestTaskTest();
89 89
90 ~PickRequestTaskTest() override; 90 ~PickRequestTaskTest() override;
91 91
92 void SetUp() override; 92 void SetUp() override;
93 93
94 void PumpLoop(); 94 void PumpLoop();
95 95
96 void AddRequestDone(ItemActionStatus status); 96 void AddRequestDone(ItemActionStatus status);
97 97
98 void RequestPicked(const SavePageRequest& request); 98 void RequestPicked(const SavePageRequest& request, bool cleanup_needed);
99 99
100 void RequestNotPicked(const bool non_user_requested_tasks_remaining); 100 void RequestNotPicked(const bool non_user_requested_tasks_remaining,
101 bool cleanup_needed);
101 102
102 void RequestCountCallback(size_t total_count, size_t available_count); 103 void RequestCountCallback(size_t total_count, size_t available_count);
103 104
104 void QueueRequests(const SavePageRequest& request1, 105 void QueueRequests(const SavePageRequest& request1,
105 const SavePageRequest& request2); 106 const SavePageRequest& request2);
106 107
107 // Reset the factory and the task using the current policy. 108 // Reset the factory and the task using the current policy.
108 void MakeFactoryAndTask(); 109 void MakePickRequestTask();
109 110
110 RequestNotifierStub* GetNotifier() { return notifier_.get(); } 111 RequestNotifierStub* GetNotifier() { return notifier_.get(); }
111 112
112 PickRequestTask* task() { return task_.get(); } 113 PickRequestTask* task() { return task_.get(); }
113 114
114 void TaskCompletionCallback(Task* completed_task); 115 void TaskCompletionCallback(Task* completed_task);
115 116
116 protected: 117 protected:
117 void InitializeStoreDone(bool success); 118 void InitializeStoreDone(bool success);
118 119
119 std::unique_ptr<RequestQueueStore> store_; 120 std::unique_ptr<RequestQueueStore> store_;
120 std::unique_ptr<RequestNotifierStub> notifier_; 121 std::unique_ptr<RequestNotifierStub> notifier_;
121 std::unique_ptr<SavePageRequest> last_picked_; 122 std::unique_ptr<SavePageRequest> last_picked_;
122 std::unique_ptr<OfflinerPolicy> policy_; 123 std::unique_ptr<OfflinerPolicy> policy_;
123 RequestCoordinatorEventLogger event_logger_; 124 RequestCoordinatorEventLogger event_logger_;
124 std::set<int64_t> disabled_requests_; 125 std::set<int64_t> disabled_requests_;
125 std::unique_ptr<PickRequestTaskFactory> factory_;
126 std::unique_ptr<PickRequestTask> task_; 126 std::unique_ptr<PickRequestTask> task_;
127 bool request_queue_not_picked_called_; 127 bool request_queue_not_picked_called_;
128 bool cleanup_needed_;
128 size_t total_request_count_; 129 size_t total_request_count_;
129 size_t available_request_count_; 130 size_t available_request_count_;
130 bool task_complete_called_; 131 bool task_complete_called_;
131 132
132 private: 133 private:
133 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 134 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
134 base::ThreadTaskRunnerHandle task_runner_handle_; 135 base::ThreadTaskRunnerHandle task_runner_handle_;
135 }; 136 };
136 137
137 PickRequestTaskTest::PickRequestTaskTest() 138 PickRequestTaskTest::PickRequestTaskTest()
138 : task_runner_(new base::TestSimpleTaskRunner), 139 : task_runner_(new base::TestSimpleTaskRunner),
139 task_runner_handle_(task_runner_) {} 140 task_runner_handle_(task_runner_) {}
140 141
141 PickRequestTaskTest::~PickRequestTaskTest() {} 142 PickRequestTaskTest::~PickRequestTaskTest() {}
142 143
143 void PickRequestTaskTest::SetUp() { 144 void PickRequestTaskTest::SetUp() {
144 DeviceConditions conditions; 145 DeviceConditions conditions;
145 store_.reset(new RequestQueueInMemoryStore()); 146 store_.reset(new RequestQueueInMemoryStore());
146 policy_.reset(new OfflinerPolicy()); 147 policy_.reset(new OfflinerPolicy());
147 notifier_.reset(new RequestNotifierStub()); 148 notifier_.reset(new RequestNotifierStub());
148 MakeFactoryAndTask(); 149 MakePickRequestTask();
149 request_queue_not_picked_called_ = false; 150 request_queue_not_picked_called_ = false;
150 total_request_count_ = 9999; 151 total_request_count_ = 9999;
151 available_request_count_ = 9999; 152 available_request_count_ = 9999;
152 task_complete_called_ = false; 153 task_complete_called_ = false;
153 last_picked_.reset(); 154 last_picked_.reset();
155 cleanup_needed_ = false;
154 156
155 store_->Initialize(base::Bind(&PickRequestTaskTest::InitializeStoreDone, 157 store_->Initialize(base::Bind(&PickRequestTaskTest::InitializeStoreDone,
156 base::Unretained(this))); 158 base::Unretained(this)));
157 PumpLoop(); 159 PumpLoop();
158 } 160 }
159 161
160 void PickRequestTaskTest::PumpLoop() { 162 void PickRequestTaskTest::PumpLoop() {
161 task_runner_->RunUntilIdle(); 163 task_runner_->RunUntilIdle();
162 } 164 }
163 165
164 void PickRequestTaskTest::TaskCompletionCallback(Task* completed_task) { 166 void PickRequestTaskTest::TaskCompletionCallback(Task* completed_task) {
165 task_complete_called_ = true; 167 task_complete_called_ = true;
166 } 168 }
167 169
168 void PickRequestTaskTest::AddRequestDone(ItemActionStatus status) {} 170 void PickRequestTaskTest::AddRequestDone(ItemActionStatus status) {}
169 171
170 void PickRequestTaskTest::RequestPicked(const SavePageRequest& request) { 172 void PickRequestTaskTest::RequestPicked(const SavePageRequest& request,
173 const bool cleanup_needed) {
171 last_picked_.reset(new SavePageRequest(request)); 174 last_picked_.reset(new SavePageRequest(request));
175 cleanup_needed_ = cleanup_needed;
172 } 176 }
173 177
174 void PickRequestTaskTest::RequestNotPicked( 178 void PickRequestTaskTest::RequestNotPicked(
175 const bool non_user_requested_tasks_remaining) { 179 const bool non_user_requested_tasks_remaining,
180 const bool cleanup_needed) {
176 request_queue_not_picked_called_ = true; 181 request_queue_not_picked_called_ = true;
177 } 182 }
178 183
179 void PickRequestTaskTest::RequestCountCallback(size_t total_count, 184 void PickRequestTaskTest::RequestCountCallback(size_t total_count,
180 size_t available_count) { 185 size_t available_count) {
181 total_request_count_ = total_count; 186 total_request_count_ = total_count;
182 available_request_count_ = available_count; 187 available_request_count_ = available_count;
183 } 188 }
184 189
185 // Test helper to queue the two given requests. 190 // Test helper to queue the two given requests.
186 void PickRequestTaskTest::QueueRequests(const SavePageRequest& request1, 191 void PickRequestTaskTest::QueueRequests(const SavePageRequest& request1,
187 const SavePageRequest& request2) { 192 const SavePageRequest& request2) {
188 DeviceConditions conditions; 193 DeviceConditions conditions;
189 std::set<int64_t> disabled_requests; 194 std::set<int64_t> disabled_requests;
190 // Add test requests on the Queue. 195 // Add test requests on the Queue.
191 store_->AddRequest(request1, base::Bind(&PickRequestTaskTest::AddRequestDone, 196 store_->AddRequest(request1, base::Bind(&PickRequestTaskTest::AddRequestDone,
192 base::Unretained(this))); 197 base::Unretained(this)));
193 store_->AddRequest(request2, base::Bind(&PickRequestTaskTest::AddRequestDone, 198 store_->AddRequest(request2, base::Bind(&PickRequestTaskTest::AddRequestDone,
194 base::Unretained(this))); 199 base::Unretained(this)));
195 200
196 // Pump the loop to give the async queue the opportunity to do the adds. 201 // Pump the loop to give the async queue the opportunity to do the adds.
197 PumpLoop(); 202 PumpLoop();
198 } 203 }
199 204
200 void PickRequestTaskTest::MakeFactoryAndTask() { 205 void PickRequestTaskTest::MakePickRequestTask() {
201 factory_.reset(new PickRequestTaskFactory(policy_.get(), notifier_.get(),
202 &event_logger_));
203 DeviceConditions conditions; 206 DeviceConditions conditions;
204 task_ = factory_->CreatePickerTask( 207 task_.reset(new PickRequestTask(
205 store_.get(), 208 store_.get(), policy_.get(),
206 base::Bind(&PickRequestTaskTest::RequestPicked, base::Unretained(this)), 209 base::Bind(&PickRequestTaskTest::RequestPicked, base::Unretained(this)),
207 base::Bind(&PickRequestTaskTest::RequestNotPicked, 210 base::Bind(&PickRequestTaskTest::RequestNotPicked,
208 base::Unretained(this)), 211 base::Unretained(this)),
209 base::Bind(&PickRequestTaskTest::RequestCountCallback, 212 base::Bind(&PickRequestTaskTest::RequestCountCallback,
210 base::Unretained(this)), 213 base::Unretained(this)),
211 conditions, disabled_requests_); 214 conditions, disabled_requests_));
212 task_->SetTaskCompletionCallbackForTesting( 215 task_->SetTaskCompletionCallbackForTesting(
213 task_runner_.get(), 216 task_runner_.get(),
214 base::Bind(&PickRequestTaskTest::TaskCompletionCallback, 217 base::Bind(&PickRequestTaskTest::TaskCompletionCallback,
215 base::Unretained(this))); 218 base::Unretained(this)));
216 } 219 }
217 220
218 void PickRequestTaskTest::InitializeStoreDone(bool success) { 221 void PickRequestTaskTest::InitializeStoreDone(bool success) {
219 ASSERT_TRUE(success); 222 ASSERT_TRUE(success);
220 } 223 }
221 224
222 TEST_F(PickRequestTaskTest, PickFromEmptyQueue) { 225 TEST_F(PickRequestTaskTest, PickFromEmptyQueue) {
223 task()->Run(); 226 task()->Run();
224 PumpLoop(); 227 PumpLoop();
225 228
226 // Pump the loop again to give the async queue the opportunity to return 229 // Pump the loop again to give the async queue the opportunity to return
227 // results from the Get operation, and for the picker to call the "QueueEmpty" 230 // results from the Get operation, and for the picker to call the "QueueEmpty"
228 // callback. 231 // callback.
229 PumpLoop(); 232 PumpLoop();
230 233
231 EXPECT_TRUE(request_queue_not_picked_called_); 234 EXPECT_TRUE(request_queue_not_picked_called_);
232 EXPECT_EQ((size_t) 0, total_request_count_); 235 EXPECT_EQ(0UL, total_request_count_);
233 EXPECT_EQ((size_t) 0, available_request_count_); 236 EXPECT_EQ(0UL, available_request_count_);
234 EXPECT_TRUE(task_complete_called_); 237 EXPECT_TRUE(task_complete_called_);
235 } 238 }
236 239
237 TEST_F(PickRequestTaskTest, ChooseRequestWithHigherRetryCount) { 240 TEST_F(PickRequestTaskTest, ChooseRequestWithHigherRetryCount) {
238 // Set up policy to prefer higher retry count. 241 // Set up policy to prefer higher retry count.
239 policy_.reset(new OfflinerPolicy( 242 policy_.reset(new OfflinerPolicy(
240 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, 243 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries,
241 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); 244 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds));
242 MakeFactoryAndTask(); 245 MakePickRequestTask();
243 246
244 base::Time creation_time = base::Time::Now(); 247 base::Time creation_time = base::Time::Now();
245 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 248 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
246 kUserRequested); 249 kUserRequested);
247 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 250 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
248 kUserRequested); 251 kUserRequested);
249 request2.set_completed_attempt_count(kAttemptCount); 252 request2.set_completed_attempt_count(kAttemptCount);
250 253
251 QueueRequests(request1, request2); 254 QueueRequests(request1, request2);
252 255
253 task()->Run(); 256 task()->Run();
254 PumpLoop(); 257 PumpLoop();
255 258
256 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 259 EXPECT_EQ(kRequestId2, last_picked_->request_id());
257 EXPECT_FALSE(request_queue_not_picked_called_); 260 EXPECT_FALSE(request_queue_not_picked_called_);
258 EXPECT_EQ((size_t) 2, total_request_count_); 261 EXPECT_EQ(2UL, total_request_count_);
259 EXPECT_EQ((size_t) 2, available_request_count_); 262 EXPECT_EQ(2UL, available_request_count_);
260 EXPECT_TRUE(task_complete_called_); 263 EXPECT_TRUE(task_complete_called_);
261 } 264 }
262 265
263 TEST_F(PickRequestTaskTest, ChooseRequestWithSameRetryCountButEarlier) { 266 TEST_F(PickRequestTaskTest, ChooseRequestWithSameRetryCountButEarlier) {
264 base::Time creation_time1 = 267 base::Time creation_time1 =
265 base::Time::Now() - base::TimeDelta::FromSeconds(10); 268 base::Time::Now() - base::TimeDelta::FromSeconds(10);
266 base::Time creation_time2 = base::Time::Now(); 269 base::Time creation_time2 = base::Time::Now();
267 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 270 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
268 kUserRequested); 271 kUserRequested);
269 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 272 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
270 kUserRequested); 273 kUserRequested);
271 274
272 QueueRequests(request1, request2); 275 QueueRequests(request1, request2);
273 276
274 task()->Run(); 277 task()->Run();
275 PumpLoop(); 278 PumpLoop();
276 279
277 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 280 EXPECT_EQ(kRequestId1, last_picked_->request_id());
278 EXPECT_FALSE(request_queue_not_picked_called_); 281 EXPECT_FALSE(request_queue_not_picked_called_);
279 EXPECT_TRUE(task_complete_called_); 282 EXPECT_TRUE(task_complete_called_);
280 } 283 }
281 284
282 TEST_F(PickRequestTaskTest, ChooseEarlierRequest) { 285 TEST_F(PickRequestTaskTest, ChooseEarlierRequest) {
283 // We need a custom policy object prefering recency to retry count. 286 // We need a custom policy object prefering recency to retry count.
284 policy_.reset(new OfflinerPolicy( 287 policy_.reset(new OfflinerPolicy(
285 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, 288 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries,
286 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds)); 289 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds));
287 MakeFactoryAndTask(); 290 MakePickRequestTask();
288 291
289 base::Time creation_time1 = 292 base::Time creation_time1 =
290 base::Time::Now() - base::TimeDelta::FromSeconds(10); 293 base::Time::Now() - base::TimeDelta::FromSeconds(10);
291 base::Time creation_time2 = base::Time::Now(); 294 base::Time creation_time2 = base::Time::Now();
292 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 295 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
293 kUserRequested); 296 kUserRequested);
294 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 297 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
295 kUserRequested); 298 kUserRequested);
296 request2.set_completed_attempt_count(kAttemptCount); 299 request2.set_completed_attempt_count(kAttemptCount);
297 300
298 QueueRequests(request1, request2); 301 QueueRequests(request1, request2);
299 302
300 task()->Run(); 303 task()->Run();
301 PumpLoop(); 304 PumpLoop();
302 305
303 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 306 EXPECT_EQ(kRequestId1, last_picked_->request_id());
304 EXPECT_FALSE(request_queue_not_picked_called_); 307 EXPECT_FALSE(request_queue_not_picked_called_);
305 EXPECT_TRUE(task_complete_called_); 308 EXPECT_TRUE(task_complete_called_);
306 } 309 }
307 310
308 TEST_F(PickRequestTaskTest, ChooseSameTimeRequestWithHigherRetryCount) { 311 TEST_F(PickRequestTaskTest, ChooseSameTimeRequestWithHigherRetryCount) {
309 // We need a custom policy object preferring recency to retry count. 312 // We need a custom policy object preferring recency to retry count.
310 policy_.reset(new OfflinerPolicy( 313 policy_.reset(new OfflinerPolicy(
311 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, 314 kPreferUntried, kPreferEarlier, !kPreferRetryCount, kMaxStartedTries,
312 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); 315 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds));
313 MakeFactoryAndTask(); 316 MakePickRequestTask();
314 317
315 base::Time creation_time = base::Time::Now(); 318 base::Time creation_time = base::Time::Now();
316 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 319 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
317 kUserRequested); 320 kUserRequested);
318 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 321 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
319 kUserRequested); 322 kUserRequested);
320 request2.set_completed_attempt_count(kAttemptCount); 323 request2.set_completed_attempt_count(kAttemptCount);
321 324
322 QueueRequests(request1, request2); 325 QueueRequests(request1, request2);
323 326
324 task()->Run(); 327 task()->Run();
325 PumpLoop(); 328 PumpLoop();
326 329
327 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 330 EXPECT_EQ(kRequestId2, last_picked_->request_id());
328 EXPECT_FALSE(request_queue_not_picked_called_); 331 EXPECT_FALSE(request_queue_not_picked_called_);
329 EXPECT_TRUE(task_complete_called_); 332 EXPECT_TRUE(task_complete_called_);
330 } 333 }
331 334
332 TEST_F(PickRequestTaskTest, ChooseRequestWithLowerRetryCount) { 335 TEST_F(PickRequestTaskTest, ChooseRequestWithLowerRetryCount) {
333 // We need a custom policy object preferring lower retry count. 336 // We need a custom policy object preferring lower retry count.
334 policy_.reset(new OfflinerPolicy( 337 policy_.reset(new OfflinerPolicy(
335 !kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, 338 !kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries,
336 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); 339 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds));
337 MakeFactoryAndTask(); 340 MakePickRequestTask();
338 341
339 base::Time creation_time = base::Time::Now(); 342 base::Time creation_time = base::Time::Now();
340 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 343 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
341 kUserRequested); 344 kUserRequested);
342 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 345 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
343 kUserRequested); 346 kUserRequested);
344 request2.set_completed_attempt_count(kAttemptCount); 347 request2.set_completed_attempt_count(kAttemptCount);
345 348
346 QueueRequests(request1, request2); 349 QueueRequests(request1, request2);
347 350
348 task()->Run(); 351 task()->Run();
349 PumpLoop(); 352 PumpLoop();
350 353
351 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 354 EXPECT_EQ(kRequestId1, last_picked_->request_id());
352 EXPECT_FALSE(request_queue_not_picked_called_); 355 EXPECT_FALSE(request_queue_not_picked_called_);
353 EXPECT_TRUE(task_complete_called_); 356 EXPECT_TRUE(task_complete_called_);
354 } 357 }
355 358
356 TEST_F(PickRequestTaskTest, ChooseLaterRequest) { 359 TEST_F(PickRequestTaskTest, ChooseLaterRequest) {
357 // We need a custom policy preferring recency over retry, and later requests. 360 // We need a custom policy preferring recency over retry, and later requests.
358 policy_.reset(new OfflinerPolicy( 361 policy_.reset(new OfflinerPolicy(
359 kPreferUntried, !kPreferEarlier, !kPreferRetryCount, kMaxStartedTries, 362 kPreferUntried, !kPreferEarlier, !kPreferRetryCount, kMaxStartedTries,
360 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds)); 363 kMaxCompletedTries, kBackgroundProcessingTimeBudgetSeconds));
361 MakeFactoryAndTask(); 364 MakePickRequestTask();
362 365
363 base::Time creation_time1 = 366 base::Time creation_time1 =
364 base::Time::Now() - base::TimeDelta::FromSeconds(10); 367 base::Time::Now() - base::TimeDelta::FromSeconds(10);
365 base::Time creation_time2 = base::Time::Now(); 368 base::Time creation_time2 = base::Time::Now();
366 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 369 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
367 kUserRequested); 370 kUserRequested);
368 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 371 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
369 kUserRequested); 372 kUserRequested);
370 373
371 QueueRequests(request1, request2); 374 QueueRequests(request1, request2);
(...skipping 16 matching lines...) Expand all
388 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time, 391 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, expired_time,
389 kUserRequested); 392 kUserRequested);
390 393
391 QueueRequests(request1, request2); 394 QueueRequests(request1, request2);
392 395
393 task()->Run(); 396 task()->Run();
394 PumpLoop(); 397 PumpLoop();
395 398
396 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 399 EXPECT_EQ(kRequestId1, last_picked_->request_id());
397 EXPECT_FALSE(request_queue_not_picked_called_); 400 EXPECT_FALSE(request_queue_not_picked_called_);
398 EXPECT_EQ(kRequestId2, GetNotifier()->last_expired_request().request_id()); 401 EXPECT_EQ(2UL, total_request_count_);
399 EXPECT_EQ(RequestNotifier::BackgroundSavePageResult::EXPIRED, 402 EXPECT_EQ(1UL, available_request_count_);
400 GetNotifier()->last_request_expiration_status());
401 EXPECT_EQ(1, GetNotifier()->total_expired_requests());
402 EXPECT_EQ((size_t) 1, total_request_count_);
403 EXPECT_EQ((size_t) 1, available_request_count_);
404 EXPECT_TRUE(task_complete_called_); 403 EXPECT_TRUE(task_complete_called_);
404 EXPECT_TRUE(cleanup_needed_);
405 } 405 }
406 406
407 TEST_F(PickRequestTaskTest, ChooseRequestThatHasNotExceededStartLimit) { 407 TEST_F(PickRequestTaskTest, ChooseRequestThatHasNotExceededStartLimit) {
408 base::Time creation_time1 = 408 base::Time creation_time1 =
409 base::Time::Now() - base::TimeDelta::FromSeconds(1); 409 base::Time::Now() - base::TimeDelta::FromSeconds(1);
410 base::Time creation_time2 = base::Time::Now(); 410 base::Time creation_time2 = base::Time::Now();
411 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 411 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
412 kUserRequested); 412 kUserRequested);
413 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 413 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
414 kUserRequested); 414 kUserRequested);
415 415
416 // With default policy settings, we should choose the earlier request. 416 // With default policy settings, we should choose the earlier request.
417 // However, we will make the earlier reqeust exceed the limit. 417 // However, we will make the earlier reqeust exceed the limit.
418 request1.set_started_attempt_count(policy_->GetMaxStartedTries()); 418 request1.set_started_attempt_count(policy_->GetMaxStartedTries());
419 419
420 QueueRequests(request1, request2); 420 QueueRequests(request1, request2);
421 421
422 task()->Run(); 422 task()->Run();
423 PumpLoop(); 423 PumpLoop();
424 424
425 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 425 EXPECT_EQ(kRequestId2, last_picked_->request_id());
426 EXPECT_FALSE(request_queue_not_picked_called_); 426 EXPECT_FALSE(request_queue_not_picked_called_);
427 // TODO(dougarnett): Counts should be 1 here once requests exceeding start 427 EXPECT_EQ(2UL, total_request_count_);
428 // count get cleaned up from the queue. 428 EXPECT_EQ(1UL, available_request_count_);
429 EXPECT_EQ((size_t) 2, total_request_count_);
430 EXPECT_EQ((size_t) 2, available_request_count_);
431 EXPECT_TRUE(task_complete_called_); 429 EXPECT_TRUE(task_complete_called_);
430 EXPECT_TRUE(cleanup_needed_);
432 } 431 }
433 432
434 TEST_F(PickRequestTaskTest, ChooseRequestThatHasNotExceededCompletionLimit) { 433 TEST_F(PickRequestTaskTest, ChooseRequestThatHasNotExceededCompletionLimit) {
435 base::Time creation_time1 = 434 base::Time creation_time1 =
436 base::Time::Now() - base::TimeDelta::FromSeconds(1); 435 base::Time::Now() - base::TimeDelta::FromSeconds(1);
437 base::Time creation_time2 = base::Time::Now(); 436 base::Time creation_time2 = base::Time::Now();
438 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1, 437 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time1,
439 kUserRequested); 438 kUserRequested);
440 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2, 439 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time2,
441 kUserRequested); 440 kUserRequested);
442 441
443 // With default policy settings, we should choose the earlier request. 442 // With default policy settings, we should choose the earlier request.
444 // However, we will make the earlier reqeust exceed the limit. 443 // However, we will make the earlier reqeust exceed the limit.
445 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries()); 444 request1.set_completed_attempt_count(policy_->GetMaxCompletedTries());
446 445
447 QueueRequests(request1, request2); 446 QueueRequests(request1, request2);
448 447
449 task()->Run(); 448 task()->Run();
450 PumpLoop(); 449 PumpLoop();
451 450
452 EXPECT_EQ(kRequestId2, last_picked_->request_id()); 451 EXPECT_EQ(kRequestId2, last_picked_->request_id());
453 EXPECT_FALSE(request_queue_not_picked_called_); 452 EXPECT_FALSE(request_queue_not_picked_called_);
454 EXPECT_TRUE(task_complete_called_); 453 EXPECT_TRUE(task_complete_called_);
454 EXPECT_TRUE(cleanup_needed_);
455 } 455 }
456 456
457 TEST_F(PickRequestTaskTest, ChooseRequestThatIsNotDisabled) { 457 TEST_F(PickRequestTaskTest, ChooseRequestThatIsNotDisabled) {
458 policy_.reset(new OfflinerPolicy( 458 policy_.reset(new OfflinerPolicy(
459 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries, 459 kPreferUntried, kPreferEarlier, kPreferRetryCount, kMaxStartedTries,
460 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds)); 460 kMaxCompletedTries + 1, kBackgroundProcessingTimeBudgetSeconds));
461 461
462 // put request 2 on disabled list, ensure request1 picked instead, 462 // put request 2 on disabled list, ensure request1 picked instead,
463 // even though policy would prefer 2. 463 // even though policy would prefer 2.
464 disabled_requests_.insert(kRequestId2); 464 disabled_requests_.insert(kRequestId2);
465 MakeFactoryAndTask(); 465 MakePickRequestTask();
466 466
467 base::Time creation_time = base::Time::Now(); 467 base::Time creation_time = base::Time::Now();
468 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time, 468 SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time,
469 kUserRequested); 469 kUserRequested);
470 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 470 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
471 kUserRequested); 471 kUserRequested);
472 request2.set_completed_attempt_count(kAttemptCount); 472 request2.set_completed_attempt_count(kAttemptCount);
473 473
474 // Add test requests on the Queue. 474 // Add test requests on the Queue.
475 QueueRequests(request1, request2); 475 QueueRequests(request1, request2);
476 476
477 task()->Run(); 477 task()->Run();
478 PumpLoop(); 478 PumpLoop();
479 479
480 // Pump the loop again to give the async queue the opportunity to return 480 // Pump the loop again to give the async queue the opportunity to return
481 // results from the Get operation, and for the picker to call the "picked" 481 // results from the Get operation, and for the picker to call the "picked"
482 // callback. 482 // callback.
483 PumpLoop(); 483 PumpLoop();
484 484
485 EXPECT_EQ(kRequestId1, last_picked_->request_id()); 485 EXPECT_EQ(kRequestId1, last_picked_->request_id());
486 EXPECT_FALSE(request_queue_not_picked_called_); 486 EXPECT_FALSE(request_queue_not_picked_called_);
487 EXPECT_EQ((size_t) 2, total_request_count_); 487 EXPECT_EQ(2UL, total_request_count_);
488 EXPECT_EQ((size_t) 1, available_request_count_); 488 EXPECT_EQ(1UL, available_request_count_);
489 EXPECT_TRUE(task_complete_called_); 489 EXPECT_TRUE(task_complete_called_);
490 } 490 }
491 491
492 } // namespace offline_pages 492 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698