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