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 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 BoundNetLog()); | 867 BoundNetLog()); |
868 EXPECT_EQ(ERR_IO_PENDING, rv); | 868 EXPECT_EQ(ERR_IO_PENDING, rv); |
869 EXPECT_FALSE(handle.is_initialized()); | 869 EXPECT_FALSE(handle.is_initialized()); |
870 EXPECT_FALSE(handle.socket()); | 870 EXPECT_FALSE(handle.socket()); |
871 | 871 |
872 EXPECT_EQ(OK, callback.WaitForResult()); | 872 EXPECT_EQ(OK, callback.WaitForResult()); |
873 EXPECT_TRUE(handle.is_initialized()); | 873 EXPECT_TRUE(handle.is_initialized()); |
874 EXPECT_TRUE(handle.socket()); | 874 EXPECT_TRUE(handle.socket()); |
875 IPEndPoint endpoint; | 875 IPEndPoint endpoint; |
876 handle.socket()->GetLocalAddress(&endpoint); | 876 handle.socket()->GetLocalAddress(&endpoint); |
877 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 877 EXPECT_EQ(kIPv4AddressSize, endpoint.address().bytes().size()); |
878 | 878 |
879 // Check that the failed connection attempt on the main socket is collected. | 879 // Check that the failed connection attempt on the main socket is collected. |
880 ConnectionAttempts attempts; | 880 ConnectionAttempts attempts; |
881 handle.socket()->GetConnectionAttempts(&attempts); | 881 handle.socket()->GetConnectionAttempts(&attempts); |
882 ASSERT_EQ(1u, attempts.size()); | 882 ASSERT_EQ(1u, attempts.size()); |
883 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 883 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); |
884 EXPECT_EQ(kIPv6AddressSize, attempts[0].endpoint.address().size()); | 884 EXPECT_EQ(kIPv6AddressSize, attempts[0].endpoint.address().bytes().size()); |
885 | 885 |
886 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 886 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
887 } | 887 } |
888 | 888 |
889 // Test the case of the IPv6 address being slow, thus falling back to trying to | 889 // Test the case of the IPv6 address being slow, thus falling back to trying to |
890 // connect to the IPv4 address, but having the connect to the IPv6 address | 890 // connect to the IPv4 address, but having the connect to the IPv6 address |
891 // finish first. | 891 // finish first. |
892 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { | 892 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { |
893 // Create a pool without backup jobs. | 893 // Create a pool without backup jobs. |
894 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 894 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
(...skipping 24 matching lines...) Expand all Loading... |
919 BoundNetLog()); | 919 BoundNetLog()); |
920 EXPECT_EQ(ERR_IO_PENDING, rv); | 920 EXPECT_EQ(ERR_IO_PENDING, rv); |
921 EXPECT_FALSE(handle.is_initialized()); | 921 EXPECT_FALSE(handle.is_initialized()); |
922 EXPECT_FALSE(handle.socket()); | 922 EXPECT_FALSE(handle.socket()); |
923 | 923 |
924 EXPECT_EQ(OK, callback.WaitForResult()); | 924 EXPECT_EQ(OK, callback.WaitForResult()); |
925 EXPECT_TRUE(handle.is_initialized()); | 925 EXPECT_TRUE(handle.is_initialized()); |
926 EXPECT_TRUE(handle.socket()); | 926 EXPECT_TRUE(handle.socket()); |
927 IPEndPoint endpoint; | 927 IPEndPoint endpoint; |
928 handle.socket()->GetLocalAddress(&endpoint); | 928 handle.socket()->GetLocalAddress(&endpoint); |
929 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 929 EXPECT_EQ(kIPv6AddressSize, endpoint.address().bytes().size()); |
930 | 930 |
931 // Check that the failed connection attempt on the fallback socket is | 931 // Check that the failed connection attempt on the fallback socket is |
932 // collected. | 932 // collected. |
933 ConnectionAttempts attempts; | 933 ConnectionAttempts attempts; |
934 handle.socket()->GetConnectionAttempts(&attempts); | 934 handle.socket()->GetConnectionAttempts(&attempts); |
935 ASSERT_EQ(1u, attempts.size()); | 935 ASSERT_EQ(1u, attempts.size()); |
936 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 936 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); |
937 EXPECT_EQ(kIPv4AddressSize, attempts[0].endpoint.address().size()); | 937 EXPECT_EQ(kIPv4AddressSize, attempts[0].endpoint.address().bytes().size()); |
938 | 938 |
939 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 939 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
940 } | 940 } |
941 | 941 |
942 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { | 942 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { |
943 // Create a pool without backup jobs. | 943 // Create a pool without backup jobs. |
944 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 944 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
945 TransportClientSocketPool pool(kMaxSockets, | 945 TransportClientSocketPool pool(kMaxSockets, |
946 kMaxSocketsPerGroup, | 946 kMaxSocketsPerGroup, |
947 host_resolver_.get(), | 947 host_resolver_.get(), |
(...skipping 13 matching lines...) Expand all Loading... |
961 BoundNetLog()); | 961 BoundNetLog()); |
962 EXPECT_EQ(ERR_IO_PENDING, rv); | 962 EXPECT_EQ(ERR_IO_PENDING, rv); |
963 EXPECT_FALSE(handle.is_initialized()); | 963 EXPECT_FALSE(handle.is_initialized()); |
964 EXPECT_FALSE(handle.socket()); | 964 EXPECT_FALSE(handle.socket()); |
965 | 965 |
966 EXPECT_EQ(OK, callback.WaitForResult()); | 966 EXPECT_EQ(OK, callback.WaitForResult()); |
967 EXPECT_TRUE(handle.is_initialized()); | 967 EXPECT_TRUE(handle.is_initialized()); |
968 EXPECT_TRUE(handle.socket()); | 968 EXPECT_TRUE(handle.socket()); |
969 IPEndPoint endpoint; | 969 IPEndPoint endpoint; |
970 handle.socket()->GetLocalAddress(&endpoint); | 970 handle.socket()->GetLocalAddress(&endpoint); |
971 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 971 EXPECT_EQ(kIPv6AddressSize, endpoint.address().bytes().size()); |
972 EXPECT_EQ(0u, handle.connection_attempts().size()); | 972 EXPECT_EQ(0u, handle.connection_attempts().size()); |
973 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 973 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
974 } | 974 } |
975 | 975 |
976 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { | 976 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { |
977 // Create a pool without backup jobs. | 977 // Create a pool without backup jobs. |
978 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 978 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
979 TransportClientSocketPool pool(kMaxSockets, | 979 TransportClientSocketPool pool(kMaxSockets, |
980 kMaxSocketsPerGroup, | 980 kMaxSocketsPerGroup, |
981 host_resolver_.get(), | 981 host_resolver_.get(), |
(...skipping 12 matching lines...) Expand all Loading... |
994 BoundNetLog()); | 994 BoundNetLog()); |
995 EXPECT_EQ(ERR_IO_PENDING, rv); | 995 EXPECT_EQ(ERR_IO_PENDING, rv); |
996 EXPECT_FALSE(handle.is_initialized()); | 996 EXPECT_FALSE(handle.is_initialized()); |
997 EXPECT_FALSE(handle.socket()); | 997 EXPECT_FALSE(handle.socket()); |
998 | 998 |
999 EXPECT_EQ(OK, callback.WaitForResult()); | 999 EXPECT_EQ(OK, callback.WaitForResult()); |
1000 EXPECT_TRUE(handle.is_initialized()); | 1000 EXPECT_TRUE(handle.is_initialized()); |
1001 EXPECT_TRUE(handle.socket()); | 1001 EXPECT_TRUE(handle.socket()); |
1002 IPEndPoint endpoint; | 1002 IPEndPoint endpoint; |
1003 handle.socket()->GetLocalAddress(&endpoint); | 1003 handle.socket()->GetLocalAddress(&endpoint); |
1004 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1004 EXPECT_EQ(kIPv4AddressSize, endpoint.address().bytes().size()); |
1005 EXPECT_EQ(0u, handle.connection_attempts().size()); | 1005 EXPECT_EQ(0u, handle.connection_attempts().size()); |
1006 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 1006 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
1007 } | 1007 } |
1008 | 1008 |
1009 // Test that if TCP FastOpen is enabled, it is set on the socket | 1009 // Test that if TCP FastOpen is enabled, it is set on the socket |
1010 // when we have only an IPv4 address. | 1010 // when we have only an IPv4 address. |
1011 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { | 1011 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { |
1012 // Create a pool without backup jobs. | 1012 // Create a pool without backup jobs. |
1013 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1013 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1014 TransportClientSocketPool pool(kMaxSockets, | 1014 TransportClientSocketPool pool(kMaxSockets, |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1081 | 1081 |
1082 TestCompletionCallback callback; | 1082 TestCompletionCallback callback; |
1083 ClientSocketHandle handle; | 1083 ClientSocketHandle handle; |
1084 // Enable TCP FastOpen in TransportSocketParams. | 1084 // Enable TCP FastOpen in TransportSocketParams. |
1085 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1085 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1086 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1086 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); |
1087 EXPECT_EQ(OK, callback.WaitForResult()); | 1087 EXPECT_EQ(OK, callback.WaitForResult()); |
1088 // Verify that the socket used is connected to the fallback IPv4 address. | 1088 // Verify that the socket used is connected to the fallback IPv4 address. |
1089 IPEndPoint endpoint; | 1089 IPEndPoint endpoint; |
1090 handle.socket()->GetLocalAddress(&endpoint); | 1090 handle.socket()->GetLocalAddress(&endpoint); |
1091 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1091 EXPECT_EQ(kIPv4AddressSize, endpoint.address().bytes().size()); |
1092 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 1092 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
1093 // Verify that TCP FastOpen was not turned on for the socket. | 1093 // Verify that TCP FastOpen was not turned on for the socket. |
1094 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); | 1094 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); |
1095 } | 1095 } |
1096 | 1096 |
1097 // Test that if TCP FastOpen is enabled, it does not do anything when there | 1097 // Test that if TCP FastOpen is enabled, it does not do anything when there |
1098 // is a IPv6 address with fallback to an IPv4 address. This test tests the case | 1098 // is a IPv6 address with fallback to an IPv4 address. This test tests the case |
1099 // when the IPv6 connect succeeds. | 1099 // when the IPv6 connect succeeds. |
1100 TEST_F(TransportClientSocketPoolTest, | 1100 TEST_F(TransportClientSocketPoolTest, |
1101 NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { | 1101 NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { |
(...skipping 18 matching lines...) Expand all Loading... |
1120 | 1120 |
1121 TestCompletionCallback callback; | 1121 TestCompletionCallback callback; |
1122 ClientSocketHandle handle; | 1122 ClientSocketHandle handle; |
1123 // Enable TCP FastOpen in TransportSocketParams. | 1123 // Enable TCP FastOpen in TransportSocketParams. |
1124 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1124 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1125 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1125 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); |
1126 EXPECT_EQ(OK, callback.WaitForResult()); | 1126 EXPECT_EQ(OK, callback.WaitForResult()); |
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 IPEndPoint endpoint; | 1128 IPEndPoint endpoint; |
1129 handle.socket()->GetLocalAddress(&endpoint); | 1129 handle.socket()->GetLocalAddress(&endpoint); |
1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().bytes().size()); |
1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
1132 // Verify that TCP FastOpen was not turned on for the socket. | 1132 // Verify that TCP FastOpen was not turned on for the socket. |
1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); | 1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); |
1134 } | 1134 } |
1135 | 1135 |
1136 } // namespace | 1136 } // namespace |
1137 | 1137 |
1138 } // namespace net | 1138 } // namespace net |
OLD | NEW |