| 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 void SetUp() override; | 42 void SetUp() override; |
| 43 | 43 |
| 44 void PumpLoop(); | 44 void PumpLoop(); |
| 45 | 45 |
| 46 // Callback for adding requests. | 46 // Callback for adding requests. |
| 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); | 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| 48 // Callback for getting requests. | 48 // Callback for getting requests. |
| 49 void GetRequestsDone(GetRequestsResult result, | 49 void GetRequestsDone(GetRequestsResult result, |
| 50 const std::vector<SavePageRequest>& requests); | 50 const std::vector<SavePageRequest>& requests); |
| 51 // Callback for removing request. | 51 // Callback for removing request. |
| 52 void RemoveRequestDone(UpdateRequestResult result); | 52 void RemoveRequestDone(const std::vector<int64_t>& request_ids, |
| 53 const std::vector<UpdateRequestResult>& results); |
| 53 | 54 |
| 54 void UpdateRequestDone(UpdateRequestResult result); | 55 void UpdateRequestDone(UpdateRequestResult result); |
| 55 | 56 |
| 56 RequestQueue* queue() { return queue_.get(); } | 57 RequestQueue* queue() { return queue_.get(); } |
| 57 | 58 |
| 58 AddRequestResult last_add_result() const { return last_add_result_; } | 59 AddRequestResult last_add_result() const { return last_add_result_; } |
| 59 SavePageRequest* last_added_request() { | 60 SavePageRequest* last_added_request() { |
| 60 return last_added_request_.get(); | 61 return last_added_request_.get(); |
| 61 } | 62 } |
| 62 | 63 |
| 63 UpdateRequestResult last_remove_result() const { return last_remove_result_; } | 64 const std::vector<int64_t>& last_remove_request_ids() { |
| 65 return last_remove_request_ids_; |
| 66 } |
| 67 |
| 68 const std::vector<UpdateRequestResult>& last_remove_results() const { |
| 69 return last_remove_results_; |
| 70 } |
| 64 | 71 |
| 65 UpdateRequestResult last_update_result() const { return last_update_result_; } | 72 UpdateRequestResult last_update_result() const { return last_update_result_; } |
| 66 | 73 |
| 67 GetRequestsResult last_get_requests_result() const { | 74 GetRequestsResult last_get_requests_result() const { |
| 68 return last_get_requests_result_; | 75 return last_get_requests_result_; |
| 69 } | 76 } |
| 70 const std::vector<SavePageRequest>& last_requests() const { | 77 const std::vector<SavePageRequest>& last_requests() const { |
| 71 return last_requests_; | 78 return last_requests_; |
| 72 } | 79 } |
| 73 | 80 |
| 74 private: | 81 private: |
| 75 AddRequestResult last_add_result_; | 82 AddRequestResult last_add_result_; |
| 76 std::unique_ptr<SavePageRequest> last_added_request_; | 83 std::unique_ptr<SavePageRequest> last_added_request_; |
| 77 | 84 std::vector<int64_t> last_remove_request_ids_; |
| 78 UpdateRequestResult last_remove_result_; | 85 std::vector<UpdateRequestResult> last_remove_results_; |
| 79 UpdateRequestResult last_update_result_; | 86 UpdateRequestResult last_update_result_; |
| 80 | 87 |
| 81 GetRequestsResult last_get_requests_result_; | 88 GetRequestsResult last_get_requests_result_; |
| 82 std::vector<SavePageRequest> last_requests_; | 89 std::vector<SavePageRequest> last_requests_; |
| 83 | 90 |
| 84 std::unique_ptr<RequestQueue> queue_; | 91 std::unique_ptr<RequestQueue> queue_; |
| 85 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 92 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 86 base::ThreadTaskRunnerHandle task_runner_handle_; | 93 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 87 }; | 94 }; |
| 88 | 95 |
| 89 RequestQueueTest::RequestQueueTest() | 96 RequestQueueTest::RequestQueueTest() |
| 90 : last_add_result_(AddRequestResult::STORE_FAILURE), | 97 : last_add_result_(AddRequestResult::STORE_FAILURE), |
| 91 last_remove_result_(UpdateRequestResult::STORE_FAILURE), | |
| 92 last_update_result_(UpdateRequestResult::STORE_FAILURE), | 98 last_update_result_(UpdateRequestResult::STORE_FAILURE), |
| 93 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), | 99 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), |
| 94 task_runner_(new base::TestSimpleTaskRunner), | 100 task_runner_(new base::TestSimpleTaskRunner), |
| 95 task_runner_handle_(task_runner_) {} | 101 task_runner_handle_(task_runner_) {} |
| 96 | 102 |
| 97 RequestQueueTest::~RequestQueueTest() {} | 103 RequestQueueTest::~RequestQueueTest() {} |
| 98 | 104 |
| 99 void RequestQueueTest::SetUp() { | 105 void RequestQueueTest::SetUp() { |
| 100 std::unique_ptr<RequestQueueInMemoryStore> store( | 106 std::unique_ptr<RequestQueueInMemoryStore> store( |
| 101 new RequestQueueInMemoryStore()); | 107 new RequestQueueInMemoryStore()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 112 last_added_request_.reset(new SavePageRequest(request)); | 118 last_added_request_.reset(new SavePageRequest(request)); |
| 113 } | 119 } |
| 114 | 120 |
| 115 void RequestQueueTest::GetRequestsDone( | 121 void RequestQueueTest::GetRequestsDone( |
| 116 GetRequestsResult result, | 122 GetRequestsResult result, |
| 117 const std::vector<SavePageRequest>& requests) { | 123 const std::vector<SavePageRequest>& requests) { |
| 118 last_get_requests_result_ = result; | 124 last_get_requests_result_ = result; |
| 119 last_requests_ = requests; | 125 last_requests_ = requests; |
| 120 } | 126 } |
| 121 | 127 |
| 122 void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) { | 128 void RequestQueueTest::RemoveRequestDone( |
| 123 last_remove_result_ = result; | 129 const std::vector<int64_t>& request_ids, |
| 130 const std::vector<UpdateRequestResult>& results) { |
| 131 last_remove_request_ids_ = request_ids; |
| 132 last_remove_results_ = results; |
| 124 } | 133 } |
| 125 | 134 |
| 126 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { | 135 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { |
| 127 last_update_result_ = result; | 136 last_update_result_ = result; |
| 128 } | 137 } |
| 129 | 138 |
| 130 TEST_F(RequestQueueTest, GetRequestsEmpty) { | 139 TEST_F(RequestQueueTest, GetRequestsEmpty) { |
| 131 queue()->GetRequests( | 140 queue()->GetRequests( |
| 132 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 141 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 133 PumpLoop(); | 142 PumpLoop(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 155 | 164 |
| 156 TEST_F(RequestQueueTest, RemoveRequest) { | 165 TEST_F(RequestQueueTest, RemoveRequest) { |
| 157 base::Time creation_time = base::Time::Now(); | 166 base::Time creation_time = base::Time::Now(); |
| 158 SavePageRequest request( | 167 SavePageRequest request( |
| 159 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 168 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 160 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | 169 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 161 base::Unretained(this))); | 170 base::Unretained(this))); |
| 162 PumpLoop(); | 171 PumpLoop(); |
| 163 ASSERT_EQ(kRequestId, last_added_request()->request_id()); | 172 ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| 164 | 173 |
| 165 queue()->RemoveRequest( | 174 std::vector<int64_t> remove_requests; |
| 166 kRequestId, | 175 remove_requests.push_back(kRequestId); |
| 176 queue()->RemoveRequests( |
| 177 remove_requests, |
| 167 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); | 178 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); |
| 168 PumpLoop(); | 179 PumpLoop(); |
| 169 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_result()); | 180 ASSERT_EQ(1ul, last_remove_results().size()); |
| 181 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0)); |
| 170 | 182 |
| 171 queue()->GetRequests( | 183 queue()->GetRequests( |
| 172 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 184 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 173 PumpLoop(); | 185 PumpLoop(); |
| 174 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 186 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 175 ASSERT_EQ(0ul, last_requests().size()); | 187 ASSERT_EQ(0ul, last_requests().size()); |
| 176 } | 188 } |
| 177 | 189 |
| 178 TEST_F(RequestQueueTest, RemoveRequestByClientId) { | 190 TEST_F(RequestQueueTest, RemoveSeveralRequests) { |
| 179 base::Time creation_time = base::Time::Now(); | 191 base::Time creation_time = base::Time::Now(); |
| 180 // Put two requests on the queue with different client IDs. | |
| 181 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time, | 192 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time, |
| 182 kUserRequested); | 193 kUserRequested); |
| 183 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | 194 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 184 base::Unretained(this))); | 195 base::Unretained(this))); |
| 196 PumpLoop(); |
| 197 ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| 198 |
| 185 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, | 199 SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time, |
| 186 kUserRequested); | 200 kUserRequested); |
| 187 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, | 201 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, |
| 188 base::Unretained(this))); | 202 base::Unretained(this))); |
| 189 PumpLoop(); | 203 PumpLoop(); |
| 204 ASSERT_EQ(kRequestId2, last_added_request()->request_id()); |
| 205 |
| 206 std::vector<int64_t> remove_requests; |
| 207 remove_requests.push_back(kRequestId); |
| 208 remove_requests.push_back(kRequestId2); |
| 209 queue()->RemoveRequests( |
| 210 remove_requests, |
| 211 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); |
| 212 PumpLoop(); |
| 213 ASSERT_EQ(2ul, last_remove_results().size()); |
| 214 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0)); |
| 215 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(1)); |
| 216 ASSERT_EQ(kRequestId, last_remove_request_ids().at(0)); |
| 217 ASSERT_EQ(kRequestId2, last_remove_request_ids().at(1)); |
| 190 | 218 |
| 191 queue()->GetRequests( | 219 queue()->GetRequests( |
| 192 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 220 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 193 PumpLoop(); | 221 PumpLoop(); |
| 194 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 222 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 195 ASSERT_EQ(2ul, last_requests().size()); | 223 ASSERT_EQ(0ul, last_requests().size()); |
| 196 | |
| 197 std::vector<ClientId> client_ids; | |
| 198 client_ids.push_back(kClientId); | |
| 199 | |
| 200 // Removing the first client ID should leave only the second on the queue. | |
| 201 queue()->RemoveRequestsByClientId( | |
| 202 client_ids, | |
| 203 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); | |
| 204 PumpLoop(); | |
| 205 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_result()); | |
| 206 | |
| 207 queue()->GetRequests( | |
| 208 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | |
| 209 PumpLoop(); | |
| 210 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | |
| 211 ASSERT_EQ(1ul, last_requests().size()); | |
| 212 ASSERT_EQ(kClientId2, last_requests().front().client_id()); | |
| 213 } | 224 } |
| 214 | 225 |
| 215 // A longer test populating the request queue with more than one item, properly | 226 // A longer test populating the request queue with more than one item, properly |
| 216 // listing multiple items and removing the right item. | 227 // listing multiple items and removing the right item. |
| 217 TEST_F(RequestQueueTest, MultipleRequestsAddGetRemove) { | 228 TEST_F(RequestQueueTest, MultipleRequestsAddGetRemove) { |
| 218 base::Time creation_time = base::Time::Now(); | 229 base::Time creation_time = base::Time::Now(); |
| 219 SavePageRequest request1( | 230 SavePageRequest request1( |
| 220 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 231 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 221 queue()->AddRequest(request1, base::Bind(&RequestQueueTest::AddRequestDone, | 232 queue()->AddRequest(request1, base::Bind(&RequestQueueTest::AddRequestDone, |
| 222 base::Unretained(this))); | 233 base::Unretained(this))); |
| 223 PumpLoop(); | 234 PumpLoop(); |
| 224 ASSERT_EQ(request1.request_id(), last_added_request()->request_id()); | 235 ASSERT_EQ(request1.request_id(), last_added_request()->request_id()); |
| 225 SavePageRequest request2( | 236 SavePageRequest request2( |
| 226 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); | 237 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); |
| 227 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, | 238 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, |
| 228 base::Unretained(this))); | 239 base::Unretained(this))); |
| 229 PumpLoop(); | 240 PumpLoop(); |
| 230 ASSERT_EQ(request2.request_id(), last_added_request()->request_id()); | 241 ASSERT_EQ(request2.request_id(), last_added_request()->request_id()); |
| 231 | 242 |
| 232 queue()->GetRequests( | 243 queue()->GetRequests( |
| 233 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 244 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 234 PumpLoop(); | 245 PumpLoop(); |
| 235 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 246 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 236 ASSERT_EQ(2ul, last_requests().size()); | 247 ASSERT_EQ(2ul, last_requests().size()); |
| 237 | 248 |
| 238 queue()->RemoveRequest( | 249 std::vector<int64_t> remove_requests; |
| 239 request1.request_id(), | 250 remove_requests.push_back(request1.request_id()); |
| 251 queue()->RemoveRequests( |
| 252 remove_requests, |
| 240 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); | 253 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); |
| 241 PumpLoop(); | 254 PumpLoop(); |
| 242 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_result()); | 255 ASSERT_EQ(kRequestId, last_remove_request_ids().at(0)); |
| 256 ASSERT_EQ(1ul, last_remove_results().size()); |
| 257 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0)); |
| 243 | 258 |
| 244 queue()->GetRequests( | 259 queue()->GetRequests( |
| 245 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 260 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 246 PumpLoop(); | 261 PumpLoop(); |
| 247 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 262 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 248 ASSERT_EQ(1ul, last_requests().size()); | 263 ASSERT_EQ(1ul, last_requests().size()); |
| 249 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id()); | 264 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id()); |
| 250 } | 265 } |
| 251 | 266 |
| 252 TEST_F(RequestQueueTest, UpdateRequest) { | 267 TEST_F(RequestQueueTest, UpdateRequest) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 | 303 |
| 289 // Try to update request1 when only request2 is in the queue. | 304 // Try to update request1 when only request2 is in the queue. |
| 290 queue()->UpdateRequest( | 305 queue()->UpdateRequest( |
| 291 request1, | 306 request1, |
| 292 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); | 307 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 293 PumpLoop(); | 308 PumpLoop(); |
| 294 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); | 309 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); |
| 295 } | 310 } |
| 296 | 311 |
| 297 } // namespace offline_pages | 312 } // namespace offline_pages |
| OLD | NEW |