Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "components/offline_pages/background/request_queue.h" | |
| 6 | |
| 7 #include <memory> | |
| 8 | |
| 9 #include "base/bind.h" | |
| 10 #include "base/optional.h" | |
| 11 #include "base/test/test_simple_task_runner.h" | |
| 12 #include "base/thread_task_runner_handle.h" | |
| 13 #include "components/offline_pages/background/request_queue_in_memory_store.h" | |
| 14 #include "components/offline_pages/background/save_page_request.h" | |
| 15 #include "testing/gtest/include/gtest/gtest.h" | |
| 16 | |
| 17 namespace offline_pages { | |
| 18 | |
| 19 using AddRequestResult = RequestQueue::AddRequestResult; | |
| 20 using GetRequestsResult = RequestQueue::GetRequestsResult; | |
| 21 using UpdateRequestResult = RequestQueue::UpdateRequestResult; | |
| 22 | |
| 23 namespace { | |
| 24 const int64_t kRequestId = 42; | |
| 25 const GURL kUrl("http://example.com"); | |
| 26 const ClientId kClientId("bookmark", "1234"); | |
| 27 } // namespace | |
| 28 | |
| 29 // TODO(fgorski): Add tests for store failures in add/remove/get. | |
| 30 class RequestQueueTest : public testing::Test { | |
| 31 public: | |
| 32 RequestQueueTest(); | |
| 33 ~RequestQueueTest() override; | |
| 34 | |
| 35 // Test overrides. | |
| 36 void SetUp() override; | |
| 37 | |
| 38 void PumpLoop(); | |
| 39 | |
| 40 // Callback for adding requests. | |
| 41 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); | |
| 42 // Callback for getting requests. | |
| 43 void GetRequestsDone(GetRequestsResult result, | |
| 44 const std::vector<SavePageRequest>& requests); | |
| 45 // Callback for removing request. | |
| 46 void RemoveRequestDone(UpdateRequestResult result); | |
| 47 | |
| 48 RequestQueue* queue() { return queue_.get(); } | |
| 49 | |
| 50 AddRequestResult last_add_result() const { return last_add_result_; } | |
| 51 base::Optional<SavePageRequest>& last_added_request() { | |
| 52 return last_added_request_; | |
| 53 } | |
| 54 | |
| 55 UpdateRequestResult last_remove_result() const { return last_remove_result_; } | |
| 56 | |
| 57 GetRequestsResult last_get_requests_result() const { | |
| 58 return last_get_requests_result_; | |
| 59 } | |
| 60 const std::vector<SavePageRequest>& last_requests() const { | |
| 61 return last_requests_; | |
| 62 } | |
| 63 | |
| 64 private: | |
| 65 AddRequestResult last_add_result_; | |
| 66 base::Optional<SavePageRequest> last_added_request_; | |
| 67 | |
| 68 UpdateRequestResult last_remove_result_; | |
| 69 | |
| 70 GetRequestsResult last_get_requests_result_; | |
| 71 std::vector<SavePageRequest> last_requests_; | |
| 72 | |
| 73 std::unique_ptr<RequestQueue> queue_; | |
| 74 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | |
| 75 base::ThreadTaskRunnerHandle task_runner_handle_; | |
| 76 }; | |
| 77 | |
| 78 RequestQueueTest::RequestQueueTest() | |
| 79 : last_add_result_(AddRequestResult::kStoreFailure), | |
| 80 last_remove_result_(UpdateRequestResult::kStoreFailure), | |
| 81 last_get_requests_result_(GetRequestsResult::kStoreFailure), | |
| 82 task_runner_(new base::TestSimpleTaskRunner), | |
| 83 task_runner_handle_(task_runner_) {} | |
| 84 | |
| 85 RequestQueueTest::~RequestQueueTest() {} | |
| 86 | |
| 87 void RequestQueueTest::SetUp() { | |
| 88 std::unique_ptr<RequestQueueInMemoryStore> store( | |
| 89 new RequestQueueInMemoryStore()); | |
| 90 queue_.reset(new RequestQueue(std::move(store))); | |
| 91 } | |
| 92 | |
| 93 void RequestQueueTest::PumpLoop() { | |
| 94 task_runner_->RunUntilIdle(); | |
| 95 } | |
| 96 | |
| 97 void RequestQueueTest::AddRequestDone(AddRequestResult result, | |
| 98 const SavePageRequest& request) { | |
| 99 last_add_result_ = result; | |
| 100 last_added_request_ = request; | |
| 101 } | |
| 102 | |
| 103 void RequestQueueTest::GetRequestsDone( | |
| 104 GetRequestsResult result, | |
| 105 const std::vector<SavePageRequest>& requests) { | |
| 106 last_get_requests_result_ = result; | |
| 107 last_requests_ = requests; | |
| 108 } | |
| 109 | |
| 110 void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) { | |
| 111 last_remove_result_ = result; | |
| 112 } | |
| 113 | |
| 114 TEST_F(RequestQueueTest, GetRequestsEmpty) { | |
| 115 queue()->GetRequests( | |
| 116 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | |
| 117 PumpLoop(); | |
| 118 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); | |
| 119 ASSERT_EQ(0ul, last_requests().size()); | |
| 120 } | |
| 121 | |
| 122 TEST_F(RequestQueueTest, AddRequest) { | |
| 123 base::Time creation_time = base::Time::Now(); | |
| 124 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); | |
| 125 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | |
| 126 base::Unretained(this))); | |
| 127 PumpLoop(); | |
| 128 ASSERT_EQ(AddRequestResult::kSuccess, last_add_result()); | |
| 129 ASSERT_TRUE(last_added_request()); | |
| 130 ASSERT_EQ(kRequestId, last_added_request()->request_id()); | |
| 131 | |
| 132 queue()->GetRequests( | |
| 133 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | |
| 134 PumpLoop(); | |
| 135 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); | |
| 136 ASSERT_EQ(1ul, last_requests().size()); | |
| 137 } | |
| 138 | |
|
Pete Williamson
2016/05/04 23:10:50
Can we add a test case with several results in the
fgorski
2016/05/05 16:51:52
Done.
| |
| 139 TEST_F(RequestQueueTest, RemoveRequest) { | |
| 140 base::Time creation_time = base::Time::Now(); | |
| 141 SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); | |
| 142 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | |
| 143 base::Unretained(this))); | |
| 144 PumpLoop(); | |
| 145 ASSERT_EQ(AddRequestResult::kSuccess, last_add_result()); | |
| 146 ASSERT_TRUE(last_added_request()); | |
| 147 ASSERT_EQ(kRequestId, last_added_request()->request_id()); | |
| 148 | |
| 149 queue()->RemoveRequest( | |
| 150 kRequestId, | |
| 151 base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); | |
| 152 PumpLoop(); | |
| 153 ASSERT_EQ(UpdateRequestResult::kSuccess, last_remove_result()); | |
| 154 | |
| 155 queue()->GetRequests( | |
| 156 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | |
| 157 PumpLoop(); | |
| 158 ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); | |
| 159 ASSERT_EQ(0ul, last_requests().size()); | |
| 160 } | |
| 161 | |
|
Pete Williamson
2016/05/04 23:10:50
It would be nice to have a test with three element
fgorski
2016/05/05 16:51:52
Done. I went with one test with 2 elements.
| |
| 162 } // namespace offline_pages | |
| OLD | NEW |