| 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
|
|
|