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

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

Issue 2373933003: [Offline pages] Updating RequestQueue::RemoveRequests to use a TaskQueue (Closed)
Patch Set: Rebasing Created 4 years, 2 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"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 void PumpLoop(); 51 void PumpLoop();
52 void ClearResults(); 52 void ClearResults();
53 53
54 // Callback used for get requests. 54 // Callback used for get requests.
55 void GetRequestsDone(bool result, 55 void GetRequestsDone(bool result,
56 std::vector<std::unique_ptr<SavePageRequest>> requests); 56 std::vector<std::unique_ptr<SavePageRequest>> requests);
57 // Callback used for add/update request. 57 // Callback used for add/update request.
58 void AddOrUpdateDone(UpdateStatus result); 58 void AddOrUpdateDone(UpdateStatus result);
59 void AddRequestDone(ItemActionStatus status); 59 void AddRequestDone(ItemActionStatus status);
60 void UpdateRequestDone(std::unique_ptr<UpdateRequestsResult> result); 60 void UpdateRequestDone(std::unique_ptr<UpdateRequestsResult> result);
61 // Callback used for remove requests.
62 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results,
63 std::vector<std::unique_ptr<SavePageRequest>> requests);
64 // Callback used for reset. 61 // Callback used for reset.
65 void ResetDone(bool result); 62 void ResetDone(bool result);
66 63
67 LastResult last_result() const { return last_result_; } 64 LastResult last_result() const { return last_result_; }
68 UpdateStatus last_update_status() const { return last_update_status_; } 65 UpdateStatus last_update_status() const { return last_update_status_; }
69 const RequestQueue::UpdateMultipleRequestResults&
70 last_multiple_update_results() const {
71 return last_multiple_update_results_;
72 }
73 const RequestQueue::UpdateMultipleRequestResults& last_remove_results()
74 const {
75 return last_remove_results_;
76 }
77 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { 66 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
78 return last_requests_; 67 return last_requests_;
79 } 68 }
80 ItemActionStatus last_add_status() const { return last_add_status_; } 69 ItemActionStatus last_add_status() const { return last_add_status_; }
81 70
82 UpdateRequestsResult* last_update_result() const { 71 UpdateRequestsResult* last_update_result() const {
83 return last_update_result_.get(); 72 return last_update_result_.get();
84 } 73 }
85 74
86 protected: 75 protected:
87 base::ScopedTempDir temp_directory_; 76 base::ScopedTempDir temp_directory_;
88 77
89 private: 78 private:
90 LastResult last_result_; 79 LastResult last_result_;
91 UpdateStatus last_update_status_; 80 UpdateStatus last_update_status_;
92 ItemActionStatus last_add_status_; 81 ItemActionStatus last_add_status_;
93 std::unique_ptr<UpdateRequestsResult> last_update_result_; 82 std::unique_ptr<UpdateRequestsResult> last_update_result_;
94 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_;
95 RequestQueue::UpdateMultipleRequestResults last_remove_results_;
96 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; 83 std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
97 84
98 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 85 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
99 base::ThreadTaskRunnerHandle task_runner_handle_; 86 base::ThreadTaskRunnerHandle task_runner_handle_;
100 }; 87 };
101 88
102 RequestQueueStoreTestBase::RequestQueueStoreTestBase() 89 RequestQueueStoreTestBase::RequestQueueStoreTestBase()
103 : last_result_(LastResult::kNone), 90 : last_result_(LastResult::kNone),
104 last_update_status_(UpdateStatus::FAILED), 91 last_update_status_(UpdateStatus::FAILED),
105 last_add_status_(ItemActionStatus::NOT_FOUND), 92 last_add_status_(ItemActionStatus::NOT_FOUND),
106 task_runner_(new base::TestSimpleTaskRunner), 93 task_runner_(new base::TestSimpleTaskRunner),
107 task_runner_handle_(task_runner_) { 94 task_runner_handle_(task_runner_) {
108 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); 95 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir());
109 } 96 }
110 97
111 void RequestQueueStoreTestBase::TearDown() { 98 void RequestQueueStoreTestBase::TearDown() {
112 // Wait for all the pieces of the store to delete itself properly. 99 // Wait for all the pieces of the store to delete itself properly.
113 PumpLoop(); 100 PumpLoop();
114 } 101 }
115 102
116 void RequestQueueStoreTestBase::PumpLoop() { 103 void RequestQueueStoreTestBase::PumpLoop() {
117 task_runner_->RunUntilIdle(); 104 task_runner_->RunUntilIdle();
118 } 105 }
119 106
120 void RequestQueueStoreTestBase::ClearResults() { 107 void RequestQueueStoreTestBase::ClearResults() {
121 last_result_ = LastResult::kNone; 108 last_result_ = LastResult::kNone;
122 last_update_status_ = UpdateStatus::FAILED; 109 last_update_status_ = UpdateStatus::FAILED;
123 last_add_status_ = ItemActionStatus::NOT_FOUND; 110 last_add_status_ = ItemActionStatus::NOT_FOUND;
124 last_remove_results_.clear();
125 last_requests_.clear(); 111 last_requests_.clear();
126 last_update_result_.reset(nullptr); 112 last_update_result_.reset(nullptr);
127 } 113 }
128 114
129 void RequestQueueStoreTestBase::GetRequestsDone( 115 void RequestQueueStoreTestBase::GetRequestsDone(
130 bool result, 116 bool result,
131 std::vector<std::unique_ptr<SavePageRequest>> requests) { 117 std::vector<std::unique_ptr<SavePageRequest>> requests) {
132 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; 118 last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
133 last_requests_ = std::move(requests); 119 last_requests_ = std::move(requests);
134 } 120 }
135 121
136 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { 122 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) {
137 last_update_status_ = status; 123 last_update_status_ = status;
138 } 124 }
139 125
140 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { 126 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) {
141 last_add_status_ = status; 127 last_add_status_ = status;
142 } 128 }
143 129
144 void RequestQueueStoreTestBase::UpdateRequestDone( 130 void RequestQueueStoreTestBase::UpdateRequestDone(
145 std::unique_ptr<UpdateRequestsResult> result) { 131 std::unique_ptr<UpdateRequestsResult> result) {
146 last_update_result_ = std::move(result); 132 last_update_result_ = std::move(result);
147 } 133 }
148 134
149 void RequestQueueStoreTestBase::RemoveDone(
150 const RequestQueue::UpdateMultipleRequestResults& results,
151 std::vector<std::unique_ptr<SavePageRequest>> requests) {
152 last_remove_results_ = results;
153 last_requests_ = std::move(requests);
154 }
155
156 void RequestQueueStoreTestBase::ResetDone(bool result) { 135 void RequestQueueStoreTestBase::ResetDone(bool result) {
157 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; 136 last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
158 } 137 }
159 138
160 // Defines interface for the store factory. 139 // Defines interface for the store factory.
161 class RequestQueueStoreFactory { 140 class RequestQueueStoreFactory {
162 public: 141 public:
163 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0; 142 virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0;
164 }; 143 };
165 144
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 base::Unretained(this))); 303 base::Unretained(this)));
325 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, 304 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
326 kUserRequested); 305 kUserRequested);
327 store->AddRequest(request2, 306 store->AddRequest(request2,
328 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, 307 base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
329 base::Unretained(this))); 308 base::Unretained(this)));
330 this->PumpLoop(); 309 this->PumpLoop();
331 this->ClearResults(); 310 this->ClearResults();
332 311
333 std::vector<int64_t> request_ids{kRequestId, kRequestId2}; 312 std::vector<int64_t> request_ids{kRequestId, kRequestId2};
334 store->RemoveRequests(request_ids, 313 store->RemoveRequests(
335 base::Bind(&RequestQueueStoreTestBase::RemoveDone, 314 request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
336 base::Unretained(this))); 315 base::Unretained(this)));
337 ASSERT_EQ(0ul, this->last_remove_results().size()); 316
317 ASSERT_FALSE(this->last_update_result());
338 this->PumpLoop(); 318 this->PumpLoop();
339 ASSERT_EQ(2ul, this->last_remove_results().size()); 319 ASSERT_TRUE(this->last_update_result());
340 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, 320 EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
341 this->last_remove_results().at(0).second); 321 EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
342 ASSERT_EQ(RequestQueue::UpdateRequestResult::SUCCESS, 322 EXPECT_EQ(ItemActionStatus::SUCCESS,
343 this->last_remove_results().at(1).second); 323 this->last_update_result()->item_statuses[0].second);
344 ASSERT_EQ(2UL, this->last_requests().size()); 324 EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
345 ASSERT_EQ(kRequestId, this->last_requests().at(0)->request_id()); 325 EXPECT_EQ(ItemActionStatus::SUCCESS,
346 this->ClearResults(); 326 this->last_update_result()->item_statuses[1].second);
327 EXPECT_EQ(2UL, this->last_update_result()->updated_items.size());
328 EXPECT_EQ(request1, this->last_update_result()->updated_items.at(0));
329 EXPECT_EQ(request2, this->last_update_result()->updated_items.at(1));
347 330
Pete Williamson 2016/09/30 18:03:53 It might be good to call this->ClearResults() befo
fgorski 2016/10/04 17:18:23 Done.
348 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, 331 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
349 base::Unretained(this))); 332 base::Unretained(this)));
350 this->PumpLoop(); 333 this->PumpLoop();
351 ASSERT_EQ(LastResult::kTrue, this->last_result()); 334 ASSERT_EQ(LastResult::kTrue, this->last_result());
352 ASSERT_TRUE(this->last_requests().empty()); 335 ASSERT_TRUE(this->last_requests().empty());
353 this->ClearResults(); 336 this->ClearResults();
354 337
355 // Try to remove a request that is not in the queue. 338 // Try to remove a request that is not in the queue.
356 store->RemoveRequests(request_ids, 339 store->RemoveRequests(
357 base::Bind(&RequestQueueStoreTestBase::RemoveDone, 340 request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
358 base::Unretained(this))); 341 base::Unretained(this)));
359 ASSERT_EQ(LastResult::kNone, this->last_result()); 342 ASSERT_FALSE(this->last_update_result());
360 this->PumpLoop(); 343 this->PumpLoop();
361 ASSERT_EQ(2ul, this->last_remove_results().size()); 344 ASSERT_TRUE(this->last_update_result());
362 // When requests are missing, we expect the results to say so, but since they 345 // When requests are missing, we expect the results to say so, but since they
363 // are missing, no requests should have been returned. 346 // are missing, no requests should have been returned.
364 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, 347 EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
365 this->last_remove_results().at(0).second); 348 EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
366 ASSERT_EQ(RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST, 349 EXPECT_EQ(ItemActionStatus::NOT_FOUND,
367 this->last_remove_results().at(1).second); 350 this->last_update_result()->item_statuses[0].second);
368 ASSERT_EQ(0UL, this->last_requests().size()); 351 EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
352 EXPECT_EQ(ItemActionStatus::NOT_FOUND,
353 this->last_update_result()->item_statuses[1].second);
354 EXPECT_EQ(0UL, this->last_update_result()->updated_items.size());
369 } 355 }
370 356
371 TYPED_TEST(RequestQueueStoreTest, ResetStore) { 357 TYPED_TEST(RequestQueueStoreTest, ResetStore) {
372 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); 358 std::unique_ptr<RequestQueueStore> store(this->BuildStore());
373 base::Time creation_time = base::Time::Now(); 359 base::Time creation_time = base::Time::Now();
374 SavePageRequest original_request( 360 SavePageRequest original_request(
375 kRequestId, kUrl, kClientId, creation_time, kUserRequested); 361 kRequestId, kUrl, kClientId, creation_time, kUserRequested);
376 store->AddRequest(original_request, 362 store->AddRequest(original_request,
377 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, 363 base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
378 base::Unretained(this))); 364 base::Unretained(this)));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, 402 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
417 base::Unretained(this))); 403 base::Unretained(this)));
418 ASSERT_EQ(LastResult::kNone, this->last_result()); 404 ASSERT_EQ(LastResult::kNone, this->last_result());
419 this->PumpLoop(); 405 this->PumpLoop();
420 ASSERT_EQ(LastResult::kTrue, this->last_result()); 406 ASSERT_EQ(LastResult::kTrue, this->last_result());
421 ASSERT_EQ(1ul, this->last_requests().size()); 407 ASSERT_EQ(1ul, this->last_requests().size());
422 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); 408 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get()));
423 } 409 }
424 410
425 } // offline_pages 411 } // offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698