Chromium Code Reviews| Index: net/socket/ssl_client_socket_unittest.cc |
| =================================================================== |
| --- net/socket/ssl_client_socket_unittest.cc (revision 23320) |
| +++ net/socket/ssl_client_socket_unittest.cc (working copy) |
| @@ -9,6 +9,7 @@ |
| #include "net/base/io_buffer.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/ssl_config_service.h" |
| +#include "net/base/ssl_info.h" |
| #include "net/base/test_completion_callback.h" |
| #include "net/socket/client_socket_factory.h" |
| #include "net/socket/ssl_test_util.h" |
| @@ -49,6 +50,22 @@ |
| } |
| protected: |
| + net::SSLClientSocket* CreateSSLClientSocket( |
| + const net::AddressList& addr, |
| + const net::SSLConfig& ssl_config) { |
| + TestCompletionCallback callback; |
| + net::ClientSocket *transport = new net::TCPClientSocket(addr); |
|
eroman
2009/08/15 02:04:29
style-nit: move * to the left.
|
| + int rv = transport->Connect(&callback); |
| + if (rv == net::ERR_IO_PENDING) |
| + rv = callback.WaitForResult(); |
| + EXPECT_EQ(net::OK, rv); |
| + |
| + net::SSLClientSocket* sock = socket_factory_->CreateSSLClientSocket( |
| + transport, server_.kHostName, ssl_config); |
| + EXPECT_FALSE(sock->IsConnected()); |
| + return sock; |
| + } |
| + |
| scoped_refptr<net::HostResolver> resolver_; |
| net::ClientSocketFactory* socket_factory_; |
| net::TestServerLauncher server_; |
| @@ -56,7 +73,7 @@ |
| //----------------------------------------------------------------------------- |
| -#if defined(OS_MACOSX) |
| +#if defined(OS_MAC) |
| // Status 6/19/09: |
| // |
| // If these tests are enabled on OSX, we choke at the point |
| @@ -94,18 +111,9 @@ |
| int rv = resolver_->Resolve(NULL, info, &addr, NULL, NULL); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| - |
| scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kHostName, kDefaultSSLConfig)); |
| + CreateSSLClientSocket(addr, kDefaultSSLConfig)); |
| - EXPECT_FALSE(sock->IsConnected()); |
| - |
| rv = sock->Connect(&callback); |
| if (rv != net::OK) { |
| ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| @@ -131,17 +139,11 @@ |
| int rv = resolver_->Resolve(NULL, info, &addr, NULL, NULL); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| + net::SSLConfig ssl_config = kDefaultSSLConfig; |
| - scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kHostName, kDefaultSSLConfig)); |
| + scoped_ptr<net::SSLClientSocket> sock; |
| - EXPECT_FALSE(sock->IsConnected()); |
| + sock.reset(CreateSSLClientSocket(addr, ssl_config)); |
| rv = sock->Connect(&callback); |
| if (rv != net::OK) { |
| @@ -149,12 +151,57 @@ |
| EXPECT_FALSE(sock->IsConnected()); |
| rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::ERR_CERT_DATE_INVALID, rv); |
| + // TODO(wtc): This should be net::ERR_CERT_DATE_INVALID. |
| + EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, rv); |
| } |
| // We cannot test sock->IsConnected(), as the NSS implementation disconnects |
| // the socket when it encounters an error, whereas other implementations |
| // leave it connected. |
| + |
| + //////////////////////// |
| + //////////////////////// |
| + |
| + net::SSLInfo ssl_info; |
| + sock->GetSSLInfo(&ssl_info); |
| + EXPECT_TRUE(ssl_info.cert); |
| + EXPECT_EQ(net::CERT_STATUS_AUTHORITY_INVALID, |
|
eroman
2009/08/15 02:04:29
style-nit: why not just EXPECT_TRUE(ssl_info.cert_
|
| + ssl_info.cert_status & net::CERT_STATUS_AUTHORITY_INVALID); |
| + net::SSLConfig::CertAndStatus bad_cert; |
| + bad_cert.cert = ssl_info.cert; |
| + bad_cert.cert_status = ssl_info.cert_status; |
| + ssl_config.allowed_bad_certs.push_back(bad_cert); |
| + |
| + /////////////////////// |
| + /////////////////////// |
|
eroman
2009/08/15 02:04:29
style-nit: i haven't really seen the //// style in
|
| + |
| + sock->Disconnect(); |
| + EXPECT_FALSE(sock->IsConnected()); |
| + |
| + /////////////////////// |
| + /////////////////////// |
| + |
| + sock.reset(CreateSSLClientSocket(addr, ssl_config)); |
| + |
| + rv = sock->Connect(&callback); |
| + if (rv != net::OK) { |
| + ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| + EXPECT_FALSE(sock->IsConnected()); |
| + |
| + rv = callback.WaitForResult(); |
| + EXPECT_EQ(net::OK, rv); |
| + } |
| + |
| + EXPECT_TRUE(sock->IsConnected()); |
| + |
| + ssl_info.Reset(); |
| + sock->GetSSLInfo(&ssl_info); |
| + EXPECT_TRUE(ssl_info.cert); |
| + EXPECT_EQ(net::CERT_STATUS_AUTHORITY_INVALID, |
| + ssl_info.cert_status & net::CERT_STATUS_AUTHORITY_INVALID); |
| + |
| + sock->Disconnect(); |
| + EXPECT_FALSE(sock->IsConnected()); |
| } |
| TEST_F(SSLClientSocketTest, MAYBE_ConnectMismatched) { |
| @@ -168,18 +215,9 @@ |
| int rv = resolver_->Resolve(NULL, info, &addr, NULL, NULL); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| - |
| scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kMismatchedHostName, kDefaultSSLConfig)); |
| + CreateSSLClientSocket(addr, kDefaultSSLConfig)); |
|
eroman
2009/08/15 02:04:29
Is this intentional? This used to use server_.kMis
|
| - EXPECT_FALSE(sock->IsConnected()); |
| - |
| rv = sock->Connect(&callback); |
| if (rv != net::ERR_CERT_COMMON_NAME_INVALID) { |
| ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| @@ -212,16 +250,8 @@ |
| rv = callback.WaitForResult(); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| - |
| scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kHostName, |
| - kDefaultSSLConfig)); |
| + CreateSSLClientSocket(addr, kDefaultSSLConfig)); |
| rv = sock->Connect(&callback); |
| if (rv != net::OK) { |
| @@ -269,15 +299,8 @@ |
| int rv = resolver_->Resolve(NULL, info, &addr, NULL, NULL); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| - |
| scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kHostName, kDefaultSSLConfig)); |
| + CreateSSLClientSocket(addr, kDefaultSSLConfig)); |
| rv = sock->Connect(&callback); |
| if (rv != net::OK) { |
| @@ -324,15 +347,8 @@ |
| int rv = resolver_->Resolve(NULL, info, &addr, NULL, NULL); |
| EXPECT_EQ(net::OK, rv); |
| - net::ClientSocket *transport = new net::TCPClientSocket(addr); |
| - rv = transport->Connect(&callback); |
| - if (rv == net::ERR_IO_PENDING) |
| - rv = callback.WaitForResult(); |
| - EXPECT_EQ(net::OK, rv); |
| - |
| scoped_ptr<net::SSLClientSocket> sock( |
| - socket_factory_->CreateSSLClientSocket(transport, |
| - server_.kHostName, kDefaultSSLConfig)); |
| + CreateSSLClientSocket(addr, kDefaultSSLConfig)); |
| rv = sock->Connect(&callback); |
| if (rv != net::OK) { |