Chromium Code Reviews| Index: components/offline_pages/background/request_queue_unittest.cc |
| diff --git a/components/offline_pages/background/request_queue_unittest.cc b/components/offline_pages/background/request_queue_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..55d3771d53f3f5347c12200c88a0c19880b58f6e |
| --- /dev/null |
| +++ b/components/offline_pages/background/request_queue_unittest.cc |
| @@ -0,0 +1,162 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "components/offline_pages/background/request_queue.h" |
| + |
| +#include <memory> |
| + |
| +#include "base/bind.h" |
| +#include "base/optional.h" |
| +#include "base/test/test_simple_task_runner.h" |
| +#include "base/thread_task_runner_handle.h" |
| +#include "components/offline_pages/background/request_queue_in_memory_store.h" |
| +#include "components/offline_pages/background/save_page_request.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace offline_pages { |
| + |
| +using AddRequestResult = RequestQueue::AddRequestResult; |
| +using GetRequestsResult = RequestQueue::GetRequestsResult; |
| +using UpdateRequestResult = RequestQueue::UpdateRequestResult; |
| + |
| +namespace { |
| +const int64_t kRequestId = 42; |
| +const GURL kUrl("http://example.com"); |
| +const ClientId kClientId("bookmark", "1234"); |
| +} // namespace |
| + |
| +// TODO(fgorski): Add tests for store failures in add/remove/get. |
| +class RequestQueueTest : public testing::Test { |
| + public: |
| + RequestQueueTest(); |
| + ~RequestQueueTest() override; |
| + |
| + // Test overrides. |
| + void SetUp() override; |
| + |
| + void PumpLoop(); |
| + |
| + // Callback for adding requests. |
| + void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| + // Callback for getting requests. |
| + void GetRequestsDone(GetRequestsResult result, |
| + const std::vector<SavePageRequest>& requests); |
| + // Callback for removing request. |
| + void RemoveRequestDone(UpdateRequestResult result); |
| + |
| + RequestQueue* queue() { return queue_.get(); } |
| + |
| + AddRequestResult last_add_result() const { return last_add_result_; } |
| + base::Optional<SavePageRequest>& last_added_request() { |
| + return last_added_request_; |
| + } |
| + |
| + UpdateRequestResult last_remove_result() const { return last_remove_result_; } |
| + |
| + GetRequestsResult last_get_requests_result() const { |
| + return last_get_requests_result_; |
| + } |
| + const std::vector<SavePageRequest>& last_requests() const { |
| + return last_requests_; |
| + } |
| + |
| + private: |
| + AddRequestResult last_add_result_; |
| + base::Optional<SavePageRequest> last_added_request_; |
| + |
| + UpdateRequestResult last_remove_result_; |
| + |
| + GetRequestsResult last_get_requests_result_; |
| + std::vector<SavePageRequest> last_requests_; |
| + |
| + std::unique_ptr<RequestQueue> queue_; |
| + scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| + base::ThreadTaskRunnerHandle task_runner_handle_; |
| +}; |
| + |
| +RequestQueueTest::RequestQueueTest() |
| + : last_add_result_(AddRequestResult::kStoreFailure), |
| + last_remove_result_(UpdateRequestResult::kStoreFailure), |
| + last_get_requests_result_(GetRequestsResult::kStoreFailure), |
| + task_runner_(new base::TestSimpleTaskRunner), |
| + task_runner_handle_(task_runner_) {} |
| + |
| +RequestQueueTest::~RequestQueueTest() {} |
| + |
| +void RequestQueueTest::SetUp() { |
| + std::unique_ptr<RequestQueueInMemoryStore> store( |
| + new RequestQueueInMemoryStore()); |
| + queue_.reset(new RequestQueue(std::move(store))); |
| +} |
| + |
| +void RequestQueueTest::PumpLoop() { |
| + task_runner_->RunUntilIdle(); |
| +} |
| + |
| +void RequestQueueTest::AddRequestDone(AddRequestResult result, |
| + const SavePageRequest& request) { |
| + last_add_result_ = result; |
| + last_added_request_ = request; |
| +} |
| + |
| +void RequestQueueTest::GetRequestsDone( |
| + GetRequestsResult result, |
| + const std::vector<SavePageRequest>& requests) { |
| + last_get_requests_result_ = result; |
| + last_requests_ = requests; |
| +} |
| + |
| +void RequestQueueTest::RemoveRequestDone(UpdateRequestResult result) { |
| + last_remove_result_ = result; |
| +} |
| + |
| +TEST_F(RequestQueueTest, GetRequestsEmpty) { |
| + queue()->GetRequests( |
| + base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); |
| + ASSERT_EQ(0ul, last_requests().size()); |
| +} |
| + |
| +TEST_F(RequestQueueTest, AddRequest) { |
| + base::Time creation_time = base::Time::Now(); |
| + SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); |
| + queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| + base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(AddRequestResult::kSuccess, last_add_result()); |
| + ASSERT_TRUE(last_added_request()); |
| + ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| + |
| + queue()->GetRequests( |
| + base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); |
| + ASSERT_EQ(1ul, last_requests().size()); |
| +} |
| + |
|
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.
|
| +TEST_F(RequestQueueTest, RemoveRequest) { |
| + base::Time creation_time = base::Time::Now(); |
| + SavePageRequest request(kRequestId, kUrl, kClientId, creation_time); |
| + queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| + base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(AddRequestResult::kSuccess, last_add_result()); |
| + ASSERT_TRUE(last_added_request()); |
| + ASSERT_EQ(kRequestId, last_added_request()->request_id()); |
| + |
| + queue()->RemoveRequest( |
| + kRequestId, |
| + base::Bind(&RequestQueueTest::RemoveRequestDone, base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(UpdateRequestResult::kSuccess, last_remove_result()); |
| + |
| + queue()->GetRequests( |
| + base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| + PumpLoop(); |
| + ASSERT_EQ(GetRequestsResult::kSuccess, last_get_requests_result()); |
| + ASSERT_EQ(0ul, last_requests().size()); |
| +} |
| + |
|
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.
|
| +} // namespace offline_pages |