| Index: net/dns/serial_worker_unittest.cc
|
| diff --git a/net/dns/serial_worker_unittest.cc b/net/dns/serial_worker_unittest.cc
|
| deleted file mode 100644
|
| index 18b546450d12940bac41410535223c37419530e5..0000000000000000000000000000000000000000
|
| --- a/net/dns/serial_worker_unittest.cc
|
| +++ /dev/null
|
| @@ -1,163 +0,0 @@
|
| -// Copyright (c) 2011 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 "net/dns/serial_worker.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/synchronization/lock.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -class SerialWorkerTest : public testing::Test {
|
| - public:
|
| - // The class under test
|
| - class TestSerialWorker : public SerialWorker {
|
| - public:
|
| - explicit TestSerialWorker(SerialWorkerTest* t)
|
| - : test_(t) {}
|
| - void DoWork() override {
|
| - ASSERT_TRUE(test_);
|
| - test_->OnWork();
|
| - }
|
| - void OnWorkFinished() override {
|
| - ASSERT_TRUE(test_);
|
| - test_->OnWorkFinished();
|
| - }
|
| - private:
|
| - ~TestSerialWorker() override {}
|
| - SerialWorkerTest* test_;
|
| - };
|
| -
|
| - // Mocks
|
| -
|
| - void OnWork() {
|
| - { // Check that OnWork is executed serially.
|
| - base::AutoLock lock(work_lock_);
|
| - EXPECT_FALSE(work_running_) << "DoRead is not called serially!";
|
| - work_running_ = true;
|
| - }
|
| - BreakNow("OnWork");
|
| - work_allowed_.Wait();
|
| - // Calling from WorkerPool, but protected by work_allowed_/work_called_.
|
| - output_value_ = input_value_;
|
| -
|
| - { // This lock might be destroyed after work_called_ is signalled.
|
| - base::AutoLock lock(work_lock_);
|
| - work_running_ = false;
|
| - }
|
| - work_called_.Signal();
|
| - }
|
| -
|
| - void OnWorkFinished() {
|
| - EXPECT_TRUE(message_loop_ == base::MessageLoop::current());
|
| - EXPECT_EQ(output_value_, input_value_);
|
| - BreakNow("OnWorkFinished");
|
| - }
|
| -
|
| - protected:
|
| - void BreakCallback(std::string breakpoint) {
|
| - breakpoint_ = breakpoint;
|
| - base::MessageLoop::current()->QuitNow();
|
| - }
|
| -
|
| - void BreakNow(std::string b) {
|
| - message_loop_->PostTask(FROM_HERE,
|
| - base::Bind(&SerialWorkerTest::BreakCallback,
|
| - base::Unretained(this), b));
|
| - }
|
| -
|
| - void RunUntilBreak(std::string b) {
|
| - message_loop_->Run();
|
| - ASSERT_EQ(breakpoint_, b);
|
| - }
|
| -
|
| - SerialWorkerTest()
|
| - : input_value_(0),
|
| - output_value_(-1),
|
| - work_allowed_(false, false),
|
| - work_called_(false, false),
|
| - work_running_(false) {
|
| - }
|
| -
|
| - // Helpers for tests.
|
| -
|
| - // Lets OnWork run and waits for it to complete. Can only return if OnWork is
|
| - // executed on a concurrent thread.
|
| - void WaitForWork() {
|
| - RunUntilBreak("OnWork");
|
| - work_allowed_.Signal();
|
| - work_called_.Wait();
|
| - }
|
| -
|
| - // test::Test methods
|
| - void SetUp() override {
|
| - message_loop_ = base::MessageLoop::current();
|
| - worker_ = new TestSerialWorker(this);
|
| - }
|
| -
|
| - void TearDown() override {
|
| - // Cancel the worker to catch if it makes a late DoWork call.
|
| - worker_->Cancel();
|
| - // Check if OnWork is stalled.
|
| - EXPECT_FALSE(work_running_) << "OnWork should be done by TearDown";
|
| - // Release it for cleanliness.
|
| - if (work_running_) {
|
| - WaitForWork();
|
| - }
|
| - }
|
| -
|
| - // Input value read on WorkerPool.
|
| - int input_value_;
|
| - // Output value written on WorkerPool.
|
| - int output_value_;
|
| -
|
| - // read is called on WorkerPool so we need to synchronize with it.
|
| - base::WaitableEvent work_allowed_;
|
| - base::WaitableEvent work_called_;
|
| -
|
| - // Protected by read_lock_. Used to verify that read calls are serialized.
|
| - bool work_running_;
|
| - base::Lock work_lock_;
|
| -
|
| - // Loop for this thread.
|
| - base::MessageLoop* message_loop_;
|
| -
|
| - // WatcherDelegate under test.
|
| - scoped_refptr<TestSerialWorker> worker_;
|
| -
|
| - std::string breakpoint_;
|
| -};
|
| -
|
| -TEST_F(SerialWorkerTest, ExecuteAndSerializeReads) {
|
| - for (int i = 0; i < 3; ++i) {
|
| - ++input_value_;
|
| - worker_->WorkNow();
|
| - WaitForWork();
|
| - RunUntilBreak("OnWorkFinished");
|
| -
|
| - EXPECT_TRUE(message_loop_->IsIdleForTesting());
|
| - }
|
| -
|
| - // Schedule two calls. OnWork checks if it is called serially.
|
| - ++input_value_;
|
| - worker_->WorkNow();
|
| - // read is blocked, so this will have to induce re-work
|
| - worker_->WorkNow();
|
| - WaitForWork();
|
| - WaitForWork();
|
| - RunUntilBreak("OnWorkFinished");
|
| -
|
| - // No more tasks should remain.
|
| - EXPECT_TRUE(message_loop_->IsIdleForTesting());
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace net
|
| -
|
|
|