Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(282)

Unified Diff: net/socket/ssl_client_socket_unittest.cc

Issue 169643006: Use sockets with unread data if they've never been used before. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mmenke comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket/ssl_client_socket_openssl.cc ('k') | net/socket/stream_socket.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/socket/ssl_client_socket_unittest.cc
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index 20ba8967bf6d3f538a20d1038d7b69d507e8291a..0c6b33563acd377bd5b2b28e1f854f32778ddc91 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -2127,4 +2127,60 @@ TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsDisabled) {
EXPECT_FALSE(sock->IsConnected());
}
+// Tests that IsConnectedAndIdle and WasEverUsed behave as expected.
+TEST_F(SSLClientSocketTest, ReuseStates) {
+ SpawnedTestServer test_server(SpawnedTestServer::TYPE_HTTPS,
+ SpawnedTestServer::kLocalhost,
+ base::FilePath());
+ ASSERT_TRUE(test_server.Start());
+
+ AddressList addr;
+ ASSERT_TRUE(test_server.GetAddressList(&addr));
+
+ TestCompletionCallback callback;
+ scoped_ptr<StreamSocket> transport(
+ new TCPClientSocket(addr, NULL, NetLog::Source()));
+ int rv = transport->Connect(callback.callback());
+ if (rv == ERR_IO_PENDING)
+ rv = callback.WaitForResult();
+ EXPECT_EQ(OK, rv);
+
+ scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket(
+ transport.Pass(), test_server.host_port_pair(), kDefaultSSLConfig));
+
+ rv = sock->Connect(callback.callback());
+ if (rv == ERR_IO_PENDING)
+ rv = callback.WaitForResult();
+ EXPECT_EQ(OK, rv);
+
+ // The socket was just connected. It should be idle because it is speaking
+ // HTTP. Although the transport has been used for the handshake, WasEverUsed()
+ // returns false.
+ EXPECT_TRUE(sock->IsConnected());
+ EXPECT_TRUE(sock->IsConnectedAndIdle());
+ EXPECT_FALSE(sock->WasEverUsed());
+
+ const char kRequestText[] = "GET / HTTP/1.0\r\n\r\n";
+ const size_t kRequestLen = arraysize(kRequestText) - 1;
+ scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestLen));
+ memcpy(request_buffer->data(), kRequestText, kRequestLen);
+
+ rv = sock->Write(request_buffer.get(), kRequestLen, callback.callback());
+ EXPECT_TRUE(rv >= 0 || rv == ERR_IO_PENDING);
+
+ if (rv == ERR_IO_PENDING)
+ rv = callback.WaitForResult();
+ EXPECT_EQ(static_cast<int>(kRequestLen), rv);
+
+ // The socket has now been used.
+ EXPECT_TRUE(sock->WasEverUsed());
+
+ // TODO(davidben): Read one byte to ensure the test server has responded and
+ // then assert IsConnectedAndIdle is false. This currently doesn't work
+ // because neither SSLClientSocketNSS nor SSLClientSocketOpenSSL check their
+ // SSL implementation's internal buffers. Either call PR_Available and
+ // SSL_pending, although the former isn't actually implemented or perhaps
+ // attempt to read one byte extra.
+}
+
} // namespace net
« no previous file with comments | « net/socket/ssl_client_socket_openssl.cc ('k') | net/socket/stream_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698