summaryrefslogtreecommitdiffstats
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
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
-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()));
}