Chromium Code Reviews| Index: net/socket/ssl_server_socket_unittest.cc |
| diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc |
| index de89c207117b900a92f2f4b89a90a12ea692821f..457ee134708497b7301d5c373fee2d26890e3039 100644 |
| --- a/net/socket/ssl_server_socket_unittest.cc |
| +++ b/net/socket/ssl_server_socket_unittest.cc |
| @@ -15,10 +15,13 @@ |
| #include "net/socket/ssl_server_socket.h" |
| +#include <stdlib.h> |
| + |
| #include <queue> |
| #include "base/file_path.h" |
| #include "base/file_util.h" |
| +#include "base/message_loop.h" |
| #include "base/path_service.h" |
| #include "crypto/nss_util.h" |
| #include "crypto/rsa_private_key.h" |
| @@ -46,7 +49,10 @@ namespace { |
| class FakeDataChannel { |
| public: |
| - FakeDataChannel() : read_callback_(NULL), read_buf_len_(0) { |
| + FakeDataChannel() |
| + : read_callback_(NULL), |
| + read_buf_len_(0), |
| + ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { |
|
willchan no longer on Chromium
2011/07/21 08:16:06
Need compiler_specific.h for this macro.
Sergey Ulanov
2011/07/21 17:11:12
Done.
|
| } |
| virtual int Read(IOBuffer* buf, int buf_len, |
| @@ -63,13 +69,15 @@ class FakeDataChannel { |
| virtual int Write(IOBuffer* buf, int buf_len, |
| CompletionCallback* callback) { |
| data_.push(new net::DrainableIOBuffer(buf, buf_len)); |
| - DoReadCallback(); |
| + MessageLoop::current()->PostTask( |
| + FROM_HERE, task_factory_.NewRunnableMethod( |
| + &FakeDataChannel::DoReadCallback)); |
|
wtc
2011/07/21 00:27:12
willchan: can you review the use of ScopedRunnable
Sergey Ulanov
2011/07/21 00:51:15
Because DoReadCallback() calls callback on the soc
willchan no longer on Chromium
2011/07/21 08:16:06
Looks reasonable to me.
|
| return buf_len; |
| } |
| private: |
| void DoReadCallback() { |
| - if (!read_callback_) |
| + if (!read_callback_ || !data_.size()) |
|
wtc
2011/07/21 00:27:12
Nit: some people prefer data_.empty().
Why do you
Sergey Ulanov
2011/07/21 00:51:15
Done.
|
| return; |
| int copied = PropogateData(read_buf_, read_buf_len_); |
| @@ -97,6 +105,8 @@ class FakeDataChannel { |
| std::queue<scoped_refptr<net::DrainableIOBuffer> > data_; |
| + ScopedRunnableMethodFactory<FakeDataChannel> task_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(FakeDataChannel); |
| }; |
| @@ -114,11 +124,15 @@ class FakeSocket : public StreamSocket { |
| virtual int Read(IOBuffer* buf, int buf_len, |
| CompletionCallback* callback) { |
| + // Read random number of bytes. |
| + buf_len = rand() % buf_len + 1; |
| return incoming_->Read(buf, buf_len, callback); |
| } |
| virtual int Write(IOBuffer* buf, int buf_len, |
| CompletionCallback* callback) { |
| + // Write random number of bytes. |
| + buf_len = rand() % buf_len + 1; |
|
wtc
2011/07/21 00:27:12
Are you using rand() instead of base::RandInt() be
|
| return outgoing_->Write(buf, buf_len, callback); |
| } |
| @@ -204,17 +218,28 @@ TEST(FakeSocketTest, DataTransfer) { |
| scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); |
| // Write then read. |
| - EXPECT_EQ(kTestDataSize, server.Write(write_buf, kTestDataSize, NULL)); |
| - EXPECT_EQ(kTestDataSize, client.Read(read_buf, kReadBufSize, NULL)); |
| - EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), kTestDataSize)); |
| + int written = server.Write(write_buf, kTestDataSize, NULL); |
| + EXPECT_GT(written, 0); |
| + EXPECT_LE(written, kTestDataSize); |
| + |
| + int read = client.Read(read_buf, kReadBufSize, NULL); |
|
wtc
2011/07/21 00:27:12
Nit: name these local variables nwritten and nread
|
| + EXPECT_GT(read, 0); |
| + EXPECT_LE(read, written); |
| + EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
| // Read then write. |
| TestCompletionCallback callback; |
| EXPECT_EQ(net::ERR_IO_PENDING, |
| server.Read(read_buf, kReadBufSize, &callback)); |
| - EXPECT_EQ(kTestDataSize, client.Write(write_buf, kTestDataSize, NULL)); |
| - EXPECT_EQ(kTestDataSize, callback.WaitForResult()); |
| - EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), kTestDataSize)); |
| + |
| + written = client.Write(write_buf, kTestDataSize, NULL); |
| + EXPECT_GT(written, 0); |
| + EXPECT_LE(written, kTestDataSize); |
| + |
| + read = callback.WaitForResult(); |
| + EXPECT_GT(read, 0); |
| + EXPECT_LE(read, written); |
| + EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
| } |
| class SSLServerSocketTest : public PlatformTest { |