OLD | NEW |
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_queue_store.h" | 5 #include "components/offline_pages/background/request_queue_store.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 RequestQueueStoreTestBase(); | 57 RequestQueueStoreTestBase(); |
58 | 58 |
59 // Test overrides. | 59 // Test overrides. |
60 void TearDown() override; | 60 void TearDown() override; |
61 | 61 |
62 void PumpLoop(); | 62 void PumpLoop(); |
63 void ClearResults(); | 63 void ClearResults(); |
64 | 64 |
65 // Callback used for get requests. | 65 // Callback used for get requests. |
66 void GetRequestsDone(bool result, | 66 void GetRequestsDone(bool result, |
67 const std::vector<SavePageRequest>& requests); | 67 std::vector<std::unique_ptr<SavePageRequest>> requests); |
68 // Callback used for add/update request. | 68 // Callback used for add/update request. |
69 void AddOrUpdateDone(UpdateStatus result); | 69 void AddOrUpdateDone(UpdateStatus result); |
70 void UpdateMultipleRequestsDone( | 70 void UpdateMultipleRequestsDone( |
71 const RequestQueue::UpdateMultipleRequestResults& results, | 71 const RequestQueue::UpdateMultipleRequestResults& results, |
72 const std::vector<SavePageRequest>& requests); | 72 std::vector<std::unique_ptr<SavePageRequest>> requests); |
73 // Callback used for remove requests. | 73 // Callback used for remove requests. |
74 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, | 74 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, |
75 const std::vector<SavePageRequest>& requests); | 75 std::vector<std::unique_ptr<SavePageRequest>> requests); |
76 // Callback used for reset. | 76 // Callback used for reset. |
77 void ResetDone(bool result); | 77 void ResetDone(bool result); |
78 | 78 |
79 LastResult last_result() const { return last_result_; } | 79 LastResult last_result() const { return last_result_; } |
80 UpdateStatus last_update_status() const { return last_update_status_; } | 80 UpdateStatus last_update_status() const { return last_update_status_; } |
81 const RequestQueue::UpdateMultipleRequestResults& | 81 const RequestQueue::UpdateMultipleRequestResults& |
82 last_multiple_update_results() const { | 82 last_multiple_update_results() const { |
83 return last_multiple_update_results_; | 83 return last_multiple_update_results_; |
84 } | 84 } |
85 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 85 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
86 const { | 86 const { |
87 return last_remove_results_; | 87 return last_remove_results_; |
88 } | 88 } |
89 const std::vector<SavePageRequest>& last_requests() const { | 89 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
90 return last_requests_; | 90 return last_requests_; |
91 } | 91 } |
92 | 92 |
93 protected: | 93 protected: |
94 base::ScopedTempDir temp_directory_; | 94 base::ScopedTempDir temp_directory_; |
95 | 95 |
96 private: | 96 private: |
97 LastResult last_result_; | 97 LastResult last_result_; |
98 UpdateStatus last_update_status_; | 98 UpdateStatus last_update_status_; |
99 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; | 99 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; |
100 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 100 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
101 std::vector<SavePageRequest> last_requests_; | 101 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
102 | 102 |
103 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 103 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
104 base::ThreadTaskRunnerHandle task_runner_handle_; | 104 base::ThreadTaskRunnerHandle task_runner_handle_; |
105 }; | 105 }; |
106 | 106 |
107 RequestQueueStoreTestBase::RequestQueueStoreTestBase() | 107 RequestQueueStoreTestBase::RequestQueueStoreTestBase() |
108 : last_result_(LastResult::kNone), | 108 : last_result_(LastResult::kNone), |
109 last_update_status_(UpdateStatus::FAILED), | 109 last_update_status_(UpdateStatus::FAILED), |
110 task_runner_(new base::TestSimpleTaskRunner), | 110 task_runner_(new base::TestSimpleTaskRunner), |
111 task_runner_handle_(task_runner_) { | 111 task_runner_handle_(task_runner_) { |
(...skipping 11 matching lines...) Expand all Loading... |
123 | 123 |
124 void RequestQueueStoreTestBase::ClearResults() { | 124 void RequestQueueStoreTestBase::ClearResults() { |
125 last_result_ = LastResult::kNone; | 125 last_result_ = LastResult::kNone; |
126 last_update_status_ = UpdateStatus::FAILED; | 126 last_update_status_ = UpdateStatus::FAILED; |
127 last_remove_results_.clear(); | 127 last_remove_results_.clear(); |
128 last_requests_.clear(); | 128 last_requests_.clear(); |
129 } | 129 } |
130 | 130 |
131 void RequestQueueStoreTestBase::GetRequestsDone( | 131 void RequestQueueStoreTestBase::GetRequestsDone( |
132 bool result, | 132 bool result, |
133 const std::vector<SavePageRequest>& requests) { | 133 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
134 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; | 134 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
135 last_requests_ = requests; | 135 last_requests_ = std::move(requests); |
136 } | 136 } |
137 | 137 |
138 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { | 138 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { |
139 last_update_status_ = status; | 139 last_update_status_ = status; |
140 } | 140 } |
141 | 141 |
142 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( | 142 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( |
143 const RequestQueue::UpdateMultipleRequestResults& results, | 143 const RequestQueue::UpdateMultipleRequestResults& results, |
144 const std::vector<SavePageRequest>& requests) { | 144 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
145 last_multiple_update_results_ = results; | 145 last_multiple_update_results_ = results; |
146 last_requests_ = requests; | 146 last_requests_ = std::move(requests); |
147 } | 147 } |
148 | 148 |
149 void RequestQueueStoreTestBase::RemoveDone( | 149 void RequestQueueStoreTestBase::RemoveDone( |
150 const RequestQueue::UpdateMultipleRequestResults& results, | 150 const RequestQueue::UpdateMultipleRequestResults& results, |
151 const std::vector<SavePageRequest>& requests) { | 151 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
152 last_remove_results_ = results; | 152 last_remove_results_ = results; |
153 last_requests_ = requests; | 153 last_requests_ = std::move(requests); |
154 } | 154 } |
155 | 155 |
156 void RequestQueueStoreTestBase::ResetDone(bool result) { | 156 void RequestQueueStoreTestBase::ResetDone(bool result) { |
157 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; | 157 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
158 } | 158 } |
159 | 159 |
160 // Defines interface for the store factory. | 160 // Defines interface for the store factory. |
161 class RequestQueueStoreFactory { | 161 class RequestQueueStoreFactory { |
162 public: | 162 public: |
163 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0; | 163 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 233 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
234 | 234 |
235 // Verifying get reqeust results after a request was added. | 235 // Verifying get reqeust results after a request was added. |
236 this->ClearResults(); | 236 this->ClearResults(); |
237 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 237 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
238 base::Unretained(this))); | 238 base::Unretained(this))); |
239 ASSERT_EQ(LastResult::kNone, this->last_result()); | 239 ASSERT_EQ(LastResult::kNone, this->last_result()); |
240 this->PumpLoop(); | 240 this->PumpLoop(); |
241 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 241 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
242 ASSERT_EQ(1ul, this->last_requests().size()); | 242 ASSERT_EQ(1ul, this->last_requests().size()); |
243 ASSERT_TRUE(request == this->last_requests()[0]); | 243 ASSERT_TRUE(request == *(this->last_requests()[0].get())); |
244 } | 244 } |
245 | 245 |
246 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { | 246 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { |
247 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 247 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
248 base::Time creation_time = base::Time::Now(); | 248 base::Time creation_time = base::Time::Now(); |
249 SavePageRequest original_request( | 249 SavePageRequest original_request( |
250 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 250 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
251 store->AddOrUpdateRequest( | 251 store->AddOrUpdateRequest( |
252 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 252 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
253 base::Unretained(this))); | 253 base::Unretained(this))); |
(...skipping 14 matching lines...) Expand all Loading... |
268 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 268 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); |
269 | 269 |
270 // Verifying get reqeust results after a request was updated. | 270 // Verifying get reqeust results after a request was updated. |
271 this->ClearResults(); | 271 this->ClearResults(); |
272 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 272 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
273 base::Unretained(this))); | 273 base::Unretained(this))); |
274 ASSERT_EQ(LastResult::kNone, this->last_result()); | 274 ASSERT_EQ(LastResult::kNone, this->last_result()); |
275 this->PumpLoop(); | 275 this->PumpLoop(); |
276 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 276 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
277 ASSERT_EQ(1ul, this->last_requests().size()); | 277 ASSERT_EQ(1ul, this->last_requests().size()); |
278 ASSERT_TRUE(updated_request == this->last_requests()[0]); | 278 ASSERT_TRUE(updated_request == *(this->last_requests()[0].get())); |
279 } | 279 } |
280 | 280 |
281 TYPED_TEST(RequestQueueStoreTest, RemoveRequests) { | 281 TYPED_TEST(RequestQueueStoreTest, RemoveRequests) { |
282 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 282 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
283 base::Time creation_time = base::Time::Now(); | 283 base::Time creation_time = base::Time::Now(); |
284 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time, | 284 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time, |
285 kUserRequested); | 285 kUserRequested); |
286 store->AddOrUpdateRequest( | 286 store->AddOrUpdateRequest( |
287 request1, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 287 request1, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
288 base::Unretained(this))); | 288 base::Unretained(this))); |
289 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 289 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
290 kUserRequested); | 290 kUserRequested); |
291 store->AddOrUpdateRequest( | 291 store->AddOrUpdateRequest( |
292 request2, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 292 request2, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
293 base::Unretained(this))); | 293 base::Unretained(this))); |
294 this->PumpLoop(); | 294 this->PumpLoop(); |
295 this->ClearResults(); | 295 this->ClearResults(); |
296 | 296 |
297 std::vector<int64_t> request_ids{kRequestId, kRequestId2}; | 297 std::vector<int64_t> request_ids{kRequestId, kRequestId2}; |
298 store->RemoveRequests(request_ids, | 298 store->RemoveRequests(request_ids, |
299 base::Bind(&RequestQueueStoreTestBase::RemoveDone, | 299 base::Bind(&RequestQueueStoreTestBase::RemoveDone, |
300 base::Unretained(this))); | 300 base::Unretained(this))); |
301 ASSERT_EQ(0ul, this->last_remove_results().size()); | 301 ASSERT_EQ(0ul, this->last_remove_results().size()); |
302 this->PumpLoop(); | 302 this->PumpLoop(); |
303 ASSERT_EQ(2ul, this->last_remove_results().size()); | 303 ASSERT_EQ(2ul, this->last_remove_results().size()); |
304 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | 304 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, |
305 this->last_remove_results().at(0).second); | 305 this->last_remove_results().at(0).second); |
306 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | 306 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, |
307 this->last_remove_results().at(1).second); | 307 this->last_remove_results().at(1).second); |
308 ASSERT_EQ(kRequestId, this->last_requests().at(0).request_id()); | 308 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); |
309 this->ClearResults(); | 309 this->ClearResults(); |
310 | 310 |
311 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 311 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
312 base::Unretained(this))); | 312 base::Unretained(this))); |
313 this->PumpLoop(); | 313 this->PumpLoop(); |
314 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 314 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
315 ASSERT_TRUE(this->last_requests().empty()); | 315 ASSERT_TRUE(this->last_requests().empty()); |
316 this->ClearResults(); | 316 this->ClearResults(); |
317 | 317 |
318 // Try to remove a request that is not in the queue. | 318 // Try to remove a request that is not in the queue. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 request_ids, SavePageRequest::RequestState::PAUSED, | 350 request_ids, SavePageRequest::RequestState::PAUSED, |
351 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, | 351 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, |
352 base::Unretained(this))); | 352 base::Unretained(this))); |
353 ASSERT_EQ(LastResult::kNone, this->last_result()); | 353 ASSERT_EQ(LastResult::kNone, this->last_result()); |
354 this->PumpLoop(); | 354 this->PumpLoop(); |
355 | 355 |
356 // Verify pause succeeded | 356 // Verify pause succeeded |
357 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); | 357 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); |
358 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | 358 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, |
359 this->last_multiple_update_results().at(0).second); | 359 this->last_multiple_update_results().at(0).second); |
360 ASSERT_EQ(kRequestId, this->last_requests().at(0).request_id()); | 360 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); |
361 this->ClearResults(); | 361 this->ClearResults(); |
362 | 362 |
363 // Get the request from the queue to check it out | 363 // Get the request from the queue to check it out |
364 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 364 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
365 base::Unretained(this))); | 365 base::Unretained(this))); |
366 this->PumpLoop(); | 366 this->PumpLoop(); |
367 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 367 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
368 // The request should still be in the queue. | 368 // The request should still be in the queue. |
369 ASSERT_EQ(1UL, this->last_requests().size()); | 369 ASSERT_EQ(1UL, this->last_requests().size()); |
370 // Request 1 should be paused. | 370 // Request 1 should be paused. |
371 ASSERT_EQ(SavePageRequest::RequestState::PAUSED, | 371 ASSERT_EQ(SavePageRequest::RequestState::PAUSED, |
372 this->last_requests().at(0).request_state()); | 372 this->last_requests().at(0)->request_state()); |
373 this->ClearResults(); | 373 this->ClearResults(); |
374 | 374 |
375 // Now resume the same request we paused. | 375 // Now resume the same request we paused. |
376 store->ChangeRequestsState( | 376 store->ChangeRequestsState( |
377 request_ids, SavePageRequest::RequestState::AVAILABLE, | 377 request_ids, SavePageRequest::RequestState::AVAILABLE, |
378 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, | 378 base::Bind(&RequestQueueStoreTestBase::UpdateMultipleRequestsDone, |
379 base::Unretained(this))); | 379 base::Unretained(this))); |
380 ASSERT_EQ(LastResult::kNone, this->last_result()); | 380 ASSERT_EQ(LastResult::kNone, this->last_result()); |
381 this->PumpLoop(); | 381 this->PumpLoop(); |
382 | 382 |
383 // Verify resume succeeded. | 383 // Verify resume succeeded. |
384 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); | 384 ASSERT_EQ(1ul, this->last_multiple_update_results().size()); |
385 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, | 385 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, |
386 this->last_multiple_update_results().at(0).second); | 386 this->last_multiple_update_results().at(0).second); |
387 ASSERT_EQ(kRequestId, this->last_requests().at(0).request_id()); | 387 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); |
388 this->ClearResults(); | 388 this->ClearResults(); |
389 | 389 |
390 // Get the request from the queue to check it out | 390 // Get the request from the queue to check it out |
391 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 391 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
392 base::Unretained(this))); | 392 base::Unretained(this))); |
393 this->PumpLoop(); | 393 this->PumpLoop(); |
394 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 394 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
395 // The request should still be in the queue. | 395 // The request should still be in the queue. |
396 ASSERT_EQ(1UL, this->last_requests().size()); | 396 ASSERT_EQ(1UL, this->last_requests().size()); |
397 // Request 1 should be paused. | 397 // Request 1 should be paused. |
398 ASSERT_EQ(SavePageRequest::RequestState::AVAILABLE, | 398 ASSERT_EQ(SavePageRequest::RequestState::AVAILABLE, |
399 this->last_requests().at(0).request_state()); | 399 this->last_requests().at(0)->request_state()); |
400 this->ClearResults(); | 400 this->ClearResults(); |
401 } | 401 } |
402 | 402 |
403 TYPED_TEST(RequestQueueStoreTest, ResetStore) { | 403 TYPED_TEST(RequestQueueStoreTest, ResetStore) { |
404 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 404 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
405 base::Time creation_time = base::Time::Now(); | 405 base::Time creation_time = base::Time::Now(); |
406 SavePageRequest original_request( | 406 SavePageRequest original_request( |
407 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 407 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
408 store->AddOrUpdateRequest( | 408 store->AddOrUpdateRequest( |
409 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 409 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 // Resets the store, using the same temp directory. The contents should be | 444 // Resets the store, using the same temp directory. The contents should be |
445 // intact. First reset is done separately to release DB lock. | 445 // intact. First reset is done separately to release DB lock. |
446 store.reset(); | 446 store.reset(); |
447 store = BuildStore(); | 447 store = BuildStore(); |
448 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 448 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
449 base::Unretained(this))); | 449 base::Unretained(this))); |
450 ASSERT_EQ(LastResult::kNone, this->last_result()); | 450 ASSERT_EQ(LastResult::kNone, this->last_result()); |
451 this->PumpLoop(); | 451 this->PumpLoop(); |
452 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 452 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
453 ASSERT_EQ(1ul, this->last_requests().size()); | 453 ASSERT_EQ(1ul, this->last_requests().size()); |
454 ASSERT_TRUE(original_request == this->last_requests()[0]); | 454 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); |
455 } | 455 } |
456 | 456 |
457 } // offline_pages | 457 } // offline_pages |
OLD | NEW |