Chromium Code Reviews| 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 28083fcf8c0dcbbcd180315597ed4c0dc3f8948e..8bf86e5795436e4e3e24d2ed25167eecad4c9596 100644 |
| --- a/net/socket/ssl_client_socket_unittest.cc |
| +++ b/net/socket/ssl_client_socket_unittest.cc |
| @@ -796,6 +796,9 @@ class SSLClientSocketCertRequestInfoTest : public SSLClientSocketTest { |
| }; |
| class SSLClientSocketFalseStartTest : public SSLClientSocketTest { |
| + public: |
| + SSLClientSocketFalseStartTest() : monitor_handshake_callback_(false) {} |
| + |
| protected: |
| // Creates an SSLClientSocket with |client_config| attached to a |
| // FakeBlockingStreamSocket, returning both in |*out_raw_transport| and |
| @@ -830,6 +833,12 @@ class SSLClientSocketFalseStartTest : public SSLClientSocketTest { |
| test_server()->host_port_pair(), |
| client_config); |
| + if (monitor_handshake_callback_) { |
| + sock->SetHandshakeCompletionCallback( |
| + base::Bind(&SSLClientSocketTest::RecordCompletedHandshake, |
| + base::Unretained(this))); |
| + } |
| + |
| // Connect. Stop before the client processes the first server leg |
| // (ServerHello, etc.) |
| raw_transport->BlockReadResult(); |
| @@ -904,6 +913,10 @@ class SSLClientSocketFalseStartTest : public SSLClientSocketTest { |
| EXPECT_FALSE(callback.have_result()); |
| } |
| } |
| + |
| + // Indicates that the socket's handshake completion callback should |
| + // be monitored. |
| + bool monitor_handshake_callback_; |
| }; |
| class SSLClientSocketChannelIDTest : public SSLClientSocketTest { |
| @@ -2770,6 +2783,64 @@ TEST_F(SSLClientSocketTest, HandshakeCallbackIsRun_WithNoneSessionCache) { |
| EXPECT_TRUE(sock->IsConnected()); |
| EXPECT_TRUE(ran_handshake_completion_callback_); |
| } |
| + |
| +TEST_F(SSLClientSocketTest, HandshakeCallbackIsRun_WithFalseStartFailure) { |
|
davidben
2014/08/06 19:12:46
Hrm. I'm not sure this test actually does anything
|
| + // False Start requires NPN and a forward-secret cipher suite. |
| + SpawnedTestServer::SSLOptions server_options; |
| + server_options.key_exchanges = |
| + SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA; |
| + server_options.enable_npn = true; |
| + SSLConfig client_config; |
| + client_config.next_protos.push_back("http/1.1"); |
| + |
| + SpawnedTestServer test_server(SpawnedTestServer::TYPE_HTTPS, |
| + server_options, |
| + base::FilePath()); |
| + ASSERT_TRUE(test_server.Start()); |
| + |
| + AddressList addr; |
| + ASSERT_TRUE(test_server.GetAddressList(&addr)); |
| + |
| + TestCompletionCallback callback; |
| + scoped_ptr<StreamSocket> real_transport( |
| + new TCPClientSocket(addr, NULL, NetLog::Source())); |
| + scoped_ptr<SynchronousErrorStreamSocket> transport( |
| + new SynchronousErrorStreamSocket(real_transport.Pass())); |
| + int rv = callback.GetResult(transport->Connect(callback.callback())); |
| + EXPECT_EQ(OK, rv); |
| + |
| + SynchronousErrorStreamSocket* raw_transport = transport.get(); |
| + scoped_ptr<SSLClientSocket> sock( |
| + CreateSSLClientSocket(transport.PassAs<StreamSocket>(), |
| + test_server.host_port_pair(), |
| + client_config)); |
| + |
| + sock->SetHandshakeCompletionCallback(base::Bind( |
| + &SSLClientSocketTest::RecordCompletedHandshake, base::Unretained(this))); |
| + |
| + raw_transport->SetNextWriteError(ERR_CONNECTION_RESET); |
| + |
| + rv = callback.GetResult(sock->Connect(callback.callback())); |
| + EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| + EXPECT_FALSE(sock->IsConnected()); |
| + |
| + EXPECT_TRUE(ran_handshake_completion_callback_); |
| +} |
| + |
| +TEST_F(SSLClientSocketFalseStartTest, |
| + HandshakeCallbackIsRun_WithFalseStartSuccess) { |
| + // False Start requires NPN and a forward-secret cipher suite. |
| + SpawnedTestServer::SSLOptions server_options; |
| + server_options.key_exchanges = |
| + SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA; |
| + server_options.enable_npn = true; |
| + SSLConfig client_config; |
| + client_config.next_protos.push_back("http/1.1"); |
| + monitor_handshake_callback_ = true; |
| + ASSERT_NO_FATAL_FAILURE(TestFalseStart(server_options, client_config, true)); |
| + ASSERT_TRUE(ran_handshake_completion_callback_); |
| +} |
| + |
| #endif // defined(USE_OPENSSL) |
| TEST_F(SSLClientSocketFalseStartTest, FalseStartEnabled) { |