Chromium Code Reviews| Index: Source/modules/fetch/DataConsumerHandleUtilTest.h |
| diff --git a/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp b/Source/modules/fetch/DataConsumerHandleUtilTest.h |
| similarity index 28% |
| copy from Source/modules/fetch/CompositeDataConsumerHandleTest.cpp |
| copy to Source/modules/fetch/DataConsumerHandleUtilTest.h |
| index 1b704070d2924550a7719bda7c3259fe90cf7d6e..2ef33e515df956ef27a8a46df14b56c1d49bd261 100644 |
| --- a/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp |
| +++ b/Source/modules/fetch/DataConsumerHandleUtilTest.h |
| @@ -2,13 +2,13 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
|
yhirano
2015/06/17 04:13:34
[optional] How about naming this class as *TestUti
hiroshige
2015/06/17 08:30:23
Done.
|
| -#include "config.h" |
| -#include "modules/fetch/CompositeDataConsumerHandle.h" |
| - |
| +#include "modules/fetch/DataConsumerHandleUtil.h" |
| +#include "modules/fetch/FetchDataConsumerHandle.h" |
| #include "platform/Task.h" |
| #include "platform/ThreadSafeFunctional.h" |
| #include "platform/heap/Handle.h" |
| #include "public/platform/Platform.h" |
| +#include "public/platform/WebDataConsumerHandle.h" |
| #include "public/platform/WebThread.h" |
| #include "public/platform/WebTraceLocation.h" |
| #include "public/platform/WebWaitableEvent.h" |
| @@ -19,8 +19,6 @@ |
| namespace blink { |
| -namespace { |
| - |
| using Result = WebDataConsumerHandle::Result; |
|
yhirano
2015/06/17 04:13:34
I don't like placing many (blink:: global) using d
hiroshige
2015/06/17 08:30:23
Done.
|
| using Flags = WebDataConsumerHandle::Flags; |
| using ::testing::InSequence; |
| @@ -133,176 +131,19 @@ public: |
| protected: |
| RefPtr<Context> m_context; |
| - OwnPtr<CompositeDataConsumerHandle> m_handle; |
| OwnPtr<WebDataConsumerHandle::Reader> m_reader; |
| OwnPtr<WebWaitableEvent> m_waitableEvent; |
| NoopClient m_client; |
| }; |
| -class ThreadingRegistrationTest : public ThreadingTestBase { |
| -public: |
| - using Self = ThreadingRegistrationTest; |
| - void run() |
| - { |
| - m_context = Context::create(); |
| - m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumerHandle("handle1", m_context))); |
| - |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| - |
| - m_waitableEvent->wait(); |
| - } |
| - |
| -private: |
| - void obtainReader() |
| - { |
| - m_reader = m_handle->obtainReader(&m_client); |
| - updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::update, this))); |
| - } |
| - void update() |
| - { |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| - } |
| -}; |
| - |
| -class ThreadingRegistrationDeleteHandleTest : public ThreadingTestBase { |
| -public: |
| - using Self = ThreadingRegistrationDeleteHandleTest; |
| - void run() |
| - { |
| - m_context = Context::create(); |
| - m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumerHandle("handle1", m_context))); |
| - |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| - |
| - m_waitableEvent->wait(); |
| - } |
| - |
| -private: |
| - void obtainReader() |
| - { |
| - m_reader = m_handle->obtainReader(&m_client); |
| - updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::update, this))); |
| - } |
| - void update() |
| - { |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))); |
| - m_handle = nullptr; |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| - } |
| -}; |
| - |
| -class ThreadingRegistrationDeleteReaderTest : public ThreadingTestBase { |
| -public: |
| - using Self = ThreadingRegistrationDeleteReaderTest; |
| - void run() |
| - { |
| - m_context = Context::create(); |
| - m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumerHandle("handle1", m_context))); |
| - |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| - |
| - m_waitableEvent->wait(); |
| - } |
| - |
| -private: |
| - void obtainReader() |
| - { |
| - m_reader = m_handle->obtainReader(&m_client); |
| - updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::update, this))); |
| - } |
| - void update() |
| - { |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| - } |
| -}; |
| - |
| -class ThreadingUpdatingReaderWhileUpdatingTest : public ThreadingTestBase { |
| +class ThreadingHandleNotificationTest : public ThreadingTestBase, public WebDataConsumerHandle::Client { |
| public: |
| - using Self = ThreadingUpdatingReaderWhileUpdatingTest; |
| - void run() |
| + using Self = ThreadingHandleNotificationTest; |
| + void run(PassOwnPtr<WebDataConsumerHandle> handle) |
| { |
| m_context = Context::create(); |
| m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_updateEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumerHandle("handle1", m_context))); |
| - |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| - |
| - m_waitableEvent->wait(); |
| - } |
| - |
| -private: |
| - void obtainReader() |
| - { |
| - m_reader = m_handle->obtainReader(&m_client); |
| - updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::update, this))); |
| - m_updateEvent->wait(); |
| - } |
| - |
| - void update() |
| - { |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::reobtainReader, this))); |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| - m_updateEvent->signal(); |
| - } |
| - |
| - void reobtainReader() |
| - { |
| - m_reader = nullptr; |
| - m_reader = m_handle->obtainReader(&m_client); |
| - } |
| - |
| - OwnPtr<WebWaitableEvent> m_updateEvent; |
| -}; |
| - |
| -class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public ThreadingTestBase { |
| -public: |
| - using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; |
| - void run() |
| - { |
| - m_context = Context::create(); |
| - m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumerHandle("handle1", m_context))); |
| - |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| - |
| - m_waitableEvent->wait(); |
| - } |
| - |
| -private: |
| - void obtainReader() |
| - { |
| - m_reader = m_handle->obtainReader(&m_client); |
| - updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::update, this))); |
| - } |
| - void update() |
| - { |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))); |
| - m_handle->update(adoptPtr(new DataConsumerHandle("handle3", m_context))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| - readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| - } |
| -}; |
| - |
| -class ThreadingDoneHandleNotificationTest : public ThreadingTestBase, public WebDataConsumerHandle::Client { |
| -public: |
| - using Self = ThreadingDoneHandleNotificationTest; |
| - void run() |
| - { |
| - m_context = Context::create(); |
| - m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(CompositeDataConsumerHandle::createDoneHandle()); |
| + m_handle = handle; |
| readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| @@ -319,16 +160,18 @@ private: |
| readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::resetReader, this))); |
| readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::signalDone, this))); |
| } |
| + |
| + OwnPtr<WebDataConsumerHandle> m_handle; |
| }; |
| -class ThreadingDoneHandleNoNotificationTest : public ThreadingTestBase, public WebDataConsumerHandle::Client { |
| +class ThreadingHandleNoNotificationTest : public ThreadingTestBase, public WebDataConsumerHandle::Client { |
| public: |
| - using Self = ThreadingDoneHandleNoNotificationTest; |
| - void run() |
| + using Self = ThreadingHandleNoNotificationTest; |
| + void run(PassOwnPtr<WebDataConsumerHandle> handle) |
| { |
| m_context = Context::create(); |
| m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| - m_handle = CompositeDataConsumerHandle::create(CompositeDataConsumerHandle::createDoneHandle()); |
| + m_handle = handle; |
| readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obtainReader, this))); |
| @@ -346,253 +189,8 @@ private: |
| { |
| ASSERT_NOT_REACHED(); |
| } |
| -}; |
| - |
| -TEST(CompositeDataConsumerHandleTest, CreateWaitingHandle) |
| -{ |
| - char buffer[20]; |
| - const void* p = nullptr; |
| - size_t size = 0; |
| - OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::createWaitingHandle(); |
| - OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr); |
| - |
| - EXPECT_EQ(kShouldWait, reader->read(buffer, sizeof(buffer), kNone, &size)); |
| - EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size)); |
| - EXPECT_EQ(kUnexpectedError, reader->endRead(99)); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, CreateDoneHandle) |
| -{ |
| - char buffer[20]; |
| - const void* p = nullptr; |
| - size_t size = 0; |
| - OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::createDoneHandle(); |
| - OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr); |
| - |
| - EXPECT_EQ(kDone, reader->read(buffer, sizeof(buffer), kNone, &size)); |
| - EXPECT_EQ(kDone, reader->beginRead(&p, kNone, &size)); |
| - EXPECT_EQ(kUnexpectedError, reader->endRead(99)); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, Read) |
| -{ |
| - char buffer[20]; |
| - size_t size = 0; |
| - NoopClient client; |
| - Checkpoint checkpoint; |
| - |
| - OwnPtr<MockHandle> handle1 = MockHandle::create(); |
| - OwnPtr<MockHandle> handle2 = MockHandle::create(); |
| - OwnPtr<MockReader> reader1 = MockReader::create(); |
| - OwnPtr<MockReader> reader2 = MockReader::create(); |
| - |
| - InSequence s; |
| - EXPECT_CALL(checkpoint, Call(0)); |
| - EXPECT_CALL(*handle1, obtainReaderInternal(&client)).WillOnce(Return(reader1.get())); |
| - EXPECT_CALL(checkpoint, Call(1)); |
| - EXPECT_CALL(*reader1, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(2)); |
| - EXPECT_CALL(*handle2, obtainReaderInternal(&client)).WillOnce(Return(reader2.get())); |
| - EXPECT_CALL(checkpoint, Call(3)); |
| - EXPECT_CALL(*reader2, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(4)); |
| - |
| - // They are adopted by |obtainReader|. |
| - ASSERT_TRUE(reader1.leakPtr()); |
| - ASSERT_TRUE(reader2.leakPtr()); |
| - |
| - OwnPtr<CompositeDataConsumerHandle> handle = CompositeDataConsumerHandle::create(handle1.release()); |
| - checkpoint.Call(0); |
| - OwnPtr<CompositeDataConsumerHandle::Reader> reader = handle->obtainReader(&client); |
| - checkpoint.Call(1); |
| - EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size)); |
| - checkpoint.Call(2); |
| - handle->update(handle2.release()); |
| - checkpoint.Call(3); |
| - EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size)); |
| - checkpoint.Call(4); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, TwoPhaseRead) |
| -{ |
| - const void* p = nullptr; |
| - size_t size = 0; |
| - Checkpoint checkpoint; |
| - |
| - OwnPtr<MockHandle> handle1 = MockHandle::create(); |
| - OwnPtr<MockHandle> handle2 = MockHandle::create(); |
| - OwnPtr<MockReader> reader1 = MockReader::create(); |
| - OwnPtr<MockReader> reader2 = MockReader::create(); |
| - |
| - InSequence s; |
| - EXPECT_CALL(checkpoint, Call(0)); |
| - EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1.get())); |
| - EXPECT_CALL(checkpoint, Call(1)); |
| - EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(2)); |
| - EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(3)); |
| - EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2.get())); |
| - EXPECT_CALL(checkpoint, Call(4)); |
| - EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(5)); |
| - EXPECT_CALL(*reader2, endRead(0)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(6)); |
| - |
| - // They are adopted by |obtainReader|. |
| - ASSERT_TRUE(reader1.leakPtr()); |
| - ASSERT_TRUE(reader2.leakPtr()); |
| - |
| - OwnPtr<CompositeDataConsumerHandle> handle = CompositeDataConsumerHandle::create(handle1.release()); |
| - checkpoint.Call(0); |
| - OwnPtr<CompositeDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr); |
| - checkpoint.Call(1); |
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); |
| - checkpoint.Call(2); |
| - EXPECT_EQ(kOk, reader->endRead(0)); |
| - checkpoint.Call(3); |
| - handle->update(handle2.release()); |
| - checkpoint.Call(4); |
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); |
| - checkpoint.Call(5); |
| - EXPECT_EQ(kOk, reader->endRead(0)); |
| - checkpoint.Call(6); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, HangingTwoPhaseRead) |
| -{ |
| - const void* p = nullptr; |
| - size_t size = 0; |
| - Checkpoint checkpoint; |
| - OwnPtr<MockHandle> handle1 = MockHandle::create(); |
| - OwnPtr<MockHandle> handle2 = MockHandle::create(); |
| - OwnPtr<MockHandle> handle3 = MockHandle::create(); |
| - OwnPtr<MockReader> reader1 = MockReader::create(); |
| - OwnPtr<MockReader> reader2 = MockReader::create(); |
| - OwnPtr<MockReader> reader3 = MockReader::create(); |
| - |
| - InSequence s; |
| - EXPECT_CALL(checkpoint, Call(0)); |
| - EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1.get())); |
| - EXPECT_CALL(checkpoint, Call(1)); |
| - EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(2)); |
| - EXPECT_CALL(checkpoint, Call(3)); |
| - EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2.get())); |
| - EXPECT_CALL(checkpoint, Call(4)); |
| - EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kShouldWait)); |
| - EXPECT_CALL(checkpoint, Call(5)); |
| - EXPECT_CALL(*handle3, obtainReaderInternal(nullptr)).WillOnce(Return(reader3.get())); |
| - EXPECT_CALL(checkpoint, Call(6)); |
| - EXPECT_CALL(*reader3, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(7)); |
| - EXPECT_CALL(*reader3, endRead(0)).WillOnce(Return(kOk)); |
| - EXPECT_CALL(checkpoint, Call(8)); |
| - |
| - // They are adopted by |obtainReader|. |
| - ASSERT_TRUE(reader1.leakPtr()); |
| - ASSERT_TRUE(reader2.leakPtr()); |
| - ASSERT_TRUE(reader3.leakPtr()); |
| - |
| - OwnPtr<CompositeDataConsumerHandle> handle = CompositeDataConsumerHandle::create(handle1.release()); |
| - checkpoint.Call(0); |
| - OwnPtr<CompositeDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr); |
| - checkpoint.Call(1); |
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); |
| - checkpoint.Call(2); |
| - handle->update(handle2.release()); |
| - checkpoint.Call(3); |
| - EXPECT_EQ(kOk, reader->endRead(0)); |
| - checkpoint.Call(4); |
| - EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size)); |
| - checkpoint.Call(5); |
| - handle->update(handle3.release()); |
| - checkpoint.Call(6); |
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); |
| - checkpoint.Call(7); |
| - EXPECT_EQ(kOk, reader->endRead(0)); |
| - checkpoint.Call(8); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, RegisterClientOnDifferentThreads) |
| -{ |
| - ThreadingRegistrationTest test; |
| - test.run(); |
| - |
| - EXPECT_EQ( |
| - "A reader is attached to handle1 on the reading thread.\n" |
| - "A reader is detached from handle1 on the reading thread.\n" |
| - "A reader is attached to handle2 on the reading thread.\n" |
| - "A reader is detached from handle2 on the reading thread.\n", |
| - test.result()); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, DeleteHandleWhileUpdating) |
| -{ |
| - ThreadingRegistrationDeleteHandleTest test; |
| - test.run(); |
| - |
| - EXPECT_EQ( |
| - "A reader is attached to handle1 on the reading thread.\n" |
| - "A reader is detached from handle1 on the reading thread.\n" |
| - "A reader is attached to handle2 on the reading thread.\n" |
| - "A reader is detached from handle2 on the reading thread.\n", |
| - test.result()); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, DeleteReaderWhileUpdating) |
| -{ |
| - ThreadingRegistrationDeleteReaderTest test; |
| - test.run(); |
| - |
| - EXPECT_EQ( |
| - "A reader is attached to handle1 on the reading thread.\n" |
| - "A reader is detached from handle1 on the reading thread.\n", |
| - test.result()); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, UpdateReaderWhileUpdating) |
| -{ |
| - ThreadingUpdatingReaderWhileUpdatingTest test; |
| - test.run(); |
| - |
| - EXPECT_EQ( |
| - "A reader is attached to handle1 on the reading thread.\n" |
| - "A reader is detached from handle1 on the reading thread.\n" |
| - "A reader is attached to handle2 on the reading thread.\n" |
| - "A reader is detached from handle2 on the reading thread.\n", |
| - test.result()); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, UpdateTwiceAtOnce) |
| -{ |
| - ThreadingRegistrationUpdateTwiceAtOneTimeTest test; |
| - test.run(); |
| - |
| - EXPECT_EQ( |
| - "A reader is attached to handle1 on the reading thread.\n" |
| - "A reader is detached from handle1 on the reading thread.\n" |
| - "A reader is attached to handle3 on the reading thread.\n" |
| - "A reader is detached from handle3 on the reading thread.\n", |
| - test.result()); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, DoneHandleNotification) |
| -{ |
| - ThreadingDoneHandleNotificationTest test; |
| - // Test this function returns. |
| - test.run(); |
| -} |
| - |
| -TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification) |
| -{ |
| - ThreadingDoneHandleNoNotificationTest test; |
| - // Test this function doesn't crash. |
| - test.run(); |
| -} |
| - |
| -} // namespace |
| + OwnPtr<WebDataConsumerHandle> m_handle; |
| +}; |
| } // namespace blink |