| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/socket/buffered_write_stream_socket.h" | 5 #include "net/socket/buffered_write_stream_socket.h" |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 void Initialize(MockWrite* writes, size_t writes_count) { | 27 void Initialize(MockWrite* writes, size_t writes_count) { |
| 28 data_.reset(new DeterministicSocketData(NULL, 0, writes, writes_count)); | 28 data_.reset(new DeterministicSocketData(NULL, 0, writes, writes_count)); |
| 29 data_->set_connect_data(MockConnect(SYNCHRONOUS, 0)); | 29 data_->set_connect_data(MockConnect(SYNCHRONOUS, 0)); |
| 30 if (writes_count) { | 30 if (writes_count) { |
| 31 data_->StopAfter(writes_count); | 31 data_->StopAfter(writes_count); |
| 32 } | 32 } |
| 33 scoped_ptr<DeterministicMockTCPClientSocket> wrapped_socket( | 33 scoped_ptr<DeterministicMockTCPClientSocket> wrapped_socket( |
| 34 new DeterministicMockTCPClientSocket(net_log_.net_log(), data_.get())); | 34 new DeterministicMockTCPClientSocket(net_log_.net_log(), data_.get())); |
| 35 data_->set_delegate(wrapped_socket->AsWeakPtr()); | 35 data_->set_delegate(wrapped_socket->AsWeakPtr()); |
| 36 socket_.reset(new BufferedWriteStreamSocket( | 36 socket_.reset( |
| 37 wrapped_socket.PassAs<StreamSocket>())); | 37 new BufferedWriteStreamSocket(wrapped_socket.PassAs<StreamSocket>())); |
| 38 socket_->Connect(callback_.callback()); | 38 socket_->Connect(callback_.callback()); |
| 39 } | 39 } |
| 40 | 40 |
| 41 void TestWrite(const char* text) { | 41 void TestWrite(const char* text) { |
| 42 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(text)); | 42 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(text)); |
| 43 EXPECT_EQ(buf->size(), | 43 EXPECT_EQ(buf->size(), |
| 44 socket_->Write(buf.get(), buf->size(), callback_.callback())); | 44 socket_->Write(buf.get(), buf->size(), callback_.callback())); |
| 45 } | 45 } |
| 46 | 46 |
| 47 scoped_ptr<BufferedWriteStreamSocket> socket_; | 47 scoped_ptr<BufferedWriteStreamSocket> socket_; |
| 48 scoped_ptr<DeterministicSocketData> data_; | 48 scoped_ptr<DeterministicSocketData> data_; |
| 49 BoundNetLog net_log_; | 49 BoundNetLog net_log_; |
| 50 TestCompletionCallback callback_; | 50 TestCompletionCallback callback_; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 TEST_F(BufferedWriteStreamSocketTest, SingleWrite) { | 53 TEST_F(BufferedWriteStreamSocketTest, SingleWrite) { |
| 54 MockWrite writes[] = { | 54 MockWrite writes[] = { |
| 55 MockWrite(SYNCHRONOUS, 0, "abc"), | 55 MockWrite(SYNCHRONOUS, 0, "abc"), |
| 56 }; | 56 }; |
| 57 Initialize(writes, arraysize(writes)); | 57 Initialize(writes, arraysize(writes)); |
| 58 TestWrite("abc"); | 58 TestWrite("abc"); |
| 59 Finish(); | 59 Finish(); |
| 60 } | 60 } |
| 61 | 61 |
| 62 TEST_F(BufferedWriteStreamSocketTest, AsyncWrite) { | 62 TEST_F(BufferedWriteStreamSocketTest, AsyncWrite) { |
| 63 MockWrite writes[] = { | 63 MockWrite writes[] = { |
| 64 MockWrite(ASYNC, 0, "abc"), | 64 MockWrite(ASYNC, 0, "abc"), |
| 65 }; | 65 }; |
| 66 Initialize(writes, arraysize(writes)); | 66 Initialize(writes, arraysize(writes)); |
| 67 TestWrite("abc"); | 67 TestWrite("abc"); |
| 68 data_->Run(); | 68 data_->Run(); |
| 69 Finish(); | 69 Finish(); |
| 70 } | 70 } |
| 71 | 71 |
| 72 TEST_F(BufferedWriteStreamSocketTest, TwoWritesIntoOne) { | 72 TEST_F(BufferedWriteStreamSocketTest, TwoWritesIntoOne) { |
| 73 MockWrite writes[] = { | 73 MockWrite writes[] = { |
| 74 MockWrite(SYNCHRONOUS, 0, "abcdef"), | 74 MockWrite(SYNCHRONOUS, 0, "abcdef"), |
| 75 }; | 75 }; |
| 76 Initialize(writes, arraysize(writes)); | 76 Initialize(writes, arraysize(writes)); |
| 77 TestWrite("abc"); | 77 TestWrite("abc"); |
| 78 TestWrite("def"); | 78 TestWrite("def"); |
| 79 Finish(); | 79 Finish(); |
| 80 } | 80 } |
| 81 | 81 |
| 82 TEST_F(BufferedWriteStreamSocketTest, WriteWhileBlocked) { | 82 TEST_F(BufferedWriteStreamSocketTest, WriteWhileBlocked) { |
| 83 MockWrite writes[] = { | 83 MockWrite writes[] = { |
| 84 MockWrite(ASYNC, 0, "abc"), | 84 MockWrite(ASYNC, 0, "abc"), MockWrite(ASYNC, 1, "def"), |
| 85 MockWrite(ASYNC, 1, "def"), | 85 MockWrite(ASYNC, 2, "ghi"), |
| 86 MockWrite(ASYNC, 2, "ghi"), | |
| 87 }; | 86 }; |
| 88 Initialize(writes, arraysize(writes)); | 87 Initialize(writes, arraysize(writes)); |
| 89 TestWrite("abc"); | 88 TestWrite("abc"); |
| 90 base::MessageLoop::current()->RunUntilIdle(); | 89 base::MessageLoop::current()->RunUntilIdle(); |
| 91 TestWrite("def"); | 90 TestWrite("def"); |
| 92 data_->RunFor(1); | 91 data_->RunFor(1); |
| 93 TestWrite("ghi"); | 92 TestWrite("ghi"); |
| 94 data_->RunFor(1); | 93 data_->RunFor(1); |
| 95 Finish(); | 94 Finish(); |
| 96 } | 95 } |
| 97 | 96 |
| 98 TEST_F(BufferedWriteStreamSocketTest, ContinuesPartialWrite) { | 97 TEST_F(BufferedWriteStreamSocketTest, ContinuesPartialWrite) { |
| 99 MockWrite writes[] = { | 98 MockWrite writes[] = { |
| 100 MockWrite(ASYNC, 0, "abc"), | 99 MockWrite(ASYNC, 0, "abc"), MockWrite(ASYNC, 1, "def"), |
| 101 MockWrite(ASYNC, 1, "def"), | |
| 102 }; | 100 }; |
| 103 Initialize(writes, arraysize(writes)); | 101 Initialize(writes, arraysize(writes)); |
| 104 TestWrite("abcdef"); | 102 TestWrite("abcdef"); |
| 105 data_->Run(); | 103 data_->Run(); |
| 106 Finish(); | 104 Finish(); |
| 107 } | 105 } |
| 108 | 106 |
| 109 TEST_F(BufferedWriteStreamSocketTest, TwoSeparateWrites) { | 107 TEST_F(BufferedWriteStreamSocketTest, TwoSeparateWrites) { |
| 110 MockWrite writes[] = { | 108 MockWrite writes[] = { |
| 111 MockWrite(ASYNC, 0, "abc"), | 109 MockWrite(ASYNC, 0, "abc"), MockWrite(ASYNC, 1, "def"), |
| 112 MockWrite(ASYNC, 1, "def"), | |
| 113 }; | 110 }; |
| 114 Initialize(writes, arraysize(writes)); | 111 Initialize(writes, arraysize(writes)); |
| 115 TestWrite("abc"); | 112 TestWrite("abc"); |
| 116 data_->RunFor(1); | 113 data_->RunFor(1); |
| 117 TestWrite("def"); | 114 TestWrite("def"); |
| 118 data_->RunFor(1); | 115 data_->RunFor(1); |
| 119 Finish(); | 116 Finish(); |
| 120 } | 117 } |
| 121 | 118 |
| 122 } // anonymous namespace | 119 } // anonymous namespace |
| 123 | 120 |
| 124 } // namespace net | 121 } // namespace net |
| OLD | NEW |