| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
| 11 #include "net/base/mock_host_resolver.h" | 11 #include "net/base/mock_host_resolver.h" |
| 12 #include "net/base/net_errors.h" | 12 #include "net/base/net_errors.h" |
| 13 #include "net/base/test_completion_callback.h" | 13 #include "net/base/test_completion_callback.h" |
| 14 #include "net/socket/client_socket.h" | |
| 15 #include "net/socket/client_socket_factory.h" | 14 #include "net/socket/client_socket_factory.h" |
| 16 #include "net/socket/client_socket_handle.h" | 15 #include "net/socket/client_socket_handle.h" |
| 17 #include "net/socket/client_socket_pool_histograms.h" | 16 #include "net/socket/client_socket_pool_histograms.h" |
| 18 #include "net/socket/socket_test_util.h" | 17 #include "net/socket/socket_test_util.h" |
| 19 #include "net/socket/ssl_host_info.h" | 18 #include "net/socket/ssl_host_info.h" |
| 19 #include "net/socket/stream_socket.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 | 21 |
| 22 namespace net { | 22 namespace net { |
| 23 | 23 |
| 24 using internal::ClientSocketPoolBaseHelper; | 24 using internal::ClientSocketPoolBaseHelper; |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 const int kMaxSockets = 32; | 28 const int kMaxSockets = 32; |
| 29 const int kMaxSocketsPerGroup = 6; | 29 const int kMaxSocketsPerGroup = 6; |
| 30 const net::RequestPriority kDefaultPriority = LOW; | 30 const net::RequestPriority kDefaultPriority = LOW; |
| 31 | 31 |
| 32 class MockClientSocket : public ClientSocket { | 32 class MockClientSocket : public StreamSocket { |
| 33 public: | 33 public: |
| 34 MockClientSocket() : connected_(false) {} | 34 MockClientSocket() : connected_(false) {} |
| 35 | 35 |
| 36 // ClientSocket methods: | 36 // StreamSocket methods: |
| 37 virtual int Connect(CompletionCallback* callback) { | 37 virtual int Connect(CompletionCallback* callback) { |
| 38 connected_ = true; | 38 connected_ = true; |
| 39 return OK; | 39 return OK; |
| 40 } | 40 } |
| 41 virtual void Disconnect() { | 41 virtual void Disconnect() { |
| 42 connected_ = false; | 42 connected_ = false; |
| 43 } | 43 } |
| 44 virtual bool IsConnected() const { | 44 virtual bool IsConnected() const { |
| 45 return connected_; | 45 return connected_; |
| 46 } | 46 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 72 return ERR_FAILED; | 72 return ERR_FAILED; |
| 73 } | 73 } |
| 74 virtual bool SetReceiveBufferSize(int32 size) { return true; } | 74 virtual bool SetReceiveBufferSize(int32 size) { return true; } |
| 75 virtual bool SetSendBufferSize(int32 size) { return true; } | 75 virtual bool SetSendBufferSize(int32 size) { return true; } |
| 76 | 76 |
| 77 private: | 77 private: |
| 78 bool connected_; | 78 bool connected_; |
| 79 BoundNetLog net_log_; | 79 BoundNetLog net_log_; |
| 80 }; | 80 }; |
| 81 | 81 |
| 82 class MockFailingClientSocket : public ClientSocket { | 82 class MockFailingClientSocket : public StreamSocket { |
| 83 public: | 83 public: |
| 84 MockFailingClientSocket() {} | 84 MockFailingClientSocket() {} |
| 85 | 85 |
| 86 // ClientSocket methods: | 86 // StreamSocket methods: |
| 87 virtual int Connect(CompletionCallback* callback) { | 87 virtual int Connect(CompletionCallback* callback) { |
| 88 return ERR_CONNECTION_FAILED; | 88 return ERR_CONNECTION_FAILED; |
| 89 } | 89 } |
| 90 | 90 |
| 91 virtual void Disconnect() {} | 91 virtual void Disconnect() {} |
| 92 | 92 |
| 93 virtual bool IsConnected() const { | 93 virtual bool IsConnected() const { |
| 94 return false; | 94 return false; |
| 95 } | 95 } |
| 96 virtual bool IsConnectedAndIdle() const { | 96 virtual bool IsConnectedAndIdle() const { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 121 CompletionCallback* callback) { | 121 CompletionCallback* callback) { |
| 122 return ERR_FAILED; | 122 return ERR_FAILED; |
| 123 } | 123 } |
| 124 virtual bool SetReceiveBufferSize(int32 size) { return true; } | 124 virtual bool SetReceiveBufferSize(int32 size) { return true; } |
| 125 virtual bool SetSendBufferSize(int32 size) { return true; } | 125 virtual bool SetSendBufferSize(int32 size) { return true; } |
| 126 | 126 |
| 127 private: | 127 private: |
| 128 BoundNetLog net_log_; | 128 BoundNetLog net_log_; |
| 129 }; | 129 }; |
| 130 | 130 |
| 131 class MockPendingClientSocket : public ClientSocket { | 131 class MockPendingClientSocket : public StreamSocket { |
| 132 public: | 132 public: |
| 133 // |should_connect| indicates whether the socket should successfully complete | 133 // |should_connect| indicates whether the socket should successfully complete |
| 134 // or fail. | 134 // or fail. |
| 135 // |should_stall| indicates that this socket should never connect. | 135 // |should_stall| indicates that this socket should never connect. |
| 136 // |delay_ms| is the delay, in milliseconds, before simulating a connect. | 136 // |delay_ms| is the delay, in milliseconds, before simulating a connect. |
| 137 MockPendingClientSocket(bool should_connect, bool should_stall, int delay_ms) | 137 MockPendingClientSocket(bool should_connect, bool should_stall, int delay_ms) |
| 138 : method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 138 : method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 139 should_connect_(should_connect), | 139 should_connect_(should_connect), |
| 140 should_stall_(should_stall), | 140 should_stall_(should_stall), |
| 141 delay_ms_(delay_ms), | 141 delay_ms_(delay_ms), |
| 142 is_connected_(false) {} | 142 is_connected_(false) {} |
| 143 | 143 |
| 144 // ClientSocket methods: | 144 // StreamSocket methods: |
| 145 virtual int Connect(CompletionCallback* callback) { | 145 virtual int Connect(CompletionCallback* callback) { |
| 146 MessageLoop::current()->PostDelayedTask( | 146 MessageLoop::current()->PostDelayedTask( |
| 147 FROM_HERE, | 147 FROM_HERE, |
| 148 method_factory_.NewRunnableMethod( | 148 method_factory_.NewRunnableMethod( |
| 149 &MockPendingClientSocket::DoCallback, callback), delay_ms_); | 149 &MockPendingClientSocket::DoCallback, callback), delay_ms_); |
| 150 return ERR_IO_PENDING; | 150 return ERR_IO_PENDING; |
| 151 } | 151 } |
| 152 | 152 |
| 153 virtual void Disconnect() {} | 153 virtual void Disconnect() {} |
| 154 | 154 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 MOCK_DELAYED_CLIENT_SOCKET, | 219 MOCK_DELAYED_CLIENT_SOCKET, |
| 220 // A stalled socket that never connects at all. | 220 // A stalled socket that never connects at all. |
| 221 MOCK_STALLED_CLIENT_SOCKET, | 221 MOCK_STALLED_CLIENT_SOCKET, |
| 222 }; | 222 }; |
| 223 | 223 |
| 224 MockClientSocketFactory() | 224 MockClientSocketFactory() |
| 225 : allocation_count_(0), client_socket_type_(MOCK_CLIENT_SOCKET), | 225 : allocation_count_(0), client_socket_type_(MOCK_CLIENT_SOCKET), |
| 226 client_socket_types_(NULL), client_socket_index_(0), | 226 client_socket_types_(NULL), client_socket_index_(0), |
| 227 client_socket_index_max_(0) {} | 227 client_socket_index_max_(0) {} |
| 228 | 228 |
| 229 virtual ClientSocket* CreateTransportClientSocket( | 229 virtual StreamSocket* CreateTransportClientSocket( |
| 230 const AddressList& addresses, | 230 const AddressList& addresses, |
| 231 NetLog* /* net_log */, | 231 NetLog* /* net_log */, |
| 232 const NetLog::Source& /* source */) { | 232 const NetLog::Source& /* source */) { |
| 233 allocation_count_++; | 233 allocation_count_++; |
| 234 | 234 |
| 235 ClientSocketType type = client_socket_type_; | 235 ClientSocketType type = client_socket_type_; |
| 236 if (client_socket_types_ && | 236 if (client_socket_types_ && |
| 237 client_socket_index_ < client_socket_index_max_) { | 237 client_socket_index_ < client_socket_index_max_) { |
| 238 type = client_socket_types_[client_socket_index_++]; | 238 type = client_socket_types_[client_socket_index_++]; |
| 239 } | 239 } |
| (...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 EXPECT_FALSE(handle.socket()); | 931 EXPECT_FALSE(handle.socket()); |
| 932 handle.Reset(); | 932 handle.Reset(); |
| 933 | 933 |
| 934 // Reset for the next case. | 934 // Reset for the next case. |
| 935 host_resolver_->set_synchronous_mode(false); | 935 host_resolver_->set_synchronous_mode(false); |
| 936 } | 936 } |
| 937 | 937 |
| 938 } // namespace | 938 } // namespace |
| 939 | 939 |
| 940 } // namespace net | 940 } // namespace net |
| OLD | NEW |