Index: remoting/base/buffered_socket_writer_unittest.cc |
diff --git a/remoting/base/buffered_socket_writer_unittest.cc b/remoting/base/buffered_socket_writer_unittest.cc |
index 3bf5d49ceca7bd217f07cf115d2137abf3bc6772..d924ad0e77f69fe8ae111f04378b9384331c5acb 100644 |
--- a/remoting/base/buffered_socket_writer_unittest.cc |
+++ b/remoting/base/buffered_socket_writer_unittest.cc |
@@ -23,6 +23,13 @@ namespace { |
const int kTestBufferSize = 10000; |
const size_t kWriteChunkSize = 1024U; |
+int WriteNetSocket(net::Socket* socket, |
+ const scoped_refptr<net::IOBuffer>& buf, |
+ int buf_len, |
+ const net::CompletionCallback& callback) { |
+ return socket->Write(buf.get(), buf_len, callback); |
+} |
+ |
class SocketDataProvider: public net::SocketDataProvider { |
public: |
SocketDataProvider() |
@@ -95,25 +102,26 @@ class BufferedSocketWriterTest : public testing::Test { |
net::MockConnect(net::SYNCHRONOUS, net::OK)); |
EXPECT_EQ(net::OK, socket_->Connect(net::CompletionCallback())); |
- writer_ = BufferedSocketWriter::CreateForSocket( |
- socket_.get(), base::Bind(&BufferedSocketWriterTest::OnWriteFailed, |
- base::Unretained(this))); |
+ writer_.reset(new BufferedSocketWriter()); |
test_buffer_ = new net::IOBufferWithSize(kTestBufferSize); |
test_buffer_2_ = new net::IOBufferWithSize(kTestBufferSize); |
- for (int i = 0; i< kTestBufferSize; ++i) { |
+ for (int i = 0; i < kTestBufferSize; ++i) { |
test_buffer_->data()[i] = rand() % 256; |
test_buffer_2_->data()[i] = rand() % 256; |
} |
} |
+ void StartWriter() { |
+ writer_->Start(base::Bind(&WriteNetSocket, socket_.get()), |
+ base::Bind(&BufferedSocketWriterTest::OnWriteFailed, |
+ base::Unretained(this))); |
+ }; |
+ |
void OnWriteFailed(int error) { |
write_error_ = error; |
} |
- void TestWrite() { |
- writer_->Write(test_buffer_, base::Closure()); |
- writer_->Write(test_buffer_2_, base::Closure()); |
- base::RunLoop().RunUntilIdle(); |
+ void VerifyWrittenData() { |
ASSERT_EQ(static_cast<size_t>(test_buffer_->size() + |
test_buffer_2_->size()), |
socket_data_provider_.written_data().size()); |
@@ -126,22 +134,20 @@ class BufferedSocketWriterTest : public testing::Test { |
test_buffer_2_->size())); |
} |
+ void TestWrite() { |
+ writer_->Write(test_buffer_, base::Closure()); |
+ writer_->Write(test_buffer_2_, base::Closure()); |
+ base::RunLoop().RunUntilIdle(); |
+ VerifyWrittenData(); |
+ } |
+ |
void TestAppendInCallback() { |
writer_->Write(test_buffer_, base::Bind( |
base::IgnoreResult(&BufferedSocketWriter::Write), |
base::Unretained(writer_.get()), test_buffer_2_, |
base::Closure())); |
base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(static_cast<size_t>(test_buffer_->size() + |
- test_buffer_2_->size()), |
- socket_data_provider_.written_data().size()); |
- EXPECT_EQ(0, memcmp(test_buffer_->data(), |
- socket_data_provider_.written_data().data(), |
- test_buffer_->size())); |
- EXPECT_EQ(0, memcmp(test_buffer_2_->data(), |
- socket_data_provider_.written_data().data() + |
- test_buffer_->size(), |
- test_buffer_2_->size())); |
+ VerifyWrittenData(); |
} |
base::MessageLoop message_loop_; |
@@ -156,17 +162,20 @@ class BufferedSocketWriterTest : public testing::Test { |
// Test synchronous write. |
TEST_F(BufferedSocketWriterTest, WriteFull) { |
+ StartWriter(); |
TestWrite(); |
} |
// Test synchronous write in 1k chunks. |
TEST_F(BufferedSocketWriterTest, WriteChunks) { |
+ StartWriter(); |
socket_data_provider_.set_write_limit(kWriteChunkSize); |
TestWrite(); |
} |
// Test asynchronous write. |
TEST_F(BufferedSocketWriterTest, WriteAsync) { |
+ StartWriter(); |
socket_data_provider_.set_async_write(true); |
socket_data_provider_.set_write_limit(kWriteChunkSize); |
TestWrite(); |
@@ -174,11 +183,13 @@ TEST_F(BufferedSocketWriterTest, WriteAsync) { |
// Make sure we can call Write() from the done callback. |
TEST_F(BufferedSocketWriterTest, AppendInCallbackSync) { |
+ StartWriter(); |
TestAppendInCallback(); |
} |
// Make sure we can call Write() from the done callback. |
TEST_F(BufferedSocketWriterTest, AppendInCallbackAsync) { |
+ StartWriter(); |
socket_data_provider_.set_async_write(true); |
socket_data_provider_.set_write_limit(kWriteChunkSize); |
TestAppendInCallback(); |
@@ -186,6 +197,7 @@ TEST_F(BufferedSocketWriterTest, AppendInCallbackAsync) { |
// Test that the writer can be destroyed from callback. |
TEST_F(BufferedSocketWriterTest, DestroyFromCallback) { |
+ StartWriter(); |
socket_data_provider_.set_async_write(true); |
writer_->Write(test_buffer_, base::Bind( |
&BufferedSocketWriterTest::DestroyWriter, |
@@ -204,6 +216,7 @@ TEST_F(BufferedSocketWriterTest, DestroyFromCallback) { |
// Verify that it stops writing after the first error. |
TEST_F(BufferedSocketWriterTest, TestWriteErrorSync) { |
+ StartWriter(); |
socket_data_provider_.set_write_limit(kWriteChunkSize); |
writer_->Write(test_buffer_, base::Closure()); |
socket_data_provider_.set_async_write(true); |
@@ -220,6 +233,7 @@ TEST_F(BufferedSocketWriterTest, TestWriteErrorSync) { |
// Verify that it stops writing after the first error. |
TEST_F(BufferedSocketWriterTest, TestWriteErrorAsync) { |
+ StartWriter(); |
socket_data_provider_.set_write_limit(kWriteChunkSize); |
writer_->Write(test_buffer_, base::Closure()); |
socket_data_provider_.set_async_write(true); |
@@ -233,4 +247,14 @@ TEST_F(BufferedSocketWriterTest, TestWriteErrorAsync) { |
socket_data_provider_.written_data().size()); |
} |
+TEST_F(BufferedSocketWriterTest, WriteBeforeStart) { |
+ writer_->Write(test_buffer_, base::Closure()); |
+ writer_->Write(test_buffer_2_, base::Closure()); |
+ |
+ StartWriter(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ VerifyWrittenData(); |
+} |
+ |
} // namespace remoting |