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

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

Issue 2109503009: Refactor net tests to use GMock matchers for checking net::Error results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to contents.txt files Created 4 years, 5 months 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/server/http_server_unittest.cc ('k') | net/socket/sequenced_socket_data_unittest.cc » ('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 23 matching lines...) Expand all
34 #include "net/log/net_log.h" 34 #include "net/log/net_log.h"
35 #include "net/log/test_net_log.h" 35 #include "net/log/test_net_log.h"
36 #include "net/log/test_net_log_entry.h" 36 #include "net/log/test_net_log_entry.h"
37 #include "net/log/test_net_log_util.h" 37 #include "net/log/test_net_log_util.h"
38 #include "net/socket/client_socket_factory.h" 38 #include "net/socket/client_socket_factory.h"
39 #include "net/socket/client_socket_handle.h" 39 #include "net/socket/client_socket_handle.h"
40 #include "net/socket/socket_performance_watcher.h" 40 #include "net/socket/socket_performance_watcher.h"
41 #include "net/socket/socket_test_util.h" 41 #include "net/socket/socket_test_util.h"
42 #include "net/socket/ssl_client_socket.h" 42 #include "net/socket/ssl_client_socket.h"
43 #include "net/socket/stream_socket.h" 43 #include "net/socket/stream_socket.h"
44 #include "net/test/gtest_util.h"
44 #include "net/udp/datagram_client_socket.h" 45 #include "net/udp/datagram_client_socket.h"
45 #include "testing/gmock/include/gmock/gmock.h" 46 #include "testing/gmock/include/gmock/gmock.h"
46 #include "testing/gtest/include/gtest/gtest.h" 47 #include "testing/gtest/include/gtest/gtest.h"
47 48
49 using net::test::IsError;
50 using net::test::IsOk;
51
48 using ::testing::Invoke; 52 using ::testing::Invoke;
49 using ::testing::Return; 53 using ::testing::Return;
50 54
51 namespace net { 55 namespace net {
52 56
53 namespace { 57 namespace {
54 58
55 const int kDefaultMaxSockets = 4; 59 const int kDefaultMaxSockets = 4;
56 const int kDefaultMaxSocketsPerGroup = 2; 60 const int kDefaultMaxSocketsPerGroup = 2;
57 61
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 TestConnectJobDelegate delegate; 744 TestConnectJobDelegate delegate;
741 ClientSocketHandle ignored; 745 ClientSocketHandle ignored;
742 TestClientSocketPoolBase::Request request( 746 TestClientSocketPoolBase::Request request(
743 &ignored, CompletionCallback(), DEFAULT_PRIORITY, 747 &ignored, CompletionCallback(), DEFAULT_PRIORITY,
744 ClientSocketPool::RespectLimits::ENABLED, 748 ClientSocketPool::RespectLimits::ENABLED,
745 internal::ClientSocketPoolBaseHelper::NORMAL, params_, BoundNetLog()); 749 internal::ClientSocketPoolBaseHelper::NORMAL, params_, BoundNetLog());
746 std::unique_ptr<TestConnectJob> job( 750 std::unique_ptr<TestConnectJob> job(
747 new TestConnectJob(TestConnectJob::kMockJob, "a", request, 751 new TestConnectJob(TestConnectJob::kMockJob, "a", request,
748 base::TimeDelta::FromMicroseconds(1), &delegate, 752 base::TimeDelta::FromMicroseconds(1), &delegate,
749 &client_socket_factory_, NULL)); 753 &client_socket_factory_, NULL));
750 EXPECT_EQ(OK, job->Connect()); 754 EXPECT_THAT(job->Connect(), IsOk());
751 } 755 }
752 756
753 TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) { 757 TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) {
754 TestConnectJobDelegate delegate; 758 TestConnectJobDelegate delegate;
755 ClientSocketHandle ignored; 759 ClientSocketHandle ignored;
756 TestNetLog log; 760 TestNetLog log;
757 761
758 TestClientSocketPoolBase::Request request( 762 TestClientSocketPoolBase::Request request(
759 &ignored, CompletionCallback(), DEFAULT_PRIORITY, 763 &ignored, CompletionCallback(), DEFAULT_PRIORITY,
760 ClientSocketPool::RespectLimits::ENABLED, 764 ClientSocketPool::RespectLimits::ENABLED,
761 internal::ClientSocketPoolBaseHelper::NORMAL, params_, BoundNetLog()); 765 internal::ClientSocketPoolBaseHelper::NORMAL, params_, BoundNetLog());
762 // Deleted by TestConnectJobDelegate. 766 // Deleted by TestConnectJobDelegate.
763 TestConnectJob* job = 767 TestConnectJob* job =
764 new TestConnectJob(TestConnectJob::kMockPendingJob, 768 new TestConnectJob(TestConnectJob::kMockPendingJob,
765 "a", 769 "a",
766 request, 770 request,
767 base::TimeDelta::FromMicroseconds(1), 771 base::TimeDelta::FromMicroseconds(1),
768 &delegate, 772 &delegate,
769 &client_socket_factory_, 773 &client_socket_factory_,
770 &log); 774 &log);
771 ASSERT_EQ(ERR_IO_PENDING, job->Connect()); 775 ASSERT_THAT(job->Connect(), IsError(ERR_IO_PENDING));
772 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); 776 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
773 EXPECT_EQ(ERR_TIMED_OUT, delegate.WaitForResult()); 777 EXPECT_THAT(delegate.WaitForResult(), IsError(ERR_TIMED_OUT));
774 778
775 TestNetLogEntry::List entries; 779 TestNetLogEntry::List entries;
776 log.GetEntries(&entries); 780 log.GetEntries(&entries);
777 781
778 EXPECT_EQ(6u, entries.size()); 782 EXPECT_EQ(6u, entries.size());
779 EXPECT_TRUE(LogContainsBeginEvent( 783 EXPECT_TRUE(LogContainsBeginEvent(
780 entries, 0, NetLog::TYPE_SOCKET_POOL_CONNECT_JOB)); 784 entries, 0, NetLog::TYPE_SOCKET_POOL_CONNECT_JOB));
781 EXPECT_TRUE(LogContainsBeginEvent( 785 EXPECT_TRUE(LogContainsBeginEvent(
782 entries, 1, NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_CONNECT)); 786 entries, 1, NetLog::TYPE_SOCKET_POOL_CONNECT_JOB_CONNECT));
783 EXPECT_TRUE(LogContainsEvent( 787 EXPECT_TRUE(LogContainsEvent(
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 NetLog::PHASE_NONE)); 863 NetLog::PHASE_NONE));
860 EXPECT_TRUE(LogContainsEndEvent( 864 EXPECT_TRUE(LogContainsEndEvent(
861 entries, 2, NetLog::TYPE_SOCKET_POOL)); 865 entries, 2, NetLog::TYPE_SOCKET_POOL));
862 } 866 }
863 867
864 TEST_F(ClientSocketPoolBaseTest, TotalLimit) { 868 TEST_F(ClientSocketPoolBaseTest, TotalLimit) {
865 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 869 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
866 870
867 // TODO(eroman): Check that the NetLog contains this event. 871 // TODO(eroman): Check that the NetLog contains this event.
868 872
869 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 873 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
870 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 874 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
871 EXPECT_EQ(OK, StartRequest("c", DEFAULT_PRIORITY)); 875 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsOk());
872 EXPECT_EQ(OK, StartRequest("d", DEFAULT_PRIORITY)); 876 EXPECT_THAT(StartRequest("d", DEFAULT_PRIORITY), IsOk());
873 877
874 EXPECT_EQ(static_cast<int>(requests_size()), 878 EXPECT_EQ(static_cast<int>(requests_size()),
875 client_socket_factory_.allocation_count()); 879 client_socket_factory_.allocation_count());
876 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 880 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
877 881
878 EXPECT_EQ(ERR_IO_PENDING, StartRequest("e", DEFAULT_PRIORITY)); 882 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
879 EXPECT_EQ(ERR_IO_PENDING, StartRequest("f", DEFAULT_PRIORITY)); 883 EXPECT_THAT(StartRequest("f", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
880 EXPECT_EQ(ERR_IO_PENDING, StartRequest("g", DEFAULT_PRIORITY)); 884 EXPECT_THAT(StartRequest("g", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
881 885
882 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 886 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
883 887
884 EXPECT_EQ(static_cast<int>(requests_size()), 888 EXPECT_EQ(static_cast<int>(requests_size()),
885 client_socket_factory_.allocation_count()); 889 client_socket_factory_.allocation_count());
886 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 890 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
887 891
888 EXPECT_EQ(1, GetOrderOfRequest(1)); 892 EXPECT_EQ(1, GetOrderOfRequest(1));
889 EXPECT_EQ(2, GetOrderOfRequest(2)); 893 EXPECT_EQ(2, GetOrderOfRequest(2));
890 EXPECT_EQ(3, GetOrderOfRequest(3)); 894 EXPECT_EQ(3, GetOrderOfRequest(3));
891 EXPECT_EQ(4, GetOrderOfRequest(4)); 895 EXPECT_EQ(4, GetOrderOfRequest(4));
892 EXPECT_EQ(5, GetOrderOfRequest(5)); 896 EXPECT_EQ(5, GetOrderOfRequest(5));
893 EXPECT_EQ(6, GetOrderOfRequest(6)); 897 EXPECT_EQ(6, GetOrderOfRequest(6));
894 EXPECT_EQ(7, GetOrderOfRequest(7)); 898 EXPECT_EQ(7, GetOrderOfRequest(7));
895 899
896 // Make sure we test order of all requests made. 900 // Make sure we test order of all requests made.
897 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(8)); 901 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(8));
898 } 902 }
899 903
900 TEST_F(ClientSocketPoolBaseTest, TotalLimitReachedNewGroup) { 904 TEST_F(ClientSocketPoolBaseTest, TotalLimitReachedNewGroup) {
901 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 905 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
902 906
903 // TODO(eroman): Check that the NetLog contains this event. 907 // TODO(eroman): Check that the NetLog contains this event.
904 908
905 // Reach all limits: max total sockets, and max sockets per group. 909 // Reach all limits: max total sockets, and max sockets per group.
906 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 910 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
907 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 911 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
908 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 912 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
909 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 913 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
910 914
911 EXPECT_EQ(static_cast<int>(requests_size()), 915 EXPECT_EQ(static_cast<int>(requests_size()),
912 client_socket_factory_.allocation_count()); 916 client_socket_factory_.allocation_count());
913 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 917 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
914 918
915 // Now create a new group and verify that we don't starve it. 919 // Now create a new group and verify that we don't starve it.
916 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", DEFAULT_PRIORITY)); 920 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
917 921
918 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 922 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
919 923
920 EXPECT_EQ(static_cast<int>(requests_size()), 924 EXPECT_EQ(static_cast<int>(requests_size()),
921 client_socket_factory_.allocation_count()); 925 client_socket_factory_.allocation_count());
922 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 926 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
923 927
924 EXPECT_EQ(1, GetOrderOfRequest(1)); 928 EXPECT_EQ(1, GetOrderOfRequest(1));
925 EXPECT_EQ(2, GetOrderOfRequest(2)); 929 EXPECT_EQ(2, GetOrderOfRequest(2));
926 EXPECT_EQ(3, GetOrderOfRequest(3)); 930 EXPECT_EQ(3, GetOrderOfRequest(3));
927 EXPECT_EQ(4, GetOrderOfRequest(4)); 931 EXPECT_EQ(4, GetOrderOfRequest(4));
928 EXPECT_EQ(5, GetOrderOfRequest(5)); 932 EXPECT_EQ(5, GetOrderOfRequest(5));
929 933
930 // Make sure we test order of all requests made. 934 // Make sure we test order of all requests made.
931 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(6)); 935 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(6));
932 } 936 }
933 937
934 TEST_F(ClientSocketPoolBaseTest, TotalLimitRespectsPriority) { 938 TEST_F(ClientSocketPoolBaseTest, TotalLimitRespectsPriority) {
935 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 939 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
936 940
937 EXPECT_EQ(OK, StartRequest("b", LOWEST)); 941 EXPECT_THAT(StartRequest("b", LOWEST), IsOk());
938 EXPECT_EQ(OK, StartRequest("a", MEDIUM)); 942 EXPECT_THAT(StartRequest("a", MEDIUM), IsOk());
939 EXPECT_EQ(OK, StartRequest("b", HIGHEST)); 943 EXPECT_THAT(StartRequest("b", HIGHEST), IsOk());
940 EXPECT_EQ(OK, StartRequest("a", LOWEST)); 944 EXPECT_THAT(StartRequest("a", LOWEST), IsOk());
941 945
942 EXPECT_EQ(static_cast<int>(requests_size()), 946 EXPECT_EQ(static_cast<int>(requests_size()),
943 client_socket_factory_.allocation_count()); 947 client_socket_factory_.allocation_count());
944 948
945 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", LOWEST)); 949 EXPECT_THAT(StartRequest("c", LOWEST), IsError(ERR_IO_PENDING));
946 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", MEDIUM)); 950 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING));
947 EXPECT_EQ(ERR_IO_PENDING, StartRequest("b", HIGHEST)); 951 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING));
948 952
949 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 953 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
950 954
951 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 955 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
952 956
953 // First 4 requests don't have to wait, and finish in order. 957 // First 4 requests don't have to wait, and finish in order.
954 EXPECT_EQ(1, GetOrderOfRequest(1)); 958 EXPECT_EQ(1, GetOrderOfRequest(1));
955 EXPECT_EQ(2, GetOrderOfRequest(2)); 959 EXPECT_EQ(2, GetOrderOfRequest(2));
956 EXPECT_EQ(3, GetOrderOfRequest(3)); 960 EXPECT_EQ(3, GetOrderOfRequest(3));
957 EXPECT_EQ(4, GetOrderOfRequest(4)); 961 EXPECT_EQ(4, GetOrderOfRequest(4));
958 962
959 // Request ("b", HIGHEST) has the highest priority, then ("a", MEDIUM), 963 // Request ("b", HIGHEST) has the highest priority, then ("a", MEDIUM),
960 // and then ("c", LOWEST). 964 // and then ("c", LOWEST).
961 EXPECT_EQ(7, GetOrderOfRequest(5)); 965 EXPECT_EQ(7, GetOrderOfRequest(5));
962 EXPECT_EQ(6, GetOrderOfRequest(6)); 966 EXPECT_EQ(6, GetOrderOfRequest(6));
963 EXPECT_EQ(5, GetOrderOfRequest(7)); 967 EXPECT_EQ(5, GetOrderOfRequest(7));
964 968
965 // Make sure we test order of all requests made. 969 // Make sure we test order of all requests made.
966 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(9)); 970 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(9));
967 } 971 }
968 972
969 TEST_F(ClientSocketPoolBaseTest, TotalLimitRespectsGroupLimit) { 973 TEST_F(ClientSocketPoolBaseTest, TotalLimitRespectsGroupLimit) {
970 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 974 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
971 975
972 EXPECT_EQ(OK, StartRequest("a", LOWEST)); 976 EXPECT_THAT(StartRequest("a", LOWEST), IsOk());
973 EXPECT_EQ(OK, StartRequest("a", LOW)); 977 EXPECT_THAT(StartRequest("a", LOW), IsOk());
974 EXPECT_EQ(OK, StartRequest("b", HIGHEST)); 978 EXPECT_THAT(StartRequest("b", HIGHEST), IsOk());
975 EXPECT_EQ(OK, StartRequest("b", MEDIUM)); 979 EXPECT_THAT(StartRequest("b", MEDIUM), IsOk());
976 980
977 EXPECT_EQ(static_cast<int>(requests_size()), 981 EXPECT_EQ(static_cast<int>(requests_size()),
978 client_socket_factory_.allocation_count()); 982 client_socket_factory_.allocation_count());
979 983
980 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", MEDIUM)); 984 EXPECT_THAT(StartRequest("c", MEDIUM), IsError(ERR_IO_PENDING));
981 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 985 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING));
982 EXPECT_EQ(ERR_IO_PENDING, StartRequest("b", HIGHEST)); 986 EXPECT_THAT(StartRequest("b", HIGHEST), IsError(ERR_IO_PENDING));
983 987
984 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 988 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
985 989
986 EXPECT_EQ(static_cast<int>(requests_size()), 990 EXPECT_EQ(static_cast<int>(requests_size()),
987 client_socket_factory_.allocation_count()); 991 client_socket_factory_.allocation_count());
988 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count()); 992 EXPECT_EQ(requests_size() - kDefaultMaxSockets, completion_count());
989 993
990 // First 4 requests don't have to wait, and finish in order. 994 // First 4 requests don't have to wait, and finish in order.
991 EXPECT_EQ(1, GetOrderOfRequest(1)); 995 EXPECT_EQ(1, GetOrderOfRequest(1));
992 EXPECT_EQ(2, GetOrderOfRequest(2)); 996 EXPECT_EQ(2, GetOrderOfRequest(2));
993 EXPECT_EQ(3, GetOrderOfRequest(3)); 997 EXPECT_EQ(3, GetOrderOfRequest(3));
994 EXPECT_EQ(4, GetOrderOfRequest(4)); 998 EXPECT_EQ(4, GetOrderOfRequest(4));
995 999
996 // Request ("b", 7) has the highest priority, but we can't make new socket for 1000 // Request ("b", 7) has the highest priority, but we can't make new socket for
997 // group "b", because it has reached the per-group limit. Then we make 1001 // group "b", because it has reached the per-group limit. Then we make
998 // socket for ("c", 6), because it has higher priority than ("a", 4), 1002 // socket for ("c", 6), because it has higher priority than ("a", 4),
999 // and we still can't make a socket for group "b". 1003 // and we still can't make a socket for group "b".
1000 EXPECT_EQ(5, GetOrderOfRequest(5)); 1004 EXPECT_EQ(5, GetOrderOfRequest(5));
1001 EXPECT_EQ(6, GetOrderOfRequest(6)); 1005 EXPECT_EQ(6, GetOrderOfRequest(6));
1002 EXPECT_EQ(7, GetOrderOfRequest(7)); 1006 EXPECT_EQ(7, GetOrderOfRequest(7));
1003 1007
1004 // Make sure we test order of all requests made. 1008 // Make sure we test order of all requests made.
1005 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(8)); 1009 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(8));
1006 } 1010 }
1007 1011
1008 // Make sure that we count connecting sockets against the total limit. 1012 // Make sure that we count connecting sockets against the total limit.
1009 TEST_F(ClientSocketPoolBaseTest, TotalLimitCountsConnectingSockets) { 1013 TEST_F(ClientSocketPoolBaseTest, TotalLimitCountsConnectingSockets) {
1010 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1014 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1011 1015
1012 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1016 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1013 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 1017 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
1014 EXPECT_EQ(OK, StartRequest("c", DEFAULT_PRIORITY)); 1018 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsOk());
1015 1019
1016 // Create one asynchronous request. 1020 // Create one asynchronous request.
1017 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1021 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1018 EXPECT_EQ(ERR_IO_PENDING, StartRequest("d", DEFAULT_PRIORITY)); 1022 EXPECT_THAT(StartRequest("d", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1019 1023
1020 // We post all of our delayed tasks with a 2ms delay. I.e. they don't 1024 // We post all of our delayed tasks with a 2ms delay. I.e. they don't
1021 // actually become pending until 2ms after they have been created. In order 1025 // actually become pending until 2ms after they have been created. In order
1022 // to flush all tasks, we need to wait so that we know there are no 1026 // to flush all tasks, we need to wait so that we know there are no
1023 // soon-to-be-pending tasks waiting. 1027 // soon-to-be-pending tasks waiting.
1024 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 1028 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
1025 base::RunLoop().RunUntilIdle(); 1029 base::RunLoop().RunUntilIdle();
1026 1030
1027 // The next synchronous request should wait for its turn. 1031 // The next synchronous request should wait for its turn.
1028 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 1032 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
1029 EXPECT_EQ(ERR_IO_PENDING, StartRequest("e", DEFAULT_PRIORITY)); 1033 EXPECT_THAT(StartRequest("e", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1030 1034
1031 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 1035 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
1032 1036
1033 EXPECT_EQ(static_cast<int>(requests_size()), 1037 EXPECT_EQ(static_cast<int>(requests_size()),
1034 client_socket_factory_.allocation_count()); 1038 client_socket_factory_.allocation_count());
1035 1039
1036 EXPECT_EQ(1, GetOrderOfRequest(1)); 1040 EXPECT_EQ(1, GetOrderOfRequest(1));
1037 EXPECT_EQ(2, GetOrderOfRequest(2)); 1041 EXPECT_EQ(2, GetOrderOfRequest(2));
1038 EXPECT_EQ(3, GetOrderOfRequest(3)); 1042 EXPECT_EQ(3, GetOrderOfRequest(3));
1039 EXPECT_EQ(4, GetOrderOfRequest(4)); 1043 EXPECT_EQ(4, GetOrderOfRequest(4));
1040 EXPECT_EQ(5, GetOrderOfRequest(5)); 1044 EXPECT_EQ(5, GetOrderOfRequest(5));
1041 1045
1042 // Make sure we test order of all requests made. 1046 // Make sure we test order of all requests made.
1043 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(6)); 1047 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(6));
1044 } 1048 }
1045 1049
1046 TEST_F(ClientSocketPoolBaseTest, CorrectlyCountStalledGroups) { 1050 TEST_F(ClientSocketPoolBaseTest, CorrectlyCountStalledGroups) {
1047 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); 1051 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets);
1048 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 1052 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
1049 1053
1050 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1054 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1051 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1055 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1052 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1056 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1053 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1057 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1054 1058
1055 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1059 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1056 1060
1057 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); 1061 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count());
1058 1062
1059 EXPECT_EQ(ERR_IO_PENDING, StartRequest("b", DEFAULT_PRIORITY)); 1063 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1060 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", DEFAULT_PRIORITY)); 1064 EXPECT_THAT(StartRequest("c", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1061 1065
1062 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); 1066 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count());
1063 1067
1064 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1068 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1065 EXPECT_EQ(kDefaultMaxSockets + 1, client_socket_factory_.allocation_count()); 1069 EXPECT_EQ(kDefaultMaxSockets + 1, client_socket_factory_.allocation_count());
1066 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1070 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1067 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); 1071 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count());
1068 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1072 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1069 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1073 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1070 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count()); 1074 EXPECT_EQ(kDefaultMaxSockets + 2, client_socket_factory_.allocation_count());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo")); 1167 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo"));
1164 1168
1165 // Cancel the stalled request. 1169 // Cancel the stalled request.
1166 handles[0].Reset(); 1170 handles[0].Reset();
1167 1171
1168 // Now we should have a connect job. 1172 // Now we should have a connect job.
1169 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("foo")); 1173 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("foo"));
1170 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo")); 1174 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo"));
1171 1175
1172 // The stalled socket should connect. 1176 // The stalled socket should connect.
1173 EXPECT_EQ(OK, callback.WaitForResult()); 1177 EXPECT_THAT(callback.WaitForResult(), IsOk());
1174 1178
1175 EXPECT_EQ(kDefaultMaxSockets + 1, 1179 EXPECT_EQ(kDefaultMaxSockets + 1,
1176 client_socket_factory_.allocation_count()); 1180 client_socket_factory_.allocation_count());
1177 EXPECT_EQ(0, pool_->IdleSocketCount()); 1181 EXPECT_EQ(0, pool_->IdleSocketCount());
1178 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("foo")); 1182 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("foo"));
1179 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo")); 1183 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("foo"));
1180 1184
1181 // Dropping out of scope will close all handles and return them to idle. 1185 // Dropping out of scope will close all handles and return them to idle.
1182 } 1186 }
1183 1187
(...skipping 28 matching lines...) Expand all
1212 stalled_handle.Init("foo", params_, DEFAULT_PRIORITY, 1216 stalled_handle.Init("foo", params_, DEFAULT_PRIORITY,
1213 ClientSocketPool::RespectLimits::ENABLED, 1217 ClientSocketPool::RespectLimits::ENABLED,
1214 callback.callback(), pool_.get(), BoundNetLog())); 1218 callback.callback(), pool_.get(), BoundNetLog()));
1215 EXPECT_TRUE(pool_->IsStalled()); 1219 EXPECT_TRUE(pool_->IsStalled());
1216 1220
1217 // Dropping out of scope will close all handles and return them to idle. 1221 // Dropping out of scope will close all handles and return them to idle.
1218 } 1222 }
1219 1223
1220 // But if we wait for it, the released idle sockets will be closed in 1224 // But if we wait for it, the released idle sockets will be closed in
1221 // preference of the waiting request. 1225 // preference of the waiting request.
1222 EXPECT_EQ(OK, callback.WaitForResult()); 1226 EXPECT_THAT(callback.WaitForResult(), IsOk());
1223 1227
1224 EXPECT_EQ(kDefaultMaxSockets + 1, client_socket_factory_.allocation_count()); 1228 EXPECT_EQ(kDefaultMaxSockets + 1, client_socket_factory_.allocation_count());
1225 EXPECT_EQ(3, pool_->IdleSocketCount()); 1229 EXPECT_EQ(3, pool_->IdleSocketCount());
1226 } 1230 }
1227 1231
1228 // Regression test for http://crbug.com/40952. 1232 // Regression test for http://crbug.com/40952.
1229 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketAtSocketLimitDeleteGroup) { 1233 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketAtSocketLimitDeleteGroup) {
1230 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1234 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1231 pool_->EnableConnectBackupJobs(); 1235 pool_->EnableConnectBackupJobs();
1232 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 1236 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
(...skipping 22 matching lines...) Expand all
1255 ClientSocketPool::RespectLimits::ENABLED, 1259 ClientSocketPool::RespectLimits::ENABLED,
1256 callback.callback(), pool_.get(), BoundNetLog())); 1260 callback.callback(), pool_.get(), BoundNetLog()));
1257 1261
1258 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); 1262 EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count());
1259 EXPECT_EQ(kDefaultMaxSockets - 1, pool_->IdleSocketCount()); 1263 EXPECT_EQ(kDefaultMaxSockets - 1, pool_->IdleSocketCount());
1260 } 1264 }
1261 1265
1262 TEST_F(ClientSocketPoolBaseTest, PendingRequests) { 1266 TEST_F(ClientSocketPoolBaseTest, PendingRequests) {
1263 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1267 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1264 1268
1265 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1269 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1266 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1270 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1267 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", IDLE)); 1271 EXPECT_THAT(StartRequest("a", IDLE), IsError(ERR_IO_PENDING));
1268 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1272 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1269 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", MEDIUM)); 1273 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING));
1270 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", HIGHEST)); 1274 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING));
1271 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 1275 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING));
1272 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1276 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1273 1277
1274 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); 1278 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE);
1275 1279
1276 EXPECT_EQ(kDefaultMaxSocketsPerGroup, 1280 EXPECT_EQ(kDefaultMaxSocketsPerGroup,
1277 client_socket_factory_.allocation_count()); 1281 client_socket_factory_.allocation_count());
1278 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, 1282 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup,
1279 completion_count()); 1283 completion_count());
1280 1284
1281 EXPECT_EQ(1, GetOrderOfRequest(1)); 1285 EXPECT_EQ(1, GetOrderOfRequest(1));
1282 EXPECT_EQ(2, GetOrderOfRequest(2)); 1286 EXPECT_EQ(2, GetOrderOfRequest(2));
1283 EXPECT_EQ(8, GetOrderOfRequest(3)); 1287 EXPECT_EQ(8, GetOrderOfRequest(3));
1284 EXPECT_EQ(6, GetOrderOfRequest(4)); 1288 EXPECT_EQ(6, GetOrderOfRequest(4));
1285 EXPECT_EQ(4, GetOrderOfRequest(5)); 1289 EXPECT_EQ(4, GetOrderOfRequest(5));
1286 EXPECT_EQ(3, GetOrderOfRequest(6)); 1290 EXPECT_EQ(3, GetOrderOfRequest(6));
1287 EXPECT_EQ(5, GetOrderOfRequest(7)); 1291 EXPECT_EQ(5, GetOrderOfRequest(7));
1288 EXPECT_EQ(7, GetOrderOfRequest(8)); 1292 EXPECT_EQ(7, GetOrderOfRequest(8));
1289 1293
1290 // Make sure we test order of all requests made. 1294 // Make sure we test order of all requests made.
1291 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(9)); 1295 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(9));
1292 } 1296 }
1293 1297
1294 TEST_F(ClientSocketPoolBaseTest, PendingRequests_NoKeepAlive) { 1298 TEST_F(ClientSocketPoolBaseTest, PendingRequests_NoKeepAlive) {
1295 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1299 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1296 1300
1297 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1301 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1298 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1302 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1299 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1303 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1300 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", MEDIUM)); 1304 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING));
1301 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", HIGHEST)); 1305 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING));
1302 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 1306 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING));
1303 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1307 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1304 1308
1305 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 1309 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
1306 1310
1307 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i) 1311 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i)
1308 EXPECT_EQ(OK, request(i)->WaitForResult()); 1312 EXPECT_THAT(request(i)->WaitForResult(), IsOk());
1309 1313
1310 EXPECT_EQ(static_cast<int>(requests_size()), 1314 EXPECT_EQ(static_cast<int>(requests_size()),
1311 client_socket_factory_.allocation_count()); 1315 client_socket_factory_.allocation_count());
1312 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, 1316 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup,
1313 completion_count()); 1317 completion_count());
1314 } 1318 }
1315 1319
1316 // This test will start up a RequestSocket() and then immediately Cancel() it. 1320 // This test will start up a RequestSocket() and then immediately Cancel() it.
1317 // The pending connect job will be cancelled and should not call back into 1321 // The pending connect job will be cancelled and should not call back into
1318 // ClientSocketPoolBase. 1322 // ClientSocketPoolBase.
(...skipping 23 matching lines...) Expand all
1342 callback.callback(), pool_.get(), BoundNetLog())); 1346 callback.callback(), pool_.get(), BoundNetLog()));
1343 1347
1344 handle.Reset(); 1348 handle.Reset();
1345 1349
1346 TestCompletionCallback callback2; 1350 TestCompletionCallback callback2;
1347 EXPECT_EQ(ERR_IO_PENDING, 1351 EXPECT_EQ(ERR_IO_PENDING,
1348 handle.Init("a", params_, DEFAULT_PRIORITY, 1352 handle.Init("a", params_, DEFAULT_PRIORITY,
1349 ClientSocketPool::RespectLimits::ENABLED, 1353 ClientSocketPool::RespectLimits::ENABLED,
1350 callback2.callback(), pool_.get(), BoundNetLog())); 1354 callback2.callback(), pool_.get(), BoundNetLog()));
1351 1355
1352 EXPECT_EQ(OK, callback2.WaitForResult()); 1356 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1353 EXPECT_FALSE(callback.have_result()); 1357 EXPECT_FALSE(callback.have_result());
1354 1358
1355 handle.Reset(); 1359 handle.Reset();
1356 } 1360 }
1357 1361
1358 TEST_F(ClientSocketPoolBaseTest, CancelRequest) { 1362 TEST_F(ClientSocketPoolBaseTest, CancelRequest) {
1359 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1363 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1360 1364
1361 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1365 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1362 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1366 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1363 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1367 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1364 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", MEDIUM)); 1368 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING));
1365 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", HIGHEST)); 1369 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING));
1366 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 1370 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING));
1367 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1371 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1368 1372
1369 // Cancel a request. 1373 // Cancel a request.
1370 size_t index_to_cancel = kDefaultMaxSocketsPerGroup + 2; 1374 size_t index_to_cancel = kDefaultMaxSocketsPerGroup + 2;
1371 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized()); 1375 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized());
1372 (*requests())[index_to_cancel]->handle()->Reset(); 1376 (*requests())[index_to_cancel]->handle()->Reset();
1373 1377
1374 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); 1378 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE);
1375 1379
1376 EXPECT_EQ(kDefaultMaxSocketsPerGroup, 1380 EXPECT_EQ(kDefaultMaxSocketsPerGroup,
1377 client_socket_factory_.allocation_count()); 1381 client_socket_factory_.allocation_count());
(...skipping 17 matching lines...) Expand all
1395 // disconnects the successfully connected socket from the first request, and 1399 // disconnects the successfully connected socket from the first request, and
1396 // then reuses the ClientSocketHandle to request another socket. 1400 // then reuses the ClientSocketHandle to request another socket.
1397 // 1401 //
1398 // |nested_callback| is called with the result of the second socket request. 1402 // |nested_callback| is called with the result of the second socket request.
1399 void RequestSocketOnComplete(ClientSocketHandle* handle, 1403 void RequestSocketOnComplete(ClientSocketHandle* handle,
1400 TestClientSocketPool* pool, 1404 TestClientSocketPool* pool,
1401 TestConnectJobFactory* test_connect_job_factory, 1405 TestConnectJobFactory* test_connect_job_factory,
1402 TestConnectJob::JobType next_job_type, 1406 TestConnectJob::JobType next_job_type,
1403 const CompletionCallback& nested_callback, 1407 const CompletionCallback& nested_callback,
1404 int first_request_result) { 1408 int first_request_result) {
1405 EXPECT_EQ(OK, first_request_result); 1409 EXPECT_THAT(first_request_result, IsOk());
1406 1410
1407 test_connect_job_factory->set_job_type(next_job_type); 1411 test_connect_job_factory->set_job_type(next_job_type);
1408 1412
1409 // Don't allow reuse of the socket. Disconnect it and then release it. 1413 // Don't allow reuse of the socket. Disconnect it and then release it.
1410 if (handle->socket()) 1414 if (handle->socket())
1411 handle->socket()->Disconnect(); 1415 handle->socket()->Disconnect();
1412 handle->Reset(); 1416 handle->Reset();
1413 1417
1414 scoped_refptr<TestSocketParams> params(new TestSocketParams()); 1418 scoped_refptr<TestSocketParams> params(new TestSocketParams());
1415 TestCompletionCallback callback; 1419 TestCompletionCallback callback;
(...skipping 16 matching lines...) Expand all
1432 1436
1433 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1437 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1434 ClientSocketHandle handle; 1438 ClientSocketHandle handle;
1435 TestCompletionCallback second_result_callback; 1439 TestCompletionCallback second_result_callback;
1436 int rv = handle.Init( 1440 int rv = handle.Init(
1437 "a", params_, DEFAULT_PRIORITY, ClientSocketPool::RespectLimits::ENABLED, 1441 "a", params_, DEFAULT_PRIORITY, ClientSocketPool::RespectLimits::ENABLED,
1438 base::Bind(&RequestSocketOnComplete, &handle, pool_.get(), 1442 base::Bind(&RequestSocketOnComplete, &handle, pool_.get(),
1439 connect_job_factory_, TestConnectJob::kMockPendingJob, 1443 connect_job_factory_, TestConnectJob::kMockPendingJob,
1440 second_result_callback.callback()), 1444 second_result_callback.callback()),
1441 pool_.get(), BoundNetLog()); 1445 pool_.get(), BoundNetLog());
1442 ASSERT_EQ(ERR_IO_PENDING, rv); 1446 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
1443 1447
1444 EXPECT_EQ(OK, second_result_callback.WaitForResult()); 1448 EXPECT_THAT(second_result_callback.WaitForResult(), IsOk());
1445 } 1449 }
1446 1450
1447 // Tests the case where a second socket is requested in a completion callback, 1451 // Tests the case where a second socket is requested in a completion callback,
1448 // and the second socket connects synchronously. Reuses the same 1452 // and the second socket connects synchronously. Reuses the same
1449 // ClientSocketHandle for the second socket, after disconnecting the first. 1453 // ClientSocketHandle for the second socket, after disconnecting the first.
1450 TEST_F(ClientSocketPoolBaseTest, RequestPendingJobThenSynchronous) { 1454 TEST_F(ClientSocketPoolBaseTest, RequestPendingJobThenSynchronous) {
1451 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1455 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1452 1456
1453 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1457 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1454 ClientSocketHandle handle; 1458 ClientSocketHandle handle;
1455 TestCompletionCallback second_result_callback; 1459 TestCompletionCallback second_result_callback;
1456 int rv = handle.Init( 1460 int rv = handle.Init(
1457 "a", params_, DEFAULT_PRIORITY, ClientSocketPool::RespectLimits::ENABLED, 1461 "a", params_, DEFAULT_PRIORITY, ClientSocketPool::RespectLimits::ENABLED,
1458 base::Bind(&RequestSocketOnComplete, &handle, pool_.get(), 1462 base::Bind(&RequestSocketOnComplete, &handle, pool_.get(),
1459 connect_job_factory_, TestConnectJob::kMockPendingJob, 1463 connect_job_factory_, TestConnectJob::kMockPendingJob,
1460 second_result_callback.callback()), 1464 second_result_callback.callback()),
1461 pool_.get(), BoundNetLog()); 1465 pool_.get(), BoundNetLog());
1462 ASSERT_EQ(ERR_IO_PENDING, rv); 1466 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
1463 1467
1464 EXPECT_EQ(OK, second_result_callback.WaitForResult()); 1468 EXPECT_THAT(second_result_callback.WaitForResult(), IsOk());
1465 } 1469 }
1466 1470
1467 // Make sure that pending requests get serviced after active requests get 1471 // Make sure that pending requests get serviced after active requests get
1468 // cancelled. 1472 // cancelled.
1469 TEST_F(ClientSocketPoolBaseTest, CancelActiveRequestWithPendingRequests) { 1473 TEST_F(ClientSocketPoolBaseTest, CancelActiveRequestWithPendingRequests) {
1470 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1474 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1471 1475
1472 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1476 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1473 1477
1474 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1478 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1475 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1479 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1476 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1480 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1477 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1481 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1478 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1482 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1479 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1483 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1480 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1484 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1481 1485
1482 // Now, kDefaultMaxSocketsPerGroup requests should be active. 1486 // Now, kDefaultMaxSocketsPerGroup requests should be active.
1483 // Let's cancel them. 1487 // Let's cancel them.
1484 for (int i = 0; i < kDefaultMaxSocketsPerGroup; ++i) { 1488 for (int i = 0; i < kDefaultMaxSocketsPerGroup; ++i) {
1485 ASSERT_FALSE(request(i)->handle()->is_initialized()); 1489 ASSERT_FALSE(request(i)->handle()->is_initialized());
1486 request(i)->handle()->Reset(); 1490 request(i)->handle()->Reset();
1487 } 1491 }
1488 1492
1489 // Let's wait for the rest to complete now. 1493 // Let's wait for the rest to complete now.
1490 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i) { 1494 for (size_t i = kDefaultMaxSocketsPerGroup; i < requests_size(); ++i) {
1491 EXPECT_EQ(OK, request(i)->WaitForResult()); 1495 EXPECT_THAT(request(i)->WaitForResult(), IsOk());
1492 request(i)->handle()->Reset(); 1496 request(i)->handle()->Reset();
1493 } 1497 }
1494 1498
1495 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup, 1499 EXPECT_EQ(requests_size() - kDefaultMaxSocketsPerGroup,
1496 completion_count()); 1500 completion_count());
1497 } 1501 }
1498 1502
1499 // Make sure that pending requests get serviced after active requests fail. 1503 // Make sure that pending requests get serviced after active requests fail.
1500 TEST_F(ClientSocketPoolBaseTest, FailingActiveRequestWithPendingRequests) { 1504 TEST_F(ClientSocketPoolBaseTest, FailingActiveRequestWithPendingRequests) {
1501 const size_t kMaxSockets = 5; 1505 const size_t kMaxSockets = 5;
1502 CreatePool(kMaxSockets, kDefaultMaxSocketsPerGroup); 1506 CreatePool(kMaxSockets, kDefaultMaxSocketsPerGroup);
1503 1507
1504 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob); 1508 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob);
1505 1509
1506 const size_t kNumberOfRequests = 2 * kDefaultMaxSocketsPerGroup + 1; 1510 const size_t kNumberOfRequests = 2 * kDefaultMaxSocketsPerGroup + 1;
1507 ASSERT_LE(kNumberOfRequests, kMaxSockets); // Otherwise the test will hang. 1511 ASSERT_LE(kNumberOfRequests, kMaxSockets); // Otherwise the test will hang.
1508 1512
1509 // Queue up all the requests 1513 // Queue up all the requests
1510 for (size_t i = 0; i < kNumberOfRequests; ++i) 1514 for (size_t i = 0; i < kNumberOfRequests; ++i)
1511 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1515 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1512 1516
1513 for (size_t i = 0; i < kNumberOfRequests; ++i) 1517 for (size_t i = 0; i < kNumberOfRequests; ++i)
1514 EXPECT_EQ(ERR_CONNECTION_FAILED, request(i)->WaitForResult()); 1518 EXPECT_THAT(request(i)->WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1515 } 1519 }
1516 1520
1517 TEST_F(ClientSocketPoolBaseTest, CancelActiveRequestThenRequestSocket) { 1521 TEST_F(ClientSocketPoolBaseTest, CancelActiveRequestThenRequestSocket) {
1518 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1522 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1519 1523
1520 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1524 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1521 1525
1522 ClientSocketHandle handle; 1526 ClientSocketHandle handle;
1523 TestCompletionCallback callback; 1527 TestCompletionCallback callback;
1524 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1528 int rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1525 ClientSocketPool::RespectLimits::ENABLED, 1529 ClientSocketPool::RespectLimits::ENABLED,
1526 callback.callback(), pool_.get(), BoundNetLog()); 1530 callback.callback(), pool_.get(), BoundNetLog());
1527 EXPECT_EQ(ERR_IO_PENDING, rv); 1531 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1528 1532
1529 // Cancel the active request. 1533 // Cancel the active request.
1530 handle.Reset(); 1534 handle.Reset();
1531 1535
1532 rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1536 rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1533 ClientSocketPool::RespectLimits::ENABLED, 1537 ClientSocketPool::RespectLimits::ENABLED,
1534 callback.callback(), pool_.get(), BoundNetLog()); 1538 callback.callback(), pool_.get(), BoundNetLog());
1535 EXPECT_EQ(ERR_IO_PENDING, rv); 1539 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1536 EXPECT_EQ(OK, callback.WaitForResult()); 1540 EXPECT_THAT(callback.WaitForResult(), IsOk());
1537 1541
1538 EXPECT_FALSE(handle.is_reused()); 1542 EXPECT_FALSE(handle.is_reused());
1539 TestLoadTimingInfoConnectedNotReused(handle); 1543 TestLoadTimingInfoConnectedNotReused(handle);
1540 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1544 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1541 } 1545 }
1542 1546
1543 // Regression test for http://crbug.com/17985. 1547 // Regression test for http://crbug.com/17985.
1544 TEST_F(ClientSocketPoolBaseTest, GroupWithPendingRequestsIsNotEmpty) { 1548 TEST_F(ClientSocketPoolBaseTest, GroupWithPendingRequestsIsNotEmpty) {
1545 const int kMaxSockets = 3; 1549 const int kMaxSockets = 3;
1546 const int kMaxSocketsPerGroup = 2; 1550 const int kMaxSocketsPerGroup = 2;
1547 CreatePool(kMaxSockets, kMaxSocketsPerGroup); 1551 CreatePool(kMaxSockets, kMaxSocketsPerGroup);
1548 1552
1549 const RequestPriority kHighPriority = HIGHEST; 1553 const RequestPriority kHighPriority = HIGHEST;
1550 1554
1551 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1555 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1552 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 1556 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
1553 1557
1554 // This is going to be a pending request in an otherwise empty group. 1558 // This is going to be a pending request in an otherwise empty group.
1555 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1559 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1556 1560
1557 // Reach the maximum socket limit. 1561 // Reach the maximum socket limit.
1558 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 1562 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
1559 1563
1560 // Create a stalled group with high priorities. 1564 // Create a stalled group with high priorities.
1561 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", kHighPriority)); 1565 EXPECT_THAT(StartRequest("c", kHighPriority), IsError(ERR_IO_PENDING));
1562 EXPECT_EQ(ERR_IO_PENDING, StartRequest("c", kHighPriority)); 1566 EXPECT_THAT(StartRequest("c", kHighPriority), IsError(ERR_IO_PENDING));
1563 1567
1564 // Release the first two sockets from "a". Because this is a keepalive, 1568 // Release the first two sockets from "a". Because this is a keepalive,
1565 // the first release will unblock the pending request for "a". The 1569 // the first release will unblock the pending request for "a". The
1566 // second release will unblock a request for "c", becaue it is the next 1570 // second release will unblock a request for "c", becaue it is the next
1567 // high priority socket. 1571 // high priority socket.
1568 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1572 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1569 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE)); 1573 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::KEEP_ALIVE));
1570 1574
1571 // Closing idle sockets should not get us into trouble, but in the bug 1575 // Closing idle sockets should not get us into trouble, but in the bug
1572 // we were hitting a CHECK here. 1576 // we were hitting a CHECK here.
1573 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 1577 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
1574 pool_->CloseIdleSockets(); 1578 pool_->CloseIdleSockets();
1575 1579
1576 // Run the released socket wakeups. 1580 // Run the released socket wakeups.
1577 base::RunLoop().RunUntilIdle(); 1581 base::RunLoop().RunUntilIdle();
1578 } 1582 }
1579 1583
1580 TEST_F(ClientSocketPoolBaseTest, BasicAsynchronous) { 1584 TEST_F(ClientSocketPoolBaseTest, BasicAsynchronous) {
1581 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1585 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1582 1586
1583 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1587 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1584 ClientSocketHandle handle; 1588 ClientSocketHandle handle;
1585 TestCompletionCallback callback; 1589 TestCompletionCallback callback;
1586 BoundTestNetLog log; 1590 BoundTestNetLog log;
1587 int rv = handle.Init("a", params_, LOWEST, 1591 int rv = handle.Init("a", params_, LOWEST,
1588 ClientSocketPool::RespectLimits::ENABLED, 1592 ClientSocketPool::RespectLimits::ENABLED,
1589 callback.callback(), pool_.get(), log.bound()); 1593 callback.callback(), pool_.get(), log.bound());
1590 EXPECT_EQ(ERR_IO_PENDING, rv); 1594 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1591 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 1595 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
1592 TestLoadTimingInfoNotConnected(handle); 1596 TestLoadTimingInfoNotConnected(handle);
1593 1597
1594 EXPECT_EQ(OK, callback.WaitForResult()); 1598 EXPECT_THAT(callback.WaitForResult(), IsOk());
1595 EXPECT_TRUE(handle.is_initialized()); 1599 EXPECT_TRUE(handle.is_initialized());
1596 EXPECT_TRUE(handle.socket()); 1600 EXPECT_TRUE(handle.socket());
1597 TestLoadTimingInfoConnectedNotReused(handle); 1601 TestLoadTimingInfoConnectedNotReused(handle);
1598 1602
1599 handle.Reset(); 1603 handle.Reset();
1600 TestLoadTimingInfoNotConnected(handle); 1604 TestLoadTimingInfoNotConnected(handle);
1601 1605
1602 TestNetLogEntry::List entries; 1606 TestNetLogEntry::List entries;
1603 log.GetEntries(&entries); 1607 log.GetEntries(&entries);
1604 1608
(...skipping 21 matching lines...) Expand all
1626 // Set the additional error state members to ensure that they get cleared. 1630 // Set the additional error state members to ensure that they get cleared.
1627 handle.set_is_ssl_error(true); 1631 handle.set_is_ssl_error(true);
1628 HttpResponseInfo info; 1632 HttpResponseInfo info;
1629 info.headers = new HttpResponseHeaders(std::string()); 1633 info.headers = new HttpResponseHeaders(std::string());
1630 handle.set_ssl_error_response_info(info); 1634 handle.set_ssl_error_response_info(info);
1631 EXPECT_EQ(ERR_IO_PENDING, 1635 EXPECT_EQ(ERR_IO_PENDING,
1632 handle.Init("a", params_, DEFAULT_PRIORITY, 1636 handle.Init("a", params_, DEFAULT_PRIORITY,
1633 ClientSocketPool::RespectLimits::ENABLED, 1637 ClientSocketPool::RespectLimits::ENABLED,
1634 callback.callback(), pool_.get(), log.bound())); 1638 callback.callback(), pool_.get(), log.bound()));
1635 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 1639 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
1636 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 1640 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1637 EXPECT_FALSE(handle.is_ssl_error()); 1641 EXPECT_FALSE(handle.is_ssl_error());
1638 EXPECT_TRUE(handle.ssl_error_response_info().headers.get() == NULL); 1642 EXPECT_TRUE(handle.ssl_error_response_info().headers.get() == NULL);
1639 1643
1640 TestNetLogEntry::List entries; 1644 TestNetLogEntry::List entries;
1641 log.GetEntries(&entries); 1645 log.GetEntries(&entries);
1642 1646
1643 EXPECT_EQ(3u, entries.size()); 1647 EXPECT_EQ(3u, entries.size());
1644 EXPECT_TRUE(LogContainsBeginEvent( 1648 EXPECT_TRUE(LogContainsBeginEvent(
1645 entries, 0, NetLog::TYPE_SOCKET_POOL)); 1649 entries, 0, NetLog::TYPE_SOCKET_POOL));
1646 EXPECT_TRUE(LogContainsEvent( 1650 EXPECT_TRUE(LogContainsEvent(
1647 entries, 1, NetLog::TYPE_SOCKET_POOL_BOUND_TO_CONNECT_JOB, 1651 entries, 1, NetLog::TYPE_SOCKET_POOL_BOUND_TO_CONNECT_JOB,
1648 NetLog::PHASE_NONE)); 1652 NetLog::PHASE_NONE));
1649 EXPECT_TRUE(LogContainsEndEvent( 1653 EXPECT_TRUE(LogContainsEndEvent(
1650 entries, 2, NetLog::TYPE_SOCKET_POOL)); 1654 entries, 2, NetLog::TYPE_SOCKET_POOL));
1651 } 1655 }
1652 1656
1653 // Check that an async ConnectJob failure does not result in creation of a new 1657 // Check that an async ConnectJob failure does not result in creation of a new
1654 // ConnectJob when there's another pending request also waiting on its own 1658 // ConnectJob when there's another pending request also waiting on its own
1655 // ConnectJob. See http://crbug.com/463960. 1659 // ConnectJob. See http://crbug.com/463960.
1656 TEST_F(ClientSocketPoolBaseTest, AsyncFailureWithPendingRequestWithJob) { 1660 TEST_F(ClientSocketPoolBaseTest, AsyncFailureWithPendingRequestWithJob) {
1657 CreatePool(2, 2); 1661 CreatePool(2, 2);
1658 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob); 1662 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob);
1659 1663
1660 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1664 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1661 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 1665 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
1662 1666
1663 EXPECT_EQ(ERR_CONNECTION_FAILED, request(0)->WaitForResult()); 1667 EXPECT_THAT(request(0)->WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1664 EXPECT_EQ(ERR_CONNECTION_FAILED, request(1)->WaitForResult()); 1668 EXPECT_THAT(request(1)->WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1665 1669
1666 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1670 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1667 } 1671 }
1668 1672
1669 TEST_F(ClientSocketPoolBaseTest, TwoRequestsCancelOne) { 1673 TEST_F(ClientSocketPoolBaseTest, TwoRequestsCancelOne) {
1670 // TODO(eroman): Add back the log expectations! Removed them because the 1674 // TODO(eroman): Add back the log expectations! Removed them because the
1671 // ordering is difficult, and some may fire during destructor. 1675 // ordering is difficult, and some may fire during destructor.
1672 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1676 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1673 1677
1674 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1678 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
(...skipping 10 matching lines...) Expand all
1685 EXPECT_EQ(ERR_IO_PENDING, 1689 EXPECT_EQ(ERR_IO_PENDING,
1686 handle2.Init("a", params_, DEFAULT_PRIORITY, 1690 handle2.Init("a", params_, DEFAULT_PRIORITY,
1687 ClientSocketPool::RespectLimits::ENABLED, 1691 ClientSocketPool::RespectLimits::ENABLED,
1688 callback2.callback(), pool_.get(), BoundNetLog())); 1692 callback2.callback(), pool_.get(), BoundNetLog()));
1689 1693
1690 handle.Reset(); 1694 handle.Reset();
1691 1695
1692 1696
1693 // At this point, request 2 is just waiting for the connect job to finish. 1697 // At this point, request 2 is just waiting for the connect job to finish.
1694 1698
1695 EXPECT_EQ(OK, callback2.WaitForResult()); 1699 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1696 handle2.Reset(); 1700 handle2.Reset();
1697 1701
1698 // Now request 2 has actually finished. 1702 // Now request 2 has actually finished.
1699 // TODO(eroman): Add back log expectations. 1703 // TODO(eroman): Add back log expectations.
1700 } 1704 }
1701 1705
1702 TEST_F(ClientSocketPoolBaseTest, CancelRequestLimitsJobs) { 1706 TEST_F(ClientSocketPoolBaseTest, CancelRequestLimitsJobs) {
1703 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1707 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1704 1708
1705 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1709 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1706 1710
1707 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 1711 EXPECT_THAT(StartRequest("a", LOWEST), IsError(ERR_IO_PENDING));
1708 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 1712 EXPECT_THAT(StartRequest("a", LOW), IsError(ERR_IO_PENDING));
1709 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", MEDIUM)); 1713 EXPECT_THAT(StartRequest("a", MEDIUM), IsError(ERR_IO_PENDING));
1710 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", HIGHEST)); 1714 EXPECT_THAT(StartRequest("a", HIGHEST), IsError(ERR_IO_PENDING));
1711 1715
1712 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a")); 1716 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a"));
1713 (*requests())[2]->handle()->Reset(); 1717 (*requests())[2]->handle()->Reset();
1714 (*requests())[3]->handle()->Reset(); 1718 (*requests())[3]->handle()->Reset();
1715 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a")); 1719 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a"));
1716 1720
1717 (*requests())[1]->handle()->Reset(); 1721 (*requests())[1]->handle()->Reset();
1718 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a")); 1722 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a"));
1719 1723
1720 (*requests())[0]->handle()->Reset(); 1724 (*requests())[0]->handle()->Reset();
1721 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a")); 1725 EXPECT_EQ(kDefaultMaxSocketsPerGroup, pool_->NumConnectJobsInGroup("a"));
1722 } 1726 }
1723 1727
1724 // When requests and ConnectJobs are not coupled, the request will get serviced 1728 // When requests and ConnectJobs are not coupled, the request will get serviced
1725 // by whatever comes first. 1729 // by whatever comes first.
1726 TEST_F(ClientSocketPoolBaseTest, ReleaseSockets) { 1730 TEST_F(ClientSocketPoolBaseTest, ReleaseSockets) {
1727 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1731 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1728 1732
1729 // Start job 1 (async OK) 1733 // Start job 1 (async OK)
1730 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 1734 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
1731 1735
1732 std::vector<TestSocketRequest*> request_order; 1736 std::vector<TestSocketRequest*> request_order;
1733 size_t completion_count; // unused 1737 size_t completion_count; // unused
1734 TestSocketRequest req1(&request_order, &completion_count); 1738 TestSocketRequest req1(&request_order, &completion_count);
1735 int rv = req1.handle()->Init("a", params_, DEFAULT_PRIORITY, 1739 int rv = req1.handle()->Init("a", params_, DEFAULT_PRIORITY,
1736 ClientSocketPool::RespectLimits::ENABLED, 1740 ClientSocketPool::RespectLimits::ENABLED,
1737 req1.callback(), pool_.get(), BoundNetLog()); 1741 req1.callback(), pool_.get(), BoundNetLog());
1738 EXPECT_EQ(ERR_IO_PENDING, rv); 1742 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1739 EXPECT_EQ(OK, req1.WaitForResult()); 1743 EXPECT_THAT(req1.WaitForResult(), IsOk());
1740 1744
1741 // Job 1 finished OK. Start job 2 (also async OK). Request 3 is pending 1745 // Job 1 finished OK. Start job 2 (also async OK). Request 3 is pending
1742 // without a job. 1746 // without a job.
1743 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1747 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1744 1748
1745 TestSocketRequest req2(&request_order, &completion_count); 1749 TestSocketRequest req2(&request_order, &completion_count);
1746 rv = req2.handle()->Init("a", params_, DEFAULT_PRIORITY, 1750 rv = req2.handle()->Init("a", params_, DEFAULT_PRIORITY,
1747 ClientSocketPool::RespectLimits::ENABLED, 1751 ClientSocketPool::RespectLimits::ENABLED,
1748 req2.callback(), pool_.get(), BoundNetLog()); 1752 req2.callback(), pool_.get(), BoundNetLog());
1749 EXPECT_EQ(ERR_IO_PENDING, rv); 1753 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1750 TestSocketRequest req3(&request_order, &completion_count); 1754 TestSocketRequest req3(&request_order, &completion_count);
1751 rv = req3.handle()->Init("a", params_, DEFAULT_PRIORITY, 1755 rv = req3.handle()->Init("a", params_, DEFAULT_PRIORITY,
1752 ClientSocketPool::RespectLimits::ENABLED, 1756 ClientSocketPool::RespectLimits::ENABLED,
1753 req3.callback(), pool_.get(), BoundNetLog()); 1757 req3.callback(), pool_.get(), BoundNetLog());
1754 EXPECT_EQ(ERR_IO_PENDING, rv); 1758 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1755 1759
1756 // Both Requests 2 and 3 are pending. We release socket 1 which should 1760 // Both Requests 2 and 3 are pending. We release socket 1 which should
1757 // service request 2. Request 3 should still be waiting. 1761 // service request 2. Request 3 should still be waiting.
1758 req1.handle()->Reset(); 1762 req1.handle()->Reset();
1759 // Run the released socket wakeups. 1763 // Run the released socket wakeups.
1760 base::RunLoop().RunUntilIdle(); 1764 base::RunLoop().RunUntilIdle();
1761 ASSERT_TRUE(req2.handle()->socket()); 1765 ASSERT_TRUE(req2.handle()->socket());
1762 EXPECT_EQ(OK, req2.WaitForResult()); 1766 EXPECT_THAT(req2.WaitForResult(), IsOk());
1763 EXPECT_FALSE(req3.handle()->socket()); 1767 EXPECT_FALSE(req3.handle()->socket());
1764 1768
1765 // Signal job 2, which should service request 3. 1769 // Signal job 2, which should service request 3.
1766 1770
1767 client_socket_factory_.SignalJobs(); 1771 client_socket_factory_.SignalJobs();
1768 EXPECT_EQ(OK, req3.WaitForResult()); 1772 EXPECT_THAT(req3.WaitForResult(), IsOk());
1769 1773
1770 ASSERT_EQ(3U, request_order.size()); 1774 ASSERT_EQ(3U, request_order.size());
1771 EXPECT_EQ(&req1, request_order[0]); 1775 EXPECT_EQ(&req1, request_order[0]);
1772 EXPECT_EQ(&req2, request_order[1]); 1776 EXPECT_EQ(&req2, request_order[1]);
1773 EXPECT_EQ(&req3, request_order[2]); 1777 EXPECT_EQ(&req3, request_order[2]);
1774 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 1778 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
1775 } 1779 }
1776 1780
1777 // The requests are not coupled to the jobs. So, the requests should finish in 1781 // The requests are not coupled to the jobs. So, the requests should finish in
1778 // their priority / insertion order. 1782 // their priority / insertion order.
1779 TEST_F(ClientSocketPoolBaseTest, PendingJobCompletionOrder) { 1783 TEST_F(ClientSocketPoolBaseTest, PendingJobCompletionOrder) {
1780 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1784 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1781 // First two jobs are async. 1785 // First two jobs are async.
1782 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob); 1786 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob);
1783 1787
1784 std::vector<TestSocketRequest*> request_order; 1788 std::vector<TestSocketRequest*> request_order;
1785 size_t completion_count; // unused 1789 size_t completion_count; // unused
1786 TestSocketRequest req1(&request_order, &completion_count); 1790 TestSocketRequest req1(&request_order, &completion_count);
1787 int rv = req1.handle()->Init("a", params_, DEFAULT_PRIORITY, 1791 int rv = req1.handle()->Init("a", params_, DEFAULT_PRIORITY,
1788 ClientSocketPool::RespectLimits::ENABLED, 1792 ClientSocketPool::RespectLimits::ENABLED,
1789 req1.callback(), pool_.get(), BoundNetLog()); 1793 req1.callback(), pool_.get(), BoundNetLog());
1790 EXPECT_EQ(ERR_IO_PENDING, rv); 1794 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1791 1795
1792 TestSocketRequest req2(&request_order, &completion_count); 1796 TestSocketRequest req2(&request_order, &completion_count);
1793 rv = req2.handle()->Init("a", params_, DEFAULT_PRIORITY, 1797 rv = req2.handle()->Init("a", params_, DEFAULT_PRIORITY,
1794 ClientSocketPool::RespectLimits::ENABLED, 1798 ClientSocketPool::RespectLimits::ENABLED,
1795 req2.callback(), pool_.get(), BoundNetLog()); 1799 req2.callback(), pool_.get(), BoundNetLog());
1796 EXPECT_EQ(ERR_IO_PENDING, rv); 1800 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1797 1801
1798 // The pending job is sync. 1802 // The pending job is sync.
1799 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 1803 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
1800 1804
1801 TestSocketRequest req3(&request_order, &completion_count); 1805 TestSocketRequest req3(&request_order, &completion_count);
1802 rv = req3.handle()->Init("a", params_, DEFAULT_PRIORITY, 1806 rv = req3.handle()->Init("a", params_, DEFAULT_PRIORITY,
1803 ClientSocketPool::RespectLimits::ENABLED, 1807 ClientSocketPool::RespectLimits::ENABLED,
1804 req3.callback(), pool_.get(), BoundNetLog()); 1808 req3.callback(), pool_.get(), BoundNetLog());
1805 EXPECT_EQ(ERR_IO_PENDING, rv); 1809 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1806 1810
1807 EXPECT_EQ(ERR_CONNECTION_FAILED, req1.WaitForResult()); 1811 EXPECT_THAT(req1.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1808 EXPECT_EQ(OK, req2.WaitForResult()); 1812 EXPECT_THAT(req2.WaitForResult(), IsOk());
1809 EXPECT_EQ(ERR_CONNECTION_FAILED, req3.WaitForResult()); 1813 EXPECT_THAT(req3.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
1810 1814
1811 ASSERT_EQ(3U, request_order.size()); 1815 ASSERT_EQ(3U, request_order.size());
1812 EXPECT_EQ(&req1, request_order[0]); 1816 EXPECT_EQ(&req1, request_order[0]);
1813 EXPECT_EQ(&req2, request_order[1]); 1817 EXPECT_EQ(&req2, request_order[1]);
1814 EXPECT_EQ(&req3, request_order[2]); 1818 EXPECT_EQ(&req3, request_order[2]);
1815 } 1819 }
1816 1820
1817 // Test GetLoadState in the case there's only one socket request. 1821 // Test GetLoadState in the case there's only one socket request.
1818 TEST_F(ClientSocketPoolBaseTest, LoadStateOneRequest) { 1822 TEST_F(ClientSocketPoolBaseTest, LoadStateOneRequest) {
1819 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 1823 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
1820 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1824 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1821 1825
1822 ClientSocketHandle handle; 1826 ClientSocketHandle handle;
1823 TestCompletionCallback callback; 1827 TestCompletionCallback callback;
1824 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1828 int rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1825 ClientSocketPool::RespectLimits::ENABLED, 1829 ClientSocketPool::RespectLimits::ENABLED,
1826 callback.callback(), pool_.get(), BoundNetLog()); 1830 callback.callback(), pool_.get(), BoundNetLog());
1827 EXPECT_EQ(ERR_IO_PENDING, rv); 1831 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1828 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1832 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1829 1833
1830 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); 1834 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE);
1831 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); 1835 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState());
1832 1836
1833 // No point in completing the connection, since ClientSocketHandles only 1837 // No point in completing the connection, since ClientSocketHandles only
1834 // expect the LoadState to be checked while connecting. 1838 // expect the LoadState to be checked while connecting.
1835 } 1839 }
1836 1840
1837 // Test GetLoadState in the case there are two socket requests. 1841 // Test GetLoadState in the case there are two socket requests.
1838 // Only the first connection in the pool should affect the pool's load status. 1842 // Only the first connection in the pool should affect the pool's load status.
1839 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequests) { 1843 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequests) {
1840 CreatePool(2, 2); 1844 CreatePool(2, 2);
1841 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1845 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1842 1846
1843 ClientSocketHandle handle; 1847 ClientSocketHandle handle;
1844 TestCompletionCallback callback; 1848 TestCompletionCallback callback;
1845 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1849 int rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1846 ClientSocketPool::RespectLimits::ENABLED, 1850 ClientSocketPool::RespectLimits::ENABLED,
1847 callback.callback(), pool_.get(), BoundNetLog()); 1851 callback.callback(), pool_.get(), BoundNetLog());
1848 EXPECT_EQ(ERR_IO_PENDING, rv); 1852 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1849 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); 1853 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST);
1850 1854
1851 ClientSocketHandle handle2; 1855 ClientSocketHandle handle2;
1852 TestCompletionCallback callback2; 1856 TestCompletionCallback callback2;
1853 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, 1857 rv = handle2.Init("a", params_, DEFAULT_PRIORITY,
1854 ClientSocketPool::RespectLimits::ENABLED, 1858 ClientSocketPool::RespectLimits::ENABLED,
1855 callback2.callback(), pool_.get(), BoundNetLog()); 1859 callback2.callback(), pool_.get(), BoundNetLog());
1856 EXPECT_EQ(ERR_IO_PENDING, rv); 1860 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1857 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); 1861 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST);
1858 1862
1859 // Check that both handles report the state of the first job. 1863 // Check that both handles report the state of the first job.
1860 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState()); 1864 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState());
1861 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); 1865 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState());
1862 1866
1863 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_CONNECTING); 1867 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_CONNECTING);
1864 1868
1865 // Check that both handles change to LOAD_STATE_CONNECTING. 1869 // Check that both handles change to LOAD_STATE_CONNECTING.
1866 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1870 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1867 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); 1871 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState());
1868 } 1872 }
1869 1873
1870 // Test that the second connection request does not affect the pool's load 1874 // Test that the second connection request does not affect the pool's load
1871 // status. 1875 // status.
1872 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequestsChangeSecondRequestState) { 1876 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequestsChangeSecondRequestState) {
1873 CreatePool(2, 2); 1877 CreatePool(2, 2);
1874 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1878 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1875 1879
1876 ClientSocketHandle handle; 1880 ClientSocketHandle handle;
1877 TestCompletionCallback callback; 1881 TestCompletionCallback callback;
1878 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1882 int rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1879 ClientSocketPool::RespectLimits::ENABLED, 1883 ClientSocketPool::RespectLimits::ENABLED,
1880 callback.callback(), pool_.get(), BoundNetLog()); 1884 callback.callback(), pool_.get(), BoundNetLog());
1881 EXPECT_EQ(ERR_IO_PENDING, rv); 1885 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1882 1886
1883 ClientSocketHandle handle2; 1887 ClientSocketHandle handle2;
1884 TestCompletionCallback callback2; 1888 TestCompletionCallback callback2;
1885 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, 1889 rv = handle2.Init("a", params_, DEFAULT_PRIORITY,
1886 ClientSocketPool::RespectLimits::ENABLED, 1890 ClientSocketPool::RespectLimits::ENABLED,
1887 callback2.callback(), pool_.get(), BoundNetLog()); 1891 callback2.callback(), pool_.get(), BoundNetLog());
1888 EXPECT_EQ(ERR_IO_PENDING, rv); 1892 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1889 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); 1893 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST);
1890 1894
1891 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1895 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1892 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); 1896 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState());
1893 1897
1894 // First job connects and the first request gets the socket. The 1898 // First job connects and the first request gets the socket. The
1895 // second handle switches to the state of the remaining ConnectJob. 1899 // second handle switches to the state of the remaining ConnectJob.
1896 client_socket_factory_.SignalJob(0); 1900 client_socket_factory_.SignalJob(0);
1897 EXPECT_EQ(OK, callback.WaitForResult()); 1901 EXPECT_THAT(callback.WaitForResult(), IsOk());
1898 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); 1902 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState());
1899 } 1903 }
1900 1904
1901 // Test GetLoadState in the case the per-group limit is reached. 1905 // Test GetLoadState in the case the per-group limit is reached.
1902 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) { 1906 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) {
1903 CreatePool(2, 1); 1907 CreatePool(2, 1);
1904 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1908 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1905 1909
1906 ClientSocketHandle handle; 1910 ClientSocketHandle handle;
1907 TestCompletionCallback callback; 1911 TestCompletionCallback callback;
1908 int rv = handle.Init("a", params_, MEDIUM, 1912 int rv = handle.Init("a", params_, MEDIUM,
1909 ClientSocketPool::RespectLimits::ENABLED, 1913 ClientSocketPool::RespectLimits::ENABLED,
1910 callback.callback(), pool_.get(), BoundNetLog()); 1914 callback.callback(), pool_.get(), BoundNetLog());
1911 EXPECT_EQ(ERR_IO_PENDING, rv); 1915 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1912 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1916 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1913 1917
1914 // Request another socket from the same pool, buth with a higher priority. 1918 // Request another socket from the same pool, buth with a higher priority.
1915 // The first request should now be stalled at the socket group limit. 1919 // The first request should now be stalled at the socket group limit.
1916 ClientSocketHandle handle2; 1920 ClientSocketHandle handle2;
1917 TestCompletionCallback callback2; 1921 TestCompletionCallback callback2;
1918 rv = handle2.Init("a", params_, HIGHEST, 1922 rv = handle2.Init("a", params_, HIGHEST,
1919 ClientSocketPool::RespectLimits::ENABLED, 1923 ClientSocketPool::RespectLimits::ENABLED,
1920 callback2.callback(), pool_.get(), BoundNetLog()); 1924 callback2.callback(), pool_.get(), BoundNetLog());
1921 EXPECT_EQ(ERR_IO_PENDING, rv); 1925 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1922 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState()); 1926 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState());
1923 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); 1927 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState());
1924 1928
1925 // The first handle should remain stalled as the other socket goes through 1929 // The first handle should remain stalled as the other socket goes through
1926 // the connect process. 1930 // the connect process.
1927 1931
1928 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); 1932 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE);
1929 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState()); 1933 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState());
1930 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle2.GetLoadState()); 1934 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle2.GetLoadState());
1931 1935
1932 client_socket_factory_.SignalJob(0); 1936 client_socket_factory_.SignalJob(0);
1933 EXPECT_EQ(OK, callback2.WaitForResult()); 1937 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1934 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState()); 1938 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, handle.GetLoadState());
1935 1939
1936 // Closing the second socket should cause the stalled handle to finally get a 1940 // Closing the second socket should cause the stalled handle to finally get a
1937 // ConnectJob. 1941 // ConnectJob.
1938 handle2.socket()->Disconnect(); 1942 handle2.socket()->Disconnect();
1939 handle2.Reset(); 1943 handle2.Reset();
1940 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1944 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1941 } 1945 }
1942 1946
1943 // Test GetLoadState in the case the per-pool limit is reached. 1947 // Test GetLoadState in the case the per-pool limit is reached.
1944 TEST_F(ClientSocketPoolBaseTest, LoadStatePoolLimit) { 1948 TEST_F(ClientSocketPoolBaseTest, LoadStatePoolLimit) {
1945 CreatePool(2, 2); 1949 CreatePool(2, 2);
1946 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 1950 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
1947 1951
1948 ClientSocketHandle handle; 1952 ClientSocketHandle handle;
1949 TestCompletionCallback callback; 1953 TestCompletionCallback callback;
1950 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, 1954 int rv = handle.Init("a", params_, DEFAULT_PRIORITY,
1951 ClientSocketPool::RespectLimits::ENABLED, 1955 ClientSocketPool::RespectLimits::ENABLED,
1952 callback.callback(), pool_.get(), BoundNetLog()); 1956 callback.callback(), pool_.get(), BoundNetLog());
1953 EXPECT_EQ(ERR_IO_PENDING, rv); 1957 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1954 1958
1955 // Request for socket from another pool. 1959 // Request for socket from another pool.
1956 ClientSocketHandle handle2; 1960 ClientSocketHandle handle2;
1957 TestCompletionCallback callback2; 1961 TestCompletionCallback callback2;
1958 rv = handle2.Init("b", params_, DEFAULT_PRIORITY, 1962 rv = handle2.Init("b", params_, DEFAULT_PRIORITY,
1959 ClientSocketPool::RespectLimits::ENABLED, 1963 ClientSocketPool::RespectLimits::ENABLED,
1960 callback2.callback(), pool_.get(), BoundNetLog()); 1964 callback2.callback(), pool_.get(), BoundNetLog());
1961 EXPECT_EQ(ERR_IO_PENDING, rv); 1965 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1962 1966
1963 // Request another socket from the first pool. Request should stall at the 1967 // Request another socket from the first pool. Request should stall at the
1964 // socket pool limit. 1968 // socket pool limit.
1965 ClientSocketHandle handle3; 1969 ClientSocketHandle handle3;
1966 TestCompletionCallback callback3; 1970 TestCompletionCallback callback3;
1967 rv = handle3.Init("a", params_, DEFAULT_PRIORITY, 1971 rv = handle3.Init("a", params_, DEFAULT_PRIORITY,
1968 ClientSocketPool::RespectLimits::ENABLED, 1972 ClientSocketPool::RespectLimits::ENABLED,
1969 callback2.callback(), pool_.get(), BoundNetLog()); 1973 callback2.callback(), pool_.get(), BoundNetLog());
1970 EXPECT_EQ(ERR_IO_PENDING, rv); 1974 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1971 1975
1972 // The third handle should remain stalled as the other sockets in its group 1976 // The third handle should remain stalled as the other sockets in its group
1973 // goes through the connect process. 1977 // goes through the connect process.
1974 1978
1975 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); 1979 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState());
1976 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState()); 1980 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState());
1977 1981
1978 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); 1982 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE);
1979 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); 1983 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState());
1980 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState()); 1984 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState());
1981 1985
1982 client_socket_factory_.SignalJob(0); 1986 client_socket_factory_.SignalJob(0);
1983 EXPECT_EQ(OK, callback.WaitForResult()); 1987 EXPECT_THAT(callback.WaitForResult(), IsOk());
1984 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState()); 1988 EXPECT_EQ(LOAD_STATE_WAITING_FOR_STALLED_SOCKET_POOL, handle3.GetLoadState());
1985 1989
1986 // Closing a socket should allow the stalled handle to finally get a new 1990 // Closing a socket should allow the stalled handle to finally get a new
1987 // ConnectJob. 1991 // ConnectJob.
1988 handle.socket()->Disconnect(); 1992 handle.socket()->Disconnect();
1989 handle.Reset(); 1993 handle.Reset();
1990 EXPECT_EQ(LOAD_STATE_CONNECTING, handle3.GetLoadState()); 1994 EXPECT_EQ(LOAD_STATE_CONNECTING, handle3.GetLoadState());
1991 } 1995 }
1992 1996
1993 TEST_F(ClientSocketPoolBaseTest, Recoverable) { 1997 TEST_F(ClientSocketPoolBaseTest, Recoverable) {
(...skipping 15 matching lines...) Expand all
2009 2013
2010 connect_job_factory_->set_job_type( 2014 connect_job_factory_->set_job_type(
2011 TestConnectJob::kMockPendingRecoverableJob); 2015 TestConnectJob::kMockPendingRecoverableJob);
2012 ClientSocketHandle handle; 2016 ClientSocketHandle handle;
2013 TestCompletionCallback callback; 2017 TestCompletionCallback callback;
2014 EXPECT_EQ(ERR_IO_PENDING, 2018 EXPECT_EQ(ERR_IO_PENDING,
2015 handle.Init("a", params_, DEFAULT_PRIORITY, 2019 handle.Init("a", params_, DEFAULT_PRIORITY,
2016 ClientSocketPool::RespectLimits::ENABLED, 2020 ClientSocketPool::RespectLimits::ENABLED,
2017 callback.callback(), pool_.get(), BoundNetLog())); 2021 callback.callback(), pool_.get(), BoundNetLog()));
2018 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 2022 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
2019 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); 2023 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_PROXY_AUTH_REQUESTED));
2020 EXPECT_TRUE(handle.is_initialized()); 2024 EXPECT_TRUE(handle.is_initialized());
2021 EXPECT_TRUE(handle.socket()); 2025 EXPECT_TRUE(handle.socket());
2022 } 2026 }
2023 2027
2024 TEST_F(ClientSocketPoolBaseTest, AdditionalErrorStateSynchronous) { 2028 TEST_F(ClientSocketPoolBaseTest, AdditionalErrorStateSynchronous) {
2025 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2029 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2026 connect_job_factory_->set_job_type( 2030 connect_job_factory_->set_job_type(
2027 TestConnectJob::kMockAdditionalErrorStateJob); 2031 TestConnectJob::kMockAdditionalErrorStateJob);
2028 2032
2029 ClientSocketHandle handle; 2033 ClientSocketHandle handle;
(...skipping 13 matching lines...) Expand all
2043 2047
2044 connect_job_factory_->set_job_type( 2048 connect_job_factory_->set_job_type(
2045 TestConnectJob::kMockPendingAdditionalErrorStateJob); 2049 TestConnectJob::kMockPendingAdditionalErrorStateJob);
2046 ClientSocketHandle handle; 2050 ClientSocketHandle handle;
2047 TestCompletionCallback callback; 2051 TestCompletionCallback callback;
2048 EXPECT_EQ(ERR_IO_PENDING, 2052 EXPECT_EQ(ERR_IO_PENDING,
2049 handle.Init("a", params_, DEFAULT_PRIORITY, 2053 handle.Init("a", params_, DEFAULT_PRIORITY,
2050 ClientSocketPool::RespectLimits::ENABLED, 2054 ClientSocketPool::RespectLimits::ENABLED,
2051 callback.callback(), pool_.get(), BoundNetLog())); 2055 callback.callback(), pool_.get(), BoundNetLog()));
2052 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 2056 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
2053 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 2057 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
2054 EXPECT_FALSE(handle.is_initialized()); 2058 EXPECT_FALSE(handle.is_initialized());
2055 EXPECT_FALSE(handle.socket()); 2059 EXPECT_FALSE(handle.socket());
2056 EXPECT_TRUE(handle.is_ssl_error()); 2060 EXPECT_TRUE(handle.is_ssl_error());
2057 EXPECT_FALSE(handle.ssl_error_response_info().headers.get() == NULL); 2061 EXPECT_FALSE(handle.ssl_error_response_info().headers.get() == NULL);
2058 } 2062 }
2059 2063
2060 // Make sure we can reuse sockets. 2064 // Make sure we can reuse sockets.
2061 TEST_F(ClientSocketPoolBaseTest, CleanupTimedOutIdleSocketsReuse) { 2065 TEST_F(ClientSocketPoolBaseTest, CleanupTimedOutIdleSocketsReuse) {
2062 CreatePoolWithIdleTimeouts( 2066 CreatePoolWithIdleTimeouts(
2063 kDefaultMaxSockets, kDefaultMaxSocketsPerGroup, 2067 kDefaultMaxSockets, kDefaultMaxSocketsPerGroup,
2064 base::TimeDelta(), // Time out unused sockets immediately. 2068 base::TimeDelta(), // Time out unused sockets immediately.
2065 base::TimeDelta::FromDays(1)); // Don't time out used sockets. 2069 base::TimeDelta::FromDays(1)); // Don't time out used sockets.
2066 2070
2067 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2071 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2068 2072
2069 ClientSocketHandle handle; 2073 ClientSocketHandle handle;
2070 TestCompletionCallback callback; 2074 TestCompletionCallback callback;
2071 int rv = handle.Init("a", params_, LOWEST, 2075 int rv = handle.Init("a", params_, LOWEST,
2072 ClientSocketPool::RespectLimits::ENABLED, 2076 ClientSocketPool::RespectLimits::ENABLED,
2073 callback.callback(), pool_.get(), BoundNetLog()); 2077 callback.callback(), pool_.get(), BoundNetLog());
2074 ASSERT_EQ(ERR_IO_PENDING, rv); 2078 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
2075 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 2079 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
2076 ASSERT_EQ(OK, callback.WaitForResult()); 2080 ASSERT_THAT(callback.WaitForResult(), IsOk());
2077 2081
2078 // Use and release the socket. 2082 // Use and release the socket.
2079 EXPECT_EQ(1, handle.socket()->Write(NULL, 1, CompletionCallback())); 2083 EXPECT_EQ(1, handle.socket()->Write(NULL, 1, CompletionCallback()));
2080 TestLoadTimingInfoConnectedNotReused(handle); 2084 TestLoadTimingInfoConnectedNotReused(handle);
2081 handle.Reset(); 2085 handle.Reset();
2082 2086
2083 // Should now have one idle socket. 2087 // Should now have one idle socket.
2084 ASSERT_EQ(1, pool_->IdleSocketCount()); 2088 ASSERT_EQ(1, pool_->IdleSocketCount());
2085 2089
2086 // Request a new socket. This should reuse the old socket and complete 2090 // Request a new socket. This should reuse the old socket and complete
2087 // synchronously. 2091 // synchronously.
2088 BoundTestNetLog log; 2092 BoundTestNetLog log;
2089 rv = handle.Init("a", params_, LOWEST, 2093 rv = handle.Init("a", params_, LOWEST,
2090 ClientSocketPool::RespectLimits::ENABLED, 2094 ClientSocketPool::RespectLimits::ENABLED,
2091 CompletionCallback(), pool_.get(), log.bound()); 2095 CompletionCallback(), pool_.get(), log.bound());
2092 ASSERT_EQ(OK, rv); 2096 ASSERT_THAT(rv, IsOk());
2093 EXPECT_TRUE(handle.is_reused()); 2097 EXPECT_TRUE(handle.is_reused());
2094 TestLoadTimingInfoConnectedReused(handle); 2098 TestLoadTimingInfoConnectedReused(handle);
2095 2099
2096 ASSERT_TRUE(pool_->HasGroup("a")); 2100 ASSERT_TRUE(pool_->HasGroup("a"));
2097 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2101 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2098 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); 2102 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
2099 2103
2100 TestNetLogEntry::List entries; 2104 TestNetLogEntry::List entries;
2101 log.GetEntries(&entries); 2105 log.GetEntries(&entries);
2102 EXPECT_TRUE(LogContainsEntryWithType( 2106 EXPECT_TRUE(LogContainsEntryWithType(
(...skipping 17 matching lines...) Expand all
2120 2124
2121 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2125 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2122 2126
2123 // Startup two mock pending connect jobs, which will sit in the MessageLoop. 2127 // Startup two mock pending connect jobs, which will sit in the MessageLoop.
2124 2128
2125 ClientSocketHandle handle; 2129 ClientSocketHandle handle;
2126 TestCompletionCallback callback; 2130 TestCompletionCallback callback;
2127 int rv = handle.Init("a", params_, LOWEST, 2131 int rv = handle.Init("a", params_, LOWEST,
2128 ClientSocketPool::RespectLimits::ENABLED, 2132 ClientSocketPool::RespectLimits::ENABLED,
2129 callback.callback(), pool_.get(), BoundNetLog()); 2133 callback.callback(), pool_.get(), BoundNetLog());
2130 ASSERT_EQ(ERR_IO_PENDING, rv); 2134 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
2131 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle)); 2135 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle));
2132 2136
2133 ClientSocketHandle handle2; 2137 ClientSocketHandle handle2;
2134 TestCompletionCallback callback2; 2138 TestCompletionCallback callback2;
2135 rv = handle2.Init("a", params_, LOWEST, 2139 rv = handle2.Init("a", params_, LOWEST,
2136 ClientSocketPool::RespectLimits::ENABLED, 2140 ClientSocketPool::RespectLimits::ENABLED,
2137 callback2.callback(), pool_.get(), BoundNetLog()); 2141 callback2.callback(), pool_.get(), BoundNetLog());
2138 ASSERT_EQ(ERR_IO_PENDING, rv); 2142 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
2139 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle2)); 2143 EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", &handle2));
2140 2144
2141 // Cancel one of the requests. Wait for the other, which will get the first 2145 // Cancel one of the requests. Wait for the other, which will get the first
2142 // job. Release the socket. Run the loop again to make sure the second 2146 // job. Release the socket. Run the loop again to make sure the second
2143 // socket is sitting idle and the first one is released (since ReleaseSocket() 2147 // socket is sitting idle and the first one is released (since ReleaseSocket()
2144 // just posts a DoReleaseSocket() task). 2148 // just posts a DoReleaseSocket() task).
2145 2149
2146 handle.Reset(); 2150 handle.Reset();
2147 ASSERT_EQ(OK, callback2.WaitForResult()); 2151 ASSERT_THAT(callback2.WaitForResult(), IsOk());
2148 // Use the socket. 2152 // Use the socket.
2149 EXPECT_EQ(1, handle2.socket()->Write(NULL, 1, CompletionCallback())); 2153 EXPECT_EQ(1, handle2.socket()->Write(NULL, 1, CompletionCallback()));
2150 handle2.Reset(); 2154 handle2.Reset();
2151 2155
2152 // We post all of our delayed tasks with a 2ms delay. I.e. they don't 2156 // We post all of our delayed tasks with a 2ms delay. I.e. they don't
2153 // actually become pending until 2ms after they have been created. In order 2157 // actually become pending until 2ms after they have been created. In order
2154 // to flush all tasks, we need to wait so that we know there are no 2158 // to flush all tasks, we need to wait so that we know there are no
2155 // soon-to-be-pending tasks waiting. 2159 // soon-to-be-pending tasks waiting.
2156 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 2160 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
2157 base::RunLoop().RunUntilIdle(); 2161 base::RunLoop().RunUntilIdle();
2158 2162
2159 // Both sockets should now be idle. 2163 // Both sockets should now be idle.
2160 ASSERT_EQ(2, pool_->IdleSocketCount()); 2164 ASSERT_EQ(2, pool_->IdleSocketCount());
2161 2165
2162 // Request a new socket. This should cleanup the unused and timed out ones. 2166 // Request a new socket. This should cleanup the unused and timed out ones.
2163 // A new socket will be created rather than reusing the idle one. 2167 // A new socket will be created rather than reusing the idle one.
2164 BoundTestNetLog log; 2168 BoundTestNetLog log;
2165 TestCompletionCallback callback3; 2169 TestCompletionCallback callback3;
2166 rv = handle.Init("a", params_, LOWEST, 2170 rv = handle.Init("a", params_, LOWEST,
2167 ClientSocketPool::RespectLimits::ENABLED, 2171 ClientSocketPool::RespectLimits::ENABLED,
2168 callback3.callback(), pool_.get(), log.bound()); 2172 callback3.callback(), pool_.get(), log.bound());
2169 ASSERT_EQ(ERR_IO_PENDING, rv); 2173 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
2170 ASSERT_EQ(OK, callback3.WaitForResult()); 2174 ASSERT_THAT(callback3.WaitForResult(), IsOk());
2171 EXPECT_FALSE(handle.is_reused()); 2175 EXPECT_FALSE(handle.is_reused());
2172 2176
2173 // Make sure the idle socket is closed. 2177 // Make sure the idle socket is closed.
2174 ASSERT_TRUE(pool_->HasGroup("a")); 2178 ASSERT_TRUE(pool_->HasGroup("a"));
2175 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2179 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2176 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); 2180 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
2177 2181
2178 TestNetLogEntry::List entries; 2182 TestNetLogEntry::List entries;
2179 log.GetEntries(&entries); 2183 log.GetEntries(&entries);
2180 EXPECT_FALSE(LogContainsEntryWithType( 2184 EXPECT_FALSE(LogContainsEntryWithType(
(...skipping 10 matching lines...) Expand all
2191 2195
2192 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 2196 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
2193 2197
2194 // Startup 4 connect jobs. Two of them will be pending. 2198 // Startup 4 connect jobs. Two of them will be pending.
2195 2199
2196 ClientSocketHandle handle; 2200 ClientSocketHandle handle;
2197 TestCompletionCallback callback; 2201 TestCompletionCallback callback;
2198 int rv = handle.Init("a", params_, LOWEST, 2202 int rv = handle.Init("a", params_, LOWEST,
2199 ClientSocketPool::RespectLimits::ENABLED, 2203 ClientSocketPool::RespectLimits::ENABLED,
2200 callback.callback(), pool_.get(), BoundNetLog()); 2204 callback.callback(), pool_.get(), BoundNetLog());
2201 EXPECT_EQ(OK, rv); 2205 EXPECT_THAT(rv, IsOk());
2202 2206
2203 ClientSocketHandle handle2; 2207 ClientSocketHandle handle2;
2204 TestCompletionCallback callback2; 2208 TestCompletionCallback callback2;
2205 rv = handle2.Init("a", params_, LOWEST, 2209 rv = handle2.Init("a", params_, LOWEST,
2206 ClientSocketPool::RespectLimits::ENABLED, 2210 ClientSocketPool::RespectLimits::ENABLED,
2207 callback2.callback(), pool_.get(), BoundNetLog()); 2211 callback2.callback(), pool_.get(), BoundNetLog());
2208 EXPECT_EQ(OK, rv); 2212 EXPECT_THAT(rv, IsOk());
2209 2213
2210 ClientSocketHandle handle3; 2214 ClientSocketHandle handle3;
2211 TestCompletionCallback callback3; 2215 TestCompletionCallback callback3;
2212 rv = handle3.Init("a", params_, LOWEST, 2216 rv = handle3.Init("a", params_, LOWEST,
2213 ClientSocketPool::RespectLimits::ENABLED, 2217 ClientSocketPool::RespectLimits::ENABLED,
2214 callback3.callback(), pool_.get(), BoundNetLog()); 2218 callback3.callback(), pool_.get(), BoundNetLog());
2215 EXPECT_EQ(ERR_IO_PENDING, rv); 2219 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2216 2220
2217 ClientSocketHandle handle4; 2221 ClientSocketHandle handle4;
2218 TestCompletionCallback callback4; 2222 TestCompletionCallback callback4;
2219 rv = handle4.Init("a", params_, LOWEST, 2223 rv = handle4.Init("a", params_, LOWEST,
2220 ClientSocketPool::RespectLimits::ENABLED, 2224 ClientSocketPool::RespectLimits::ENABLED,
2221 callback4.callback(), pool_.get(), BoundNetLog()); 2225 callback4.callback(), pool_.get(), BoundNetLog());
2222 EXPECT_EQ(ERR_IO_PENDING, rv); 2226 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2223 2227
2224 // Release two disconnected sockets. 2228 // Release two disconnected sockets.
2225 2229
2226 handle.socket()->Disconnect(); 2230 handle.socket()->Disconnect();
2227 handle.Reset(); 2231 handle.Reset();
2228 handle2.socket()->Disconnect(); 2232 handle2.socket()->Disconnect();
2229 handle2.Reset(); 2233 handle2.Reset();
2230 2234
2231 EXPECT_EQ(OK, callback3.WaitForResult()); 2235 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2232 EXPECT_FALSE(handle3.is_reused()); 2236 EXPECT_FALSE(handle3.is_reused());
2233 EXPECT_EQ(OK, callback4.WaitForResult()); 2237 EXPECT_THAT(callback4.WaitForResult(), IsOk());
2234 EXPECT_FALSE(handle4.is_reused()); 2238 EXPECT_FALSE(handle4.is_reused());
2235 } 2239 }
2236 2240
2237 // Regression test for http://crbug.com/42267. 2241 // Regression test for http://crbug.com/42267.
2238 // When DoReleaseSocket() is processed for one socket, it is blocked because the 2242 // When DoReleaseSocket() is processed for one socket, it is blocked because the
2239 // other stalled groups all have releasing sockets, so no progress can be made. 2243 // other stalled groups all have releasing sockets, so no progress can be made.
2240 TEST_F(ClientSocketPoolBaseTest, SocketLimitReleasingSockets) { 2244 TEST_F(ClientSocketPoolBaseTest, SocketLimitReleasingSockets) {
2241 CreatePoolWithIdleTimeouts( 2245 CreatePoolWithIdleTimeouts(
2242 4 /* socket limit */, 4 /* socket limit per group */, 2246 4 /* socket limit */, 4 /* socket limit per group */,
2243 base::TimeDelta(), // Time out unused sockets immediately. 2247 base::TimeDelta(), // Time out unused sockets immediately.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2290 2294
2291 // Used to get stuck here. 2295 // Used to get stuck here.
2292 base::RunLoop().RunUntilIdle(); 2296 base::RunLoop().RunUntilIdle();
2293 2297
2294 handle_b[1].socket()->Disconnect(); 2298 handle_b[1].socket()->Disconnect();
2295 handle_b[1].Reset(); 2299 handle_b[1].Reset();
2296 handle_a[1].socket()->Disconnect(); 2300 handle_a[1].socket()->Disconnect();
2297 handle_a[1].Reset(); 2301 handle_a[1].Reset();
2298 2302
2299 for (int i = 2; i < 4; ++i) { 2303 for (int i = 2; i < 4; ++i) {
2300 EXPECT_EQ(OK, callback_b[i].WaitForResult()); 2304 EXPECT_THAT(callback_b[i].WaitForResult(), IsOk());
2301 EXPECT_EQ(OK, callback_a[i].WaitForResult()); 2305 EXPECT_THAT(callback_a[i].WaitForResult(), IsOk());
2302 } 2306 }
2303 } 2307 }
2304 2308
2305 TEST_F(ClientSocketPoolBaseTest, 2309 TEST_F(ClientSocketPoolBaseTest,
2306 ReleasingDisconnectedSocketsMaintainsPriorityOrder) { 2310 ReleasingDisconnectedSocketsMaintainsPriorityOrder) {
2307 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2311 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2308 2312
2309 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2313 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2310 2314
2311 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 2315 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
2312 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 2316 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
2313 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 2317 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
2314 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", DEFAULT_PRIORITY)); 2318 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsError(ERR_IO_PENDING));
2315 2319
2316 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); 2320 EXPECT_THAT((*requests())[0]->WaitForResult(), IsOk());
2317 EXPECT_EQ(OK, (*requests())[1]->WaitForResult()); 2321 EXPECT_THAT((*requests())[1]->WaitForResult(), IsOk());
2318 EXPECT_EQ(2u, completion_count()); 2322 EXPECT_EQ(2u, completion_count());
2319 2323
2320 // Releases one connection. 2324 // Releases one connection.
2321 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE)); 2325 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE));
2322 EXPECT_EQ(OK, (*requests())[2]->WaitForResult()); 2326 EXPECT_THAT((*requests())[2]->WaitForResult(), IsOk());
2323 2327
2324 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE)); 2328 EXPECT_TRUE(ReleaseOneConnection(ClientSocketPoolTest::NO_KEEP_ALIVE));
2325 EXPECT_EQ(OK, (*requests())[3]->WaitForResult()); 2329 EXPECT_THAT((*requests())[3]->WaitForResult(), IsOk());
2326 EXPECT_EQ(4u, completion_count()); 2330 EXPECT_EQ(4u, completion_count());
2327 2331
2328 EXPECT_EQ(1, GetOrderOfRequest(1)); 2332 EXPECT_EQ(1, GetOrderOfRequest(1));
2329 EXPECT_EQ(2, GetOrderOfRequest(2)); 2333 EXPECT_EQ(2, GetOrderOfRequest(2));
2330 EXPECT_EQ(3, GetOrderOfRequest(3)); 2334 EXPECT_EQ(3, GetOrderOfRequest(3));
2331 EXPECT_EQ(4, GetOrderOfRequest(4)); 2335 EXPECT_EQ(4, GetOrderOfRequest(4));
2332 2336
2333 // Make sure we test order of all requests made. 2337 // Make sure we test order of all requests made.
2334 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(5)); 2338 EXPECT_EQ(ClientSocketPoolTest::kIndexOutOfBounds, GetOrderOfRequest(5));
2335 } 2339 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2371 ClientSocketHandle handle_; 2375 ClientSocketHandle handle_;
2372 ClientSocketHandle handle2_; 2376 ClientSocketHandle handle2_;
2373 CompletionCallback callback_; 2377 CompletionCallback callback_;
2374 TestCompletionCallback callback2_; 2378 TestCompletionCallback callback2_;
2375 }; 2379 };
2376 2380
2377 2381
2378 TEST_F(ClientSocketPoolBaseTest, AdditionalErrorSocketsDontUseSlot) { 2382 TEST_F(ClientSocketPoolBaseTest, AdditionalErrorSocketsDontUseSlot) {
2379 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2383 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2380 2384
2381 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 2385 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
2382 EXPECT_EQ(OK, StartRequest("a", DEFAULT_PRIORITY)); 2386 EXPECT_THAT(StartRequest("a", DEFAULT_PRIORITY), IsOk());
2383 EXPECT_EQ(OK, StartRequest("b", DEFAULT_PRIORITY)); 2387 EXPECT_THAT(StartRequest("b", DEFAULT_PRIORITY), IsOk());
2384 2388
2385 EXPECT_EQ(static_cast<int>(requests_size()), 2389 EXPECT_EQ(static_cast<int>(requests_size()),
2386 client_socket_factory_.allocation_count()); 2390 client_socket_factory_.allocation_count());
2387 2391
2388 connect_job_factory_->set_job_type( 2392 connect_job_factory_->set_job_type(
2389 TestConnectJob::kMockPendingAdditionalErrorStateJob); 2393 TestConnectJob::kMockPendingAdditionalErrorStateJob);
2390 TestReleasingSocketRequest req(pool_.get(), OK, false); 2394 TestReleasingSocketRequest req(pool_.get(), OK, false);
2391 EXPECT_EQ(ERR_IO_PENDING, 2395 EXPECT_EQ(ERR_IO_PENDING,
2392 req.handle()->Init("a", params_, DEFAULT_PRIORITY, 2396 req.handle()->Init("a", params_, DEFAULT_PRIORITY,
2393 ClientSocketPool::RespectLimits::ENABLED, 2397 ClientSocketPool::RespectLimits::ENABLED,
2394 req.callback(), pool_.get(), BoundNetLog())); 2398 req.callback(), pool_.get(), BoundNetLog()));
2395 // The next job should complete synchronously 2399 // The next job should complete synchronously
2396 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 2400 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
2397 2401
2398 EXPECT_EQ(ERR_CONNECTION_FAILED, req.WaitForResult()); 2402 EXPECT_THAT(req.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
2399 EXPECT_FALSE(req.handle()->is_initialized()); 2403 EXPECT_FALSE(req.handle()->is_initialized());
2400 EXPECT_FALSE(req.handle()->socket()); 2404 EXPECT_FALSE(req.handle()->socket());
2401 EXPECT_TRUE(req.handle()->is_ssl_error()); 2405 EXPECT_TRUE(req.handle()->is_ssl_error());
2402 EXPECT_FALSE(req.handle()->ssl_error_response_info().headers.get() == NULL); 2406 EXPECT_FALSE(req.handle()->ssl_error_response_info().headers.get() == NULL);
2403 } 2407 }
2404 2408
2405 // http://crbug.com/44724 regression test. 2409 // http://crbug.com/44724 regression test.
2406 // We start releasing the pool when we flush on network change. When that 2410 // We start releasing the pool when we flush on network change. When that
2407 // happens, the only active references are in the ClientSocketHandles. When a 2411 // happens, the only active references are in the ClientSocketHandles. When a
2408 // ConnectJob completes and calls back into the last ClientSocketHandle, that 2412 // ConnectJob completes and calls back into the last ClientSocketHandle, that
(...skipping 21 matching lines...) Expand all
2430 TEST_F(ClientSocketPoolBaseTest, DoNotReuseSocketAfterFlush) { 2434 TEST_F(ClientSocketPoolBaseTest, DoNotReuseSocketAfterFlush) {
2431 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2435 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2432 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2436 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2433 2437
2434 ClientSocketHandle handle; 2438 ClientSocketHandle handle;
2435 TestCompletionCallback callback; 2439 TestCompletionCallback callback;
2436 EXPECT_EQ(ERR_IO_PENDING, 2440 EXPECT_EQ(ERR_IO_PENDING,
2437 handle.Init("a", params_, DEFAULT_PRIORITY, 2441 handle.Init("a", params_, DEFAULT_PRIORITY,
2438 ClientSocketPool::RespectLimits::ENABLED, 2442 ClientSocketPool::RespectLimits::ENABLED,
2439 callback.callback(), pool_.get(), BoundNetLog())); 2443 callback.callback(), pool_.get(), BoundNetLog()));
2440 EXPECT_EQ(OK, callback.WaitForResult()); 2444 EXPECT_THAT(callback.WaitForResult(), IsOk());
2441 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); 2445 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type());
2442 2446
2443 pool_->FlushWithError(ERR_NETWORK_CHANGED); 2447 pool_->FlushWithError(ERR_NETWORK_CHANGED);
2444 2448
2445 handle.Reset(); 2449 handle.Reset();
2446 base::RunLoop().RunUntilIdle(); 2450 base::RunLoop().RunUntilIdle();
2447 2451
2448 EXPECT_EQ(ERR_IO_PENDING, 2452 EXPECT_EQ(ERR_IO_PENDING,
2449 handle.Init("a", params_, DEFAULT_PRIORITY, 2453 handle.Init("a", params_, DEFAULT_PRIORITY,
2450 ClientSocketPool::RespectLimits::ENABLED, 2454 ClientSocketPool::RespectLimits::ENABLED,
2451 callback.callback(), pool_.get(), BoundNetLog())); 2455 callback.callback(), pool_.get(), BoundNetLog()));
2452 EXPECT_EQ(OK, callback.WaitForResult()); 2456 EXPECT_THAT(callback.WaitForResult(), IsOk());
2453 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); 2457 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type());
2454 } 2458 }
2455 2459
2456 class ConnectWithinCallback : public TestCompletionCallbackBase { 2460 class ConnectWithinCallback : public TestCompletionCallbackBase {
2457 public: 2461 public:
2458 ConnectWithinCallback( 2462 ConnectWithinCallback(
2459 const std::string& group_name, 2463 const std::string& group_name,
2460 const scoped_refptr<TestSocketParams>& params, 2464 const scoped_refptr<TestSocketParams>& params,
2461 TestClientSocketPool* pool) 2465 TestClientSocketPool* pool)
2462 : group_name_(group_name), 2466 : group_name_(group_name),
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2503 ConnectWithinCallback callback("a", params_, pool_.get()); 2507 ConnectWithinCallback callback("a", params_, pool_.get());
2504 EXPECT_EQ(ERR_IO_PENDING, 2508 EXPECT_EQ(ERR_IO_PENDING,
2505 handle.Init("a", params_, DEFAULT_PRIORITY, 2509 handle.Init("a", params_, DEFAULT_PRIORITY,
2506 ClientSocketPool::RespectLimits::ENABLED, 2510 ClientSocketPool::RespectLimits::ENABLED,
2507 callback.callback(), pool_.get(), BoundNetLog())); 2511 callback.callback(), pool_.get(), BoundNetLog()));
2508 2512
2509 // Second job will be started during the first callback, and will 2513 // Second job will be started during the first callback, and will
2510 // asynchronously complete with OK. 2514 // asynchronously complete with OK.
2511 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2515 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2512 pool_->FlushWithError(ERR_NETWORK_CHANGED); 2516 pool_->FlushWithError(ERR_NETWORK_CHANGED);
2513 EXPECT_EQ(ERR_NETWORK_CHANGED, callback.WaitForResult()); 2517 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_NETWORK_CHANGED));
2514 EXPECT_EQ(OK, callback.WaitForNestedResult()); 2518 EXPECT_THAT(callback.WaitForNestedResult(), IsOk());
2515 } 2519 }
2516 2520
2517 // Cancel a pending socket request while we're at max sockets, 2521 // Cancel a pending socket request while we're at max sockets,
2518 // and verify that the backup socket firing doesn't cause a crash. 2522 // and verify that the backup socket firing doesn't cause a crash.
2519 TEST_F(ClientSocketPoolBaseTest, BackupSocketCancelAtMaxSockets) { 2523 TEST_F(ClientSocketPoolBaseTest, BackupSocketCancelAtMaxSockets) {
2520 // Max 4 sockets globally, max 4 sockets per group. 2524 // Max 4 sockets globally, max 4 sockets per group.
2521 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); 2525 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets);
2522 pool_->EnableConnectBackupJobs(); 2526 pool_->EnableConnectBackupJobs();
2523 2527
2524 // Create the first socket and set to ERR_IO_PENDING. This starts the backup 2528 // Create the first socket and set to ERR_IO_PENDING. This starts the backup
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2602 EXPECT_EQ(ERR_IO_PENDING, 2606 EXPECT_EQ(ERR_IO_PENDING,
2603 handle2.Init("bar", params_, DEFAULT_PRIORITY, 2607 handle2.Init("bar", params_, DEFAULT_PRIORITY,
2604 ClientSocketPool::RespectLimits::ENABLED, 2608 ClientSocketPool::RespectLimits::ENABLED,
2605 callback2.callback(), pool_.get(), BoundNetLog())); 2609 callback2.callback(), pool_.get(), BoundNetLog()));
2606 ASSERT_TRUE(pool_->HasGroup("bar")); 2610 ASSERT_TRUE(pool_->HasGroup("bar"));
2607 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("bar")); 2611 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("bar"));
2608 2612
2609 // Cancel request 1 and then complete request 2. With the requests finished, 2613 // Cancel request 1 and then complete request 2. With the requests finished,
2610 // the backup timer should be cancelled. 2614 // the backup timer should be cancelled.
2611 handle.Reset(); 2615 handle.Reset();
2612 EXPECT_EQ(OK, callback2.WaitForResult()); 2616 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2613 // Wait for the backup timer to fire (add some slop to ensure it fires) 2617 // Wait for the backup timer to fire (add some slop to ensure it fires)
2614 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 2618 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
2615 ClientSocketPool::kMaxConnectRetryIntervalMs / 2 * 3)); 2619 ClientSocketPool::kMaxConnectRetryIntervalMs / 2 * 3));
2616 base::RunLoop().RunUntilIdle(); 2620 base::RunLoop().RunUntilIdle();
2617 } 2621 }
2618 2622
2619 // Test delayed socket binding for the case where we have two connects, 2623 // Test delayed socket binding for the case where we have two connects,
2620 // and while one is waiting on a connect, the other frees up. 2624 // and while one is waiting on a connect, the other frees up.
2621 // The socket waiting on a connect should switch immediately to the freed 2625 // The socket waiting on a connect should switch immediately to the freed
2622 // up socket. 2626 // up socket.
2623 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingWaitingForConnect) { 2627 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingWaitingForConnect) {
2624 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2628 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2625 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2629 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2626 2630
2627 ClientSocketHandle handle1; 2631 ClientSocketHandle handle1;
2628 TestCompletionCallback callback; 2632 TestCompletionCallback callback;
2629 EXPECT_EQ(ERR_IO_PENDING, 2633 EXPECT_EQ(ERR_IO_PENDING,
2630 handle1.Init("a", params_, DEFAULT_PRIORITY, 2634 handle1.Init("a", params_, DEFAULT_PRIORITY,
2631 ClientSocketPool::RespectLimits::ENABLED, 2635 ClientSocketPool::RespectLimits::ENABLED,
2632 callback.callback(), pool_.get(), BoundNetLog())); 2636 callback.callback(), pool_.get(), BoundNetLog()));
2633 EXPECT_EQ(OK, callback.WaitForResult()); 2637 EXPECT_THAT(callback.WaitForResult(), IsOk());
2634 2638
2635 // No idle sockets, no pending jobs. 2639 // No idle sockets, no pending jobs.
2636 EXPECT_EQ(0, pool_->IdleSocketCount()); 2640 EXPECT_EQ(0, pool_->IdleSocketCount());
2637 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2641 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2638 2642
2639 // Create a second socket to the same host, but this one will wait. 2643 // Create a second socket to the same host, but this one will wait.
2640 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 2644 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
2641 ClientSocketHandle handle2; 2645 ClientSocketHandle handle2;
2642 EXPECT_EQ(ERR_IO_PENDING, 2646 EXPECT_EQ(ERR_IO_PENDING,
2643 handle2.Init("a", params_, DEFAULT_PRIORITY, 2647 handle2.Init("a", params_, DEFAULT_PRIORITY,
2644 ClientSocketPool::RespectLimits::ENABLED, 2648 ClientSocketPool::RespectLimits::ENABLED,
2645 callback.callback(), pool_.get(), BoundNetLog())); 2649 callback.callback(), pool_.get(), BoundNetLog()));
2646 // No idle sockets, and one connecting job. 2650 // No idle sockets, and one connecting job.
2647 EXPECT_EQ(0, pool_->IdleSocketCount()); 2651 EXPECT_EQ(0, pool_->IdleSocketCount());
2648 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2652 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2649 2653
2650 // Return the first handle to the pool. This will initiate the delayed 2654 // Return the first handle to the pool. This will initiate the delayed
2651 // binding. 2655 // binding.
2652 handle1.Reset(); 2656 handle1.Reset();
2653 2657
2654 base::RunLoop().RunUntilIdle(); 2658 base::RunLoop().RunUntilIdle();
2655 2659
2656 // Still no idle sockets, still one pending connect job. 2660 // Still no idle sockets, still one pending connect job.
2657 EXPECT_EQ(0, pool_->IdleSocketCount()); 2661 EXPECT_EQ(0, pool_->IdleSocketCount());
2658 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2662 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2659 2663
2660 // The second socket connected, even though it was a Waiting Job. 2664 // The second socket connected, even though it was a Waiting Job.
2661 EXPECT_EQ(OK, callback.WaitForResult()); 2665 EXPECT_THAT(callback.WaitForResult(), IsOk());
2662 2666
2663 // And we can see there is still one job waiting. 2667 // And we can see there is still one job waiting.
2664 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2668 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2665 2669
2666 // Finally, signal the waiting Connect. 2670 // Finally, signal the waiting Connect.
2667 client_socket_factory_.SignalJobs(); 2671 client_socket_factory_.SignalJobs();
2668 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2672 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2669 2673
2670 base::RunLoop().RunUntilIdle(); 2674 base::RunLoop().RunUntilIdle();
2671 } 2675 }
2672 2676
2673 // Test delayed socket binding when a group is at capacity and one 2677 // Test delayed socket binding when a group is at capacity and one
2674 // of the group's sockets frees up. 2678 // of the group's sockets frees up.
2675 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtGroupCapacity) { 2679 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtGroupCapacity) {
2676 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2680 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2677 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2681 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2678 2682
2679 ClientSocketHandle handle1; 2683 ClientSocketHandle handle1;
2680 TestCompletionCallback callback; 2684 TestCompletionCallback callback;
2681 EXPECT_EQ(ERR_IO_PENDING, 2685 EXPECT_EQ(ERR_IO_PENDING,
2682 handle1.Init("a", params_, DEFAULT_PRIORITY, 2686 handle1.Init("a", params_, DEFAULT_PRIORITY,
2683 ClientSocketPool::RespectLimits::ENABLED, 2687 ClientSocketPool::RespectLimits::ENABLED,
2684 callback.callback(), pool_.get(), BoundNetLog())); 2688 callback.callback(), pool_.get(), BoundNetLog()));
2685 EXPECT_EQ(OK, callback.WaitForResult()); 2689 EXPECT_THAT(callback.WaitForResult(), IsOk());
2686 2690
2687 // No idle sockets, no pending jobs. 2691 // No idle sockets, no pending jobs.
2688 EXPECT_EQ(0, pool_->IdleSocketCount()); 2692 EXPECT_EQ(0, pool_->IdleSocketCount());
2689 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2693 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2690 2694
2691 // Create a second socket to the same host, but this one will wait. 2695 // Create a second socket to the same host, but this one will wait.
2692 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 2696 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
2693 ClientSocketHandle handle2; 2697 ClientSocketHandle handle2;
2694 EXPECT_EQ(ERR_IO_PENDING, 2698 EXPECT_EQ(ERR_IO_PENDING,
2695 handle2.Init("a", params_, DEFAULT_PRIORITY, 2699 handle2.Init("a", params_, DEFAULT_PRIORITY,
2696 ClientSocketPool::RespectLimits::ENABLED, 2700 ClientSocketPool::RespectLimits::ENABLED,
2697 callback.callback(), pool_.get(), BoundNetLog())); 2701 callback.callback(), pool_.get(), BoundNetLog()));
2698 // No idle sockets, and one connecting job. 2702 // No idle sockets, and one connecting job.
2699 EXPECT_EQ(0, pool_->IdleSocketCount()); 2703 EXPECT_EQ(0, pool_->IdleSocketCount());
2700 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2704 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2701 2705
2702 // Return the first handle to the pool. This will initiate the delayed 2706 // Return the first handle to the pool. This will initiate the delayed
2703 // binding. 2707 // binding.
2704 handle1.Reset(); 2708 handle1.Reset();
2705 2709
2706 base::RunLoop().RunUntilIdle(); 2710 base::RunLoop().RunUntilIdle();
2707 2711
2708 // Still no idle sockets, still one pending connect job. 2712 // Still no idle sockets, still one pending connect job.
2709 EXPECT_EQ(0, pool_->IdleSocketCount()); 2713 EXPECT_EQ(0, pool_->IdleSocketCount());
2710 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2714 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2711 2715
2712 // The second socket connected, even though it was a Waiting Job. 2716 // The second socket connected, even though it was a Waiting Job.
2713 EXPECT_EQ(OK, callback.WaitForResult()); 2717 EXPECT_THAT(callback.WaitForResult(), IsOk());
2714 2718
2715 // And we can see there is still one job waiting. 2719 // And we can see there is still one job waiting.
2716 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2720 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2717 2721
2718 // Finally, signal the waiting Connect. 2722 // Finally, signal the waiting Connect.
2719 client_socket_factory_.SignalJobs(); 2723 client_socket_factory_.SignalJobs();
2720 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2724 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2721 2725
2722 base::RunLoop().RunUntilIdle(); 2726 base::RunLoop().RunUntilIdle();
2723 } 2727 }
2724 2728
2725 // Test out the case where we have one socket connected, one 2729 // Test out the case where we have one socket connected, one
2726 // connecting, when the first socket finishes and goes idle. 2730 // connecting, when the first socket finishes and goes idle.
2727 // Although the second connection is pending, the second request 2731 // Although the second connection is pending, the second request
2728 // should complete, by taking the first socket's idle socket. 2732 // should complete, by taking the first socket's idle socket.
2729 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtStall) { 2733 TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtStall) {
2730 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2734 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
2731 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2735 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2732 2736
2733 ClientSocketHandle handle1; 2737 ClientSocketHandle handle1;
2734 TestCompletionCallback callback; 2738 TestCompletionCallback callback;
2735 EXPECT_EQ(ERR_IO_PENDING, 2739 EXPECT_EQ(ERR_IO_PENDING,
2736 handle1.Init("a", params_, DEFAULT_PRIORITY, 2740 handle1.Init("a", params_, DEFAULT_PRIORITY,
2737 ClientSocketPool::RespectLimits::ENABLED, 2741 ClientSocketPool::RespectLimits::ENABLED,
2738 callback.callback(), pool_.get(), BoundNetLog())); 2742 callback.callback(), pool_.get(), BoundNetLog()));
2739 EXPECT_EQ(OK, callback.WaitForResult()); 2743 EXPECT_THAT(callback.WaitForResult(), IsOk());
2740 2744
2741 // No idle sockets, no pending jobs. 2745 // No idle sockets, no pending jobs.
2742 EXPECT_EQ(0, pool_->IdleSocketCount()); 2746 EXPECT_EQ(0, pool_->IdleSocketCount());
2743 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2747 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2744 2748
2745 // Create a second socket to the same host, but this one will wait. 2749 // Create a second socket to the same host, but this one will wait.
2746 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); 2750 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob);
2747 ClientSocketHandle handle2; 2751 ClientSocketHandle handle2;
2748 EXPECT_EQ(ERR_IO_PENDING, 2752 EXPECT_EQ(ERR_IO_PENDING,
2749 handle2.Init("a", params_, DEFAULT_PRIORITY, 2753 handle2.Init("a", params_, DEFAULT_PRIORITY,
2750 ClientSocketPool::RespectLimits::ENABLED, 2754 ClientSocketPool::RespectLimits::ENABLED,
2751 callback.callback(), pool_.get(), BoundNetLog())); 2755 callback.callback(), pool_.get(), BoundNetLog()));
2752 // No idle sockets, and one connecting job. 2756 // No idle sockets, and one connecting job.
2753 EXPECT_EQ(0, pool_->IdleSocketCount()); 2757 EXPECT_EQ(0, pool_->IdleSocketCount());
2754 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2758 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2755 2759
2756 // Return the first handle to the pool. This will initiate the delayed 2760 // Return the first handle to the pool. This will initiate the delayed
2757 // binding. 2761 // binding.
2758 handle1.Reset(); 2762 handle1.Reset();
2759 2763
2760 base::RunLoop().RunUntilIdle(); 2764 base::RunLoop().RunUntilIdle();
2761 2765
2762 // Still no idle sockets, still one pending connect job. 2766 // Still no idle sockets, still one pending connect job.
2763 EXPECT_EQ(0, pool_->IdleSocketCount()); 2767 EXPECT_EQ(0, pool_->IdleSocketCount());
2764 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2768 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2765 2769
2766 // The second socket connected, even though it was a Waiting Job. 2770 // The second socket connected, even though it was a Waiting Job.
2767 EXPECT_EQ(OK, callback.WaitForResult()); 2771 EXPECT_THAT(callback.WaitForResult(), IsOk());
2768 2772
2769 // And we can see there is still one job waiting. 2773 // And we can see there is still one job waiting.
2770 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2774 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2771 2775
2772 // Finally, signal the waiting Connect. 2776 // Finally, signal the waiting Connect.
2773 client_socket_factory_.SignalJobs(); 2777 client_socket_factory_.SignalJobs();
2774 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2778 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2775 2779
2776 base::RunLoop().RunUntilIdle(); 2780 base::RunLoop().RunUntilIdle();
2777 } 2781 }
(...skipping 24 matching lines...) Expand all
2802 TestCompletionCallback callback2; 2806 TestCompletionCallback callback2;
2803 // It'll be ERR_IO_PENDING now, but the TestConnectJob will synchronously fail 2807 // It'll be ERR_IO_PENDING now, but the TestConnectJob will synchronously fail
2804 // when created. 2808 // when created.
2805 EXPECT_EQ(ERR_IO_PENDING, 2809 EXPECT_EQ(ERR_IO_PENDING,
2806 handle2.Init("a", params_, DEFAULT_PRIORITY, 2810 handle2.Init("a", params_, DEFAULT_PRIORITY,
2807 ClientSocketPool::RespectLimits::ENABLED, 2811 ClientSocketPool::RespectLimits::ENABLED,
2808 callback2.callback(), pool_.get(), BoundNetLog())); 2812 callback2.callback(), pool_.get(), BoundNetLog()));
2809 2813
2810 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 2814 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
2811 2815
2812 EXPECT_EQ(ERR_CONNECTION_FAILED, callback1.WaitForResult()); 2816 EXPECT_THAT(callback1.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
2813 EXPECT_EQ(ERR_CONNECTION_FAILED, callback2.WaitForResult()); 2817 EXPECT_THAT(callback2.WaitForResult(), IsError(ERR_CONNECTION_FAILED));
2814 EXPECT_FALSE(pool_->HasGroup("a")); 2818 EXPECT_FALSE(pool_->HasGroup("a"));
2815 } 2819 }
2816 2820
2817 TEST_F(ClientSocketPoolBaseTest, PreferUsedSocketToUnusedSocket) { 2821 TEST_F(ClientSocketPoolBaseTest, PreferUsedSocketToUnusedSocket) {
2818 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); 2822 CreatePool(kDefaultMaxSockets, kDefaultMaxSockets);
2819 2823
2820 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 2824 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
2821 2825
2822 ClientSocketHandle handle1; 2826 ClientSocketHandle handle1;
2823 TestCompletionCallback callback1; 2827 TestCompletionCallback callback1;
2824 EXPECT_EQ(ERR_IO_PENDING, 2828 EXPECT_EQ(ERR_IO_PENDING,
2825 handle1.Init("a", params_, DEFAULT_PRIORITY, 2829 handle1.Init("a", params_, DEFAULT_PRIORITY,
2826 ClientSocketPool::RespectLimits::ENABLED, 2830 ClientSocketPool::RespectLimits::ENABLED,
2827 callback1.callback(), pool_.get(), BoundNetLog())); 2831 callback1.callback(), pool_.get(), BoundNetLog()));
2828 2832
2829 ClientSocketHandle handle2; 2833 ClientSocketHandle handle2;
2830 TestCompletionCallback callback2; 2834 TestCompletionCallback callback2;
2831 EXPECT_EQ(ERR_IO_PENDING, 2835 EXPECT_EQ(ERR_IO_PENDING,
2832 handle2.Init("a", params_, DEFAULT_PRIORITY, 2836 handle2.Init("a", params_, DEFAULT_PRIORITY,
2833 ClientSocketPool::RespectLimits::ENABLED, 2837 ClientSocketPool::RespectLimits::ENABLED,
2834 callback2.callback(), pool_.get(), BoundNetLog())); 2838 callback2.callback(), pool_.get(), BoundNetLog()));
2835 ClientSocketHandle handle3; 2839 ClientSocketHandle handle3;
2836 TestCompletionCallback callback3; 2840 TestCompletionCallback callback3;
2837 EXPECT_EQ(ERR_IO_PENDING, 2841 EXPECT_EQ(ERR_IO_PENDING,
2838 handle3.Init("a", params_, DEFAULT_PRIORITY, 2842 handle3.Init("a", params_, DEFAULT_PRIORITY,
2839 ClientSocketPool::RespectLimits::ENABLED, 2843 ClientSocketPool::RespectLimits::ENABLED,
2840 callback3.callback(), pool_.get(), BoundNetLog())); 2844 callback3.callback(), pool_.get(), BoundNetLog()));
2841 2845
2842 EXPECT_EQ(OK, callback1.WaitForResult()); 2846 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2843 EXPECT_EQ(OK, callback2.WaitForResult()); 2847 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2844 EXPECT_EQ(OK, callback3.WaitForResult()); 2848 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2845 2849
2846 // Use the socket. 2850 // Use the socket.
2847 EXPECT_EQ(1, handle1.socket()->Write(NULL, 1, CompletionCallback())); 2851 EXPECT_EQ(1, handle1.socket()->Write(NULL, 1, CompletionCallback()));
2848 EXPECT_EQ(1, handle3.socket()->Write(NULL, 1, CompletionCallback())); 2852 EXPECT_EQ(1, handle3.socket()->Write(NULL, 1, CompletionCallback()));
2849 2853
2850 handle1.Reset(); 2854 handle1.Reset();
2851 handle2.Reset(); 2855 handle2.Reset();
2852 handle3.Reset(); 2856 handle3.Reset();
2853 2857
2854 EXPECT_EQ(OK, handle1.Init("a", params_, DEFAULT_PRIORITY, 2858 EXPECT_EQ(OK, handle1.Init("a", params_, DEFAULT_PRIORITY,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2888 TestCompletionCallback callback2; 2892 TestCompletionCallback callback2;
2889 EXPECT_EQ(ERR_IO_PENDING, 2893 EXPECT_EQ(ERR_IO_PENDING,
2890 handle2.Init("a", params_, DEFAULT_PRIORITY, 2894 handle2.Init("a", params_, DEFAULT_PRIORITY,
2891 ClientSocketPool::RespectLimits::ENABLED, 2895 ClientSocketPool::RespectLimits::ENABLED,
2892 callback2.callback(), pool_.get(), BoundNetLog())); 2896 callback2.callback(), pool_.get(), BoundNetLog()));
2893 2897
2894 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a")); 2898 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a"));
2895 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2899 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2896 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2900 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2897 2901
2898 EXPECT_EQ(OK, callback1.WaitForResult()); 2902 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2899 EXPECT_EQ(OK, callback2.WaitForResult()); 2903 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2900 handle1.Reset(); 2904 handle1.Reset();
2901 handle2.Reset(); 2905 handle2.Reset();
2902 2906
2903 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2907 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2904 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2908 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2905 EXPECT_EQ(2, pool_->IdleSocketCountInGroup("a")); 2909 EXPECT_EQ(2, pool_->IdleSocketCountInGroup("a"));
2906 } 2910 }
2907 2911
2908 TEST_F(ClientSocketPoolBaseTest, RequestSocketsWhenAlreadyHaveAConnectJob) { 2912 TEST_F(ClientSocketPoolBaseTest, RequestSocketsWhenAlreadyHaveAConnectJob) {
2909 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 2913 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
(...skipping 21 matching lines...) Expand all
2931 TestCompletionCallback callback2; 2935 TestCompletionCallback callback2;
2932 EXPECT_EQ(ERR_IO_PENDING, 2936 EXPECT_EQ(ERR_IO_PENDING,
2933 handle2.Init("a", params_, DEFAULT_PRIORITY, 2937 handle2.Init("a", params_, DEFAULT_PRIORITY,
2934 ClientSocketPool::RespectLimits::ENABLED, 2938 ClientSocketPool::RespectLimits::ENABLED,
2935 callback2.callback(), pool_.get(), BoundNetLog())); 2939 callback2.callback(), pool_.get(), BoundNetLog()));
2936 2940
2937 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a")); 2941 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a"));
2938 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2942 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2939 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2943 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2940 2944
2941 EXPECT_EQ(OK, callback1.WaitForResult()); 2945 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2942 EXPECT_EQ(OK, callback2.WaitForResult()); 2946 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2943 handle1.Reset(); 2947 handle1.Reset();
2944 handle2.Reset(); 2948 handle2.Reset();
2945 2949
2946 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2950 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2947 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2951 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2948 EXPECT_EQ(2, pool_->IdleSocketCountInGroup("a")); 2952 EXPECT_EQ(2, pool_->IdleSocketCountInGroup("a"));
2949 } 2953 }
2950 2954
2951 TEST_F(ClientSocketPoolBaseTest, 2955 TEST_F(ClientSocketPoolBaseTest,
2952 RequestSocketsWhenAlreadyHaveMultipleConnectJob) { 2956 RequestSocketsWhenAlreadyHaveMultipleConnectJob) {
(...skipping 25 matching lines...) Expand all
2978 EXPECT_EQ(3, pool_->NumConnectJobsInGroup("a")); 2982 EXPECT_EQ(3, pool_->NumConnectJobsInGroup("a"));
2979 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2983 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2980 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2984 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2981 2985
2982 pool_->RequestSockets("a", &params_, 2, BoundNetLog()); 2986 pool_->RequestSockets("a", &params_, 2, BoundNetLog());
2983 2987
2984 EXPECT_EQ(3, pool_->NumConnectJobsInGroup("a")); 2988 EXPECT_EQ(3, pool_->NumConnectJobsInGroup("a"));
2985 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 2989 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2986 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 2990 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
2987 2991
2988 EXPECT_EQ(OK, callback1.WaitForResult()); 2992 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2989 EXPECT_EQ(OK, callback2.WaitForResult()); 2993 EXPECT_THAT(callback2.WaitForResult(), IsOk());
2990 EXPECT_EQ(OK, callback3.WaitForResult()); 2994 EXPECT_THAT(callback3.WaitForResult(), IsOk());
2991 handle1.Reset(); 2995 handle1.Reset();
2992 handle2.Reset(); 2996 handle2.Reset();
2993 handle3.Reset(); 2997 handle3.Reset();
2994 2998
2995 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 2999 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
2996 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3000 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
2997 EXPECT_EQ(3, pool_->IdleSocketCountInGroup("a")); 3001 EXPECT_EQ(3, pool_->IdleSocketCountInGroup("a"));
2998 } 3002 }
2999 3003
3000 TEST_F(ClientSocketPoolBaseTest, RequestSocketsAtMaxSocketLimit) { 3004 TEST_F(ClientSocketPoolBaseTest, RequestSocketsAtMaxSocketLimit) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3046 TEST_F(ClientSocketPoolBaseTest, RequestSocketsCountIdleSockets) { 3050 TEST_F(ClientSocketPoolBaseTest, RequestSocketsCountIdleSockets) {
3047 CreatePool(4, 4); 3051 CreatePool(4, 4);
3048 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 3052 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
3049 3053
3050 ClientSocketHandle handle1; 3054 ClientSocketHandle handle1;
3051 TestCompletionCallback callback1; 3055 TestCompletionCallback callback1;
3052 EXPECT_EQ(ERR_IO_PENDING, 3056 EXPECT_EQ(ERR_IO_PENDING,
3053 handle1.Init("a", params_, DEFAULT_PRIORITY, 3057 handle1.Init("a", params_, DEFAULT_PRIORITY,
3054 ClientSocketPool::RespectLimits::ENABLED, 3058 ClientSocketPool::RespectLimits::ENABLED,
3055 callback1.callback(), pool_.get(), BoundNetLog())); 3059 callback1.callback(), pool_.get(), BoundNetLog()));
3056 ASSERT_EQ(OK, callback1.WaitForResult()); 3060 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3057 handle1.Reset(); 3061 handle1.Reset();
3058 3062
3059 ASSERT_TRUE(pool_->HasGroup("a")); 3063 ASSERT_TRUE(pool_->HasGroup("a"));
3060 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 3064 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
3061 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3065 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3062 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a")); 3066 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a"));
3063 3067
3064 pool_->RequestSockets("a", &params_, 2, BoundNetLog()); 3068 pool_->RequestSockets("a", &params_, 2, BoundNetLog());
3065 3069
3066 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3070 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3067 EXPECT_EQ(1, pool_->NumUnassignedConnectJobsInGroup("a")); 3071 EXPECT_EQ(1, pool_->NumUnassignedConnectJobsInGroup("a"));
3068 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a")); 3072 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a"));
3069 } 3073 }
3070 3074
3071 TEST_F(ClientSocketPoolBaseTest, RequestSocketsCountActiveSockets) { 3075 TEST_F(ClientSocketPoolBaseTest, RequestSocketsCountActiveSockets) {
3072 CreatePool(4, 4); 3076 CreatePool(4, 4);
3073 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 3077 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
3074 3078
3075 ClientSocketHandle handle1; 3079 ClientSocketHandle handle1;
3076 TestCompletionCallback callback1; 3080 TestCompletionCallback callback1;
3077 EXPECT_EQ(ERR_IO_PENDING, 3081 EXPECT_EQ(ERR_IO_PENDING,
3078 handle1.Init("a", params_, DEFAULT_PRIORITY, 3082 handle1.Init("a", params_, DEFAULT_PRIORITY,
3079 ClientSocketPool::RespectLimits::ENABLED, 3083 ClientSocketPool::RespectLimits::ENABLED,
3080 callback1.callback(), pool_.get(), BoundNetLog())); 3084 callback1.callback(), pool_.get(), BoundNetLog()));
3081 ASSERT_EQ(OK, callback1.WaitForResult()); 3085 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3082 3086
3083 ASSERT_TRUE(pool_->HasGroup("a")); 3087 ASSERT_TRUE(pool_->HasGroup("a"));
3084 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 3088 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
3085 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3089 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3086 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3090 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3087 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); 3091 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
3088 3092
3089 pool_->RequestSockets("a", &params_, 2, BoundNetLog()); 3093 pool_->RequestSockets("a", &params_, 2, BoundNetLog());
3090 3094
3091 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3095 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3146 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a")); 3150 EXPECT_EQ(2, pool_->NumConnectJobsInGroup("a"));
3147 EXPECT_EQ(2, pool_->NumUnassignedConnectJobsInGroup("a")); 3151 EXPECT_EQ(2, pool_->NumUnassignedConnectJobsInGroup("a"));
3148 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3152 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3149 3153
3150 ClientSocketHandle handle1; 3154 ClientSocketHandle handle1;
3151 TestCompletionCallback callback1; 3155 TestCompletionCallback callback1;
3152 EXPECT_EQ(ERR_IO_PENDING, 3156 EXPECT_EQ(ERR_IO_PENDING,
3153 handle1.Init("a", params_, DEFAULT_PRIORITY, 3157 handle1.Init("a", params_, DEFAULT_PRIORITY,
3154 ClientSocketPool::RespectLimits::ENABLED, 3158 ClientSocketPool::RespectLimits::ENABLED,
3155 callback1.callback(), pool_.get(), BoundNetLog())); 3159 callback1.callback(), pool_.get(), BoundNetLog()));
3156 ASSERT_EQ(OK, callback1.WaitForResult()); 3160 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3157 3161
3158 ClientSocketHandle handle2; 3162 ClientSocketHandle handle2;
3159 TestCompletionCallback callback2; 3163 TestCompletionCallback callback2;
3160 int rv = handle2.Init("a", params_, DEFAULT_PRIORITY, 3164 int rv = handle2.Init("a", params_, DEFAULT_PRIORITY,
3161 ClientSocketPool::RespectLimits::ENABLED, 3165 ClientSocketPool::RespectLimits::ENABLED,
3162 callback2.callback(), pool_.get(), BoundNetLog()); 3166 callback2.callback(), pool_.get(), BoundNetLog());
3163 if (rv != OK) { 3167 if (rv != OK) {
3164 EXPECT_EQ(ERR_IO_PENDING, rv); 3168 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3165 EXPECT_EQ(OK, callback2.WaitForResult()); 3169 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3166 } 3170 }
3167 3171
3168 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 3172 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
3169 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3173 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3170 EXPECT_EQ(2, pool_->NumActiveSocketsInGroup("a")); 3174 EXPECT_EQ(2, pool_->NumActiveSocketsInGroup("a"));
3171 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3175 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3172 3176
3173 handle1.Reset(); 3177 handle1.Reset();
3174 handle2.Reset(); 3178 handle2.Reset();
3175 3179
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3225 TestCompletionCallback callback1; 3229 TestCompletionCallback callback1;
3226 EXPECT_EQ(ERR_IO_PENDING, 3230 EXPECT_EQ(ERR_IO_PENDING,
3227 handle1.Init("a", params_, DEFAULT_PRIORITY, 3231 handle1.Init("a", params_, DEFAULT_PRIORITY,
3228 ClientSocketPool::RespectLimits::ENABLED, 3232 ClientSocketPool::RespectLimits::ENABLED,
3229 callback1.callback(), pool_.get(), BoundNetLog())); 3233 callback1.callback(), pool_.get(), BoundNetLog()));
3230 3234
3231 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3235 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3232 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3236 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3233 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3237 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3234 3238
3235 ASSERT_EQ(OK, callback1.WaitForResult()); 3239 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3236 3240
3237 // Make sure if a preconnected socket is not fully connected when a request 3241 // Make sure if a preconnected socket is not fully connected when a request
3238 // starts, it has a connect start time. 3242 // starts, it has a connect start time.
3239 TestLoadTimingInfoConnectedNotReused(handle1); 3243 TestLoadTimingInfoConnectedNotReused(handle1);
3240 handle1.Reset(); 3244 handle1.Reset();
3241 3245
3242 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a")); 3246 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a"));
3243 } 3247 }
3244 3248
3245 // Checks that fully connected preconnect jobs have no connect times, and are 3249 // Checks that fully connected preconnect jobs have no connect times, and are
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3279 // CloseOneIdleSocket() will try to close "a"'s idle socket. 3283 // CloseOneIdleSocket() will try to close "a"'s idle socket.
3280 3284
3281 // Set up one idle socket in "a". 3285 // Set up one idle socket in "a".
3282 ClientSocketHandle handle1; 3286 ClientSocketHandle handle1;
3283 TestCompletionCallback callback1; 3287 TestCompletionCallback callback1;
3284 EXPECT_EQ(ERR_IO_PENDING, 3288 EXPECT_EQ(ERR_IO_PENDING,
3285 handle1.Init("a", params_, DEFAULT_PRIORITY, 3289 handle1.Init("a", params_, DEFAULT_PRIORITY,
3286 ClientSocketPool::RespectLimits::ENABLED, 3290 ClientSocketPool::RespectLimits::ENABLED,
3287 callback1.callback(), pool_.get(), BoundNetLog())); 3291 callback1.callback(), pool_.get(), BoundNetLog()));
3288 3292
3289 ASSERT_EQ(OK, callback1.WaitForResult()); 3293 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3290 handle1.Reset(); 3294 handle1.Reset();
3291 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a")); 3295 EXPECT_EQ(1, pool_->IdleSocketCountInGroup("a"));
3292 3296
3293 // Set up two active sockets in "b". 3297 // Set up two active sockets in "b".
3294 ClientSocketHandle handle2; 3298 ClientSocketHandle handle2;
3295 TestCompletionCallback callback2; 3299 TestCompletionCallback callback2;
3296 EXPECT_EQ(ERR_IO_PENDING, 3300 EXPECT_EQ(ERR_IO_PENDING,
3297 handle1.Init("b", params_, DEFAULT_PRIORITY, 3301 handle1.Init("b", params_, DEFAULT_PRIORITY,
3298 ClientSocketPool::RespectLimits::ENABLED, 3302 ClientSocketPool::RespectLimits::ENABLED,
3299 callback1.callback(), pool_.get(), BoundNetLog())); 3303 callback1.callback(), pool_.get(), BoundNetLog()));
3300 EXPECT_EQ(ERR_IO_PENDING, 3304 EXPECT_EQ(ERR_IO_PENDING,
3301 handle2.Init("b", params_, DEFAULT_PRIORITY, 3305 handle2.Init("b", params_, DEFAULT_PRIORITY,
3302 ClientSocketPool::RespectLimits::ENABLED, 3306 ClientSocketPool::RespectLimits::ENABLED,
3303 callback2.callback(), pool_.get(), BoundNetLog())); 3307 callback2.callback(), pool_.get(), BoundNetLog()));
3304 3308
3305 ASSERT_EQ(OK, callback1.WaitForResult()); 3309 ASSERT_THAT(callback1.WaitForResult(), IsOk());
3306 ASSERT_EQ(OK, callback2.WaitForResult()); 3310 ASSERT_THAT(callback2.WaitForResult(), IsOk());
3307 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("b")); 3311 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("b"));
3308 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("b")); 3312 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("b"));
3309 EXPECT_EQ(2, pool_->NumActiveSocketsInGroup("b")); 3313 EXPECT_EQ(2, pool_->NumActiveSocketsInGroup("b"));
3310 3314
3311 // Now we have 1 idle socket in "a" and 2 active sockets in "b". This means 3315 // Now we have 1 idle socket in "a" and 2 active sockets in "b". This means
3312 // we've maxed out on sockets, since we set |kMaxTotalSockets| to 3. 3316 // we've maxed out on sockets, since we set |kMaxTotalSockets| to 3.
3313 // Requesting 2 preconnected sockets for "a" should fail to allocate any more 3317 // Requesting 2 preconnected sockets for "a" should fail to allocate any more
3314 // sockets for "a", and "b" should still have 2 active sockets. 3318 // sockets for "a", and "b" should still have 2 active sockets.
3315 3319
3316 pool_->RequestSockets("a", &params_, 2, BoundNetLog()); 3320 pool_->RequestSockets("a", &params_, 2, BoundNetLog());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3384 TestCompletionCallback callback; 3388 TestCompletionCallback callback;
3385 EXPECT_EQ(ERR_IO_PENDING, 3389 EXPECT_EQ(ERR_IO_PENDING,
3386 handle.Init("a", params_, DEFAULT_PRIORITY, 3390 handle.Init("a", params_, DEFAULT_PRIORITY,
3387 ClientSocketPool::RespectLimits::ENABLED, 3391 ClientSocketPool::RespectLimits::ENABLED,
3388 callback.callback(), pool_.get(), BoundNetLog())); 3392 callback.callback(), pool_.get(), BoundNetLog()));
3389 // Timer has started, but the backup connect job shouldn't be created yet. 3393 // Timer has started, but the backup connect job shouldn't be created yet.
3390 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3394 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3391 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3395 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3392 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3396 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3393 EXPECT_EQ(0, pool_->NumActiveSocketsInGroup("a")); 3397 EXPECT_EQ(0, pool_->NumActiveSocketsInGroup("a"));
3394 ASSERT_EQ(OK, callback.WaitForResult()); 3398 ASSERT_THAT(callback.WaitForResult(), IsOk());
3395 3399
3396 // The hung connect job should still be there, but everything else should be 3400 // The hung connect job should still be there, but everything else should be
3397 // complete. 3401 // complete.
3398 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3402 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3399 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3403 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3400 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3404 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3401 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); 3405 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
3402 } 3406 }
3403 3407
3404 // Tests that a preconnect that starts out with unread data can still be used. 3408 // Tests that a preconnect that starts out with unread data can still be used.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
3487 TestCompletionCallback callback_; 3491 TestCompletionCallback callback_;
3488 const std::string group_name_; 3492 const std::string group_name_;
3489 bool can_release_connection_; 3493 bool can_release_connection_;
3490 }; 3494 };
3491 3495
3492 TEST_F(ClientSocketPoolBaseTest, FailToCloseIdleSocketsNotHeldByLayeredPool) { 3496 TEST_F(ClientSocketPoolBaseTest, FailToCloseIdleSocketsNotHeldByLayeredPool) {
3493 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 3497 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
3494 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 3498 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
3495 3499
3496 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); 3500 MockLayeredPool mock_layered_pool(pool_.get(), "foo");
3497 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3501 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3498 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3502 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3499 .WillOnce(Return(false)); 3503 .WillOnce(Return(false));
3500 EXPECT_FALSE(pool_->CloseOneIdleConnectionInHigherLayeredPool()); 3504 EXPECT_FALSE(pool_->CloseOneIdleConnectionInHigherLayeredPool());
3501 } 3505 }
3502 3506
3503 TEST_F(ClientSocketPoolBaseTest, ForciblyCloseIdleSocketsHeldByLayeredPool) { 3507 TEST_F(ClientSocketPoolBaseTest, ForciblyCloseIdleSocketsHeldByLayeredPool) {
3504 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup); 3508 CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
3505 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 3509 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
3506 3510
3507 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); 3511 MockLayeredPool mock_layered_pool(pool_.get(), "foo");
3508 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3512 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3509 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3513 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3510 .WillOnce(Invoke(&mock_layered_pool, 3514 .WillOnce(Invoke(&mock_layered_pool,
3511 &MockLayeredPool::ReleaseOneConnection)); 3515 &MockLayeredPool::ReleaseOneConnection));
3512 EXPECT_TRUE(pool_->CloseOneIdleConnectionInHigherLayeredPool()); 3516 EXPECT_TRUE(pool_->CloseOneIdleConnectionInHigherLayeredPool());
3513 } 3517 }
3514 3518
3515 // Tests the basic case of closing an idle socket in a higher layered pool when 3519 // Tests the basic case of closing an idle socket in a higher layered pool when
3516 // a new request is issued and the lower layer pool is stalled. 3520 // a new request is issued and the lower layer pool is stalled.
3517 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketsHeldByLayeredPoolWhenNeeded) { 3521 TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketsHeldByLayeredPoolWhenNeeded) {
3518 CreatePool(1, 1); 3522 CreatePool(1, 1);
3519 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 3523 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
3520 3524
3521 MockLayeredPool mock_layered_pool(pool_.get(), "foo"); 3525 MockLayeredPool mock_layered_pool(pool_.get(), "foo");
3522 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3526 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3523 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3527 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3524 .WillOnce(Invoke(&mock_layered_pool, 3528 .WillOnce(Invoke(&mock_layered_pool,
3525 &MockLayeredPool::ReleaseOneConnection)); 3529 &MockLayeredPool::ReleaseOneConnection));
3526 ClientSocketHandle handle; 3530 ClientSocketHandle handle;
3527 TestCompletionCallback callback; 3531 TestCompletionCallback callback;
3528 EXPECT_EQ(ERR_IO_PENDING, 3532 EXPECT_EQ(ERR_IO_PENDING,
3529 handle.Init("a", params_, DEFAULT_PRIORITY, 3533 handle.Init("a", params_, DEFAULT_PRIORITY,
3530 ClientSocketPool::RespectLimits::ENABLED, 3534 ClientSocketPool::RespectLimits::ENABLED,
3531 callback.callback(), pool_.get(), BoundNetLog())); 3535 callback.callback(), pool_.get(), BoundNetLog()));
3532 EXPECT_EQ(OK, callback.WaitForResult()); 3536 EXPECT_THAT(callback.WaitForResult(), IsOk());
3533 } 3537 }
3534 3538
3535 // Same as above, but the idle socket is in the same group as the stalled 3539 // Same as above, but the idle socket is in the same group as the stalled
3536 // socket, and closes the only other request in its group when closing requests 3540 // socket, and closes the only other request in its group when closing requests
3537 // in higher layered pools. This generally shouldn't happen, but it may be 3541 // in higher layered pools. This generally shouldn't happen, but it may be
3538 // possible if a higher level pool issues a request and the request is 3542 // possible if a higher level pool issues a request and the request is
3539 // subsequently cancelled. Even if it's not possible, best not to crash. 3543 // subsequently cancelled. Even if it's not possible, best not to crash.
3540 TEST_F(ClientSocketPoolBaseTest, 3544 TEST_F(ClientSocketPoolBaseTest,
3541 CloseIdleSocketsHeldByLayeredPoolWhenNeededSameGroup) { 3545 CloseIdleSocketsHeldByLayeredPoolWhenNeededSameGroup) {
3542 CreatePool(2, 2); 3546 CreatePool(2, 2);
3543 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 3547 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
3544 3548
3545 // Need a socket in another group for the pool to be stalled (If a group 3549 // Need a socket in another group for the pool to be stalled (If a group
3546 // has the maximum number of connections already, it's not stalled). 3550 // has the maximum number of connections already, it's not stalled).
3547 ClientSocketHandle handle1; 3551 ClientSocketHandle handle1;
3548 TestCompletionCallback callback1; 3552 TestCompletionCallback callback1;
3549 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY, 3553 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY,
3550 ClientSocketPool::RespectLimits::ENABLED, 3554 ClientSocketPool::RespectLimits::ENABLED,
3551 callback1.callback(), pool_.get(), BoundNetLog())); 3555 callback1.callback(), pool_.get(), BoundNetLog()));
3552 3556
3553 MockLayeredPool mock_layered_pool(pool_.get(), "group2"); 3557 MockLayeredPool mock_layered_pool(pool_.get(), "group2");
3554 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3558 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3555 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3559 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3556 .WillOnce(Invoke(&mock_layered_pool, 3560 .WillOnce(Invoke(&mock_layered_pool,
3557 &MockLayeredPool::ReleaseOneConnection)); 3561 &MockLayeredPool::ReleaseOneConnection));
3558 ClientSocketHandle handle; 3562 ClientSocketHandle handle;
3559 TestCompletionCallback callback2; 3563 TestCompletionCallback callback2;
3560 EXPECT_EQ(ERR_IO_PENDING, 3564 EXPECT_EQ(ERR_IO_PENDING,
3561 handle.Init("group2", params_, DEFAULT_PRIORITY, 3565 handle.Init("group2", params_, DEFAULT_PRIORITY,
3562 ClientSocketPool::RespectLimits::ENABLED, 3566 ClientSocketPool::RespectLimits::ENABLED,
3563 callback2.callback(), pool_.get(), BoundNetLog())); 3567 callback2.callback(), pool_.get(), BoundNetLog()));
3564 EXPECT_EQ(OK, callback2.WaitForResult()); 3568 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3565 } 3569 }
3566 3570
3567 // Tests the case when an idle socket can be closed when a new request is 3571 // Tests the case when an idle socket can be closed when a new request is
3568 // issued, and the new request belongs to a group that was previously stalled. 3572 // issued, and the new request belongs to a group that was previously stalled.
3569 TEST_F(ClientSocketPoolBaseTest, 3573 TEST_F(ClientSocketPoolBaseTest,
3570 CloseIdleSocketsHeldByLayeredPoolInSameGroupWhenNeeded) { 3574 CloseIdleSocketsHeldByLayeredPoolInSameGroupWhenNeeded) {
3571 CreatePool(2, 2); 3575 CreatePool(2, 2);
3572 std::list<TestConnectJob::JobType> job_types; 3576 std::list<TestConnectJob::JobType> job_types;
3573 job_types.push_back(TestConnectJob::kMockJob); 3577 job_types.push_back(TestConnectJob::kMockJob);
3574 job_types.push_back(TestConnectJob::kMockJob); 3578 job_types.push_back(TestConnectJob::kMockJob);
3575 job_types.push_back(TestConnectJob::kMockJob); 3579 job_types.push_back(TestConnectJob::kMockJob);
3576 job_types.push_back(TestConnectJob::kMockJob); 3580 job_types.push_back(TestConnectJob::kMockJob);
3577 connect_job_factory_->set_job_types(&job_types); 3581 connect_job_factory_->set_job_types(&job_types);
3578 3582
3579 ClientSocketHandle handle1; 3583 ClientSocketHandle handle1;
3580 TestCompletionCallback callback1; 3584 TestCompletionCallback callback1;
3581 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY, 3585 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY,
3582 ClientSocketPool::RespectLimits::ENABLED, 3586 ClientSocketPool::RespectLimits::ENABLED,
3583 callback1.callback(), pool_.get(), BoundNetLog())); 3587 callback1.callback(), pool_.get(), BoundNetLog()));
3584 3588
3585 MockLayeredPool mock_layered_pool(pool_.get(), "group2"); 3589 MockLayeredPool mock_layered_pool(pool_.get(), "group2");
3586 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3590 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3587 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3591 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3588 .WillRepeatedly(Invoke(&mock_layered_pool, 3592 .WillRepeatedly(Invoke(&mock_layered_pool,
3589 &MockLayeredPool::ReleaseOneConnection)); 3593 &MockLayeredPool::ReleaseOneConnection));
3590 mock_layered_pool.set_can_release_connection(false); 3594 mock_layered_pool.set_can_release_connection(false);
3591 3595
3592 // The third request is made when the socket pool is in a stalled state. 3596 // The third request is made when the socket pool is in a stalled state.
3593 ClientSocketHandle handle3; 3597 ClientSocketHandle handle3;
3594 TestCompletionCallback callback3; 3598 TestCompletionCallback callback3;
3595 EXPECT_EQ(ERR_IO_PENDING, 3599 EXPECT_EQ(ERR_IO_PENDING,
3596 handle3.Init("group3", params_, DEFAULT_PRIORITY, 3600 handle3.Init("group3", params_, DEFAULT_PRIORITY,
3597 ClientSocketPool::RespectLimits::ENABLED, 3601 ClientSocketPool::RespectLimits::ENABLED,
3598 callback3.callback(), pool_.get(), BoundNetLog())); 3602 callback3.callback(), pool_.get(), BoundNetLog()));
3599 3603
3600 base::RunLoop().RunUntilIdle(); 3604 base::RunLoop().RunUntilIdle();
3601 EXPECT_FALSE(callback3.have_result()); 3605 EXPECT_FALSE(callback3.have_result());
3602 3606
3603 // The fourth request is made when the pool is no longer stalled. The third 3607 // The fourth request is made when the pool is no longer stalled. The third
3604 // request should be serviced first, since it was issued first and has the 3608 // request should be serviced first, since it was issued first and has the
3605 // same priority. 3609 // same priority.
3606 mock_layered_pool.set_can_release_connection(true); 3610 mock_layered_pool.set_can_release_connection(true);
3607 ClientSocketHandle handle4; 3611 ClientSocketHandle handle4;
3608 TestCompletionCallback callback4; 3612 TestCompletionCallback callback4;
3609 EXPECT_EQ(ERR_IO_PENDING, 3613 EXPECT_EQ(ERR_IO_PENDING,
3610 handle4.Init("group3", params_, DEFAULT_PRIORITY, 3614 handle4.Init("group3", params_, DEFAULT_PRIORITY,
3611 ClientSocketPool::RespectLimits::ENABLED, 3615 ClientSocketPool::RespectLimits::ENABLED,
3612 callback4.callback(), pool_.get(), BoundNetLog())); 3616 callback4.callback(), pool_.get(), BoundNetLog()));
3613 EXPECT_EQ(OK, callback3.WaitForResult()); 3617 EXPECT_THAT(callback3.WaitForResult(), IsOk());
3614 EXPECT_FALSE(callback4.have_result()); 3618 EXPECT_FALSE(callback4.have_result());
3615 3619
3616 // Closing a handle should free up another socket slot. 3620 // Closing a handle should free up another socket slot.
3617 handle1.Reset(); 3621 handle1.Reset();
3618 EXPECT_EQ(OK, callback4.WaitForResult()); 3622 EXPECT_THAT(callback4.WaitForResult(), IsOk());
3619 } 3623 }
3620 3624
3621 // Tests the case when an idle socket can be closed when a new request is 3625 // Tests the case when an idle socket can be closed when a new request is
3622 // issued, and the new request belongs to a group that was previously stalled. 3626 // issued, and the new request belongs to a group that was previously stalled.
3623 // 3627 //
3624 // The two differences from the above test are that the stalled requests are not 3628 // The two differences from the above test are that the stalled requests are not
3625 // in the same group as the layered pool's request, and the the fourth request 3629 // in the same group as the layered pool's request, and the the fourth request
3626 // has a higher priority than the third one, so gets a socket first. 3630 // has a higher priority than the third one, so gets a socket first.
3627 TEST_F(ClientSocketPoolBaseTest, 3631 TEST_F(ClientSocketPoolBaseTest,
3628 CloseIdleSocketsHeldByLayeredPoolInSameGroupWhenNeeded2) { 3632 CloseIdleSocketsHeldByLayeredPoolInSameGroupWhenNeeded2) {
3629 CreatePool(2, 2); 3633 CreatePool(2, 2);
3630 std::list<TestConnectJob::JobType> job_types; 3634 std::list<TestConnectJob::JobType> job_types;
3631 job_types.push_back(TestConnectJob::kMockJob); 3635 job_types.push_back(TestConnectJob::kMockJob);
3632 job_types.push_back(TestConnectJob::kMockJob); 3636 job_types.push_back(TestConnectJob::kMockJob);
3633 job_types.push_back(TestConnectJob::kMockJob); 3637 job_types.push_back(TestConnectJob::kMockJob);
3634 job_types.push_back(TestConnectJob::kMockJob); 3638 job_types.push_back(TestConnectJob::kMockJob);
3635 connect_job_factory_->set_job_types(&job_types); 3639 connect_job_factory_->set_job_types(&job_types);
3636 3640
3637 ClientSocketHandle handle1; 3641 ClientSocketHandle handle1;
3638 TestCompletionCallback callback1; 3642 TestCompletionCallback callback1;
3639 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY, 3643 EXPECT_EQ(OK, handle1.Init("group1", params_, DEFAULT_PRIORITY,
3640 ClientSocketPool::RespectLimits::ENABLED, 3644 ClientSocketPool::RespectLimits::ENABLED,
3641 callback1.callback(), pool_.get(), BoundNetLog())); 3645 callback1.callback(), pool_.get(), BoundNetLog()));
3642 3646
3643 MockLayeredPool mock_layered_pool(pool_.get(), "group2"); 3647 MockLayeredPool mock_layered_pool(pool_.get(), "group2");
3644 EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get())); 3648 EXPECT_THAT(mock_layered_pool.RequestSocket(pool_.get()), IsOk());
3645 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection()) 3649 EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
3646 .WillRepeatedly(Invoke(&mock_layered_pool, 3650 .WillRepeatedly(Invoke(&mock_layered_pool,
3647 &MockLayeredPool::ReleaseOneConnection)); 3651 &MockLayeredPool::ReleaseOneConnection));
3648 mock_layered_pool.set_can_release_connection(false); 3652 mock_layered_pool.set_can_release_connection(false);
3649 3653
3650 // The third request is made when the socket pool is in a stalled state. 3654 // The third request is made when the socket pool is in a stalled state.
3651 ClientSocketHandle handle3; 3655 ClientSocketHandle handle3;
3652 TestCompletionCallback callback3; 3656 TestCompletionCallback callback3;
3653 EXPECT_EQ(ERR_IO_PENDING, 3657 EXPECT_EQ(ERR_IO_PENDING,
3654 handle3.Init("group3", params_, MEDIUM, 3658 handle3.Init("group3", params_, MEDIUM,
3655 ClientSocketPool::RespectLimits::ENABLED, 3659 ClientSocketPool::RespectLimits::ENABLED,
3656 callback3.callback(), pool_.get(), BoundNetLog())); 3660 callback3.callback(), pool_.get(), BoundNetLog()));
3657 3661
3658 base::RunLoop().RunUntilIdle(); 3662 base::RunLoop().RunUntilIdle();
3659 EXPECT_FALSE(callback3.have_result()); 3663 EXPECT_FALSE(callback3.have_result());
3660 3664
3661 // The fourth request is made when the pool is no longer stalled. This 3665 // The fourth request is made when the pool is no longer stalled. This
3662 // request has a higher priority than the third request, so is serviced first. 3666 // request has a higher priority than the third request, so is serviced first.
3663 mock_layered_pool.set_can_release_connection(true); 3667 mock_layered_pool.set_can_release_connection(true);
3664 ClientSocketHandle handle4; 3668 ClientSocketHandle handle4;
3665 TestCompletionCallback callback4; 3669 TestCompletionCallback callback4;
3666 EXPECT_EQ(ERR_IO_PENDING, 3670 EXPECT_EQ(ERR_IO_PENDING,
3667 handle4.Init("group3", params_, HIGHEST, 3671 handle4.Init("group3", params_, HIGHEST,
3668 ClientSocketPool::RespectLimits::ENABLED, 3672 ClientSocketPool::RespectLimits::ENABLED,
3669 callback4.callback(), pool_.get(), BoundNetLog())); 3673 callback4.callback(), pool_.get(), BoundNetLog()));
3670 EXPECT_EQ(OK, callback4.WaitForResult()); 3674 EXPECT_THAT(callback4.WaitForResult(), IsOk());
3671 EXPECT_FALSE(callback3.have_result()); 3675 EXPECT_FALSE(callback3.have_result());
3672 3676
3673 // Closing a handle should free up another socket slot. 3677 // Closing a handle should free up another socket slot.
3674 handle1.Reset(); 3678 handle1.Reset();
3675 EXPECT_EQ(OK, callback3.WaitForResult()); 3679 EXPECT_THAT(callback3.WaitForResult(), IsOk());
3676 } 3680 }
3677 3681
3678 TEST_F(ClientSocketPoolBaseTest, 3682 TEST_F(ClientSocketPoolBaseTest,
3679 CloseMultipleIdleSocketsHeldByLayeredPoolWhenNeeded) { 3683 CloseMultipleIdleSocketsHeldByLayeredPoolWhenNeeded) {
3680 CreatePool(1, 1); 3684 CreatePool(1, 1);
3681 connect_job_factory_->set_job_type(TestConnectJob::kMockJob); 3685 connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
3682 3686
3683 MockLayeredPool mock_layered_pool1(pool_.get(), "foo"); 3687 MockLayeredPool mock_layered_pool1(pool_.get(), "foo");
3684 EXPECT_EQ(OK, mock_layered_pool1.RequestSocket(pool_.get())); 3688 EXPECT_THAT(mock_layered_pool1.RequestSocket(pool_.get()), IsOk());
3685 EXPECT_CALL(mock_layered_pool1, CloseOneIdleConnection()) 3689 EXPECT_CALL(mock_layered_pool1, CloseOneIdleConnection())
3686 .WillRepeatedly(Invoke(&mock_layered_pool1, 3690 .WillRepeatedly(Invoke(&mock_layered_pool1,
3687 &MockLayeredPool::ReleaseOneConnection)); 3691 &MockLayeredPool::ReleaseOneConnection));
3688 MockLayeredPool mock_layered_pool2(pool_.get(), "bar"); 3692 MockLayeredPool mock_layered_pool2(pool_.get(), "bar");
3689 EXPECT_EQ(OK, mock_layered_pool2.RequestSocketWithoutLimits(pool_.get())); 3693 EXPECT_THAT(mock_layered_pool2.RequestSocketWithoutLimits(pool_.get()),
3694 IsOk());
3690 EXPECT_CALL(mock_layered_pool2, CloseOneIdleConnection()) 3695 EXPECT_CALL(mock_layered_pool2, CloseOneIdleConnection())
3691 .WillRepeatedly(Invoke(&mock_layered_pool2, 3696 .WillRepeatedly(Invoke(&mock_layered_pool2,
3692 &MockLayeredPool::ReleaseOneConnection)); 3697 &MockLayeredPool::ReleaseOneConnection));
3693 ClientSocketHandle handle; 3698 ClientSocketHandle handle;
3694 TestCompletionCallback callback; 3699 TestCompletionCallback callback;
3695 EXPECT_EQ(ERR_IO_PENDING, 3700 EXPECT_EQ(ERR_IO_PENDING,
3696 handle.Init("a", params_, DEFAULT_PRIORITY, 3701 handle.Init("a", params_, DEFAULT_PRIORITY,
3697 ClientSocketPool::RespectLimits::ENABLED, 3702 ClientSocketPool::RespectLimits::ENABLED,
3698 callback.callback(), pool_.get(), BoundNetLog())); 3703 callback.callback(), pool_.get(), BoundNetLog()));
3699 EXPECT_EQ(OK, callback.WaitForResult()); 3704 EXPECT_THAT(callback.WaitForResult(), IsOk());
3700 } 3705 }
3701 3706
3702 // Test that when a socket pool and group are at their limits, a request 3707 // Test that when a socket pool and group are at their limits, a request
3703 // with RespectLimits::DISABLED triggers creation of a new socket, and gets the 3708 // with RespectLimits::DISABLED triggers creation of a new socket, and gets the
3704 // socket instead of a request with the same priority that was issued earlier, 3709 // socket instead of a request with the same priority that was issued earlier,
3705 // but has RespectLimits::ENABLED. 3710 // but has RespectLimits::ENABLED.
3706 TEST_F(ClientSocketPoolBaseTest, IgnoreLimits) { 3711 TEST_F(ClientSocketPoolBaseTest, IgnoreLimits) {
3707 CreatePool(1, 1); 3712 CreatePool(1, 1);
3708 3713
3709 // Issue a request to reach the socket pool limit. 3714 // Issue a request to reach the socket pool limit.
3710 EXPECT_EQ( 3715 EXPECT_EQ(
3711 OK, StartRequestWithIgnoreLimits( 3716 OK, StartRequestWithIgnoreLimits(
3712 "a", MAXIMUM_PRIORITY, ClientSocketPool::RespectLimits::ENABLED)); 3717 "a", MAXIMUM_PRIORITY, ClientSocketPool::RespectLimits::ENABLED));
3713 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 3718 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
3714 3719
3715 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); 3720 connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob);
3716 3721
3717 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits( 3722 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits(
3718 "a", MAXIMUM_PRIORITY, 3723 "a", MAXIMUM_PRIORITY,
3719 ClientSocketPool::RespectLimits::ENABLED)); 3724 ClientSocketPool::RespectLimits::ENABLED));
3720 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a")); 3725 EXPECT_EQ(0, pool_->NumConnectJobsInGroup("a"));
3721 3726
3722 // Issue a request that ignores the limits, so a new ConnectJob is 3727 // Issue a request that ignores the limits, so a new ConnectJob is
3723 // created. 3728 // created.
3724 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits( 3729 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits(
3725 "a", MAXIMUM_PRIORITY, 3730 "a", MAXIMUM_PRIORITY,
3726 ClientSocketPool::RespectLimits::DISABLED)); 3731 ClientSocketPool::RespectLimits::DISABLED));
3727 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3732 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3728 3733
3729 EXPECT_EQ(OK, request(2)->WaitForResult()); 3734 EXPECT_THAT(request(2)->WaitForResult(), IsOk());
3730 EXPECT_FALSE(request(1)->have_result()); 3735 EXPECT_FALSE(request(1)->have_result());
3731 } 3736 }
3732 3737
3733 // Test that when a socket pool and group are at their limits, a ConnectJob 3738 // Test that when a socket pool and group are at their limits, a ConnectJob
3734 // issued for a request with RespectLimits::DISABLED is not cancelled when a 3739 // issued for a request with RespectLimits::DISABLED is not cancelled when a
3735 // request with RespectLimits::ENABLED issued to the same group is cancelled. 3740 // request with RespectLimits::ENABLED issued to the same group is cancelled.
3736 TEST_F(ClientSocketPoolBaseTest, IgnoreLimitsCancelOtherJob) { 3741 TEST_F(ClientSocketPoolBaseTest, IgnoreLimitsCancelOtherJob) {
3737 CreatePool(1, 1); 3742 CreatePool(1, 1);
3738 3743
3739 // Issue a request to reach the socket pool limit. 3744 // Issue a request to reach the socket pool limit.
(...skipping 14 matching lines...) Expand all
3754 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits( 3759 EXPECT_EQ(ERR_IO_PENDING, StartRequestWithIgnoreLimits(
3755 "a", MAXIMUM_PRIORITY, 3760 "a", MAXIMUM_PRIORITY,
3756 ClientSocketPool::RespectLimits::DISABLED)); 3761 ClientSocketPool::RespectLimits::DISABLED));
3757 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3762 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3758 3763
3759 // Cancel the pending request with RespectLimits::ENABLED. The ConnectJob 3764 // Cancel the pending request with RespectLimits::ENABLED. The ConnectJob
3760 // should not be cancelled. 3765 // should not be cancelled.
3761 request(1)->handle()->Reset(); 3766 request(1)->handle()->Reset();
3762 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3767 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3763 3768
3764 EXPECT_EQ(OK, request(2)->WaitForResult()); 3769 EXPECT_THAT(request(2)->WaitForResult(), IsOk());
3765 EXPECT_FALSE(request(1)->have_result()); 3770 EXPECT_FALSE(request(1)->have_result());
3766 } 3771 }
3767 3772
3768 } // namespace 3773 } // namespace
3769 3774
3770 } // namespace net 3775 } // namespace net
OLDNEW
« no previous file with comments | « net/server/http_server_unittest.cc ('k') | net/socket/sequenced_socket_data_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698