Chromium Code Reviews| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 50 | 50 |
| 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 UpdateMultipleRequestsDone( | 61 void UpdateMultipleRequestsDone( |
| 61 const RequestQueue::UpdateMultipleRequestResults& results, | 62 const RequestQueue::UpdateMultipleRequestResults& results, |
| 62 std::vector<std::unique_ptr<SavePageRequest>> requests); | 63 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 63 // Callback used for remove requests. | 64 // Callback used for remove requests. |
| 64 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, | 65 void RemoveDone(const RequestQueue::UpdateMultipleRequestResults& results, |
| 65 std::vector<std::unique_ptr<SavePageRequest>> requests); | 66 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 66 // Callback used for reset. | 67 // Callback used for reset. |
| 67 void ResetDone(bool result); | 68 void ResetDone(bool result); |
| 68 | 69 |
| 69 LastResult last_result() const { return last_result_; } | 70 LastResult last_result() const { return last_result_; } |
| 70 UpdateStatus last_update_status() const { return last_update_status_; } | 71 UpdateStatus last_update_status() const { return last_update_status_; } |
| 71 const RequestQueue::UpdateMultipleRequestResults& | 72 const RequestQueue::UpdateMultipleRequestResults& |
| 72 last_multiple_update_results() const { | 73 last_multiple_update_results() const { |
| 73 return last_multiple_update_results_; | 74 return last_multiple_update_results_; |
| 74 } | 75 } |
| 75 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 76 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
| 76 const { | 77 const { |
| 77 return last_remove_results_; | 78 return last_remove_results_; |
| 78 } | 79 } |
| 79 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 80 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 80 return last_requests_; | 81 return last_requests_; |
| 81 } | 82 } |
| 82 ItemActionStatus last_add_status() const { return last_add_status_; } | 83 ItemActionStatus last_add_status() const { return last_add_status_; } |
| 83 | 84 |
| 85 UpdateRequestsResult* last_update_result() const { | |
| 86 return last_update_result_.get(); | |
| 87 } | |
| 88 | |
| 84 protected: | 89 protected: |
| 85 base::ScopedTempDir temp_directory_; | 90 base::ScopedTempDir temp_directory_; |
| 86 | 91 |
| 87 private: | 92 private: |
| 88 LastResult last_result_; | 93 LastResult last_result_; |
| 89 UpdateStatus last_update_status_; | 94 UpdateStatus last_update_status_; |
| 90 ItemActionStatus last_add_status_; | 95 ItemActionStatus last_add_status_; |
| 96 std::unique_ptr<UpdateRequestsResult> last_update_result_; | |
| 91 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; | 97 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; |
| 92 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 98 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 93 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 99 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 94 | 100 |
| 95 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 101 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 96 base::ThreadTaskRunnerHandle task_runner_handle_; | 102 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 97 }; | 103 }; |
| 98 | 104 |
| 99 RequestQueueStoreTestBase::RequestQueueStoreTestBase() | 105 RequestQueueStoreTestBase::RequestQueueStoreTestBase() |
| 100 : last_result_(LastResult::kNone), | 106 : last_result_(LastResult::kNone), |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 113 void RequestQueueStoreTestBase::PumpLoop() { | 119 void RequestQueueStoreTestBase::PumpLoop() { |
| 114 task_runner_->RunUntilIdle(); | 120 task_runner_->RunUntilIdle(); |
| 115 } | 121 } |
| 116 | 122 |
| 117 void RequestQueueStoreTestBase::ClearResults() { | 123 void RequestQueueStoreTestBase::ClearResults() { |
| 118 last_result_ = LastResult::kNone; | 124 last_result_ = LastResult::kNone; |
| 119 last_update_status_ = UpdateStatus::FAILED; | 125 last_update_status_ = UpdateStatus::FAILED; |
| 120 last_add_status_ = ItemActionStatus::NOT_FOUND; | 126 last_add_status_ = ItemActionStatus::NOT_FOUND; |
| 121 last_remove_results_.clear(); | 127 last_remove_results_.clear(); |
| 122 last_requests_.clear(); | 128 last_requests_.clear(); |
| 129 last_update_result_.reset(nullptr); | |
| 123 } | 130 } |
| 124 | 131 |
| 125 void RequestQueueStoreTestBase::GetRequestsDone( | 132 void RequestQueueStoreTestBase::GetRequestsDone( |
| 126 bool result, | 133 bool result, |
| 127 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 134 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 128 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; | 135 last_result_ = result ? LastResult::kTrue : LastResult::kFalse; |
| 129 last_requests_ = std::move(requests); | 136 last_requests_ = std::move(requests); |
| 130 } | 137 } |
| 131 | 138 |
| 132 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { | 139 void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) { |
| 133 last_update_status_ = status; | 140 last_update_status_ = status; |
| 134 } | 141 } |
| 135 | 142 |
| 136 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { | 143 void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) { |
| 137 last_add_status_ = status; | 144 last_add_status_ = status; |
| 138 } | 145 } |
| 139 | 146 |
| 147 void RequestQueueStoreTestBase::UpdateRequestDone( | |
| 148 std::unique_ptr<UpdateRequestsResult> result) { | |
| 149 last_update_result_ = std::move(result); | |
| 150 } | |
| 151 | |
| 140 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( | 152 void RequestQueueStoreTestBase::UpdateMultipleRequestsDone( |
| 141 const RequestQueue::UpdateMultipleRequestResults& results, | 153 const RequestQueue::UpdateMultipleRequestResults& results, |
| 142 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 154 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 143 last_multiple_update_results_ = results; | 155 last_multiple_update_results_ = results; |
| 144 last_requests_ = std::move(requests); | 156 last_requests_ = std::move(requests); |
|
Pete Williamson
2016/09/22 00:12:50
Let's remove UpdateMultipleRequestsDone - The idea
fgorski
2016/09/22 15:47:53
Acknowledged. Separate patch.
| |
| 145 } | 157 } |
| 146 | 158 |
| 147 void RequestQueueStoreTestBase::RemoveDone( | 159 void RequestQueueStoreTestBase::RemoveDone( |
| 148 const RequestQueue::UpdateMultipleRequestResults& results, | 160 const RequestQueue::UpdateMultipleRequestResults& results, |
| 149 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 161 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 150 last_remove_results_ = results; | 162 last_remove_results_ = results; |
| 151 last_requests_ = std::move(requests); | 163 last_requests_ = std::move(requests); |
| 152 } | 164 } |
| 153 | 165 |
| 154 void RequestQueueStoreTestBase::ResetDone(bool result) { | 166 void RequestQueueStoreTestBase::ResetDone(bool result) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 252 // Check that there is still only one item in the store. | 264 // Check that there is still only one item in the store. |
| 253 this->ClearResults(); | 265 this->ClearResults(); |
| 254 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 266 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 255 base::Unretained(this))); | 267 base::Unretained(this))); |
| 256 ASSERT_EQ(LastResult::kNone, this->last_result()); | 268 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 257 this->PumpLoop(); | 269 this->PumpLoop(); |
| 258 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 270 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 259 ASSERT_EQ(1ul, this->last_requests().size()); | 271 ASSERT_EQ(1ul, this->last_requests().size()); |
| 260 } | 272 } |
| 261 | 273 |
| 262 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { | 274 TYPED_TEST(RequestQueueStoreTest, UpdateRequest) { |
|
Pete Williamson
2016/09/22 00:12:50
This test only tests a single request at a time, w
fgorski
2016/09/22 15:47:53
Done. Updated to run both tests in one call to Upd
| |
| 263 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 275 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 264 base::Time creation_time = base::Time::Now(); | 276 base::Time creation_time = base::Time::Now(); |
| 265 SavePageRequest original_request( | 277 SavePageRequest original_request( |
| 266 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 278 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 267 store->AddRequest(original_request, | 279 store->AddRequest(original_request, |
| 268 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, | 280 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, |
| 269 base::Unretained(this))); | 281 base::Unretained(this))); |
| 270 this->PumpLoop(); | 282 this->PumpLoop(); |
| 271 this->ClearResults(); | 283 this->ClearResults(); |
| 272 | 284 |
| 273 base::Time new_creation_time = | 285 base::Time new_creation_time = |
| 274 creation_time + base::TimeDelta::FromMinutes(1); | 286 creation_time + base::TimeDelta::FromMinutes(1); |
| 275 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); | 287 base::Time activation_time = creation_time + base::TimeDelta::FromHours(6); |
| 276 SavePageRequest updated_request(kRequestId, kUrl, kClientId, | 288 SavePageRequest updated_request(kRequestId, kUrl, kClientId, |
| 277 new_creation_time, activation_time, | 289 new_creation_time, activation_time, |
| 278 kUserRequested); | 290 kUserRequested); |
| 279 store->AddOrUpdateRequest( | 291 std::vector<SavePageRequest> requests_to_update{updated_request}; |
| 280 updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone, | 292 store->UpdateRequests( |
| 281 base::Unretained(this))); | 293 requests_to_update, |
| 282 ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status()); | 294 base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone, |
| 295 base::Unretained(this))); | |
| 296 ASSERT_FALSE(this->last_update_result()); | |
| 283 this->PumpLoop(); | 297 this->PumpLoop(); |
| 284 ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status()); | 298 ASSERT_TRUE(this->last_update_result()); |
| 299 EXPECT_EQ(1UL, this->last_update_result()->item_statuses.size()); | |
| 300 EXPECT_EQ(kRequestId, | |
| 301 this->last_update_result()->item_statuses.begin()->first); | |
| 302 EXPECT_EQ(ItemActionStatus::SUCCESS, | |
| 303 this->last_update_result()->item_statuses.begin()->second); | |
| 304 EXPECT_EQ(1UL, this->last_update_result()->updated_items.size()); | |
| 305 EXPECT_EQ(updated_request, | |
| 306 *(this->last_update_result()->updated_items.begin())); | |
| 285 | 307 |
| 286 // Verifying get reqeust results after a request was updated. | 308 // Verifying get reqeust results after a request was updated. |
| 287 this->ClearResults(); | 309 this->ClearResults(); |
| 288 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 310 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 289 base::Unretained(this))); | 311 base::Unretained(this))); |
| 290 ASSERT_EQ(LastResult::kNone, this->last_result()); | 312 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 291 this->PumpLoop(); | 313 this->PumpLoop(); |
| 292 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 314 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 293 ASSERT_EQ(1ul, this->last_requests().size()); | 315 ASSERT_EQ(1ul, this->last_requests().size()); |
| 294 ASSERT_EQ(updated_request, *(this->last_requests()[0].get())); | 316 ASSERT_EQ(updated_request, *(this->last_requests()[0].get())); |
| 317 | |
| 318 this->ClearResults(); | |
|
Pete Williamson
2016/09/22 00:12:50
This section is a nice addition to the test, thank
fgorski
2016/09/22 15:47:53
Acknowledged.
| |
| 319 // Try to update a non-existing request. | |
| 320 SavePageRequest updated_request2(kRequestId2, kUrl, kClientId, | |
| 321 new_creation_time, activation_time, | |
| 322 kUserRequested); | |
| 323 requests_to_update.clear(); | |
| 324 requests_to_update.push_back(updated_request2); | |
| 325 store->UpdateRequests( | |
| 326 requests_to_update, | |
| 327 base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone, | |
| 328 base::Unretained(this))); | |
| 329 this->PumpLoop(); | |
| 330 ASSERT_TRUE(this->last_update_result()); | |
| 331 EXPECT_EQ(1UL, this->last_update_result()->item_statuses.size()); | |
| 332 EXPECT_EQ(kRequestId2, | |
| 333 this->last_update_result()->item_statuses.begin()->first); | |
| 334 EXPECT_EQ(ItemActionStatus::NOT_FOUND, | |
| 335 this->last_update_result()->item_statuses.begin()->second); | |
| 336 EXPECT_EQ(0UL, this->last_update_result()->updated_items.size()); | |
| 295 } | 337 } |
| 296 | 338 |
| 297 TYPED_TEST(RequestQueueStoreTest, RemoveRequests) { | 339 TYPED_TEST(RequestQueueStoreTest, RemoveRequests) { |
| 298 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); | 340 std::unique_ptr<RequestQueueStore> store(this->BuildStore()); |
| 299 base::Time creation_time = base::Time::Now(); | 341 base::Time creation_time = base::Time::Now(); |
| 300 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time, | 342 SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time, |
| 301 kUserRequested); | 343 kUserRequested); |
| 302 store->AddRequest(request1, | 344 store->AddRequest(request1, |
| 303 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, | 345 base::Bind(&RequestQueueStoreTestBase::AddRequestDone, |
| 304 base::Unretained(this))); | 346 base::Unretained(this))); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 465 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, | 507 store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone, |
| 466 base::Unretained(this))); | 508 base::Unretained(this))); |
| 467 ASSERT_EQ(LastResult::kNone, this->last_result()); | 509 ASSERT_EQ(LastResult::kNone, this->last_result()); |
| 468 this->PumpLoop(); | 510 this->PumpLoop(); |
| 469 ASSERT_EQ(LastResult::kTrue, this->last_result()); | 511 ASSERT_EQ(LastResult::kTrue, this->last_result()); |
| 470 ASSERT_EQ(1ul, this->last_requests().size()); | 512 ASSERT_EQ(1ul, this->last_requests().size()); |
| 471 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); | 513 ASSERT_TRUE(original_request == *(this->last_requests().at(0).get())); |
| 472 } | 514 } |
| 473 | 515 |
| 474 } // offline_pages | 516 } // offline_pages |
| OLD | NEW |