| Index: components/offline_pages/background/request_picker_unittest.cc
|
| diff --git a/components/offline_pages/background/request_picker_unittest.cc b/components/offline_pages/background/request_picker_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..10824507d75f9b85557575e5fe49aca5c5836140
|
| --- /dev/null
|
| +++ b/components/offline_pages/background/request_picker_unittest.cc
|
| @@ -0,0 +1,130 @@
|
| +// 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_picker.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/test/test_simple_task_runner.h"
|
| +#include "base/threading/thread_task_runner_handle.h"
|
| +#include "base/time/time.h"
|
| +#include "components/offline_pages/background/request_queue.h"
|
| +#include "components/offline_pages/background/request_queue_in_memory_store.h"
|
| +#include "components/offline_pages/background/save_page_request.h"
|
| +#include "components/offline_pages/offline_page_item.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace offline_pages {
|
| +
|
| +namespace {
|
| +// Data for request 1.
|
| +const int64_t kRequestId1 = 17;
|
| +const GURL kUrl1("https://google.com");
|
| +const ClientId kClientId1("bookmark", "1234");
|
| +// Data for request 2.
|
| +const int64_t kRequestId2 = 42;
|
| +const GURL kUrl2("http://nytimes.com");
|
| +const ClientId kClientId2("bookmark", "5678");
|
| +} // namespace
|
| +
|
| +class RequestPickerTest : public testing::Test {
|
| + public:
|
| + RequestPickerTest();
|
| +
|
| + ~RequestPickerTest() override;
|
| +
|
| + void SetUp() override;
|
| +
|
| + void PumpLoop();
|
| +
|
| + void AddRequestDone(RequestQueue::AddRequestResult result,
|
| + const SavePageRequest& request);
|
| +
|
| + void RequestPicked(const SavePageRequest& request);
|
| +
|
| + void RequestQueueEmpty();
|
| +
|
| + protected:
|
| + // The request queue is simple enough we will use a real queue with a memory
|
| + // store instead of a stub.
|
| + std::unique_ptr<RequestQueue> queue_;
|
| + std::unique_ptr<RequestPicker> picker_;
|
| + std::unique_ptr<SavePageRequest> last_picked_;
|
| + bool request_queue_empty_called_;
|
| +
|
| + private:
|
| + scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
|
| + base::ThreadTaskRunnerHandle task_runner_handle_;
|
| +};
|
| +
|
| +RequestPickerTest::RequestPickerTest()
|
| + : task_runner_(new base::TestSimpleTaskRunner),
|
| + task_runner_handle_(task_runner_) {}
|
| +
|
| +RequestPickerTest::~RequestPickerTest() {}
|
| +
|
| +void RequestPickerTest::SetUp() {
|
| + std::unique_ptr<RequestQueueInMemoryStore> store(
|
| + new RequestQueueInMemoryStore());
|
| + queue_.reset(new RequestQueue(std::move(store)));
|
| + picker_.reset(new RequestPicker(queue_.get()));
|
| + request_queue_empty_called_ = false;
|
| +}
|
| +
|
| +void RequestPickerTest::PumpLoop() {
|
| + task_runner_->RunUntilIdle();
|
| +}
|
| +
|
| +void RequestPickerTest::AddRequestDone(RequestQueue::AddRequestResult result,
|
| + const SavePageRequest& request) {}
|
| +
|
| +void RequestPickerTest::RequestPicked(const SavePageRequest& request) {
|
| + last_picked_.reset(new SavePageRequest(request));
|
| +}
|
| +
|
| +void RequestPickerTest::RequestQueueEmpty() {
|
| + request_queue_empty_called_ = true;
|
| +}
|
| +
|
| +TEST_F(RequestPickerTest, ChooseNextRequest) {
|
| + base::Time creation_time = base::Time::Now();
|
| + SavePageRequest request1(kRequestId1, kUrl1, kClientId1, creation_time);
|
| + SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time);
|
| + // Put some test requests on the Queue.
|
| + queue_->AddRequest(request1, base::Bind(&RequestPickerTest::AddRequestDone,
|
| + base::Unretained(this)));
|
| + queue_->AddRequest(request2, base::Bind(&RequestPickerTest::AddRequestDone,
|
| + base::Unretained(this)));
|
| +
|
| + // Pump the loop to give the async queue the opportunity to do the adds.
|
| + PumpLoop();
|
| +
|
| + picker_->ChooseNextRequest(
|
| + base::Bind(&RequestPickerTest::RequestPicked, base::Unretained(this)),
|
| + base::Bind(&RequestPickerTest::RequestQueueEmpty,
|
| + base::Unretained(this)));
|
| +
|
| + // Pump the loop again to give the async queue the opportunity to return
|
| + // results from the Get operation, and for the picker to call the "picked"
|
| + // callback.
|
| + PumpLoop();
|
| +
|
| + EXPECT_EQ(kRequestId1, last_picked_->request_id());
|
| + EXPECT_FALSE(request_queue_empty_called_);
|
| +}
|
| +
|
| +TEST_F(RequestPickerTest, PickFromEmptyQueue) {
|
| + picker_->ChooseNextRequest(
|
| + base::Bind(&RequestPickerTest::RequestPicked, base::Unretained(this)),
|
| + base::Bind(&RequestPickerTest::RequestQueueEmpty,
|
| + base::Unretained(this)));
|
| +
|
| + // Pump the loop again to give the async queue the opportunity to return
|
| + // results from the Get operation, and for the picker to call the "QueueEmpty"
|
| + // callback.
|
| + PumpLoop();
|
| +
|
| + EXPECT_TRUE(request_queue_empty_called_);
|
| +}
|
| +
|
| +} // namespace offline_pages
|
|
|