| 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/client_socket_pool_base.h" | 5 #include "net/socket/client_socket_pool_base.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 using ::testing::Invoke; | 56 using ::testing::Invoke; |
| 57 using ::testing::Return; | 57 using ::testing::Return; |
| 58 | 58 |
| 59 namespace net { | 59 namespace net { |
| 60 | 60 |
| 61 namespace { | 61 namespace { |
| 62 | 62 |
| 63 const int kDefaultMaxSockets = 4; | 63 const int kDefaultMaxSockets = 4; |
| 64 const int kDefaultMaxSocketsPerGroup = 2; | 64 const int kDefaultMaxSocketsPerGroup = 2; |
| 65 const char kIdleSocketFateHistogram[] = "Net.Socket.IdleSocketFate"; | 65 const char kIdleSocketFateHistogram[] = "Net.Socket.IdleSocketFate"; |
| 66 const char kIdleSocketTimeSavingHistogram[] = |
| 67 "Net.Socket.IdleSocketTimeSaving2"; |
| 66 | 68 |
| 67 // Make sure |handle| sets load times correctly when it has been assigned a | 69 // Make sure |handle| sets load times correctly when it has been assigned a |
| 68 // reused socket. | 70 // reused socket. |
| 69 void TestLoadTimingInfoConnectedReused(const ClientSocketHandle& handle) { | 71 void TestLoadTimingInfoConnectedReused(const ClientSocketHandle& handle) { |
| 70 LoadTimingInfo load_timing_info; | 72 LoadTimingInfo load_timing_info; |
| 71 // Only pass true in as |is_reused|, as in general, HttpStream types should | 73 // Only pass true in as |is_reused|, as in general, HttpStream types should |
| 72 // have stricter concepts of reuse than socket pools. | 74 // have stricter concepts of reuse than socket pools. |
| 73 EXPECT_TRUE(handle.GetLoadTimingInfo(true, &load_timing_info)); | 75 EXPECT_TRUE(handle.GetLoadTimingInfo(true, &load_timing_info)); |
| 74 | 76 |
| 75 EXPECT_EQ(true, load_timing_info.socket_reused); | 77 EXPECT_EQ(true, load_timing_info.socket_reused); |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 static_cast<const scoped_refptr<TestSocketParams>*>(params); | 531 static_cast<const scoped_refptr<TestSocketParams>*>(params); |
| 530 | 532 |
| 531 base_.RequestSockets(group_name, *casted_params, num_sockets, net_log); | 533 base_.RequestSockets(group_name, *casted_params, num_sockets, net_log); |
| 532 } | 534 } |
| 533 | 535 |
| 534 void CancelRequest(const std::string& group_name, | 536 void CancelRequest(const std::string& group_name, |
| 535 ClientSocketHandle* handle) override { | 537 ClientSocketHandle* handle) override { |
| 536 base_.CancelRequest(group_name, handle); | 538 base_.CancelRequest(group_name, handle); |
| 537 } | 539 } |
| 538 | 540 |
| 539 void ReleaseSocket(const std::string& group_name, | 541 void ReleaseSocket( |
| 540 std::unique_ptr<StreamSocket> socket, | 542 const std::string& group_name, |
| 541 int id) override { | 543 std::unique_ptr<StreamSocket> socket, |
| 542 base_.ReleaseSocket(group_name, std::move(socket), id); | 544 int id, |
| 545 const LoadTimingInfo::ConnectTiming& connect_timing) override { |
| 546 base_.ReleaseSocket(group_name, std::move(socket), id, connect_timing); |
| 543 } | 547 } |
| 544 | 548 |
| 545 void FlushWithError(int error) override { base_.FlushWithError(error); } | 549 void FlushWithError(int error) override { base_.FlushWithError(error); } |
| 546 | 550 |
| 547 bool IsStalled() const override { return base_.IsStalled(); } | 551 bool IsStalled() const override { return base_.IsStalled(); } |
| 548 | 552 |
| 549 void CloseIdleSockets() override { base_.CloseIdleSockets(); } | 553 void CloseIdleSockets() override { base_.CloseIdleSockets(); } |
| 550 | 554 |
| 551 int IdleSocketCount() const override { return base_.idle_socket_count(); } | 555 int IdleSocketCount() const override { return base_.idle_socket_count(); } |
| 552 | 556 |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 | 890 |
| 887 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); | 891 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); |
| 888 EXPECT_THAT(StartRequest("f", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); | 892 EXPECT_THAT(StartRequest("f", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); |
| 889 EXPECT_THAT(StartRequest("g", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); | 893 EXPECT_THAT(StartRequest("g", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); |
| 890 | 894 |
| 891 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 895 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 892 | 896 |
| 893 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 897 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 894 testing::ElementsAre( | 898 testing::ElementsAre( |
| 895 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); | 899 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); |
| 900 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 896 | 901 |
| 897 EXPECT_EQ(static_cast<int>(requests_size()), | 902 EXPECT_EQ(static_cast<int>(requests_size()), |
| 898 client_socket_factory_.allocation_count()); | 903 client_socket_factory_.allocation_count()); |
| 899 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); | 904 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); |
| 900 | 905 |
| 901 EXPECT_EQ(1, GetOrderOfRequest(1)); | 906 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 902 EXPECT_EQ(2, GetOrderOfRequest(2)); | 907 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 903 EXPECT_EQ(3, GetOrderOfRequest(3)); | 908 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 904 EXPECT_EQ(4, GetOrderOfRequest(4)); | 909 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| 905 EXPECT_EQ(5, GetOrderOfRequest(5)); | 910 EXPECT_EQ(5, GetOrderOfRequest(5)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 927 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); | 932 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); |
| 928 | 933 |
| 929 // Now create a new group and verify that we don't starve it. | 934 // Now create a new group and verify that we don't starve it. |
| 930 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); | 935 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); |
| 931 | 936 |
| 932 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 937 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 933 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 938 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 934 testing::ElementsAre( | 939 testing::ElementsAre( |
| 935 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 5))); | 940 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 5))); |
| 936 | 941 |
| 942 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 943 |
| 937 EXPECT_EQ(static_cast<int>(requests_size()), | 944 EXPECT_EQ(static_cast<int>(requests_size()), |
| 938 client_socket_factory_.allocation_count()); | 945 client_socket_factory_.allocation_count()); |
| 939 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); | 946 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); |
| 940 | 947 |
| 941 EXPECT_EQ(1, GetOrderOfRequest(1)); | 948 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 942 EXPECT_EQ(2, GetOrderOfRequest(2)); | 949 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 943 EXPECT_EQ(3, GetOrderOfRequest(3)); | 950 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 944 EXPECT_EQ(4, GetOrderOfRequest(4)); | 951 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| 945 EXPECT_EQ(5, GetOrderOfRequest(5)); | 952 EXPECT_EQ(5, GetOrderOfRequest(5)); |
| 946 | 953 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 961 client_socket_factory_.allocation_count()); | 968 client_socket_factory_.allocation_count()); |
| 962 | 969 |
| 963 EXPECT_THAT(StartRequest("c", LOWEST), IsError(ERR_IO_PENDING)); | 970 EXPECT_THAT(StartRequest("c", LOWEST), IsError(ERR_IO_PENDING)); |
| 964 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING)); | 971 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING)); |
| 965 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING)); | 972 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING)); |
| 966 | 973 |
| 967 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 974 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 968 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 975 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 969 testing::ElementsAre( | 976 testing::ElementsAre( |
| 970 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); | 977 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); |
| 978 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 971 | 979 |
| 972 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); | 980 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); |
| 973 | 981 |
| 974 // First 4 requests don't have to wait, and finish in order. | 982 // First 4 requests don't have to wait, and finish in order. |
| 975 EXPECT_EQ(1, GetOrderOfRequest(1)); | 983 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 976 EXPECT_EQ(2, GetOrderOfRequest(2)); | 984 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 977 EXPECT_EQ(3, GetOrderOfRequest(3)); | 985 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 978 EXPECT_EQ(4, GetOrderOfRequest(4)); | 986 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| 979 | 987 |
| 980 // Request ("b", HIGHEST) has the highest priority, then ("a", MEDIUM), | 988 // Request ("b", HIGHEST) has the highest priority, then ("a", MEDIUM), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1000 client_socket_factory_.allocation_count()); | 1008 client_socket_factory_.allocation_count()); |
| 1001 | 1009 |
| 1002 EXPECT_THAT(StartRequest("c", MEDIUM), IsError(ERR_IO_PENDING)); | 1010 EXPECT_THAT(StartRequest("c", MEDIUM), IsError(ERR_IO_PENDING)); |
| 1003 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING)); | 1011 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING)); |
| 1004 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING)); | 1012 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING)); |
| 1005 | 1013 |
| 1006 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 1014 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 1007 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1015 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1008 testing::ElementsAre( | 1016 testing::ElementsAre( |
| 1009 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); | 1017 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 7))); |
| 1018 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1010 | 1019 |
| 1011 EXPECT_EQ(static_cast<int>(requests_size()), | 1020 EXPECT_EQ(static_cast<int>(requests_size()), |
| 1012 client_socket_factory_.allocation_count()); | 1021 client_socket_factory_.allocation_count()); |
| 1013 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); | 1022 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); |
| 1014 | 1023 |
| 1015 // First 4 requests don't have to wait, and finish in order. | 1024 // First 4 requests don't have to wait, and finish in order. |
| 1016 EXPECT_EQ(1, GetOrderOfRequest(1)); | 1025 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 1017 EXPECT_EQ(2, GetOrderOfRequest(2)); | 1026 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 1018 EXPECT_EQ(3, GetOrderOfRequest(3)); | 1027 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 1019 EXPECT_EQ(4, GetOrderOfRequest(4)); | 1028 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 base::RunLoop().RunUntilIdle(); | 1060 base::RunLoop().RunUntilIdle(); |
| 1052 | 1061 |
| 1053 // The next synchronous request should wait for its turn. | 1062 // The next synchronous request should wait for its turn. |
| 1054 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); | 1063 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); |
| 1055 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); | 1064 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING)); |
| 1056 | 1065 |
| 1057 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 1066 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 1058 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1067 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1059 testing::ElementsAre( | 1068 testing::ElementsAre( |
| 1060 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 5))); | 1069 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 5))); |
| 1070 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1061 | 1071 |
| 1062 EXPECT_EQ(static_cast<int>(requests_size()), | 1072 EXPECT_EQ(static_cast<int>(requests_size()), |
| 1063 client_socket_factory_.allocation_count()); | 1073 client_socket_factory_.allocation_count()); |
| 1064 | 1074 |
| 1065 EXPECT_EQ(1, GetOrderOfRequest(1)); | 1075 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 1066 EXPECT_EQ(2, GetOrderOfRequest(2)); | 1076 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 1067 EXPECT_EQ(3, GetOrderOfRequest(3)); | 1077 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 1068 EXPECT_EQ(4, GetOrderOfRequest(4)); | 1078 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| 1069 EXPECT_EQ(5, GetOrderOfRequest(5)); | 1079 EXPECT_EQ(5, GetOrderOfRequest(5)); |
| 1070 | 1080 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1100 EXPECT_THAT( | 1110 EXPECT_THAT( |
| 1101 histograms.GetAllSamples(kIdleSocketFateHistogram), | 1111 histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1102 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 2))); | 1112 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 2))); |
| 1103 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); | 1113 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); |
| 1104 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); | 1114 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); |
| 1105 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); | 1115 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); |
| 1106 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); | 1116 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); |
| 1107 EXPECT_THAT( | 1117 EXPECT_THAT( |
| 1108 histograms.GetAllSamples(kIdleSocketFateHistogram), | 1118 histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1109 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 2))); | 1119 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 2))); |
| 1120 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1110 } | 1121 } |
| 1111 | 1122 |
| 1112 TEST_F(ClientSocketPoolBaseTest, StallAndThenCancelAndTriggerAvailableSocket) { | 1123 TEST_F(ClientSocketPoolBaseTest, StallAndThenCancelAndTriggerAvailableSocket) { |
| 1113 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); | 1124 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); |
| 1114 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); | 1125 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); |
| 1115 | 1126 |
| 1116 ClientSocketHandle handle; | 1127 ClientSocketHandle handle; |
| 1117 TestCompletionCallback callback; | 1128 TestCompletionCallback callback; |
| 1118 EXPECT_EQ(ERR_IO_PENDING, | 1129 EXPECT_EQ(ERR_IO_PENDING, |
| 1119 handle.Init("a", params_, DEFAULT_PRIORITY, | 1130 handle.Init("a", params_, DEFAULT_PRIORITY, |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 // which is the one which we would close an idle socket for. We shouldn't | 1306 // which is the one which we would close an idle socket for. We shouldn't |
| 1296 // close an idle socket though, since we should reuse the idle socket. | 1307 // close an idle socket though, since we should reuse the idle socket. |
| 1297 EXPECT_EQ(OK, | 1308 EXPECT_EQ(OK, |
| 1298 handle.Init("0", params_, DEFAULT_PRIORITY, | 1309 handle.Init("0", params_, DEFAULT_PRIORITY, |
| 1299 ClientSocketPool::RespectLimits::ENABLED, | 1310 ClientSocketPool::RespectLimits::ENABLED, |
| 1300 callback.callback(), pool_.get(), NetLogWithSource())); | 1311 callback.callback(), pool_.get(), NetLogWithSource())); |
| 1301 | 1312 |
| 1302 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1313 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1303 testing::ElementsAre( | 1314 testing::ElementsAre( |
| 1304 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 1))); | 1315 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 1))); |
| 1316 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1305 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); | 1317 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); |
| 1306 EXPECT_EQ(kDefaultMaxSockets - 1, pool_->IdleSocketCount()); | 1318 EXPECT_EQ(kDefaultMaxSockets - 1, pool_->IdleSocketCount()); |
| 1307 } | 1319 } |
| 1308 | 1320 |
| 1309 TEST_F(ClientSocketPoolBaseTest, PendingRequests) { | 1321 TEST_F(ClientSocketPoolBaseTest, PendingRequests) { |
| 1310 base::HistogramTester histograms; | 1322 base::HistogramTester histograms; |
| 1311 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); | 1323 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); |
| 1312 | 1324 |
| 1313 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk()); | 1325 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk()); |
| 1314 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk()); | 1326 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk()); |
| 1315 EXPECT_THAT(StartRequest("a", IDLE), IsError(ERR_IO_PENDING)); | 1327 EXPECT_THAT(StartRequest("a", IDLE), IsError(ERR_IO_PENDING)); |
| 1316 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); | 1328 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); |
| 1317 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING)); | 1329 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING)); |
| 1318 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING)); | 1330 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING)); |
| 1319 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING)); | 1331 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING)); |
| 1320 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); | 1332 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); |
| 1321 | 1333 |
| 1322 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); | 1334 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); |
| 1323 // 2 sockets reused for last 6 requests. | 1335 // 2 sockets reused for last 6 requests. |
| 1324 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1336 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1325 testing::ElementsAre( | 1337 testing::ElementsAre( |
| 1326 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 6))); | 1338 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 6))); |
| 1339 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1327 | 1340 |
| 1328 EXPECT_EQ(kDefaultMaxSocketsPerGroup, | 1341 EXPECT_EQ(kDefaultMaxSocketsPerGroup, |
| 1329 client_socket_factory_.allocation_count()); | 1342 client_socket_factory_.allocation_count()); |
| 1330 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, | 1343 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, |
| 1331 completion_count()); | 1344 completion_count()); |
| 1332 | 1345 |
| 1333 EXPECT_EQ(1, GetOrderOfRequest(1)); | 1346 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 1334 EXPECT_EQ(2, GetOrderOfRequest(2)); | 1347 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 1335 EXPECT_EQ(8, GetOrderOfRequest(3)); | 1348 EXPECT_EQ(8, GetOrderOfRequest(3)); |
| 1336 EXPECT_EQ(6, GetOrderOfRequest(4)); | 1349 EXPECT_EQ(6, GetOrderOfRequest(4)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1356 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); | 1369 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING)); |
| 1357 | 1370 |
| 1358 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); | 1371 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); |
| 1359 | 1372 |
| 1360 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i) | 1373 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i) |
| 1361 EXPECT_THAT(request(i)->WaitForResult(), IsOk()); | 1374 EXPECT_THAT(request(i)->WaitForResult(), IsOk()); |
| 1362 | 1375 |
| 1363 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1376 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1364 testing::ElementsAre( | 1377 testing::ElementsAre( |
| 1365 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABE=*/3, 7))); | 1378 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABE=*/3, 7))); |
| 1379 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1366 EXPECT_EQ(static_cast<int>(requests_size()), | 1380 EXPECT_EQ(static_cast<int>(requests_size()), |
| 1367 client_socket_factory_.allocation_count()); | 1381 client_socket_factory_.allocation_count()); |
| 1368 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, | 1382 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, |
| 1369 completion_count()); | 1383 completion_count()); |
| 1370 } | 1384 } |
| 1371 | 1385 |
| 1372 // This test will start up a RequestSocket() and then immediately Cancel() it. | 1386 // This test will start up a RequestSocket() and then immediately Cancel() it. |
| 1373 // The pending connect job will be cancelled and should not call back into | 1387 // The pending connect job will be cancelled and should not call back into |
| 1374 // ClientSocketPoolBase. | 1388 // ClientSocketPoolBase. |
| 1375 TEST_F(ClientSocketPoolBaseTest, CancelRequestClearGroup) { | 1389 TEST_F(ClientSocketPoolBaseTest, CancelRequestClearGroup) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1426 // Cancel a request. | 1440 // Cancel a request. |
| 1427 size_t index_to_cancel = kDefaultMaxSocketsPerGroup + 2; | 1441 size_t index_to_cancel = kDefaultMaxSocketsPerGroup + 2; |
| 1428 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized()); | 1442 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized()); |
| 1429 (*requests())[index_to_cancel]->handle()->Reset(); | 1443 (*requests())[index_to_cancel]->handle()->Reset(); |
| 1430 | 1444 |
| 1431 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); | 1445 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); |
| 1432 // 2 sockets reused for 4 requests. | 1446 // 2 sockets reused for 4 requests. |
| 1433 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1447 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1434 testing::ElementsAre( | 1448 testing::ElementsAre( |
| 1435 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 4))); | 1449 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 4))); |
| 1450 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1436 | 1451 |
| 1437 EXPECT_EQ(kDefaultMaxSocketsPerGroup, | 1452 EXPECT_EQ(kDefaultMaxSocketsPerGroup, |
| 1438 client_socket_factory_.allocation_count()); | 1453 client_socket_factory_.allocation_count()); |
| 1439 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup - 1, | 1454 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup - 1, |
| 1440 completion_count()); | 1455 completion_count()); |
| 1441 | 1456 |
| 1442 EXPECT_EQ(1, GetOrderOfRequest(1)); | 1457 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 1443 EXPECT_EQ(2, GetOrderOfRequest(2)); | 1458 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 1444 EXPECT_EQ(5, GetOrderOfRequest(3)); | 1459 EXPECT_EQ(5, GetOrderOfRequest(3)); |
| 1445 EXPECT_EQ(3, GetOrderOfRequest(4)); | 1460 EXPECT_EQ(3, GetOrderOfRequest(4)); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1610 int rv = handle.Init("a", params_, LOWEST, | 1625 int rv = handle.Init("a", params_, LOWEST, |
| 1611 ClientSocketPool::RespectLimits::ENABLED, | 1626 ClientSocketPool::RespectLimits::ENABLED, |
| 1612 callback.callback(), pool_.get(), log.bound()); | 1627 callback.callback(), pool_.get(), log.bound()); |
| 1613 EXPECT_THAT(rv, IsOk()); | 1628 EXPECT_THAT(rv, IsOk()); |
| 1614 handle.Reset(); | 1629 handle.Reset(); |
| 1615 EXPECT_EQ(1, pool_->IdleSocketCount()); | 1630 EXPECT_EQ(1, pool_->IdleSocketCount()); |
| 1616 pool_->CloseIdleSockets(); | 1631 pool_->CloseIdleSockets(); |
| 1617 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1632 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1618 testing::ElementsAre( | 1633 testing::ElementsAre( |
| 1619 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_FORCED=*/4, 1))); | 1634 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_FORCED=*/4, 1))); |
| 1635 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1620 } | 1636 } |
| 1621 | 1637 |
| 1622 TEST_F(ClientSocketPoolBaseTest, CleanUpUnusableIdleSockets) { | 1638 TEST_F(ClientSocketPoolBaseTest, CleanUpUnusableIdleSockets) { |
| 1623 base::HistogramTester histograms; | 1639 base::HistogramTester histograms; |
| 1624 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); | 1640 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); |
| 1625 ClientSocketHandle handle; | 1641 ClientSocketHandle handle; |
| 1626 TestCompletionCallback callback; | 1642 TestCompletionCallback callback; |
| 1627 BoundTestNetLog log; | 1643 BoundTestNetLog log; |
| 1628 int rv = handle.Init("a", params_, LOWEST, | 1644 int rv = handle.Init("a", params_, LOWEST, |
| 1629 ClientSocketPool::RespectLimits::ENABLED, | 1645 ClientSocketPool::RespectLimits::ENABLED, |
| 1630 callback.callback(), pool_.get(), log.bound()); | 1646 callback.callback(), pool_.get(), log.bound()); |
| 1631 EXPECT_THAT(rv, IsOk()); | 1647 EXPECT_THAT(rv, IsOk()); |
| 1632 StreamSocket* socket = handle.socket(); | 1648 StreamSocket* socket = handle.socket(); |
| 1633 handle.Reset(); | 1649 handle.Reset(); |
| 1634 EXPECT_EQ(1, pool_->IdleSocketCount()); | 1650 EXPECT_EQ(1, pool_->IdleSocketCount()); |
| 1635 | 1651 |
| 1636 // Disconnect socket now to make the socket unusable. | 1652 // Disconnect socket now to make the socket unusable. |
| 1637 socket->Disconnect(); | 1653 socket->Disconnect(); |
| 1638 ClientSocketHandle handle2; | 1654 ClientSocketHandle handle2; |
| 1639 rv = handle2.Init("a", params_, LOWEST, | 1655 rv = handle2.Init("a", params_, LOWEST, |
| 1640 ClientSocketPool::RespectLimits::ENABLED, | 1656 ClientSocketPool::RespectLimits::ENABLED, |
| 1641 callback.callback(), pool_.get(), log.bound()); | 1657 callback.callback(), pool_.get(), log.bound()); |
| 1642 EXPECT_THAT(rv, IsOk()); | 1658 EXPECT_THAT(rv, IsOk()); |
| 1643 EXPECT_FALSE(handle2.is_reused()); | 1659 EXPECT_FALSE(handle2.is_reused()); |
| 1644 | 1660 |
| 1645 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 1661 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1646 testing::ElementsAre( | 1662 testing::ElementsAre( |
| 1647 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_UNUSABLE=*/7, 1))); | 1663 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_UNUSABLE=*/7, 1))); |
| 1664 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1648 } | 1665 } |
| 1649 | 1666 |
| 1650 // Regression test for http://crbug.com/17985. | 1667 // Regression test for http://crbug.com/17985. |
| 1651 TEST_F(ClientSocketPoolBaseTest, GroupWithPendingRequestsIsNotEmpty) { | 1668 TEST_F(ClientSocketPoolBaseTest, GroupWithPendingRequestsIsNotEmpty) { |
| 1652 base::HistogramTester histograms; | 1669 base::HistogramTester histograms; |
| 1653 const int kMaxSockets = 3; | 1670 const int kMaxSockets = 3; |
| 1654 const int kMaxSocketsPerGroup = 2; | 1671 const int kMaxSocketsPerGroup = 2; |
| 1655 CreatePool(kMaxSockets, kMaxSocketsPerGroup); | 1672 CreatePool(kMaxSockets, kMaxSocketsPerGroup); |
| 1656 | 1673 |
| 1657 const RequestPriority kHighPriority = HIGHEST; | 1674 const RequestPriority kHighPriority = HIGHEST; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1687 // we were hitting a CHECK here. | 1704 // we were hitting a CHECK here. |
| 1688 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); | 1705 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); |
| 1689 pool_->CloseIdleSockets(); | 1706 pool_->CloseIdleSockets(); |
| 1690 | 1707 |
| 1691 // Run the released socket wakeups. | 1708 // Run the released socket wakeups. |
| 1692 base::RunLoop().RunUntilIdle(); | 1709 base::RunLoop().RunUntilIdle(); |
| 1693 EXPECT_THAT( | 1710 EXPECT_THAT( |
| 1694 histograms.GetAllSamples(kIdleSocketFateHistogram), | 1711 histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 1695 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 1), | 1712 testing::ElementsAre(base::Bucket(/*IDLE_SOCKET_FATE_REUSE_UNUSED=*/1, 1), |
| 1696 base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 1))); | 1713 base::Bucket(/*IDLE_SOCKET_FATE_CLOSE_ONE=*/8, 1))); |
| 1714 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 1697 } | 1715 } |
| 1698 | 1716 |
| 1699 TEST_F(ClientSocketPoolBaseTest, BasicAsynchronous) { | 1717 TEST_F(ClientSocketPoolBaseTest, BasicAsynchronous) { |
| 1700 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); | 1718 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); |
| 1701 | 1719 |
| 1702 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); | 1720 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); |
| 1703 ClientSocketHandle handle; | 1721 ClientSocketHandle handle; |
| 1704 TestCompletionCallback callback; | 1722 TestCompletionCallback callback; |
| 1705 BoundTestNetLog log; | 1723 BoundTestNetLog log; |
| 1706 int rv = handle.Init("a", params_, LOWEST, | 1724 int rv = handle.Init("a", params_, LOWEST, |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2209 ASSERT_THAT(rv, IsOk()); | 2227 ASSERT_THAT(rv, IsOk()); |
| 2210 EXPECT_TRUE(handle.is_reused()); | 2228 EXPECT_TRUE(handle.is_reused()); |
| 2211 TestLoadTimingInfoConnectedReused(handle); | 2229 TestLoadTimingInfoConnectedReused(handle); |
| 2212 | 2230 |
| 2213 ASSERT_TRUE(pool_->HasGroup("a")); | 2231 ASSERT_TRUE(pool_->HasGroup("a")); |
| 2214 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); | 2232 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); |
| 2215 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); | 2233 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); |
| 2216 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 2234 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 2217 testing::ElementsAre( | 2235 testing::ElementsAre( |
| 2218 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_REUSED=*/0, 1))); | 2236 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_REUSED=*/0, 1))); |
| 2237 auto buckets = histograms.GetAllSamples(kIdleSocketTimeSavingHistogram); |
| 2238 EXPECT_EQ(1u, buckets.size()); |
| 2239 // The sample should be strictly greater than 0 because kPendingConnectDelay |
| 2240 // is used. |
| 2241 EXPECT_LT(0, buckets[0].min); |
| 2242 EXPECT_EQ(1, buckets[0].count); |
| 2219 | 2243 |
| 2220 TestNetLogEntry::List entries; | 2244 TestNetLogEntry::List entries; |
| 2221 log.GetEntries(&entries); | 2245 log.GetEntries(&entries); |
| 2246 EXPECT_TRUE(LogContainsEntryWithType( |
| 2247 entries, 1, NetLogEventType::SOCKET_POOL_REUSED_AN_EXISTING_SOCKET)); |
| 2248 } |
| 2249 |
| 2250 // Tests when idle socket are reused multiple times, histograms are correct. |
| 2251 TEST_F(ClientSocketPoolBaseTest, IdleSocketsReusedTwice) { |
| 2252 base::HistogramTester histograms; |
| 2253 CreatePoolWithIdleTimeouts( |
| 2254 kDefaultMaxSockets, kDefaultMaxSocketsPerGroup, |
| 2255 base::TimeDelta(), // Time out unused sockets immediately. |
| 2256 base::TimeDelta::FromDays(1)); // Don't time out used sockets. |
| 2257 |
| 2258 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); |
| 2259 |
| 2260 ClientSocketHandle handle; |
| 2261 TestCompletionCallback callback; |
| 2262 int rv = handle.Init("a", params_, LOWEST, |
| 2263 ClientSocketPool::RespectLimits::ENABLED, |
| 2264 callback.callback(), pool_.get(), NetLogWithSource()); |
| 2265 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2266 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); |
| 2267 ASSERT_THAT(callback.WaitForResult(), IsOk()); |
| 2268 |
| 2269 // Use and release the socket. |
| 2270 EXPECT_EQ(1, handle.socket()->Write(NULL, 1, CompletionCallback())); |
| 2271 TestLoadTimingInfoConnectedNotReused(handle); |
| 2272 handle.Reset(); |
| 2273 |
| 2274 // Should now have one idle socket. |
| 2275 ASSERT_EQ(1, pool_->IdleSocketCount()); |
| 2276 |
| 2277 // Request a new socket. This should reuse the old socket and complete |
| 2278 // synchronously. |
| 2279 BoundTestNetLog log; |
| 2280 rv = handle.Init("a", params_, LOWEST, |
| 2281 ClientSocketPool::RespectLimits::ENABLED, |
| 2282 CompletionCallback(), pool_.get(), log.bound()); |
| 2283 ASSERT_THAT(rv, IsOk()); |
| 2284 EXPECT_TRUE(handle.is_reused()); |
| 2285 TestLoadTimingInfoConnectedReused(handle); |
| 2286 // Both reuse should fall into the same bucket since they share the same |
| 2287 // connect timing. |
| 2288 auto buckets = histograms.GetAllSamples(kIdleSocketTimeSavingHistogram); |
| 2289 EXPECT_EQ(1u, buckets.size()); |
| 2290 // The sample should be strictly greater than 0 because kPendingConnectDelay |
| 2291 // is used. |
| 2292 EXPECT_LT(0, buckets[0].min); |
| 2293 EXPECT_EQ(1, buckets[0].count); |
| 2294 |
| 2295 // Releases socket. |
| 2296 handle.Reset(); |
| 2297 |
| 2298 // Request a socket again. This should reuse the old socket and complete |
| 2299 // synchronously. |
| 2300 ClientSocketHandle handle2; |
| 2301 rv = handle2.Init("a", params_, LOWEST, |
| 2302 ClientSocketPool::RespectLimits::ENABLED, |
| 2303 CompletionCallback(), pool_.get(), log.bound()); |
| 2304 ASSERT_THAT(rv, IsOk()); |
| 2305 EXPECT_TRUE(handle2.is_reused()); |
| 2306 TestLoadTimingInfoConnectedReused(handle2); |
| 2307 |
| 2308 ASSERT_TRUE(pool_->HasGroup("a")); |
| 2309 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); |
| 2310 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); |
| 2311 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 2312 testing::ElementsAre( |
| 2313 base::Bucket(/*IDLE_SOCKET_FATE_REUSE_REUSED=*/0, 2))); |
| 2314 // Both reuse should fall into the same bucket since they share the same |
| 2315 // connect timing. |
| 2316 buckets = histograms.GetAllSamples(kIdleSocketTimeSavingHistogram); |
| 2317 EXPECT_EQ(1u, buckets.size()); |
| 2318 EXPECT_LT(0, buckets[0].min); |
| 2319 EXPECT_EQ(2, buckets[0].count); |
| 2320 |
| 2321 TestNetLogEntry::List entries; |
| 2322 log.GetEntries(&entries); |
| 2222 EXPECT_TRUE(LogContainsEntryWithType( | 2323 EXPECT_TRUE(LogContainsEntryWithType( |
| 2223 entries, 1, NetLogEventType::SOCKET_POOL_REUSED_AN_EXISTING_SOCKET)); | 2324 entries, 1, NetLogEventType::SOCKET_POOL_REUSED_AN_EXISTING_SOCKET)); |
| 2224 } | 2325 } |
| 2225 | 2326 |
| 2226 #if defined(OS_IOS) | 2327 #if defined(OS_IOS) |
| 2227 // TODO(droger): Enable this test (crbug.com/512595). | 2328 // TODO(droger): Enable this test (crbug.com/512595). |
| 2228 #define MAYBE_CleanupTimedOutIdleSocketsNoReuse \ | 2329 #define MAYBE_CleanupTimedOutIdleSocketsNoReuse \ |
| 2229 DISABLED_CleanupTimedOutIdleSocketsNoReuse | 2330 DISABLED_CleanupTimedOutIdleSocketsNoReuse |
| 2230 #else | 2331 #else |
| 2231 #define MAYBE_CleanupTimedOutIdleSocketsNoReuse \ | 2332 #define MAYBE_CleanupTimedOutIdleSocketsNoReuse \ |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2289 callback3.callback(), pool_.get(), log.bound()); | 2390 callback3.callback(), pool_.get(), log.bound()); |
| 2290 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); | 2391 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 2291 ASSERT_THAT(callback3.WaitForResult(), IsOk()); | 2392 ASSERT_THAT(callback3.WaitForResult(), IsOk()); |
| 2292 EXPECT_FALSE(handle.is_reused()); | 2393 EXPECT_FALSE(handle.is_reused()); |
| 2293 | 2394 |
| 2294 EXPECT_THAT( | 2395 EXPECT_THAT( |
| 2295 histograms.GetAllSamples(kIdleSocketFateHistogram), | 2396 histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 2296 testing::ElementsAre( | 2397 testing::ElementsAre( |
| 2297 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_TIMED_OUT_REUSED=*/5, 1), | 2398 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_TIMED_OUT_REUSED=*/5, 1), |
| 2298 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_TIMED_OUT_UNUSED=*/6, 1))); | 2399 base::Bucket(/*IDLE_SOCKET_FATE_CLEAN_UP_TIMED_OUT_UNUSED=*/6, 1))); |
| 2400 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 2299 | 2401 |
| 2300 // Make sure the idle socket is closed. | 2402 // Make sure the idle socket is closed. |
| 2301 ASSERT_TRUE(pool_->HasGroup("a")); | 2403 ASSERT_TRUE(pool_->HasGroup("a")); |
| 2302 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); | 2404 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); |
| 2303 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); | 2405 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); |
| 2304 | 2406 |
| 2305 TestNetLogEntry::List entries; | 2407 TestNetLogEntry::List entries; |
| 2306 log.GetEntries(&entries); | 2408 log.GetEntries(&entries); |
| 2307 EXPECT_FALSE(LogContainsEntryWithType( | 2409 EXPECT_FALSE(LogContainsEntryWithType( |
| 2308 entries, 1, NetLogEventType::SOCKET_POOL_REUSED_AN_EXISTING_SOCKET)); | 2410 entries, 1, NetLogEventType::SOCKET_POOL_REUSED_AN_EXISTING_SOCKET)); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2451 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 2553 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 2452 testing::ElementsAre( | 2554 testing::ElementsAre( |
| 2453 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 1))); | 2555 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 1))); |
| 2454 | 2556 |
| 2455 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE)); | 2557 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE)); |
| 2456 EXPECT_THAT((*requests())[3]->WaitForResult(), IsOk()); | 2558 EXPECT_THAT((*requests())[3]->WaitForResult(), IsOk()); |
| 2457 EXPECT_EQ(4u, completion_count()); | 2559 EXPECT_EQ(4u, completion_count()); |
| 2458 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 2560 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 2459 testing::ElementsAre( | 2561 testing::ElementsAre( |
| 2460 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 2))); | 2562 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 2))); |
| 2563 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 2461 | 2564 |
| 2462 EXPECT_EQ(1, GetOrderOfRequest(1)); | 2565 EXPECT_EQ(1, GetOrderOfRequest(1)); |
| 2463 EXPECT_EQ(2, GetOrderOfRequest(2)); | 2566 EXPECT_EQ(2, GetOrderOfRequest(2)); |
| 2464 EXPECT_EQ(3, GetOrderOfRequest(3)); | 2567 EXPECT_EQ(3, GetOrderOfRequest(3)); |
| 2465 EXPECT_EQ(4, GetOrderOfRequest(4)); | 2568 EXPECT_EQ(4, GetOrderOfRequest(4)); |
| 2466 | 2569 |
| 2467 // Make sure we test order of all requests made. | 2570 // Make sure we test order of all requests made. |
| 2468 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(5)); | 2571 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(5)); |
| 2469 } | 2572 } |
| 2470 | 2573 |
| (...skipping 1194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3665 | 3768 |
| 3666 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); | 3769 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); |
| 3667 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk()); | 3770 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk()); |
| 3668 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) | 3771 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) |
| 3669 .WillOnce(Invoke(&mock_layered_pool, | 3772 .WillOnce(Invoke(&mock_layered_pool, |
| 3670 &MockLayeredPool::ReleaseOneConnection)); | 3773 &MockLayeredPool::ReleaseOneConnection)); |
| 3671 EXPECT_TRUE(pool_->CloseOneIdleConnectionInHigherLayeredPool()); | 3774 EXPECT_TRUE(pool_->CloseOneIdleConnectionInHigherLayeredPool()); |
| 3672 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), | 3775 EXPECT_THAT(histograms.GetAllSamples(kIdleSocketFateHistogram), |
| 3673 testing::ElementsAre( | 3776 testing::ElementsAre( |
| 3674 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 1))); | 3777 base::Bucket(/*IDLE_SOCKET_FATE_RELEASE_UNUSABLE=*/3, 1))); |
| 3778 EXPECT_TRUE(histograms.GetAllSamples(kIdleSocketTimeSavingHistogram).empty()); |
| 3675 } | 3779 } |
| 3676 | 3780 |
| 3677 // Tests the basic case of closing an idle socket in a higher layered pool when | 3781 // Tests the basic case of closing an idle socket in a higher layered pool when |
| 3678 // a new request is issued and the lower layer pool is stalled. | 3782 // a new request is issued and the lower layer pool is stalled. |
| 3679 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketsHeldByLayeredPoolWhenNeeded) { | 3783 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketsHeldByLayeredPoolWhenNeeded) { |
| 3680 CreatePool(1, 1); | 3784 CreatePool(1, 1); |
| 3681 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); | 3785 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); |
| 3682 | 3786 |
| 3683 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); | 3787 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); |
| 3684 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk()); | 3788 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk()); |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3931 request(1)->handle()->Reset(); | 4035 request(1)->handle()->Reset(); |
| 3932 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); | 4036 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); |
| 3933 | 4037 |
| 3934 EXPECT_THAT(request(2)->WaitForResult(), IsOk()); | 4038 EXPECT_THAT(request(2)->WaitForResult(), IsOk()); |
| 3935 EXPECT_FALSE(request(1)->have_result()); | 4039 EXPECT_FALSE(request(1)->have_result()); |
| 3936 } | 4040 } |
| 3937 | 4041 |
| 3938 } // namespace | 4042 } // namespace |
| 3939 | 4043 |
| 3940 } // namespace net | 4044 } // namespace net |
| OLD | NEW |