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 |