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

Unified Diff: media/audio/async_socket_io_handler_unittest.cc

Issue 10540047: Add support to be able to asynchronously read from a CancelableSyncSocket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 8 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
« no previous file with comments | « media/audio/async_socket_io_handler_posix.cc ('k') | media/audio/async_socket_io_handler_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/async_socket_io_handler_unittest.cc
diff --git a/media/audio/async_socket_io_handler_unittest.cc b/media/audio/async_socket_io_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c9caa9f5db05242b48565988bd2f1687c3118c7c
--- /dev/null
+++ b/media/audio/async_socket_io_handler_unittest.cc
@@ -0,0 +1,80 @@
+// Copyright (c) 2012 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 "media/audio/async_socket_io_handler.h"
+
+#include "base/bind.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+const char kAsyncSocketIoTestString[] = "Hello, AsyncSocketIoHandler";
+const size_t kAsyncSocketIoTestStringLength =
+ arraysize(kAsyncSocketIoTestString);
+
+class TestSocketReader {
+ public:
+ TestSocketReader(base::CancelableSyncSocket* socket, bool quit_on_read)
+ : socket_(socket), buffer_(), quit_on_read_(quit_on_read) {
+ io_handler.Initialize(socket_->handle());
+ }
+ ~TestSocketReader() {}
+
+ bool IssueRead() {
+ return io_handler.Read(&buffer_[0], sizeof(buffer_),
+ base::Bind(&TestSocketReader::OnRead,
+ base::Unretained(this)));
+ }
+
+ const char* buffer() const { return &buffer_[0]; }
+
+ private:
+ void OnRead(int bytes_read) {
+ EXPECT_GT(bytes_read, 0);
+ if (quit_on_read_)
+ MessageLoop::current()->Quit();
+ }
+
+ media::AsyncSocketIoHandler io_handler;
+ base::CancelableSyncSocket* socket_; // Ownership lies outside the class.
+ char buffer_[kAsyncSocketIoTestStringLength];
+ bool quit_on_read_;
+};
+
+} // end namespace.
+
+// Tests doing a pending read from a socket and use an IO handler to get
+// notified of data.
+TEST(AsyncSocketIoHandlerTest, AsynchronousReadWithMessageLoop) {
+ MessageLoopForIO loop;
+
+ base::CancelableSyncSocket pair[2];
+ ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
+
+ TestSocketReader reader(&pair[0], true);
+ EXPECT_TRUE(reader.IssueRead());
+
+ pair[1].Send(kAsyncSocketIoTestString, kAsyncSocketIoTestStringLength);
+ MessageLoop::current()->Run();
+ EXPECT_EQ(strcmp(reader.buffer(), kAsyncSocketIoTestString), 0);
+}
+
+// Tests doing a read from a socket when we know that there is data in the
+// socket. Here we want to make sure that any async 'can read' notifications
+// won't trip us off and that the synchronous case works as well.
+TEST(AsyncSocketIoHandlerTest, SynchronousReadWithMessageLoop) {
+ MessageLoopForIO loop;
+
+ base::CancelableSyncSocket pair[2];
+ ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
+
+ TestSocketReader reader(&pair[0], false);
+
+ pair[1].Send(kAsyncSocketIoTestString, kAsyncSocketIoTestStringLength);
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, MessageLoop::QuitClosure(),
+ base::TimeDelta::FromMilliseconds(100));
+ MessageLoop::current()->Run();
+
+ EXPECT_TRUE(reader.IssueRead());
+ EXPECT_EQ(strcmp(reader.buffer(), kAsyncSocketIoTestString), 0);
+}
« no previous file with comments | « media/audio/async_socket_io_handler_posix.cc ('k') | media/audio/async_socket_io_handler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698