Index: net/socket/socks_client_socket_pool_unittest.cc |
diff --git a/net/socket/socks_client_socket_pool_unittest.cc b/net/socket/socks_client_socket_pool_unittest.cc |
deleted file mode 100644 |
index 391d31beddb87f16dbf3a1268402af56a3279dd9..0000000000000000000000000000000000000000 |
--- a/net/socket/socks_client_socket_pool_unittest.cc |
+++ /dev/null |
@@ -1,348 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/socket/socks_client_socket_pool.h" |
- |
-#include "base/callback.h" |
-#include "base/compiler_specific.h" |
-#include "base/time/time.h" |
-#include "net/base/load_timing_info.h" |
-#include "net/base/load_timing_info_test_util.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/test_completion_callback.h" |
-#include "net/dns/mock_host_resolver.h" |
-#include "net/socket/client_socket_factory.h" |
-#include "net/socket/client_socket_handle.h" |
-#include "net/socket/client_socket_pool_histograms.h" |
-#include "net/socket/socket_test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-const int kMaxSockets = 32; |
-const int kMaxSocketsPerGroup = 6; |
- |
-// Make sure |handle|'s load times are set correctly. Only connect times should |
-// be set. |
-void TestLoadTimingInfo(const ClientSocketHandle& handle) { |
- LoadTimingInfo load_timing_info; |
- EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); |
- |
- // None of these tests use a NetLog. |
- EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
- |
- EXPECT_FALSE(load_timing_info.socket_reused); |
- |
- ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
- CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
- ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
-} |
- |
- |
-scoped_refptr<TransportSocketParams> CreateProxyHostParams() { |
- return new TransportSocketParams( |
- HostPortPair("proxy", 80), false, false, OnHostResolutionCallback(), |
- TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT); |
-} |
- |
-scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { |
- return new SOCKSSocketParams( |
- CreateProxyHostParams(), false /* socks_v5 */, |
- HostPortPair("host", 80)); |
-} |
- |
-scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { |
- return new SOCKSSocketParams( |
- CreateProxyHostParams(), true /* socks_v5 */, |
- HostPortPair("host", 80)); |
-} |
- |
-class SOCKSClientSocketPoolTest : public testing::Test { |
- protected: |
- class SOCKS5MockData { |
- public: |
- explicit SOCKS5MockData(IoMode mode) { |
- writes_.reset(new MockWrite[3]); |
- writes_[0] = MockWrite(mode, kSOCKS5GreetRequest, |
- kSOCKS5GreetRequestLength); |
- writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength); |
- writes_[2] = MockWrite(mode, 0); |
- |
- reads_.reset(new MockRead[3]); |
- reads_[0] = MockRead(mode, kSOCKS5GreetResponse, |
- kSOCKS5GreetResponseLength); |
- reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength); |
- reads_[2] = MockRead(mode, 0); |
- |
- data_.reset(new StaticSocketDataProvider(reads_.get(), 3, |
- writes_.get(), 3)); |
- } |
- |
- SocketDataProvider* data_provider() { return data_.get(); } |
- |
- private: |
- scoped_ptr<StaticSocketDataProvider> data_; |
- scoped_ptr<MockWrite[]> writes_; |
- scoped_ptr<MockRead[]> reads_; |
- }; |
- |
- SOCKSClientSocketPoolTest() |
- : transport_histograms_("MockTCP"), |
- transport_socket_pool_( |
- kMaxSockets, kMaxSocketsPerGroup, |
- &transport_histograms_, |
- &transport_client_socket_factory_), |
- socks_histograms_("SOCKSUnitTest"), |
- pool_(kMaxSockets, kMaxSocketsPerGroup, |
- &socks_histograms_, |
- &host_resolver_, |
- &transport_socket_pool_, |
- NULL) { |
- } |
- |
- ~SOCKSClientSocketPoolTest() override {} |
- |
- int StartRequestV5(const std::string& group_name, RequestPriority priority) { |
- return test_base_.StartRequestUsingPool( |
- &pool_, group_name, priority, CreateSOCKSv5Params()); |
- } |
- |
- int GetOrderOfRequest(size_t index) const { |
- return test_base_.GetOrderOfRequest(index); |
- } |
- |
- ScopedVector<TestSocketRequest>* requests() { return test_base_.requests(); } |
- |
- ClientSocketPoolHistograms transport_histograms_; |
- MockClientSocketFactory transport_client_socket_factory_; |
- MockTransportClientSocketPool transport_socket_pool_; |
- |
- ClientSocketPoolHistograms socks_histograms_; |
- MockHostResolver host_resolver_; |
- SOCKSClientSocketPool pool_; |
- ClientSocketPoolTest test_base_; |
-}; |
- |
-TEST_F(SOCKSClientSocketPoolTest, Simple) { |
- SOCKS5MockData data(SYNCHRONOUS); |
- data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
- |
- ClientSocketHandle handle; |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(OK, rv); |
- EXPECT_TRUE(handle.is_initialized()); |
- EXPECT_TRUE(handle.socket()); |
- TestLoadTimingInfo(handle); |
-} |
- |
-// Make sure that SOCKSConnectJob passes on its priority to its |
-// socket request on Init. |
-TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
- for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
- RequestPriority priority = static_cast<RequestPriority>(i); |
- SOCKS5MockData data(SYNCHRONOUS); |
- data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider( |
- data.data_provider()); |
- |
- ClientSocketHandle handle; |
- EXPECT_EQ(OK, |
- handle.Init("a", CreateSOCKSv5Params(), priority, |
- CompletionCallback(), &pool_, BoundNetLog())); |
- EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
- handle.socket()->Disconnect(); |
- } |
-} |
- |
-// Make sure that SOCKSConnectJob passes on its priority to its |
-// HostResolver request (for non-SOCKS5) on Init. |
-TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { |
- for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
- RequestPriority priority = static_cast<RequestPriority>(i); |
- SOCKS5MockData data(SYNCHRONOUS); |
- data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider( |
- data.data_provider()); |
- |
- ClientSocketHandle handle; |
- EXPECT_EQ(ERR_IO_PENDING, |
- handle.Init("a", CreateSOCKSv4Params(), priority, |
- CompletionCallback(), &pool_, BoundNetLog())); |
- EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
- EXPECT_EQ(priority, host_resolver_.last_request_priority()); |
- EXPECT_TRUE(handle.socket() == NULL); |
- } |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, Async) { |
- SOCKS5MockData data(ASYNC); |
- transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
- |
- TestCompletionCallback callback; |
- ClientSocketHandle handle; |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
- |
- EXPECT_EQ(OK, callback.WaitForResult()); |
- EXPECT_TRUE(handle.is_initialized()); |
- EXPECT_TRUE(handle.socket()); |
- TestLoadTimingInfo(handle); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { |
- StaticSocketDataProvider socket_data; |
- socket_data.set_connect_data(MockConnect(SYNCHRONOUS, |
- ERR_CONNECTION_REFUSED)); |
- transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
- |
- ClientSocketHandle handle; |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { |
- StaticSocketDataProvider socket_data; |
- socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
- transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
- |
- TestCompletionCallback callback; |
- ClientSocketHandle handle; |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
- |
- EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { |
- MockRead failed_read[] = { |
- MockRead(SYNCHRONOUS, 0), |
- }; |
- StaticSocketDataProvider socket_data( |
- failed_read, arraysize(failed_read), NULL, 0); |
- socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
- |
- ClientSocketHandle handle; |
- EXPECT_EQ(0, transport_socket_pool_.release_count()); |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
- EXPECT_EQ(1, transport_socket_pool_.release_count()); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { |
- MockRead failed_read[] = { |
- MockRead(ASYNC, 0), |
- }; |
- StaticSocketDataProvider socket_data( |
- failed_read, arraysize(failed_read), NULL, 0); |
- socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
- |
- TestCompletionCallback callback; |
- ClientSocketHandle handle; |
- EXPECT_EQ(0, transport_socket_pool_.release_count()); |
- int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), |
- &pool_, BoundNetLog()); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
- |
- EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); |
- EXPECT_FALSE(handle.is_initialized()); |
- EXPECT_FALSE(handle.socket()); |
- EXPECT_EQ(1, transport_socket_pool_.release_count()); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, CancelDuringTransportConnect) { |
- SOCKS5MockData data(SYNCHRONOUS); |
- transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
- // We need two connections because the pool base lets one cancelled |
- // connect job proceed for potential future use. |
- SOCKS5MockData data2(SYNCHRONOUS); |
- transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider()); |
- |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- int rv = StartRequestV5("a", LOW); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- |
- rv = StartRequestV5("a", LOW); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- |
- pool_.CancelRequest("a", (*requests())[0]->handle()); |
- pool_.CancelRequest("a", (*requests())[1]->handle()); |
- // Requests in the connect phase don't actually get cancelled. |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- |
- // Now wait for the TCP sockets to connect. |
- base::MessageLoop::current()->RunUntilIdle(); |
- |
- EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(1)); |
- EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(2)); |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- EXPECT_EQ(2, pool_.IdleSocketCount()); |
- |
- (*requests())[0]->handle()->Reset(); |
- (*requests())[1]->handle()->Reset(); |
-} |
- |
-TEST_F(SOCKSClientSocketPoolTest, CancelDuringSOCKSConnect) { |
- SOCKS5MockData data(ASYNC); |
- data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
- // We need two connections because the pool base lets one cancelled |
- // connect job proceed for potential future use. |
- SOCKS5MockData data2(ASYNC); |
- data2.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
- transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider()); |
- |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- EXPECT_EQ(0, transport_socket_pool_.release_count()); |
- int rv = StartRequestV5("a", LOW); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- |
- rv = StartRequestV5("a", LOW); |
- EXPECT_EQ(ERR_IO_PENDING, rv); |
- |
- pool_.CancelRequest("a", (*requests())[0]->handle()); |
- pool_.CancelRequest("a", (*requests())[1]->handle()); |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- // Requests in the connect phase don't actually get cancelled. |
- EXPECT_EQ(0, transport_socket_pool_.release_count()); |
- |
- // Now wait for the async data to reach the SOCKS connect jobs. |
- base::MessageLoop::current()->RunUntilIdle(); |
- |
- EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(1)); |
- EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(2)); |
- EXPECT_EQ(0, transport_socket_pool_.cancel_count()); |
- EXPECT_EQ(0, transport_socket_pool_.release_count()); |
- EXPECT_EQ(2, pool_.IdleSocketCount()); |
- |
- (*requests())[0]->handle()->Reset(); |
- (*requests())[1]->handle()->Reset(); |
-} |
- |
-// It would be nice to also test the timeouts in SOCKSClientSocketPool. |
- |
-} // namespace |
- |
-} // namespace net |