| 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" |
| 11 #include "base/threading/thread_task_runner_handle.h" | 11 #include "base/threading/thread_task_runner_handle.h" |
| 12 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 12 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 13 #include "components/offline_pages/background/save_page_request.h" | 13 #include "components/offline_pages/background/save_page_request.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 namespace offline_pages { | 16 namespace offline_pages { |
| 17 | 17 |
| 18 using AddRequestResult = RequestQueue::AddRequestResult; | 18 using AddRequestResult = RequestQueue::AddRequestResult; |
| 19 using GetRequestsResult = RequestQueue::GetRequestsResult; | 19 using GetRequestsResult = RequestQueue::GetRequestsResult; |
| 20 using UpdateRequestResult = RequestQueue::UpdateRequestResult; | 20 using UpdateRequestResult = RequestQueue::UpdateRequestResult; |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 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 // Data for request 2. | 28 // Data for request 2. |
| 28 const int64_t kRequestId2 = 77; | 29 const int64_t kRequestId2 = 77; |
| 29 const GURL kUrl2("http://test.com"); | 30 const GURL kUrl2("http://test.com"); |
| 30 const ClientId kClientId2("bookmark", "567"); | 31 const ClientId kClientId2("bookmark", "567"); |
| 31 const bool kUserRequested = true; | 32 const bool kUserRequested = true; |
| 32 } // namespace | 33 } // namespace |
| 33 | 34 |
| 34 // TODO(fgorski): Add tests for store failures in add/remove/get. | 35 // TODO(fgorski): Add tests for store failures in add/remove/get. |
| 35 class RequestQueueTest : public testing::Test { | 36 class RequestQueueTest : public testing::Test { |
| 36 public: | 37 public: |
| 37 RequestQueueTest(); | 38 RequestQueueTest(); |
| 38 ~RequestQueueTest() override; | 39 ~RequestQueueTest() override; |
| 39 | 40 |
| 40 // Test overrides. | 41 // Test overrides. |
| 41 void SetUp() override; | 42 void SetUp() override; |
| 42 | 43 |
| 43 void PumpLoop(); | 44 void PumpLoop(); |
| 44 | 45 |
| 45 // Callback for adding requests. | 46 // Callback for adding requests. |
| 46 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); | 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| 47 // Callback for getting requests. | 48 // Callback for getting requests. |
| 48 void GetRequestsDone(GetRequestsResult result, | 49 void GetRequestsDone(GetRequestsResult result, |
| 49 const std::vector<SavePageRequest>& requests); | 50 const std::vector<SavePageRequest>& requests); |
| 50 // Callback for removing request. | 51 // Callback for removing request. |
| 51 void RemoveRequestDone(UpdateRequestResult result); | 52 void RemoveRequestDone(UpdateRequestResult result); |
| 52 | 53 |
| 54 void UpdateRequestDone(UpdateRequestResult result); |
| 55 |
| 53 RequestQueue* queue() { return queue_.get(); } | 56 RequestQueue* queue() { return queue_.get(); } |
| 54 | 57 |
| 55 AddRequestResult last_add_result() const { return last_add_result_; } | 58 AddRequestResult last_add_result() const { return last_add_result_; } |
| 56 SavePageRequest* last_added_request() { | 59 SavePageRequest* last_added_request() { |
| 57 return last_added_request_.get(); | 60 return last_added_request_.get(); |
| 58 } | 61 } |
| 59 | 62 |
| 60 UpdateRequestResult last_remove_result() const { return last_remove_result_; } | 63 UpdateRequestResult last_remove_result() const { return last_remove_result_; } |
| 61 | 64 |
| 65 UpdateRequestResult last_update_result() const { return last_update_result_; } |
| 66 |
| 62 GetRequestsResult last_get_requests_result() const { | 67 GetRequestsResult last_get_requests_result() const { |
| 63 return last_get_requests_result_; | 68 return last_get_requests_result_; |
| 64 } | 69 } |
| 65 const std::vector<SavePageRequest>& last_requests() const { | 70 const std::vector<SavePageRequest>& last_requests() const { |
| 66 return last_requests_; | 71 return last_requests_; |
| 67 } | 72 } |
| 68 | 73 |
| 69 private: | 74 private: |
| 70 AddRequestResult last_add_result_; | 75 AddRequestResult last_add_result_; |
| 71 std::unique_ptr<SavePageRequest> last_added_request_; | 76 std::unique_ptr<SavePageRequest> last_added_request_; |
| 72 | 77 |
| 73 UpdateRequestResult last_remove_result_; | 78 UpdateRequestResult last_remove_result_; |
| 79 UpdateRequestResult last_update_result_; |
| 74 | 80 |
| 75 GetRequestsResult last_get_requests_result_; | 81 GetRequestsResult last_get_requests_result_; |
| 76 std::vector<SavePageRequest> last_requests_; | 82 std::vector<SavePageRequest> last_requests_; |
| 77 | 83 |
| 78 std::unique_ptr<RequestQueue> queue_; | 84 std::unique_ptr<RequestQueue> queue_; |
| 79 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 85 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 80 base::ThreadTaskRunnerHandle task_runner_handle_; | 86 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 81 }; | 87 }; |
| 82 | 88 |
| 83 RequestQueueTest::RequestQueueTest() | 89 RequestQueueTest::RequestQueueTest() |
| 84 : last_add_result_(AddRequestResult::STORE_FAILURE), | 90 : last_add_result_(AddRequestResult::STORE_FAILURE), |
| 85 last_remove_result_(UpdateRequestResult::STORE_FAILURE), | 91 last_remove_result_(UpdateRequestResult::STORE_FAILURE), |
| 92 last_update_result_(UpdateRequestResult::STORE_FAILURE), |
| 86 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), | 93 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), |
| 87 task_runner_(new base::TestSimpleTaskRunner), | 94 task_runner_(new base::TestSimpleTaskRunner), |
| 88 task_runner_handle_(task_runner_) {} | 95 task_runner_handle_(task_runner_) {} |
| 89 | 96 |
| 90 RequestQueueTest::~RequestQueueTest() {} | 97 RequestQueueTest::~RequestQueueTest() {} |
| 91 | 98 |
| 92 void RequestQueueTest::SetUp() { | 99 void RequestQueueTest::SetUp() { |
| 93 std::unique_ptr<RequestQueueInMemoryStore> store( | 100 std::unique_ptr<RequestQueueInMemoryStore> store( |
| 94 new RequestQueueInMemoryStore()); | 101 new RequestQueueInMemoryStore()); |
| 95 queue_.reset(new RequestQueue(std::move(store))); | 102 queue_.reset(new RequestQueue(std::move(store))); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 109 GetRequestsResult result, | 116 GetRequestsResult result, |
| 110 const std::vector<SavePageRequest>& requests) { | 117 const std::vector<SavePageRequest>& requests) { |
| 111 last_get_requests_result_ = result; | 118 last_get_requests_result_ = result; |
| 112 last_requests_ = requests; | 119 last_requests_ = requests; |
| 113 } | 120 } |
| 114 | 121 |
| 115 void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) { | 122 void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) { |
| 116 last_remove_result_ = result; | 123 last_remove_result_ = result; |
| 117 } | 124 } |
| 118 | 125 |
| 126 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { |
| 127 last_update_result_ = result; |
| 128 } |
| 129 |
| 119 TEST_F(RequestQueueTest, GetRequestsEmpty) { | 130 TEST_F(RequestQueueTest, GetRequestsEmpty) { |
| 120 queue()->GetRequests( | 131 queue()->GetRequests( |
| 121 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 132 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 122 PumpLoop(); | 133 PumpLoop(); |
| 123 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 134 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 124 ASSERT_EQ(0ul, last_requests().size()); | 135 ASSERT_EQ(0ul, last_requests().size()); |
| 125 } | 136 } |
| 126 | 137 |
| 127 TEST_F(RequestQueueTest, AddRequest) { | 138 TEST_F(RequestQueueTest, AddRequest) { |
| 128 base::Time creation_time = base::Time::Now(); | 139 base::Time creation_time = base::Time::Now(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_result()); | 205 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_result()); |
| 195 | 206 |
| 196 queue()->GetRequests( | 207 queue()->GetRequests( |
| 197 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 208 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 198 PumpLoop(); | 209 PumpLoop(); |
| 199 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 210 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 200 ASSERT_EQ(1ul, last_requests().size()); | 211 ASSERT_EQ(1ul, last_requests().size()); |
| 201 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id()); | 212 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id()); |
| 202 } | 213 } |
| 203 | 214 |
| 215 TEST_F(RequestQueueTest, UpdateRequest) { |
| 216 // First add a request. Retry count will be set to 0. |
| 217 base::Time creation_time = base::Time::Now(); |
| 218 SavePageRequest request( |
| 219 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 220 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 221 base::Unretained(this))); |
| 222 PumpLoop(); |
| 223 |
| 224 // Update the request, ensure it succeeded. |
| 225 request.set_attempt_count(kRetryCount); |
| 226 queue()->UpdateRequest( |
| 227 request, |
| 228 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 229 PumpLoop(); |
| 230 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_update_result()); |
| 231 |
| 232 // Get the request, and verify the update took effect. |
| 233 queue()->GetRequests( |
| 234 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 235 PumpLoop(); |
| 236 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 237 ASSERT_EQ(1ul, last_requests().size()); |
| 238 ASSERT_EQ(kRetryCount, last_requests().front().attempt_count()); |
| 239 } |
| 240 |
| 241 TEST_F(RequestQueueTest, UpdateRequestNotPresent) { |
| 242 // First add a request. Retry count will be set to 0. |
| 243 base::Time creation_time = base::Time::Now(); |
| 244 SavePageRequest request1( |
| 245 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 246 SavePageRequest request2( |
| 247 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); |
| 248 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, |
| 249 base::Unretained(this))); |
| 250 PumpLoop(); |
| 251 |
| 252 // Try to update request1 when only request2 is in the queue. |
| 253 queue()->UpdateRequest( |
| 254 request1, |
| 255 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 256 PumpLoop(); |
| 257 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); |
| 258 } |
| 259 |
| 204 } // namespace offline_pages | 260 } // namespace offline_pages |
| OLD | NEW |