summaryrefslogtreecommitdiffstats
path: root/net/socket/ssl_server_socket_unittest.cc
diff options
context:
space:
mode:
authorwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-17 04:59:23 +0000
committerwtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-17 04:59:23 +0000
commitfebbbb57aa0152229aefda56fe93a9ac422feafe (patch)
tree59cc9a349b9fd3356045e061ad8b8f3ab29f86a9 /net/socket/ssl_server_socket_unittest.cc
parent662b95b43003d876b9e8a04c4dad89f94c3af0ec (diff)
downloadchromium_src-febbbb57aa0152229aefda56fe93a9ac422feafe.zip
chromium_src-febbbb57aa0152229aefda56fe93a9ac422feafe.tar.gz
chromium_src-febbbb57aa0152229aefda56fe93a9ac422feafe.tar.bz2
SSLServerSocketTest.DataTransfer should keep reading until it has read
the expected number of bytes. We cannot assume a single SSL read is enough to read all the bytes. This depends on how the SSL sender fragments the data into SSL records, and whether the SSL receiver returns all available records at once or one record at a time. R=hclam@chromium.org,rvargas@chromium.org BUG=none TEST=net_unittests --gtest_filter=SSLServerSocketTest.DataTransfer Review URL: http://codereview.chromium.org/7648010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97098 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/ssl_server_socket_unittest.cc')
-rw-r--r--net/socket/ssl_server_socket_unittest.cc64
1 files changed, 43 insertions, 21 deletions
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc
index 0097325..6c5e3b8 100644
--- a/net/socket/ssl_server_socket_unittest.cc
+++ b/net/socket/ssl_server_socket_unittest.cc
@@ -361,17 +361,17 @@ TEST_F(SSLServerSocketTest, DataTransfer) {
int server_ret = server_socket_->Handshake(&handshake_callback);
ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING);
- if (client_ret == net::ERR_IO_PENDING) {
- ASSERT_EQ(net::OK, connect_callback.WaitForResult());
- }
- if (server_ret == net::ERR_IO_PENDING) {
- ASSERT_EQ(net::OK, handshake_callback.WaitForResult());
- }
+ client_ret = connect_callback.GetResult(client_ret);
+ ASSERT_EQ(net::OK, client_ret);
+ server_ret = handshake_callback.GetResult(server_ret);
+ ASSERT_EQ(net::OK, server_ret);
const int kReadBufSize = 1024;
scoped_refptr<net::StringIOBuffer> write_buf =
new net::StringIOBuffer("testing123");
- scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize);
+ scoped_refptr<net::DrainableIOBuffer> read_buf =
+ new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize),
+ kReadBufSize);
// Write then read.
TestCompletionCallback write_callback;
@@ -379,31 +379,53 @@ TEST_F(SSLServerSocketTest, DataTransfer) {
server_ret = server_socket_->Write(write_buf, write_buf->size(),
&write_callback);
EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING);
- client_ret = client_socket_->Read(read_buf, kReadBufSize, &read_callback);
+ client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(),
+ &read_callback);
EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING);
- if (server_ret == net::ERR_IO_PENDING) {
- EXPECT_GT(write_callback.WaitForResult(), 0);
- }
- if (client_ret == net::ERR_IO_PENDING) {
- EXPECT_GT(read_callback.WaitForResult(), 0);
- }
+ server_ret = write_callback.GetResult(server_ret);
+ EXPECT_GT(server_ret, 0);
+ client_ret = read_callback.GetResult(client_ret);
+ ASSERT_GT(client_ret, 0);
+
+ read_buf->DidConsume(client_ret);
+ while (read_buf->BytesConsumed() < write_buf->size()) {
+ client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(),
+ &read_callback);
+ EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING);
+ client_ret = read_callback.GetResult(client_ret);
+ ASSERT_GT(client_ret, 0);
+ read_buf->DidConsume(client_ret);
+ }
+ EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed());
+ read_buf->SetOffset(0);
EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size()));
// Read then write.
write_buf = new net::StringIOBuffer("hello123");
- server_ret = server_socket_->Read(read_buf, kReadBufSize, &read_callback);
+ server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(),
+ &read_callback);
EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING);
client_ret = client_socket_->Write(write_buf, write_buf->size(),
&write_callback);
EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING);
- if (server_ret == net::ERR_IO_PENDING) {
- EXPECT_GT(read_callback.WaitForResult(), 0);
- }
- if (client_ret == net::ERR_IO_PENDING) {
- EXPECT_GT(write_callback.WaitForResult(), 0);
- }
+ server_ret = read_callback.GetResult(server_ret);
+ ASSERT_GT(server_ret, 0);
+ client_ret = write_callback.GetResult(client_ret);
+ EXPECT_GT(client_ret, 0);
+
+ read_buf->DidConsume(server_ret);
+ while (read_buf->BytesConsumed() < write_buf->size()) {
+ server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(),
+ &read_callback);
+ EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING);
+ server_ret = read_callback.GetResult(server_ret);
+ ASSERT_GT(server_ret, 0);
+ read_buf->DidConsume(server_ret);
+ }
+ EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed());
+ read_buf->SetOffset(0);
EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size()));
}