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

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

Issue 2228813003: Changes to fit better with the needs of the download manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR fixes for Dimich 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_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"
11 #include "base/files/scoped_temp_dir.h" 11 #include "base/files/scoped_temp_dir.h"
12 #include "base/test/test_simple_task_runner.h" 12 #include "base/test/test_simple_task_runner.h"
13 #include "base/threading/thread_task_runner_handle.h" 13 #include "base/threading/thread_task_runner_handle.h"
14 #include "components/offline_pages/background/request_queue.h"
14 #include "components/offline_pages/background/request_queue_in_memory_store.h" 15 #include "components/offline_pages/background/request_queue_in_memory_store.h"
15 #include "components/offline_pages/background/request_queue_store_sql.h" 16 #include "components/offline_pages/background/request_queue_store_sql.h"
16 #include "components/offline_pages/background/save_page_request.h" 17 #include "components/offline_pages/background/save_page_request.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
19 namespace offline_pages { 20 namespace offline_pages {
20 21
21 using UpdateStatus = RequestQueueStore::UpdateStatus; 22 using UpdateStatus = RequestQueueStore::UpdateStatus;
22 23
23 namespace { 24 namespace {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 61
61 void PumpLoop(); 62 void PumpLoop();
62 void ClearResults(); 63 void ClearResults();
63 64
64 // Callback used for get requests. 65 // Callback used for get requests.
65 void GetRequestsDone(bool result, 66 void GetRequestsDone(bool result,
66 const std::vector<SavePageRequest>& requests); 67 const std::vector<SavePageRequest>& requests);
67 // Callback used for add/update request. 68 // Callback used for add/update request.
68 void AddOrUpdateDone(UpdateStatus result); 69 void AddOrUpdateDone(UpdateStatus result);
69 // Callback used for remove requests. 70 // Callback used for remove requests.
70 void RemoveDone(bool result, int count); 71 void RemoveDone(
72 const std::vector<int64_t>& request_ids,
73 const std::vector<RequestQueue::UpdateRequestResult>& results);
71 // Callback used for reset. 74 // Callback used for reset.
72 void ResetDone(bool result); 75 void ResetDone(bool result);
73 76
74 LastResult last_result() const { return last_result_; } 77 LastResult last_result() const { return last_result_; }
75 UpdateStatus last_update_status() const { return last_update_status_; } 78 UpdateStatus last_update_status() const { return last_update_status_; }
76 int last_remove_count() const { return last_remove_count_; } 79 const std::vector<int64_t>& last_remove_request_ids() {
80 return last_remove_request_ids_;
81 }
82 const std::vector<RequestQueue::UpdateRequestResult>& last_remove_results()
83 const {
84 return last_remove_results_;
85 }
77 const std::vector<SavePageRequest>& last_requests() const { 86 const std::vector<SavePageRequest>& last_requests() const {
78 return last_requests_; 87 return last_requests_;
79 } 88 }
80 89
81 protected: 90 protected:
82 base::ScopedTempDir temp_directory_; 91 base::ScopedTempDir temp_directory_;
83 92
84 private: 93 private:
85 LastResult last_result_; 94 LastResult last_result_;
86 UpdateStatus last_update_status_; 95 UpdateStatus last_update_status_;
87 int last_remove_count_; 96 std::vector<int64_t> last_remove_request_ids_;
97 std::vector<RequestQueue::UpdateRequestResult> last_remove_results_;
88 std::vector<SavePageRequest> last_requests_; 98 std::vector<SavePageRequest> last_requests_;
89 99
90 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 100 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
91 base::ThreadTaskRunnerHandle task_runner_handle_; 101 base::ThreadTaskRunnerHandle task_runner_handle_;
92 }; 102 };
93 103
94 RequestQueueStoreTestBase::RequestQueueStoreTestBase() 104 RequestQueueStoreTestBase::RequestQueueStoreTestBase()
95 : last_result_(LastResult::kNone), 105 : last_result_(LastResult::kNone),
96 last_update_status_(UpdateStatus::FAILED), 106 last_update_status_(UpdateStatus::FAILED),
97 last_remove_count_(0),
98 task_runner_(new base::TestSimpleTaskRunner), 107 task_runner_(new base::TestSimpleTaskRunner),
99 task_runner_handle_(task_runner_) { 108 task_runner_handle_(task_runner_) {
100 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); 109 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir());
101 } 110 }
102 111
103 void RequestQueueStoreTestBase::TearDown() { 112 void RequestQueueStoreTestBase::TearDown() {
104 // Wait for all the pieces of the store to delete itself properly. 113 // Wait for all the pieces of the store to delete itself properly.
105 PumpLoop(); 114 PumpLoop();
106 } 115 }
107 116
108 void RequestQueueStoreTestBase::PumpLoop() { 117 void RequestQueueStoreTestBase::PumpLoop() {
109 task_runner_->RunUntilIdle(); 118 task_runner_->RunUntilIdle();
110 } 119 }
111 120
112 void RequestQueueStoreTestBase::ClearResults() { 121 void RequestQueueStoreTestBase::ClearResults() {
113 last_result_ = LastResult::kNone; 122 last_result_ = LastResult::kNone;
114 last_update_status_ = UpdateStatus::FAILED; 123 last_update_status_ = UpdateStatus::FAILED;
115 last_remove_count_ = 0; 124 last_remove_request_ids_.clear();
125 last_remove_results_.clear();
116 last_requests_.clear(); 126 last_requests_.clear();
117 } 127 }
118 128
119 void RequestQueueStoreTestBase::GetRequestsDone( 129 void RequestQueueStoreTestBase::GetRequestsDone(
120 bool result, 130 bool result,
121 const std::vector<SavePageRequest>& requests) { 131 const std::vector<SavePageRequest>& requests) {
122 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; 132 last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
123 last_requests_ = requests; 133 last_requests_ = requests;
124 } 134 }
125 135
126 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { 136 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) {
127 last_update_status_ = status; 137 last_update_status_ = status;
128 } 138 }
129 139
130 void RequestQueueStoreTestBase::RemoveDone(bool result, int count) { 140 void RequestQueueStoreTestBase::RemoveDone(
131 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; 141 const std::vector<int64_t>& request_ids,
132 last_remove_count_ = count; 142 const std::vector<RequestQueue::UpdateRequestResult>& results) {
143 last_remove_request_ids_ = request_ids;
144 last_remove_results_ = results;
133 } 145 }
134 146
135 void RequestQueueStoreTestBase::ResetDone(bool result) { 147 void RequestQueueStoreTestBase::ResetDone(bool result) {
136 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; 148 last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
137 } 149 }
138 150
139 // Defines interface for the store factory. 151 // Defines interface for the store factory.
140 class RequestQueueStoreFactory { 152 class RequestQueueStoreFactory {
141 public: 153 public:
142 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0; 154 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 this->ClearResults(); 262 this->ClearResults();
251 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, 263 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
252 base::Unretained(this))); 264 base::Unretained(this)));
253 ASSERT_EQ(LastResult::kNone, this->last_result()); 265 ASSERT_EQ(LastResult::kNone, this->last_result());
254 this->PumpLoop(); 266 this->PumpLoop();
255 ASSERT_EQ(LastResult::kTrue, this->last_result()); 267 ASSERT_EQ(LastResult::kTrue, this->last_result());
256 ASSERT_EQ(1ul, this->last_requests().size()); 268 ASSERT_EQ(1ul, this->last_requests().size());
257 ASSERT_TRUE(updated_request == this->last_requests()[0]); 269 ASSERT_TRUE(updated_request == this->last_requests()[0]);
258 } 270 }
259 271
260 TYPED_TEST(RequestQueueStoreTest, RemoveRequest) { 272 TYPED_TEST(RequestQueueStoreTest, RemoveRequests) {
261 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); 273 std::unique_ptr<RequestQueueStore> store(this->BuildStore());
262 base::Time creation_time = base::Time::Now(); 274 base::Time creation_time = base::Time::Now();
263 SavePageRequest original_request( 275 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time,
264 kRequestId, kUrl, kClientId, creation_time, kUserRequested); 276 kUserRequested);
265 store->AddOrUpdateRequest( 277 store->AddOrUpdateRequest(
266 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, 278 request1, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
267 base::Unretained(this))); 279 base::Unretained(this)));
280 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
281 kUserRequested);
282 store->AddOrUpdateRequest(
283 request2, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
284 base::Unretained(this)));
268 this->PumpLoop(); 285 this->PumpLoop();
269 this->ClearResults(); 286 this->ClearResults();
270 287
271 std::vector<int64_t> request_ids{kRequestId}; 288 std::vector<int64_t> request_ids{kRequestId, kRequestId2};
272 store->RemoveRequests(request_ids, 289 store->RemoveRequests(request_ids,
273 base::Bind(&RequestQueueStoreTestBase::RemoveDone, 290 base::Bind(&RequestQueueStoreTestBase::RemoveDone,
274 base::Unretained(this))); 291 base::Unretained(this)));
275 ASSERT_EQ(LastResult::kNone, this->last_result()); 292 ASSERT_EQ(0ul, this->last_remove_request_ids().size());
276 ASSERT_EQ(0, this->last_remove_count()); 293 ASSERT_EQ(0ul, this->last_remove_results().size());
277 this->PumpLoop(); 294 this->PumpLoop();
278 ASSERT_EQ(LastResult::kTrue, this->last_result()); 295 ASSERT_EQ(2ul, this->last_remove_request_ids().size());
279 ASSERT_EQ(1, this->last_remove_count()); 296 ASSERT_EQ(2ul, this->last_remove_results().size());
297 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS,
298 this->last_remove_results().at(0));
299 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS,
300 this->last_remove_results().at(1));
280 this->ClearResults(); 301 this->ClearResults();
281 302
282 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, 303 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
283 base::Unretained(this))); 304 base::Unretained(this)));
284 this->PumpLoop(); 305 this->PumpLoop();
285 ASSERT_EQ(LastResult::kTrue, this->last_result()); 306 ASSERT_EQ(LastResult::kTrue, this->last_result());
286 ASSERT_TRUE(this->last_requests().empty()); 307 ASSERT_TRUE(this->last_requests().empty());
287 this->ClearResults(); 308 this->ClearResults();
288 309
289 // Try to remove a request that is not in the queue. 310 // Try to remove a request that is not in the queue.
290 store->RemoveRequests(request_ids, 311 store->RemoveRequests(request_ids,
291 base::Bind(&RequestQueueStoreTestBase::RemoveDone, 312 base::Bind(&RequestQueueStoreTestBase::RemoveDone,
292 base::Unretained(this))); 313 base::Unretained(this)));
293 ASSERT_EQ(LastResult::kNone, this->last_result()); 314 ASSERT_EQ(LastResult::kNone, this->last_result());
294 ASSERT_EQ(0, this->last_remove_count());
295 this->PumpLoop(); 315 this->PumpLoop();
296 ASSERT_EQ(LastResult::kTrue, this->last_result()); 316 ASSERT_EQ(2ul, this->last_remove_results().size());
297 ASSERT_EQ(0, this->last_remove_count()); 317 // Since the SQL statement returns true on a delete of an item that isn't
298 } 318 // present, SQL is returning SUCCESS, but the memory is returning
299 319 // REQUEST_DOES_NOT_EXIST, so we just check that the result is not failure.
300 TYPED_TEST(RequestQueueStoreTest, RemoveRequestByClientId) { 320 ASSERT_NE(RequestQueue::UpdateRequestResult::STORE_FAILURE,
301 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); 321 this->last_remove_results().at(0));
302 base::Time creation_time = base::Time::Now(); 322 ASSERT_NE(RequestQueue::UpdateRequestResult::STORE_FAILURE,
303 323 this->last_remove_results().at(1));
304 // Create requests and add them to the queue.
305 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time,
306 kUserRequested);
307 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
308 kUserRequested);
309 store->AddOrUpdateRequest(
310 request1, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
311 base::Unretained(this)));
312 store->AddOrUpdateRequest(
313 request2, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
314 base::Unretained(this)));
315 this->PumpLoop();
316 this->ClearResults();
317
318 // Remove a request.
319 std::vector<ClientId> client_ids_to_delete{kClientId};
320 store->RemoveRequestsByClientId(
321 client_ids_to_delete,
322 base::Bind(
323 &RequestQueueStoreTestBase::RemoveDone, base::Unretained(this)));
324 ASSERT_EQ(LastResult::kNone, this->last_result());
325 ASSERT_EQ(0, this->last_remove_count());
326 this->PumpLoop();
327 ASSERT_EQ(LastResult::kTrue, this->last_result());
328 ASSERT_EQ(1, this->last_remove_count());
329 this->ClearResults();
330
331 // Check to see what remains in the queue. Removed request should be gone.
332 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
333 base::Unretained(this)));
334 this->PumpLoop();
335 ASSERT_EQ(LastResult::kTrue, this->last_result());
336 // The other request should still be in the queue.
337 ASSERT_EQ(1UL, this->last_requests().size());
338 ASSERT_EQ(kClientId2, this->last_requests().at(0).client_id());
339 this->ClearResults();
340
341 // Try to remove a request that is not in the queue.
342 store->RemoveRequestsByClientId(
343 client_ids_to_delete,
344 base::Bind(
345 &RequestQueueStoreTestBase::RemoveDone, base::Unretained(this)));
346 this->PumpLoop();
347 ASSERT_EQ(LastResult::kTrue, this->last_result());
348 ASSERT_EQ(0, this->last_remove_count());
349 }
350
351 TYPED_TEST(RequestQueueStoreTest, RemoveRequestWithSameClientId) {
352 std::unique_ptr<RequestQueueStore> store(this->BuildStore());
353 base::Time creation_time = base::Time::Now();
354
355 // Create requests and add them to the queue.
356 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time,
357 kUserRequested);
358 SavePageRequest request2(kRequestId2, kUrl2, kClientId, creation_time,
359 kUserRequested);
360 store->AddOrUpdateRequest(
361 request1, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
362 base::Unretained(this)));
363 store->AddOrUpdateRequest(
364 request2, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
365 base::Unretained(this)));
366 this->PumpLoop();
367 this->ClearResults();
368
369 // Remove a request.
370 std::vector<ClientId> client_ids_to_delete{kClientId};
371 store->RemoveRequestsByClientId(
372 client_ids_to_delete,
373 base::Bind(
374 &RequestQueueStoreTestBase::RemoveDone, base::Unretained(this)));
375 ASSERT_EQ(LastResult::kNone, this->last_result());
376 ASSERT_EQ(0, this->last_remove_count());
377 this->PumpLoop();
378 ASSERT_EQ(LastResult::kTrue, this->last_result());
379 ASSERT_EQ(2, this->last_remove_count());
380 this->ClearResults();
381
382 // Check to see what remains in the queue. Removed request should be gone.
383 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
384 base::Unretained(this)));
385 this->PumpLoop();
386 ASSERT_EQ(LastResult::kTrue, this->last_result());
387 // The other request should still be in the queue.
388 ASSERT_TRUE(this->last_requests().empty());
389 this->ClearResults();
390 } 324 }
391 325
392 TYPED_TEST(RequestQueueStoreTest, ResetStore) { 326 TYPED_TEST(RequestQueueStoreTest, ResetStore) {
393 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); 327 std::unique_ptr<RequestQueueStore> store(this->BuildStore());
394 base::Time creation_time = base::Time::Now(); 328 base::Time creation_time = base::Time::Now();
395 SavePageRequest original_request( 329 SavePageRequest original_request(
396 kRequestId, kUrl, kClientId, creation_time, kUserRequested); 330 kRequestId, kUrl, kClientId, creation_time, kUserRequested);
397 store->AddOrUpdateRequest( 331 store->AddOrUpdateRequest(
398 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, 332 original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
399 base::Unretained(this))); 333 base::Unretained(this)));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, 371 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
438 base::Unretained(this))); 372 base::Unretained(this)));
439 ASSERT_EQ(LastResult::kNone, this->last_result()); 373 ASSERT_EQ(LastResult::kNone, this->last_result());
440 this->PumpLoop(); 374 this->PumpLoop();
441 ASSERT_EQ(LastResult::kTrue, this->last_result()); 375 ASSERT_EQ(LastResult::kTrue, this->last_result());
442 ASSERT_EQ(1ul, this->last_requests().size()); 376 ASSERT_EQ(1ul, this->last_requests().size());
443 ASSERT_TRUE(original_request == this->last_requests()[0]); 377 ASSERT_TRUE(original_request == this->last_requests()[0]);
444 } 378 }
445 379
446 } // offline_pages 380 } // offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698