OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/socket/client_socket_pool_base.h" | 5 #include "net/socket/client_socket_pool_base.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1948 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); | 1948 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); |
1949 | 1949 |
1950 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); | 1950 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); |
1951 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); | 1951 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); |
1952 | 1952 |
1953 // No point in completing the connection, since ClientSocketHandles only | 1953 // No point in completing the connection, since ClientSocketHandles only |
1954 // expect the LoadState to be checked while connecting. | 1954 // expect the LoadState to be checked while connecting. |
1955 } | 1955 } |
1956 | 1956 |
1957 // Test GetLoadState in the case there are two socket requests. | 1957 // Test GetLoadState in the case there are two socket requests. |
| 1958 // Only the first connection in the pool should affect the pool's load status. |
1958 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequests) { | 1959 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequests) { |
1959 CreatePool(2, 2); | 1960 CreatePool(2, 2); |
1960 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); | 1961 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
1961 | 1962 |
1962 ClientSocketHandle handle; | 1963 ClientSocketHandle handle; |
1963 TestCompletionCallback callback; | 1964 TestCompletionCallback callback; |
1964 int rv = handle.Init("a", | 1965 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, callback.callback(), |
1965 params_, | 1966 pool_.get(), BoundNetLog()); |
1966 DEFAULT_PRIORITY, | 1967 EXPECT_EQ(ERR_IO_PENDING, rv); |
1967 callback.callback(), | 1968 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); |
1968 pool_.get(), | 1969 |
1969 BoundNetLog()); | 1970 ClientSocketHandle handle2; |
| 1971 TestCompletionCallback callback2; |
| 1972 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, callback2.callback(), |
| 1973 pool_.get(), BoundNetLog()); |
| 1974 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1975 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); |
| 1976 |
| 1977 // Check that both handles report the state of the first job. |
| 1978 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState()); |
| 1979 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); |
| 1980 |
| 1981 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_CONNECTING); |
| 1982 |
| 1983 // Check that both handles change to LOAD_STATE_CONNECTING. |
| 1984 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); |
| 1985 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); |
| 1986 } |
| 1987 |
| 1988 // Test that the second connection request does not affect the pool's load |
| 1989 // status. |
| 1990 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequestsChangeSecondRequestState) { |
| 1991 CreatePool(2, 2); |
| 1992 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
| 1993 |
| 1994 ClientSocketHandle handle; |
| 1995 TestCompletionCallback callback; |
| 1996 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, callback.callback(), |
| 1997 pool_.get(), BoundNetLog()); |
1970 EXPECT_EQ(ERR_IO_PENDING, rv); | 1998 EXPECT_EQ(ERR_IO_PENDING, rv); |
1971 | 1999 |
1972 ClientSocketHandle handle2; | 2000 ClientSocketHandle handle2; |
1973 TestCompletionCallback callback2; | 2001 TestCompletionCallback callback2; |
1974 rv = handle2.Init("a", | 2002 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, callback2.callback(), |
1975 params_, | 2003 pool_.get(), BoundNetLog()); |
1976 DEFAULT_PRIORITY, | |
1977 callback2.callback(), | |
1978 pool_.get(), | |
1979 BoundNetLog()); | |
1980 EXPECT_EQ(ERR_IO_PENDING, rv); | 2004 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2005 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); |
1981 | 2006 |
1982 // If the first Job is in an earlier state than the second, the state of | |
1983 // the second job should be used for both handles. | |
1984 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); | |
1985 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); | 2007 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); |
1986 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); | 2008 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); |
1987 | 2009 |
1988 // If the second Job is in an earlier state than the second, the state of | 2010 // First job connects and the first request gets the socket. The |
1989 // the first job should be used for both handles. | |
1990 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); | |
1991 // One request is farther | |
1992 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); | |
1993 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle2.GetLoadState()); | |
1994 | |
1995 // Farthest along job connects and the first request gets the socket. The | |
1996 // second handle switches to the state of the remaining ConnectJob. | 2011 // second handle switches to the state of the remaining ConnectJob. |
1997 client_socket_factory_.SignalJob(0); | 2012 client_socket_factory_.SignalJob(0); |
1998 EXPECT_EQ(OK, callback.WaitForResult()); | 2013 EXPECT_EQ(OK, callback.WaitForResult()); |
1999 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); | 2014 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); |
2000 } | 2015 } |
2001 | 2016 |
2002 // Test GetLoadState in the case the per-group limit is reached. | 2017 // Test GetLoadState in the case the per-group limit is reached. |
2003 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) { | 2018 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) { |
2004 CreatePool(2, 1); | 2019 CreatePool(2, 1); |
2005 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); | 2020 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
2006 | 2021 |
2007 ClientSocketHandle handle; | 2022 ClientSocketHandle handle; |
2008 TestCompletionCallback callback; | 2023 TestCompletionCallback callback; |
2009 int rv = handle.Init("a", | 2024 int rv = handle.Init("a", |
(...skipping 2094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4104 request(1)->handle()->Reset(); | 4119 request(1)->handle()->Reset(); |
4105 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); | 4120 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); |
4106 | 4121 |
4107 EXPECT_EQ(OK, request(2)->WaitForResult()); | 4122 EXPECT_EQ(OK, request(2)->WaitForResult()); |
4108 EXPECT_FALSE(request(1)->have_result()); | 4123 EXPECT_FALSE(request(1)->have_result()); |
4109 } | 4124 } |
4110 | 4125 |
4111 } // namespace | 4126 } // namespace |
4112 | 4127 |
4113 } // namespace net | 4128 } // namespace net |
OLD | NEW |