Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: Source/modules/fetch/DataConsumerHandleUtilTest.h

Issue 1176243004: Add FetchDataConsumerHandle and utility functions/classes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698