Index: net/socket/ssl_client_socket_pool_unittest.cc |
=================================================================== |
--- net/socket/ssl_client_socket_pool_unittest.cc (revision 175289) |
+++ net/socket/ssl_client_socket_pool_unittest.cc (working copy) |
@@ -11,6 +11,7 @@ |
#include "base/utf_string_conversions.h" |
#include "net/base/auth.h" |
#include "net/base/cert_verifier.h" |
+#include "net/base/load_timing_info.h" |
#include "net/base/mock_host_resolver.h" |
#include "net/base/net_errors.h" |
#include "net/base/ssl_config_service_defaults.h" |
@@ -39,6 +40,66 @@ |
const int kMaxSockets = 32; |
const int kMaxSocketsPerGroup = 6; |
+// Make sure |handle|'s load times are set correctly. DNS and connect start |
+// times comes from mock client sockets in these tests, so primarily serves to |
+// check those times were copied, and ssl times / connect end are set correctly. |
+void TestLoadTimingInfo(const ClientSocketHandle& handle) { |
+ LoadTimingInfo load_timing_info; |
+ EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); |
+ |
+ EXPECT_FALSE(load_timing_info.socket_reused); |
+ // None of these tests use a NetLog. |
+ EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
+ |
+ EXPECT_FALSE(load_timing_info.connect_timing.dns_start.is_null()); |
+ EXPECT_LE(load_timing_info.connect_timing.dns_start, |
+ load_timing_info.connect_timing.dns_end); |
+ EXPECT_LE(load_timing_info.connect_timing.dns_end, |
+ load_timing_info.connect_timing.connect_start); |
+ EXPECT_LE(load_timing_info.connect_timing.connect_start, |
+ load_timing_info.connect_timing.ssl_start); |
+ EXPECT_LE(load_timing_info.connect_timing.ssl_start, |
+ load_timing_info.connect_timing.ssl_end); |
+ EXPECT_LE(load_timing_info.connect_timing.ssl_end, |
+ load_timing_info.connect_timing.connect_end); |
+ |
+ // None of these should be set by the socket handle. |
+ EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
+ EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
+ EXPECT_TRUE(load_timing_info.send_start.is_null()); |
+ EXPECT_TRUE(load_timing_info.send_end.is_null()); |
+ EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
+} |
+ |
+// Just like TestLoadTimingInfo, except DNS times are expected to be null, for |
+// tests over proxies that do DNS lookups themselves. |
+void TestLoadTimingInfoNoDns(const ClientSocketHandle& handle) { |
+ LoadTimingInfo load_timing_info; |
+ EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); |
+ |
+ // None of these tests use a NetLog. |
+ EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
+ |
+ EXPECT_FALSE(load_timing_info.socket_reused); |
+ |
+ EXPECT_TRUE(load_timing_info.connect_timing.dns_start.is_null()); |
+ EXPECT_TRUE(load_timing_info.connect_timing.dns_end.is_null()); |
+ EXPECT_FALSE(load_timing_info.connect_timing.connect_start.is_null()); |
+ EXPECT_LE(load_timing_info.connect_timing.connect_start, |
+ load_timing_info.connect_timing.ssl_start); |
+ EXPECT_LE(load_timing_info.connect_timing.ssl_start, |
+ load_timing_info.connect_timing.ssl_end); |
+ EXPECT_LE(load_timing_info.connect_timing.ssl_end, |
+ load_timing_info.connect_timing.connect_end); |
+ |
+ // None of these should be set by the socket handle. |
+ EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
+ EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
+ EXPECT_TRUE(load_timing_info.send_start.is_null()); |
+ EXPECT_TRUE(load_timing_info.send_end.is_null()); |
+ EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
+} |
+ |
class SSLClientSocketPoolTest : public testing::Test { |
protected: |
SSLClientSocketPoolTest() |
@@ -236,6 +297,7 @@ |
EXPECT_EQ(OK, rv); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
} |
TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { |
@@ -259,6 +321,7 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
} |
TEST_F(SSLClientSocketPoolTest, DirectCertError) { |
@@ -282,6 +345,7 @@ |
EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
} |
TEST_F(SSLClientSocketPoolTest, DirectSSLError) { |
@@ -330,6 +394,7 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
} |
@@ -381,6 +446,7 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
@@ -413,6 +479,7 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfo(handle); |
SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
@@ -483,6 +550,9 @@ |
EXPECT_EQ(OK, rv); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
+ // don't go through the real logic, unlike in the HTTP proxy tests. |
+ TestLoadTimingInfo(handle); |
} |
TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { |
@@ -506,6 +576,9 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
+ // don't go through the real logic, unlike in the HTTP proxy tests. |
+ TestLoadTimingInfo(handle); |
} |
TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { |
@@ -580,6 +653,7 @@ |
EXPECT_EQ(OK, rv); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfoNoDns(handle); |
} |
TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { |
@@ -614,6 +688,7 @@ |
EXPECT_EQ(OK, callback.WaitForResult()); |
EXPECT_TRUE(handle.is_initialized()); |
EXPECT_TRUE(handle.socket()); |
+ TestLoadTimingInfoNoDns(handle); |
} |
TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { |