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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |