| 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.h" | 5 #include "components/offline_pages/background/request_queue.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 // Data for request 1. | 23 // Data for request 1. |
| 24 const int64_t kRequestId = 42; | 24 const int64_t kRequestId = 42; |
| 25 const GURL kUrl("http://example.com"); | 25 const GURL kUrl("http://example.com"); |
| 26 const ClientId kClientId("bookmark", "1234"); | 26 const ClientId kClientId("bookmark", "1234"); |
| 27 const int64_t kRetryCount = 2; | 27 const int64_t kRetryCount = 2; |
| 28 // Data for request 2. | 28 // Data for request 2. |
| 29 const int64_t kRequestId2 = 77; | 29 const int64_t kRequestId2 = 77; |
| 30 const GURL kUrl2("http://test.com"); | 30 const GURL kUrl2("http://test.com"); |
| 31 const ClientId kClientId2("bookmark", "567"); | 31 const ClientId kClientId2("bookmark", "567"); |
| 32 const bool kUserRequested = true; | 32 const bool kUserRequested = true; |
| 33 const int64_t kRequestId3 = 99; |
| 33 } // namespace | 34 } // namespace |
| 34 | 35 |
| 35 // TODO(fgorski): Add tests for store failures in add/remove/get. | 36 // TODO(fgorski): Add tests for store failures in add/remove/get. |
| 36 class RequestQueueTest : public testing::Test { | 37 class RequestQueueTest : public testing::Test { |
| 37 public: | 38 public: |
| 38 RequestQueueTest(); | 39 RequestQueueTest(); |
| 39 ~RequestQueueTest() override; | 40 ~RequestQueueTest() override; |
| 40 | 41 |
| 41 // Test overrides. | 42 // Test overrides. |
| 42 void SetUp() override; | 43 void SetUp() override; |
| 43 | 44 |
| 44 void PumpLoop(); | 45 void PumpLoop(); |
| 45 | 46 |
| 46 // Callback for adding requests. | 47 // Callback for adding requests. |
| 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); | 48 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| 48 // Callback for getting requests. | 49 // Callback for getting requests. |
| 49 void GetRequestsDone(GetRequestsResult result, | 50 void GetRequestsDone(GetRequestsResult result, |
| 50 std::vector<std::unique_ptr<SavePageRequest>> requests); | 51 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 51 // Callback for removing request. | |
| 52 void RemoveRequestsDone( | |
| 53 const RequestQueue::UpdateMultipleRequestResults& results, | |
| 54 std::vector<std::unique_ptr<SavePageRequest>> requests); | |
| 55 | 52 |
| 56 void UpdateRequestDone(UpdateRequestResult result); | 53 void UpdateRequestDone(UpdateRequestResult result); |
| 57 void UpdateRequestsDone(std::unique_ptr<UpdateRequestsResult> result); | 54 void UpdateRequestsDone(std::unique_ptr<UpdateRequestsResult> result); |
| 58 | 55 |
| 59 RequestQueue* queue() { return queue_.get(); } | 56 RequestQueue* queue() { return queue_.get(); } |
| 60 | 57 |
| 61 AddRequestResult last_add_result() const { return last_add_result_; } | 58 AddRequestResult last_add_result() const { return last_add_result_; } |
| 62 SavePageRequest* last_added_request() { | 59 SavePageRequest* last_added_request() { |
| 63 return last_added_request_.get(); | 60 return last_added_request_.get(); |
| 64 } | 61 } |
| 65 | 62 |
| 66 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | |
| 67 const { | |
| 68 return last_remove_results_; | |
| 69 } | |
| 70 | |
| 71 const RequestQueue::UpdateMultipleRequestResults& | |
| 72 last_multiple_update_results() const { | |
| 73 return last_multiple_update_results_; | |
| 74 } | |
| 75 | |
| 76 UpdateRequestResult last_update_result() const { return last_update_result_; } | 63 UpdateRequestResult last_update_result() const { return last_update_result_; } |
| 77 | 64 |
| 78 GetRequestsResult last_get_requests_result() const { | 65 GetRequestsResult last_get_requests_result() const { |
| 79 return last_get_requests_result_; | 66 return last_get_requests_result_; |
| 80 } | 67 } |
| 81 | 68 |
| 82 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 69 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 83 return last_requests_; | 70 return last_requests_; |
| 84 } | 71 } |
| 85 | 72 |
| 86 UpdateRequestsResult* update_requests_result() const { | 73 UpdateRequestsResult* update_requests_result() const { |
| 87 return update_requests_result_.get(); | 74 return update_requests_result_.get(); |
| 88 } | 75 } |
| 89 | 76 |
| 90 private: | 77 private: |
| 91 AddRequestResult last_add_result_; | 78 AddRequestResult last_add_result_; |
| 92 std::unique_ptr<SavePageRequest> last_added_request_; | 79 std::unique_ptr<SavePageRequest> last_added_request_; |
| 93 std::unique_ptr<UpdateRequestsResult> update_requests_result_; | 80 std::unique_ptr<UpdateRequestsResult> update_requests_result_; |
| 94 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | |
| 95 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; | |
| 96 UpdateRequestResult last_update_result_; | 81 UpdateRequestResult last_update_result_; |
| 97 | 82 |
| 98 GetRequestsResult last_get_requests_result_; | 83 GetRequestsResult last_get_requests_result_; |
| 99 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 84 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 100 | 85 |
| 101 std::unique_ptr<RequestQueue> queue_; | 86 std::unique_ptr<RequestQueue> queue_; |
| 102 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 87 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 103 base::ThreadTaskRunnerHandle task_runner_handle_; | 88 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 104 }; | 89 }; |
| 105 | 90 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 128 last_added_request_.reset(new SavePageRequest(request)); | 113 last_added_request_.reset(new SavePageRequest(request)); |
| 129 } | 114 } |
| 130 | 115 |
| 131 void RequestQueueTest::GetRequestsDone( | 116 void RequestQueueTest::GetRequestsDone( |
| 132 GetRequestsResult result, | 117 GetRequestsResult result, |
| 133 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 118 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 134 last_get_requests_result_ = result; | 119 last_get_requests_result_ = result; |
| 135 last_requests_ = std::move(requests); | 120 last_requests_ = std::move(requests); |
| 136 } | 121 } |
| 137 | 122 |
| 138 void RequestQueueTest::RemoveRequestsDone( | |
| 139 const RequestQueue::UpdateMultipleRequestResults& results, | |
| 140 std::vector<std::unique_ptr<SavePageRequest>> requests) { | |
| 141 last_remove_results_ = results; | |
| 142 last_requests_ = std::move(requests); | |
| 143 } | |
| 144 | |
| 145 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { | 123 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { |
| 146 last_update_result_ = result; | 124 last_update_result_ = result; |
| 147 } | 125 } |
| 148 | 126 |
| 149 void RequestQueueTest::UpdateRequestsDone( | 127 void RequestQueueTest::UpdateRequestsDone( |
| 150 std::unique_ptr<UpdateRequestsResult> result) { | 128 std::unique_ptr<UpdateRequestsResult> result) { |
| 151 update_requests_result_ = std::move(result); | 129 update_requests_result_ = std::move(result); |
| 152 } | 130 } |
| 153 | 131 |
| 154 TEST_F(RequestQueueTest, GetRequestsEmpty) { | 132 TEST_F(RequestQueueTest, GetRequestsEmpty) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 179 | 157 |
| 180 TEST_F(RequestQueueTest, RemoveRequest) { | 158 TEST_F(RequestQueueTest, RemoveRequest) { |
| 181 base::Time creation_time = base::Time::Now(); | 159 base::Time creation_time = base::Time::Now(); |
| 182 SavePageRequest request( | 160 SavePageRequest request( |
| 183 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 161 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 184 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | 162 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 185 base::Unretained(this))); | 163 base::Unretained(this))); |
| 186 PumpLoop(); | 164 PumpLoop(); |
| 187 ASSERT_EQ(kRequestId, last_added_request()->request_id()); | 165 ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| 188 | 166 |
| 189 std::vector<int64_t> remove_requests; | 167 std::vector<int64_t> remove_requests{kRequestId}; |
| 190 remove_requests.push_back(kRequestId); | |
| 191 queue()->RemoveRequests(remove_requests, | 168 queue()->RemoveRequests(remove_requests, |
| 192 base::Bind(&RequestQueueTest::RemoveRequestsDone, | 169 base::Bind(&RequestQueueTest::UpdateRequestsDone, |
| 193 base::Unretained(this))); | 170 base::Unretained(this))); |
| 194 PumpLoop(); | 171 PumpLoop(); |
| 195 ASSERT_EQ(1ul, last_remove_results().size()); | 172 EXPECT_EQ(1ul, update_requests_result()->item_statuses.size()); |
| 196 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0).second); | 173 EXPECT_EQ(kRequestId, update_requests_result()->item_statuses.at(0).first); |
| 174 EXPECT_EQ(ItemActionStatus::SUCCESS, |
| 175 update_requests_result()->item_statuses.at(0).second); |
| 176 EXPECT_EQ(1UL, update_requests_result()->updated_items.size()); |
| 177 EXPECT_EQ(request, update_requests_result()->updated_items.at(0)); |
| 197 | 178 |
| 198 queue()->GetRequests( | 179 queue()->GetRequests( |
| 199 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 180 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 200 PumpLoop(); | 181 PumpLoop(); |
| 201 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 182 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 202 ASSERT_EQ(0ul, last_requests().size()); | 183 ASSERT_EQ(0ul, last_requests().size()); |
| 203 } | 184 } |
| 204 | 185 |
| 205 TEST_F(RequestQueueTest, RemoveSeveralRequests) { | 186 TEST_F(RequestQueueTest, RemoveSeveralRequests) { |
| 206 base::Time creation_time = base::Time::Now(); | 187 base::Time creation_time = base::Time::Now(); |
| 207 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time, | 188 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time, |
| 208 kUserRequested); | 189 kUserRequested); |
| 209 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | 190 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 210 base::Unretained(this))); | 191 base::Unretained(this))); |
| 211 PumpLoop(); | 192 PumpLoop(); |
| 212 ASSERT_EQ(kRequestId, last_added_request()->request_id()); | 193 ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| 213 | 194 |
| 214 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 195 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 215 kUserRequested); | 196 kUserRequested); |
| 216 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, | 197 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, |
| 217 base::Unretained(this))); | 198 base::Unretained(this))); |
| 218 PumpLoop(); | 199 PumpLoop(); |
| 219 ASSERT_EQ(kRequestId2, last_added_request()->request_id()); | 200 ASSERT_EQ(kRequestId2, last_added_request()->request_id()); |
| 220 | 201 |
| 221 std::vector<int64_t> remove_requests; | 202 std::vector<int64_t> remove_requests; |
| 222 remove_requests.push_back(kRequestId); | 203 remove_requests.push_back(kRequestId); |
| 223 remove_requests.push_back(kRequestId2); | 204 remove_requests.push_back(kRequestId2); |
| 205 remove_requests.push_back(kRequestId3); |
| 224 queue()->RemoveRequests(remove_requests, | 206 queue()->RemoveRequests(remove_requests, |
| 225 base::Bind(&RequestQueueTest::RemoveRequestsDone, | 207 base::Bind(&RequestQueueTest::UpdateRequestsDone, |
| 226 base::Unretained(this))); | 208 base::Unretained(this))); |
| 227 PumpLoop(); | 209 PumpLoop(); |
| 228 ASSERT_EQ(2ul, last_remove_results().size()); | 210 ASSERT_EQ(3ul, update_requests_result()->item_statuses.size()); |
| 229 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0).second); | 211 ASSERT_EQ(kRequestId, update_requests_result()->item_statuses.at(0).first); |
| 230 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(1).second); | 212 ASSERT_EQ(ItemActionStatus::SUCCESS, |
| 231 ASSERT_EQ(kRequestId, last_remove_results().at(0).first); | 213 update_requests_result()->item_statuses.at(0).second); |
| 232 ASSERT_EQ(kRequestId2, last_remove_results().at(1).first); | 214 ASSERT_EQ(kRequestId2, update_requests_result()->item_statuses.at(1).first); |
| 215 ASSERT_EQ(ItemActionStatus::SUCCESS, |
| 216 update_requests_result()->item_statuses.at(1).second); |
| 217 ASSERT_EQ(kRequestId3, update_requests_result()->item_statuses.at(2).first); |
| 218 ASSERT_EQ(ItemActionStatus::NOT_FOUND, |
| 219 update_requests_result()->item_statuses.at(2).second); |
| 220 EXPECT_EQ(2UL, update_requests_result()->updated_items.size()); |
| 221 EXPECT_EQ(request, update_requests_result()->updated_items.at(0)); |
| 222 EXPECT_EQ(request2, update_requests_result()->updated_items.at(1)); |
| 233 | 223 |
| 234 queue()->GetRequests( | 224 queue()->GetRequests( |
| 235 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 225 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 236 PumpLoop(); | 226 PumpLoop(); |
| 237 | 227 |
| 238 // Verify both requests are no longer in the queue. | 228 // Verify both requests are no longer in the queue. |
| 239 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 229 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 240 ASSERT_EQ(0ul, last_requests().size()); | 230 ASSERT_EQ(0ul, last_requests().size()); |
| 241 } | 231 } |
| 242 | 232 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 | 316 |
| 327 queue()->GetRequests( | 317 queue()->GetRequests( |
| 328 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 318 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 329 PumpLoop(); | 319 PumpLoop(); |
| 330 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 320 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 331 ASSERT_EQ(2ul, last_requests().size()); | 321 ASSERT_EQ(2ul, last_requests().size()); |
| 332 | 322 |
| 333 std::vector<int64_t> remove_requests; | 323 std::vector<int64_t> remove_requests; |
| 334 remove_requests.push_back(request1.request_id()); | 324 remove_requests.push_back(request1.request_id()); |
| 335 queue()->RemoveRequests(remove_requests, | 325 queue()->RemoveRequests(remove_requests, |
| 336 base::Bind(&RequestQueueTest::RemoveRequestsDone, | 326 base::Bind(&RequestQueueTest::UpdateRequestsDone, |
| 337 base::Unretained(this))); | 327 base::Unretained(this))); |
| 338 PumpLoop(); | 328 PumpLoop(); |
| 339 ASSERT_EQ(1ul, last_remove_results().size()); | 329 ASSERT_EQ(1ul, update_requests_result()->item_statuses.size()); |
| 340 ASSERT_EQ(kRequestId, last_remove_results().at(0).first); | 330 ASSERT_EQ(kRequestId, update_requests_result()->item_statuses.at(0).first); |
| 341 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0).second); | 331 ASSERT_EQ(ItemActionStatus::SUCCESS, |
| 332 update_requests_result()->item_statuses.at(0).second); |
| 342 | 333 |
| 343 queue()->GetRequests( | 334 queue()->GetRequests( |
| 344 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 335 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 345 PumpLoop(); | 336 PumpLoop(); |
| 346 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 337 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 347 ASSERT_EQ(1ul, last_requests().size()); | 338 ASSERT_EQ(1ul, last_requests().size()); |
| 348 ASSERT_EQ(request2.request_id(), last_requests().at(0)->request_id()); | 339 ASSERT_EQ(request2.request_id(), last_requests().at(0)->request_id()); |
| 349 } | 340 } |
| 350 | 341 |
| 351 TEST_F(RequestQueueTest, UpdateRequest) { | 342 TEST_F(RequestQueueTest, UpdateRequest) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 | 378 |
| 388 // Try to update request1 when only request2 is in the queue. | 379 // Try to update request1 when only request2 is in the queue. |
| 389 queue()->UpdateRequest( | 380 queue()->UpdateRequest( |
| 390 request1, | 381 request1, |
| 391 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); | 382 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 392 PumpLoop(); | 383 PumpLoop(); |
| 393 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); | 384 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); |
| 394 } | 385 } |
| 395 | 386 |
| 396 } // namespace offline_pages | 387 } // namespace offline_pages |
| OLD | NEW |