| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "net/socket/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" | 
| 9 #include "base/callback.h" | 9 #include "base/callback.h" | 
| 10 #include "base/macros.h" | 10 #include "base/macros.h" | 
| (...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 878                   callback.callback(), &pool, BoundNetLog()); | 878                   callback.callback(), &pool, BoundNetLog()); | 
| 879   EXPECT_EQ(ERR_IO_PENDING, rv); | 879   EXPECT_EQ(ERR_IO_PENDING, rv); | 
| 880   EXPECT_FALSE(handle.is_initialized()); | 880   EXPECT_FALSE(handle.is_initialized()); | 
| 881   EXPECT_FALSE(handle.socket()); | 881   EXPECT_FALSE(handle.socket()); | 
| 882 | 882 | 
| 883   EXPECT_EQ(OK, callback.WaitForResult()); | 883   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 884   EXPECT_TRUE(handle.is_initialized()); | 884   EXPECT_TRUE(handle.is_initialized()); | 
| 885   EXPECT_TRUE(handle.socket()); | 885   EXPECT_TRUE(handle.socket()); | 
| 886   IPEndPoint endpoint; | 886   IPEndPoint endpoint; | 
| 887   handle.socket()->GetLocalAddress(&endpoint); | 887   handle.socket()->GetLocalAddress(&endpoint); | 
| 888   EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 888   EXPECT_TRUE(endpoint.address().IsIPv4()); | 
| 889 | 889 | 
| 890   // Check that the failed connection attempt on the main socket is collected. | 890   // Check that the failed connection attempt on the main socket is collected. | 
| 891   ConnectionAttempts attempts; | 891   ConnectionAttempts attempts; | 
| 892   handle.socket()->GetConnectionAttempts(&attempts); | 892   handle.socket()->GetConnectionAttempts(&attempts); | 
| 893   ASSERT_EQ(1u, attempts.size()); | 893   ASSERT_EQ(1u, attempts.size()); | 
| 894   EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 894   EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 
| 895   EXPECT_EQ(kIPv6AddressSize, attempts[0].endpoint.address().size()); | 895   EXPECT_TRUE(attempts[0].endpoint.address().IsIPv6()); | 
| 896 | 896 | 
| 897   EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 897   EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 
| 898 } | 898 } | 
| 899 | 899 | 
| 900 // Test the case of the IPv6 address being slow, thus falling back to trying to | 900 // Test the case of the IPv6 address being slow, thus falling back to trying to | 
| 901 // connect to the IPv4 address, but having the connect to the IPv6 address | 901 // connect to the IPv4 address, but having the connect to the IPv6 address | 
| 902 // finish first. | 902 // finish first. | 
| 903 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { | 903 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { | 
| 904   // Create a pool without backup jobs. | 904   // Create a pool without backup jobs. | 
| 905   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 905   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 929                   callback.callback(), &pool, BoundNetLog()); | 929                   callback.callback(), &pool, BoundNetLog()); | 
| 930   EXPECT_EQ(ERR_IO_PENDING, rv); | 930   EXPECT_EQ(ERR_IO_PENDING, rv); | 
| 931   EXPECT_FALSE(handle.is_initialized()); | 931   EXPECT_FALSE(handle.is_initialized()); | 
| 932   EXPECT_FALSE(handle.socket()); | 932   EXPECT_FALSE(handle.socket()); | 
| 933 | 933 | 
| 934   EXPECT_EQ(OK, callback.WaitForResult()); | 934   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 935   EXPECT_TRUE(handle.is_initialized()); | 935   EXPECT_TRUE(handle.is_initialized()); | 
| 936   EXPECT_TRUE(handle.socket()); | 936   EXPECT_TRUE(handle.socket()); | 
| 937   IPEndPoint endpoint; | 937   IPEndPoint endpoint; | 
| 938   handle.socket()->GetLocalAddress(&endpoint); | 938   handle.socket()->GetLocalAddress(&endpoint); | 
| 939   EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 939   EXPECT_TRUE(endpoint.address().IsIPv6()); | 
| 940 | 940 | 
| 941   // Check that the failed connection attempt on the fallback socket is | 941   // Check that the failed connection attempt on the fallback socket is | 
| 942   // collected. | 942   // collected. | 
| 943   ConnectionAttempts attempts; | 943   ConnectionAttempts attempts; | 
| 944   handle.socket()->GetConnectionAttempts(&attempts); | 944   handle.socket()->GetConnectionAttempts(&attempts); | 
| 945   ASSERT_EQ(1u, attempts.size()); | 945   ASSERT_EQ(1u, attempts.size()); | 
| 946   EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 946   EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 
| 947   EXPECT_EQ(kIPv4AddressSize, attempts[0].endpoint.address().size()); | 947   EXPECT_TRUE(attempts[0].endpoint.address().IsIPv4()); | 
| 948 | 948 | 
| 949   EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 949   EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 
| 950 } | 950 } | 
| 951 | 951 | 
| 952 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { | 952 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { | 
| 953   // Create a pool without backup jobs. | 953   // Create a pool without backup jobs. | 
| 954   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 954   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 
| 955   TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, | 955   TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, | 
| 956                                  host_resolver_.get(), &client_socket_factory_, | 956                                  host_resolver_.get(), &client_socket_factory_, | 
| 957                                  NULL, NULL); | 957                                  NULL, NULL); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 970                   callback.callback(), &pool, BoundNetLog()); | 970                   callback.callback(), &pool, BoundNetLog()); | 
| 971   EXPECT_EQ(ERR_IO_PENDING, rv); | 971   EXPECT_EQ(ERR_IO_PENDING, rv); | 
| 972   EXPECT_FALSE(handle.is_initialized()); | 972   EXPECT_FALSE(handle.is_initialized()); | 
| 973   EXPECT_FALSE(handle.socket()); | 973   EXPECT_FALSE(handle.socket()); | 
| 974 | 974 | 
| 975   EXPECT_EQ(OK, callback.WaitForResult()); | 975   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 976   EXPECT_TRUE(handle.is_initialized()); | 976   EXPECT_TRUE(handle.is_initialized()); | 
| 977   EXPECT_TRUE(handle.socket()); | 977   EXPECT_TRUE(handle.socket()); | 
| 978   IPEndPoint endpoint; | 978   IPEndPoint endpoint; | 
| 979   handle.socket()->GetLocalAddress(&endpoint); | 979   handle.socket()->GetLocalAddress(&endpoint); | 
| 980   EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 980   EXPECT_TRUE(endpoint.address().IsIPv6()); | 
| 981   EXPECT_EQ(0u, handle.connection_attempts().size()); | 981   EXPECT_EQ(0u, handle.connection_attempts().size()); | 
| 982   EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 982   EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 
| 983 } | 983 } | 
| 984 | 984 | 
| 985 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { | 985 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { | 
| 986   // Create a pool without backup jobs. | 986   // Create a pool without backup jobs. | 
| 987   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 987   ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 
| 988   TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, | 988   TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, | 
| 989                                  host_resolver_.get(), &client_socket_factory_, | 989                                  host_resolver_.get(), &client_socket_factory_, | 
| 990                                  NULL, NULL); | 990                                  NULL, NULL); | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 1002                   callback.callback(), &pool, BoundNetLog()); | 1002                   callback.callback(), &pool, BoundNetLog()); | 
| 1003   EXPECT_EQ(ERR_IO_PENDING, rv); | 1003   EXPECT_EQ(ERR_IO_PENDING, rv); | 
| 1004   EXPECT_FALSE(handle.is_initialized()); | 1004   EXPECT_FALSE(handle.is_initialized()); | 
| 1005   EXPECT_FALSE(handle.socket()); | 1005   EXPECT_FALSE(handle.socket()); | 
| 1006 | 1006 | 
| 1007   EXPECT_EQ(OK, callback.WaitForResult()); | 1007   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 1008   EXPECT_TRUE(handle.is_initialized()); | 1008   EXPECT_TRUE(handle.is_initialized()); | 
| 1009   EXPECT_TRUE(handle.socket()); | 1009   EXPECT_TRUE(handle.socket()); | 
| 1010   IPEndPoint endpoint; | 1010   IPEndPoint endpoint; | 
| 1011   handle.socket()->GetLocalAddress(&endpoint); | 1011   handle.socket()->GetLocalAddress(&endpoint); | 
| 1012   EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1012   EXPECT_TRUE(endpoint.address().IsIPv4()); | 
| 1013   EXPECT_EQ(0u, handle.connection_attempts().size()); | 1013   EXPECT_EQ(0u, handle.connection_attempts().size()); | 
| 1014   EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 1014   EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 
| 1015 } | 1015 } | 
| 1016 | 1016 | 
| 1017 // Test that if TCP FastOpen is enabled, it is set on the socket | 1017 // Test that if TCP FastOpen is enabled, it is set on the socket | 
| 1018 // when we have only an IPv4 address. | 1018 // when we have only an IPv4 address. | 
| 1019 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { | 1019 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { | 
| 1020   SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 1020   SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 
| 1021   MockClientSocketFactory factory; | 1021   MockClientSocketFactory factory; | 
| 1022   factory.AddSocketDataProvider(&socket_data); | 1022   factory.AddSocketDataProvider(&socket_data); | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1086   TestCompletionCallback callback; | 1086   TestCompletionCallback callback; | 
| 1087   ClientSocketHandle handle; | 1087   ClientSocketHandle handle; | 
| 1088   // Enable TCP FastOpen in TransportSocketParams. | 1088   // Enable TCP FastOpen in TransportSocketParams. | 
| 1089   scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1089   scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 
| 1090   handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1090   handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 
| 1091               callback.callback(), &pool, BoundNetLog()); | 1091               callback.callback(), &pool, BoundNetLog()); | 
| 1092   EXPECT_EQ(OK, callback.WaitForResult()); | 1092   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 1093   // Verify that the socket used is connected to the fallback IPv4 address. | 1093   // Verify that the socket used is connected to the fallback IPv4 address. | 
| 1094   IPEndPoint endpoint; | 1094   IPEndPoint endpoint; | 
| 1095   handle.socket()->GetPeerAddress(&endpoint); | 1095   handle.socket()->GetPeerAddress(&endpoint); | 
| 1096   EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1096   EXPECT_TRUE(endpoint.address().IsIPv4()); | 
| 1097   // Verify that TCP FastOpen was not turned on for the socket. | 1097   // Verify that TCP FastOpen was not turned on for the socket. | 
| 1098   EXPECT_FALSE(socket_data_1.IsUsingTCPFastOpen()); | 1098   EXPECT_FALSE(socket_data_1.IsUsingTCPFastOpen()); | 
| 1099 } | 1099 } | 
| 1100 | 1100 | 
| 1101 // Test that if TCP FastOpen is enabled, it does not do anything when there | 1101 // Test that if TCP FastOpen is enabled, it does not do anything when there | 
| 1102 // is a IPv6 address with fallback to an IPv4 address. This test tests the case | 1102 // is a IPv6 address with fallback to an IPv4 address. This test tests the case | 
| 1103 // when the IPv6 connect succeeds. | 1103 // when the IPv6 connect succeeds. | 
| 1104 TEST_F(TransportClientSocketPoolTest, | 1104 TEST_F(TransportClientSocketPoolTest, | 
| 1105        NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { | 1105        NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { | 
| 1106   SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 1106   SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 1118   TestCompletionCallback callback; | 1118   TestCompletionCallback callback; | 
| 1119   ClientSocketHandle handle; | 1119   ClientSocketHandle handle; | 
| 1120   // Enable TCP FastOpen in TransportSocketParams. | 1120   // Enable TCP FastOpen in TransportSocketParams. | 
| 1121   scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1121   scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 
| 1122   handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1122   handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 
| 1123               callback.callback(), &pool, BoundNetLog()); | 1123               callback.callback(), &pool, BoundNetLog()); | 
| 1124   EXPECT_EQ(OK, callback.WaitForResult()); | 1124   EXPECT_EQ(OK, callback.WaitForResult()); | 
| 1125   IPEndPoint endpoint; | 1125   IPEndPoint endpoint; | 
| 1126   handle.socket()->GetPeerAddress(&endpoint); | 1126   handle.socket()->GetPeerAddress(&endpoint); | 
| 1127   // Verify that the socket used is connected to the IPv6 address. | 1127   // Verify that the socket used is connected to the IPv6 address. | 
| 1128   EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1128   EXPECT_TRUE(endpoint.address().IsIPv6()); | 
| 1129   // Verify that TCP FastOpen was not turned on for the socket. | 1129   // Verify that TCP FastOpen was not turned on for the socket. | 
| 1130   EXPECT_FALSE(socket_data.IsUsingTCPFastOpen()); | 1130   EXPECT_FALSE(socket_data.IsUsingTCPFastOpen()); | 
| 1131 } | 1131 } | 
| 1132 | 1132 | 
| 1133 }  // namespace | 1133 }  // namespace | 
| 1134 | 1134 | 
| 1135 }  // namespace net | 1135 }  // namespace net | 
| OLD | NEW | 
|---|