Index: net/socket/buffered_write_stream_socket_unittest.cc |
diff --git a/net/socket/buffered_write_stream_socket_unittest.cc b/net/socket/buffered_write_stream_socket_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e8fdf62239fe29b0d8099a5b103949f4fbb44ee0 |
--- /dev/null |
+++ b/net/socket/buffered_write_stream_socket_unittest.cc |
@@ -0,0 +1,119 @@ |
+// 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 "net/socket/buffered_write_stream_socket.h" |
+ |
+#include "base/message_loop.h" |
+#include "base/memory/ref_counted.h" |
+#include "net/base/net_errors.h" |
+#include "net/base/net_log.h" |
+#include "net/socket/socket_test_util.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net { |
+ |
+namespace { |
+ |
+class BufferedWriteStreamSocketTest : public testing::Test { |
+ public: |
+ void Finish() { |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_TRUE(data_->at_read_eof()); |
+ EXPECT_TRUE(data_->at_write_eof()); |
+ } |
+ |
+ void Initialize(MockWrite* writes, size_t writes_count) { |
+ data_ = new DeterministicSocketData(NULL, 0, writes, writes_count); |
+ data_->set_connect_data(MockConnect(SYNCHRONOUS, 0)); |
+ if (writes_count) { |
+ data_->StopAfter(writes_count); |
+ } |
+ DeterministicMockTCPClientSocket* wrapped_socket = |
+ new DeterministicMockTCPClientSocket(net_log_.net_log(), data_.get()); |
+ data_->set_socket(wrapped_socket->AsWeakPtr()); |
+ socket_.reset(new BufferedWriteStreamSocket(wrapped_socket)); |
+ socket_->Connect(callback_.callback()); |
+ } |
+ |
+ void TestWrite(const char* text) { |
+ scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(text)); |
+ EXPECT_EQ(buf->size(), |
+ socket_->Write(buf.get(), buf->size(), callback_.callback())); |
+ } |
+ |
+ scoped_ptr<BufferedWriteStreamSocket> socket_; |
+ scoped_refptr<DeterministicSocketData> data_; |
+ BoundNetLog net_log_; |
+ TestCompletionCallback callback_; |
+}; |
+ |
+TEST_F(BufferedWriteStreamSocketTest, SingleWrite) { |
+ MockWrite writes[] = { |
+ MockWrite(false, 0, "abc"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abc"); |
+ Finish(); |
+} |
+ |
+TEST_F(BufferedWriteStreamSocketTest, AsyncWrite) { |
+ MockWrite writes[] = { |
+ MockWrite(true, 0, "abc"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abc"); |
+ data_->Run(); |
+ Finish(); |
+} |
+ |
+TEST_F(BufferedWriteStreamSocketTest, TwoWritesIntoOne) { |
+ MockWrite writes[] = { |
+ MockWrite(false, 0, "abcdef"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abc"); |
+ TestWrite("def"); |
+ Finish(); |
+} |
+ |
+TEST_F(BufferedWriteStreamSocketTest, WriteWhileBlocked) { |
+ MockWrite writes[] = { |
+ MockWrite(true, 0, "abc"), |
+ MockWrite(true, 1, "def"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abc"); |
+ MessageLoop::current()->RunAllPending(); |
+ TestWrite("def"); |
+ data_->Run(); |
+ Finish(); |
+} |
+ |
+TEST_F(BufferedWriteStreamSocketTest, ContinuesPartialWrite) { |
+ MockWrite writes[] = { |
+ MockWrite(true, 0, "abc"), |
+ MockWrite(true, 1, "def"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abcdef"); |
+ data_->Run(); |
+ Finish(); |
+} |
+ |
+TEST_F(BufferedWriteStreamSocketTest, TwoSeparateWrites) { |
+ MockWrite writes[] = { |
+ MockWrite(true, 0, "abc"), |
+ MockWrite(true, 1, "def"), |
+ }; |
+ Initialize(writes, arraysize(writes)); |
+ TestWrite("abc"); |
+ data_->RunFor(1); |
+ TestWrite("def"); |
+ data_->RunFor(1); |
+ Finish(); |
+} |
+ |
+} // anonymous namespace |
+ |
+} // namespace net |