| 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 |