Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(765)

Side by Side Diff: net/socket/client_socket_pool_base_unittest.cc

Issue 2533063002: Fix Net.Socket.IdleSocketTimeSaving histogram (Closed)
Patch Set: self review Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/socket/client_socket_pool_base.cc ('k') | net/socket/socket_test_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/socket/client_socket_pool_base.cc ('k') | net/socket/socket_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698