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 21 matching lines...) Expand all Loading... |
32 | 32 |
33 const int kMaxSockets = 32; | 33 const int kMaxSockets = 32; |
34 const int kMaxSocketsPerGroup = 6; | 34 const int kMaxSocketsPerGroup = 6; |
35 const RequestPriority kDefaultPriority = LOW; | 35 const RequestPriority kDefaultPriority = LOW; |
36 | 36 |
37 class TransportClientSocketPoolTest : public testing::Test { | 37 class TransportClientSocketPoolTest : public testing::Test { |
38 protected: | 38 protected: |
39 TransportClientSocketPoolTest() | 39 TransportClientSocketPoolTest() |
40 : connect_backup_jobs_enabled_( | 40 : connect_backup_jobs_enabled_( |
41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), | 41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), |
42 params_( | 42 params_(new TransportSocketParams( |
43 new TransportSocketParams( | 43 HostPortPair("www.google.com", 80), |
44 HostPortPair("www.google.com", 80), | 44 false, |
45 false, | 45 OnHostResolutionCallback(), |
46 OnHostResolutionCallback(), | 46 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), |
47 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), | |
48 host_resolver_(new MockHostResolver), | 47 host_resolver_(new MockHostResolver), |
49 client_socket_factory_(&net_log_), | 48 client_socket_factory_(&net_log_), |
50 pool_(kMaxSockets, | 49 pool_(kMaxSockets, |
51 kMaxSocketsPerGroup, | 50 kMaxSocketsPerGroup, |
52 host_resolver_.get(), | 51 host_resolver_.get(), |
53 &client_socket_factory_, | 52 &client_socket_factory_, |
54 NULL) { | 53 NULL, |
55 } | 54 NULL) {} |
56 | 55 |
57 ~TransportClientSocketPoolTest() override { | 56 ~TransportClientSocketPoolTest() override { |
58 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( | 57 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( |
59 connect_backup_jobs_enabled_); | 58 connect_backup_jobs_enabled_); |
60 } | 59 } |
61 | 60 |
62 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() { | 61 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() { |
63 return new TransportSocketParams( | 62 return new TransportSocketParams( |
64 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), | 63 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), |
65 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED); | 64 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED); |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 | 847 |
849 // Reset for the next case. | 848 // Reset for the next case. |
850 host_resolver_->set_synchronous_mode(false); | 849 host_resolver_->set_synchronous_mode(false); |
851 } | 850 } |
852 | 851 |
853 // Test the case of the IPv6 address stalling, and falling back to the IPv4 | 852 // Test the case of the IPv6 address stalling, and falling back to the IPv4 |
854 // socket which finishes first. | 853 // socket which finishes first. |
855 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv4FinishesFirst) { | 854 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv4FinishesFirst) { |
856 // Create a pool without backup jobs. | 855 // Create a pool without backup jobs. |
857 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 856 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
858 TransportClientSocketPool pool(kMaxSockets, | 857 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
859 kMaxSocketsPerGroup, | 858 host_resolver_.get(), &client_socket_factory_, |
860 host_resolver_.get(), | 859 NULL, NULL); |
861 &client_socket_factory_, | |
862 NULL); | |
863 | 860 |
864 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 861 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
865 // This is the IPv6 socket. It stalls, but presents one failed connection | 862 // This is the IPv6 socket. It stalls, but presents one failed connection |
866 // attempt on GetConnectionAttempts. | 863 // attempt on GetConnectionAttempts. |
867 MockTransportClientSocketFactory::MOCK_STALLED_FAILING_CLIENT_SOCKET, | 864 MockTransportClientSocketFactory::MOCK_STALLED_FAILING_CLIENT_SOCKET, |
868 // This is the IPv4 socket. | 865 // This is the IPv4 socket. |
869 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; | 866 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; |
870 | 867 |
871 client_socket_factory_.set_client_socket_types(case_types, 2); | 868 client_socket_factory_.set_client_socket_types(case_types, 2); |
872 | 869 |
(...skipping 26 matching lines...) Expand all Loading... |
899 | 896 |
900 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 897 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
901 } | 898 } |
902 | 899 |
903 // 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 |
904 // 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 |
905 // finish first. | 902 // finish first. |
906 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { | 903 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { |
907 // Create a pool without backup jobs. | 904 // Create a pool without backup jobs. |
908 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 905 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
909 TransportClientSocketPool pool(kMaxSockets, | 906 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
910 kMaxSocketsPerGroup, | 907 host_resolver_.get(), &client_socket_factory_, |
911 host_resolver_.get(), | 908 NULL, NULL); |
912 &client_socket_factory_, | |
913 NULL); | |
914 | 909 |
915 MockTransportClientSocketFactory::ClientSocketType case_types[] = { | 910 MockTransportClientSocketFactory::ClientSocketType case_types[] = { |
916 // This is the IPv6 socket. | 911 // This is the IPv6 socket. |
917 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, | 912 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, |
918 // This is the IPv4 socket. It stalls, but presents one failed connection | 913 // This is the IPv4 socket. It stalls, but presents one failed connection |
919 // attempt on GetConnectionATtempts. | 914 // attempt on GetConnectionATtempts. |
920 MockTransportClientSocketFactory::MOCK_STALLED_FAILING_CLIENT_SOCKET}; | 915 MockTransportClientSocketFactory::MOCK_STALLED_FAILING_CLIENT_SOCKET}; |
921 | 916 |
922 client_socket_factory_.set_client_socket_types(case_types, 2); | 917 client_socket_factory_.set_client_socket_types(case_types, 2); |
923 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( | 918 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( |
(...skipping 26 matching lines...) Expand all Loading... |
950 ASSERT_EQ(1u, attempts.size()); | 945 ASSERT_EQ(1u, attempts.size()); |
951 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); | 946 EXPECT_EQ(ERR_CONNECTION_FAILED, attempts[0].result); |
952 EXPECT_EQ(kIPv4AddressSize, attempts[0].endpoint.address().size()); | 947 EXPECT_EQ(kIPv4AddressSize, attempts[0].endpoint.address().size()); |
953 | 948 |
954 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 949 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
955 } | 950 } |
956 | 951 |
957 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { | 952 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { |
958 // Create a pool without backup jobs. | 953 // Create a pool without backup jobs. |
959 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 954 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
960 TransportClientSocketPool pool(kMaxSockets, | 955 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
961 kMaxSocketsPerGroup, | 956 host_resolver_.get(), &client_socket_factory_, |
962 host_resolver_.get(), | 957 NULL, NULL); |
963 &client_socket_factory_, | |
964 NULL); | |
965 | 958 |
966 client_socket_factory_.set_default_client_socket_type( | 959 client_socket_factory_.set_default_client_socket_type( |
967 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 960 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
968 | 961 |
969 // Resolve an AddressList with only IPv6 addresses. | 962 // Resolve an AddressList with only IPv6 addresses. |
970 host_resolver_->rules() | 963 host_resolver_->rules() |
971 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); | 964 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); |
972 | 965 |
973 TestCompletionCallback callback; | 966 TestCompletionCallback callback; |
974 ClientSocketHandle handle; | 967 ClientSocketHandle handle; |
(...skipping 10 matching lines...) Expand all Loading... |
985 IPEndPoint endpoint; | 978 IPEndPoint endpoint; |
986 handle.socket()->GetLocalAddress(&endpoint); | 979 handle.socket()->GetLocalAddress(&endpoint); |
987 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 980 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); |
988 EXPECT_EQ(0u, handle.connection_attempts().size()); | 981 EXPECT_EQ(0u, handle.connection_attempts().size()); |
989 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 982 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
990 } | 983 } |
991 | 984 |
992 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { | 985 TEST_F(TransportClientSocketPoolTest, IPv4HasNoFallback) { |
993 // Create a pool without backup jobs. | 986 // Create a pool without backup jobs. |
994 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 987 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
995 TransportClientSocketPool pool(kMaxSockets, | 988 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
996 kMaxSocketsPerGroup, | 989 host_resolver_.get(), &client_socket_factory_, |
997 host_resolver_.get(), | 990 NULL, NULL); |
998 &client_socket_factory_, | |
999 NULL); | |
1000 | 991 |
1001 client_socket_factory_.set_default_client_socket_type( | 992 client_socket_factory_.set_default_client_socket_type( |
1002 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 993 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1003 | 994 |
1004 // Resolve an AddressList with only IPv4 addresses. | 995 // Resolve an AddressList with only IPv4 addresses. |
1005 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 996 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
1006 | 997 |
1007 TestCompletionCallback callback; | 998 TestCompletionCallback callback; |
1008 ClientSocketHandle handle; | 999 ClientSocketHandle handle; |
1009 int rv = | 1000 int rv = |
(...skipping 14 matching lines...) Expand all Loading... |
1024 } | 1015 } |
1025 | 1016 |
1026 // 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 |
1027 // when we have only an IPv4 address. | 1018 // when we have only an IPv4 address. |
1028 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { | 1019 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv4WithNoFallback) { |
1029 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 1020 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); |
1030 MockClientSocketFactory factory; | 1021 MockClientSocketFactory factory; |
1031 factory.AddSocketDataProvider(&socket_data); | 1022 factory.AddSocketDataProvider(&socket_data); |
1032 // Create a pool without backup jobs. | 1023 // Create a pool without backup jobs. |
1033 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1024 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1034 TransportClientSocketPool pool(kMaxSockets, | 1025 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
1035 kMaxSocketsPerGroup, | 1026 host_resolver_.get(), &factory, NULL, NULL); |
1036 host_resolver_.get(), | |
1037 &factory, | |
1038 NULL); | |
1039 // Resolve an AddressList with only IPv4 addresses. | 1027 // Resolve an AddressList with only IPv4 addresses. |
1040 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 1028 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
1041 | 1029 |
1042 TestCompletionCallback callback; | 1030 TestCompletionCallback callback; |
1043 ClientSocketHandle handle; | 1031 ClientSocketHandle handle; |
1044 // Enable TCP FastOpen in TransportSocketParams. | 1032 // Enable TCP FastOpen in TransportSocketParams. |
1045 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1033 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1046 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1034 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, |
1047 callback.callback(), &pool, BoundNetLog()); | 1035 callback.callback(), &pool, BoundNetLog()); |
1048 EXPECT_EQ(OK, callback.WaitForResult()); | 1036 EXPECT_EQ(OK, callback.WaitForResult()); |
1049 EXPECT_TRUE(socket_data.IsUsingTCPFastOpen()); | 1037 EXPECT_TRUE(socket_data.IsUsingTCPFastOpen()); |
1050 } | 1038 } |
1051 | 1039 |
1052 // Test that if TCP FastOpen is enabled, it is set on the socket | 1040 // Test that if TCP FastOpen is enabled, it is set on the socket |
1053 // when we have only IPv6 addresses. | 1041 // when we have only IPv6 addresses. |
1054 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { | 1042 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { |
1055 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 1043 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); |
1056 MockClientSocketFactory factory; | 1044 MockClientSocketFactory factory; |
1057 factory.AddSocketDataProvider(&socket_data); | 1045 factory.AddSocketDataProvider(&socket_data); |
1058 // Create a pool without backup jobs. | 1046 // Create a pool without backup jobs. |
1059 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1047 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1060 TransportClientSocketPool pool(kMaxSockets, | 1048 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
1061 kMaxSocketsPerGroup, | 1049 host_resolver_.get(), &factory, NULL, NULL); |
1062 host_resolver_.get(), | |
1063 &factory, | |
1064 NULL); | |
1065 client_socket_factory_.set_default_client_socket_type( | 1050 client_socket_factory_.set_default_client_socket_type( |
1066 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 1051 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1067 // Resolve an AddressList with only IPv6 addresses. | 1052 // Resolve an AddressList with only IPv6 addresses. |
1068 host_resolver_->rules() | 1053 host_resolver_->rules() |
1069 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); | 1054 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); |
1070 | 1055 |
1071 TestCompletionCallback callback; | 1056 TestCompletionCallback callback; |
1072 ClientSocketHandle handle; | 1057 ClientSocketHandle handle; |
1073 // Enable TCP FastOpen in TransportSocketParams. | 1058 // Enable TCP FastOpen in TransportSocketParams. |
1074 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1059 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1075 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1060 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, |
1076 callback.callback(), &pool, BoundNetLog()); | 1061 callback.callback(), &pool, BoundNetLog()); |
1077 EXPECT_EQ(OK, callback.WaitForResult()); | 1062 EXPECT_EQ(OK, callback.WaitForResult()); |
1078 EXPECT_TRUE(socket_data.IsUsingTCPFastOpen()); | 1063 EXPECT_TRUE(socket_data.IsUsingTCPFastOpen()); |
1079 } | 1064 } |
1080 | 1065 |
1081 // Test that if TCP FastOpen is enabled, it does not do anything when there | 1066 // Test that if TCP FastOpen is enabled, it does not do anything when there |
1082 // is a IPv6 address with fallback to an IPv4 address. This test tests the case | 1067 // is a IPv6 address with fallback to an IPv4 address. This test tests the case |
1083 // when the IPv6 connect fails and the IPv4 one succeeds. | 1068 // when the IPv6 connect fails and the IPv4 one succeeds. |
1084 TEST_F(TransportClientSocketPoolTest, | 1069 TEST_F(TransportClientSocketPoolTest, |
1085 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { | 1070 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { |
1086 SequencedSocketData socket_data_1(nullptr, 0, nullptr, 0); | 1071 SequencedSocketData socket_data_1(nullptr, 0, nullptr, 0); |
1087 socket_data_1.set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING)); | 1072 socket_data_1.set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING)); |
1088 SequencedSocketData socket_data_2(nullptr, 0, nullptr, 0); | 1073 SequencedSocketData socket_data_2(nullptr, 0, nullptr, 0); |
1089 MockClientSocketFactory factory; | 1074 MockClientSocketFactory factory; |
1090 factory.AddSocketDataProvider(&socket_data_1); | 1075 factory.AddSocketDataProvider(&socket_data_1); |
1091 factory.AddSocketDataProvider(&socket_data_2); | 1076 factory.AddSocketDataProvider(&socket_data_2); |
1092 // Create a pool without backup jobs. | 1077 // Create a pool without backup jobs. |
1093 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1078 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1094 TransportClientSocketPool pool(kMaxSockets, | 1079 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
1095 kMaxSocketsPerGroup, | 1080 host_resolver_.get(), &factory, NULL, NULL); |
1096 host_resolver_.get(), | |
1097 &factory, | |
1098 NULL); | |
1099 | 1081 |
1100 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1082 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1101 host_resolver_->rules() | 1083 host_resolver_->rules() |
1102 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 1084 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
1103 | 1085 |
1104 TestCompletionCallback callback; | 1086 TestCompletionCallback callback; |
1105 ClientSocketHandle handle; | 1087 ClientSocketHandle handle; |
1106 // Enable TCP FastOpen in TransportSocketParams. | 1088 // Enable TCP FastOpen in TransportSocketParams. |
1107 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1089 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1108 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1090 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, |
(...skipping 10 matching lines...) Expand all Loading... |
1119 // 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 |
1120 // 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 |
1121 // when the IPv6 connect succeeds. | 1103 // when the IPv6 connect succeeds. |
1122 TEST_F(TransportClientSocketPoolTest, | 1104 TEST_F(TransportClientSocketPoolTest, |
1123 NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { | 1105 NoTCPFastOpenOnIPv6SuccessWithIPv4Fallback) { |
1124 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); | 1106 SequencedSocketData socket_data(nullptr, 0, nullptr, 0); |
1125 MockClientSocketFactory factory; | 1107 MockClientSocketFactory factory; |
1126 factory.AddSocketDataProvider(&socket_data); | 1108 factory.AddSocketDataProvider(&socket_data); |
1127 // Create a pool without backup jobs. | 1109 // Create a pool without backup jobs. |
1128 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1110 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1129 TransportClientSocketPool pool(kMaxSockets, | 1111 TransportClientSocketPool pool(kMaxSockets, kMaxSocketsPerGroup, |
1130 kMaxSocketsPerGroup, | 1112 host_resolver_.get(), &factory, NULL, NULL); |
1131 host_resolver_.get(), | |
1132 &factory, | |
1133 NULL); | |
1134 | 1113 |
1135 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1114 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1136 host_resolver_->rules() | 1115 host_resolver_->rules() |
1137 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 1116 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
1138 | 1117 |
1139 TestCompletionCallback callback; | 1118 TestCompletionCallback callback; |
1140 ClientSocketHandle handle; | 1119 ClientSocketHandle handle; |
1141 // Enable TCP FastOpen in TransportSocketParams. | 1120 // Enable TCP FastOpen in TransportSocketParams. |
1142 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1121 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1143 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, | 1122 handle.Init("a", params, LOW, ClientSocketPool::RespectLimits::ENABLED, |
1144 callback.callback(), &pool, BoundNetLog()); | 1123 callback.callback(), &pool, BoundNetLog()); |
1145 EXPECT_EQ(OK, callback.WaitForResult()); | 1124 EXPECT_EQ(OK, callback.WaitForResult()); |
1146 IPEndPoint endpoint; | 1125 IPEndPoint endpoint; |
1147 handle.socket()->GetPeerAddress(&endpoint); | 1126 handle.socket()->GetPeerAddress(&endpoint); |
1148 // Verify that the socket used is connected to the IPv6 address. | 1127 // Verify that the socket used is connected to the IPv6 address. |
1149 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1128 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); |
1150 // Verify that TCP FastOpen was not turned on for the socket. | 1129 // Verify that TCP FastOpen was not turned on for the socket. |
1151 EXPECT_FALSE(socket_data.IsUsingTCPFastOpen()); | 1130 EXPECT_FALSE(socket_data.IsUsingTCPFastOpen()); |
1152 } | 1131 } |
1153 | 1132 |
1154 } // namespace | 1133 } // namespace |
1155 | 1134 |
1156 } // namespace net | 1135 } // namespace net |
OLD | NEW |