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 callback.callback(), | |
1968 pool_.get(), | |
1969 BoundNetLog()); | |
1970 EXPECT_EQ(ERR_IO_PENDING, rv); | 1967 EXPECT_EQ(ERR_IO_PENDING, rv); |
1968 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); | |
1971 | 1969 |
1972 ClientSocketHandle handle2; | 1970 ClientSocketHandle handle2; |
1973 TestCompletionCallback callback2; | 1971 TestCompletionCallback callback2; |
1974 rv = handle2.Init("a", | 1972 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, callback2.callback(), |
1975 params_, | 1973 pool_.get(), BoundNetLog()); |
1976 DEFAULT_PRIORITY, | |
1977 callback2.callback(), | |
1978 pool_.get(), | |
1979 BoundNetLog()); | |
1980 EXPECT_EQ(ERR_IO_PENDING, rv); | 1974 EXPECT_EQ(ERR_IO_PENDING, rv); |
1975 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); | |
1981 | 1976 |
1982 // If the first Job is in an earlier state than the second, the state of | 1977 // Check that both handles report the state of the first job. |
1983 // the second job should be used for both handles. | 1978 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState()); |
1984 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); | 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 changes to LOAD_STATE_CONNECTING. | |
1985 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); | 1984 EXPECT_EQ(LOAD_STATE_CONNECTING, handle.GetLoadState()); |
1986 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); | 1985 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); |
1986 } | |
1987 | 1987 |
1988 // If the second Job is in an earlier state than the second, the state of | 1988 // Test that the second connection request does not affect the pool's load |
1989 // the first job should be used for both handles. | 1989 // status. |
1990 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_SSL_HANDSHAKE); | 1990 TEST_F(ClientSocketPoolBaseTest, LoadStateTwoRequestsChangeSecondRequestState) { |
1991 // One request is farther | 1991 CreatePool(2, 2); |
1992 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle.GetLoadState()); | 1992 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
1993 EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, handle2.GetLoadState()); | |
1994 | 1993 |
1995 // Farthest along job connects and the first request gets the socket. The | 1994 ClientSocketHandle handle; |
1995 TestCompletionCallback callback; | |
1996 int rv = handle.Init("a", params_, DEFAULT_PRIORITY, callback.callback(), | |
1997 pool_.get(), BoundNetLog()); | |
1998 EXPECT_EQ(ERR_IO_PENDING, rv); | |
1999 client_socket_factory_.SetJobLoadState(0, LOAD_STATE_RESOLVING_HOST); | |
mmenke
2015/04/21 14:27:33
Suggest just removing this line and making sure th
haavardm
2015/04/21 15:14:08
Fair enough. Done.
| |
2000 | |
2001 ClientSocketHandle handle2; | |
2002 TestCompletionCallback callback2; | |
2003 rv = handle2.Init("a", params_, DEFAULT_PRIORITY, callback2.callback(), | |
2004 pool_.get(), BoundNetLog()); | |
2005 EXPECT_EQ(ERR_IO_PENDING, rv); | |
2006 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_RESOLVING_HOST); | |
2007 | |
2008 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState()); | |
2009 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); | |
2010 | |
2011 client_socket_factory_.SetJobLoadState(1, LOAD_STATE_CONNECTING); | |
2012 | |
2013 // Check that both handles still report the status of the first job. | |
2014 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle.GetLoadState()); | |
2015 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, handle2.GetLoadState()); | |
2016 | |
2017 // First job connects and the first request gets the socket. The | |
1996 // second handle switches to the state of the remaining ConnectJob. | 2018 // second handle switches to the state of the remaining ConnectJob. |
1997 client_socket_factory_.SignalJob(0); | 2019 client_socket_factory_.SignalJob(0); |
1998 EXPECT_EQ(OK, callback.WaitForResult()); | 2020 EXPECT_EQ(OK, callback.WaitForResult()); |
1999 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); | 2021 EXPECT_EQ(LOAD_STATE_CONNECTING, handle2.GetLoadState()); |
2000 } | 2022 } |
2001 | 2023 |
2002 // Test GetLoadState in the case the per-group limit is reached. | 2024 // Test GetLoadState in the case the per-group limit is reached. |
2003 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) { | 2025 TEST_F(ClientSocketPoolBaseTest, LoadStateGroupLimit) { |
2004 CreatePool(2, 1); | 2026 CreatePool(2, 1); |
2005 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); | 2027 connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
(...skipping 2098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4104 request(1)->handle()->Reset(); | 4126 request(1)->handle()->Reset(); |
4105 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); | 4127 ASSERT_EQ(1, pool_->NumConnectJobsInGroup("a")); |
4106 | 4128 |
4107 EXPECT_EQ(OK, request(2)->WaitForResult()); | 4129 EXPECT_EQ(OK, request(2)->WaitForResult()); |
4108 EXPECT_FALSE(request(1)->have_result()); | 4130 EXPECT_FALSE(request(1)->have_result()); |
4109 } | 4131 } |
4110 | 4132 |
4111 } // namespace | 4133 } // namespace |
4112 | 4134 |
4113 } // namespace net | 4135 } // namespace net |
OLD | NEW |