Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: net/socket/transport_client_socket_pool_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/transport_client_socket_pool.h" 5 #include "net/socket/transport_client_socket_pool.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 IPAddressNumber number; 82 IPAddressNumber number;
83 CHECK(ParseIPLiteralToNumber("1:abcd::3:4:ff", &number)); 83 CHECK(ParseIPLiteralToNumber("1:abcd::3:4:ff", &number));
84 *address = IPEndPoint(number, 80); 84 *address = IPEndPoint(number, 80);
85 } 85 }
86 86
87 class MockClientSocket : public StreamSocket { 87 class MockClientSocket : public StreamSocket {
88 public: 88 public:
89 MockClientSocket(const AddressList& addrlist, net::NetLog* net_log) 89 MockClientSocket(const AddressList& addrlist, net::NetLog* net_log)
90 : connected_(false), 90 : connected_(false),
91 addrlist_(addrlist), 91 addrlist_(addrlist),
92 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) { 92 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) {}
93 }
94 93
95 // StreamSocket implementation. 94 // StreamSocket implementation.
96 virtual int Connect(const CompletionCallback& callback) OVERRIDE { 95 virtual int Connect(const CompletionCallback& callback) OVERRIDE {
97 connected_ = true; 96 connected_ = true;
98 return OK; 97 return OK;
99 } 98 }
100 virtual void Disconnect() OVERRIDE { 99 virtual void Disconnect() OVERRIDE { connected_ = false; }
101 connected_ = false; 100 virtual bool IsConnected() const OVERRIDE { return connected_; }
102 } 101 virtual bool IsConnectedAndIdle() const OVERRIDE { return connected_; }
103 virtual bool IsConnected() const OVERRIDE {
104 return connected_;
105 }
106 virtual bool IsConnectedAndIdle() const OVERRIDE {
107 return connected_;
108 }
109 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE { 102 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE {
110 return ERR_UNEXPECTED; 103 return ERR_UNEXPECTED;
111 } 104 }
112 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE { 105 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE {
113 if (!connected_) 106 if (!connected_)
114 return ERR_SOCKET_NOT_CONNECTED; 107 return ERR_SOCKET_NOT_CONNECTED;
115 if (addrlist_.front().GetFamily() == ADDRESS_FAMILY_IPV4) 108 if (addrlist_.front().GetFamily() == ADDRESS_FAMILY_IPV4)
116 SetIPv4Address(address); 109 SetIPv4Address(address);
117 else 110 else
118 SetIPv6Address(address); 111 SetIPv6Address(address);
119 return OK; 112 return OK;
120 } 113 }
121 virtual const BoundNetLog& NetLog() const OVERRIDE { 114 virtual const BoundNetLog& NetLog() const OVERRIDE { return net_log_; }
122 return net_log_;
123 }
124 115
125 virtual void SetSubresourceSpeculation() OVERRIDE {} 116 virtual void SetSubresourceSpeculation() OVERRIDE {}
126 virtual void SetOmniboxSpeculation() OVERRIDE {} 117 virtual void SetOmniboxSpeculation() OVERRIDE {}
127 virtual bool WasEverUsed() const OVERRIDE { return false; } 118 virtual bool WasEverUsed() const OVERRIDE { return false; }
128 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; } 119 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; }
129 virtual bool WasNpnNegotiated() const OVERRIDE { 120 virtual bool WasNpnNegotiated() const OVERRIDE { return false; }
130 return false;
131 }
132 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 121 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
133 return kProtoUnknown; 122 return kProtoUnknown;
134 } 123 }
135 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 124 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { return false; }
136 return false;
137 }
138 125
139 // Socket implementation. 126 // Socket implementation.
140 virtual int Read(IOBuffer* buf, int buf_len, 127 virtual int Read(IOBuffer* buf,
128 int buf_len,
141 const CompletionCallback& callback) OVERRIDE { 129 const CompletionCallback& callback) OVERRIDE {
142 return ERR_FAILED; 130 return ERR_FAILED;
143 } 131 }
144 virtual int Write(IOBuffer* buf, int buf_len, 132 virtual int Write(IOBuffer* buf,
133 int buf_len,
145 const CompletionCallback& callback) OVERRIDE { 134 const CompletionCallback& callback) OVERRIDE {
146 return ERR_FAILED; 135 return ERR_FAILED;
147 } 136 }
148 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; } 137 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; }
149 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; } 138 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; }
150 139
151 private: 140 private:
152 bool connected_; 141 bool connected_;
153 const AddressList addrlist_; 142 const AddressList addrlist_;
154 BoundNetLog net_log_; 143 BoundNetLog net_log_;
155 144
156 DISALLOW_COPY_AND_ASSIGN(MockClientSocket); 145 DISALLOW_COPY_AND_ASSIGN(MockClientSocket);
157 }; 146 };
158 147
159 class MockFailingClientSocket : public StreamSocket { 148 class MockFailingClientSocket : public StreamSocket {
160 public: 149 public:
161 MockFailingClientSocket(const AddressList& addrlist, net::NetLog* net_log) 150 MockFailingClientSocket(const AddressList& addrlist, net::NetLog* net_log)
162 : addrlist_(addrlist), 151 : addrlist_(addrlist),
163 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) { 152 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) {}
164 }
165 153
166 // StreamSocket implementation. 154 // StreamSocket implementation.
167 virtual int Connect(const CompletionCallback& callback) OVERRIDE { 155 virtual int Connect(const CompletionCallback& callback) OVERRIDE {
168 return ERR_CONNECTION_FAILED; 156 return ERR_CONNECTION_FAILED;
169 } 157 }
170 158
171 virtual void Disconnect() OVERRIDE {} 159 virtual void Disconnect() OVERRIDE {}
172 160
173 virtual bool IsConnected() const OVERRIDE { 161 virtual bool IsConnected() const OVERRIDE { return false; }
174 return false; 162 virtual bool IsConnectedAndIdle() const OVERRIDE { return false; }
175 }
176 virtual bool IsConnectedAndIdle() const OVERRIDE {
177 return false;
178 }
179 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE { 163 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE {
180 return ERR_UNEXPECTED; 164 return ERR_UNEXPECTED;
181 } 165 }
182 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE { 166 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE {
183 return ERR_UNEXPECTED; 167 return ERR_UNEXPECTED;
184 } 168 }
185 virtual const BoundNetLog& NetLog() const OVERRIDE { 169 virtual const BoundNetLog& NetLog() const OVERRIDE { return net_log_; }
186 return net_log_;
187 }
188 170
189 virtual void SetSubresourceSpeculation() OVERRIDE {} 171 virtual void SetSubresourceSpeculation() OVERRIDE {}
190 virtual void SetOmniboxSpeculation() OVERRIDE {} 172 virtual void SetOmniboxSpeculation() OVERRIDE {}
191 virtual bool WasEverUsed() const OVERRIDE { return false; } 173 virtual bool WasEverUsed() const OVERRIDE { return false; }
192 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; } 174 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; }
193 virtual bool WasNpnNegotiated() const OVERRIDE { 175 virtual bool WasNpnNegotiated() const OVERRIDE { return false; }
194 return false;
195 }
196 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 176 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
197 return kProtoUnknown; 177 return kProtoUnknown;
198 } 178 }
199 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 179 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { return false; }
200 return false;
201 }
202 180
203 // Socket implementation. 181 // Socket implementation.
204 virtual int Read(IOBuffer* buf, int buf_len, 182 virtual int Read(IOBuffer* buf,
183 int buf_len,
205 const CompletionCallback& callback) OVERRIDE { 184 const CompletionCallback& callback) OVERRIDE {
206 return ERR_FAILED; 185 return ERR_FAILED;
207 } 186 }
208 187
209 virtual int Write(IOBuffer* buf, int buf_len, 188 virtual int Write(IOBuffer* buf,
189 int buf_len,
210 const CompletionCallback& callback) OVERRIDE { 190 const CompletionCallback& callback) OVERRIDE {
211 return ERR_FAILED; 191 return ERR_FAILED;
212 } 192 }
213 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; } 193 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; }
214 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; } 194 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; }
215 195
216 private: 196 private:
217 const AddressList addrlist_; 197 const AddressList addrlist_;
218 BoundNetLog net_log_; 198 BoundNetLog net_log_;
219 199
220 DISALLOW_COPY_AND_ASSIGN(MockFailingClientSocket); 200 DISALLOW_COPY_AND_ASSIGN(MockFailingClientSocket);
221 }; 201 };
222 202
223 class MockPendingClientSocket : public StreamSocket { 203 class MockPendingClientSocket : public StreamSocket {
224 public: 204 public:
225 // |should_connect| indicates whether the socket should successfully complete 205 // |should_connect| indicates whether the socket should successfully complete
226 // or fail. 206 // or fail.
227 // |should_stall| indicates that this socket should never connect. 207 // |should_stall| indicates that this socket should never connect.
228 // |delay_ms| is the delay, in milliseconds, before simulating a connect. 208 // |delay_ms| is the delay, in milliseconds, before simulating a connect.
229 MockPendingClientSocket( 209 MockPendingClientSocket(const AddressList& addrlist,
230 const AddressList& addrlist, 210 bool should_connect,
231 bool should_connect, 211 bool should_stall,
232 bool should_stall, 212 base::TimeDelta delay,
233 base::TimeDelta delay, 213 net::NetLog* net_log)
234 net::NetLog* net_log)
235 : should_connect_(should_connect), 214 : should_connect_(should_connect),
236 should_stall_(should_stall), 215 should_stall_(should_stall),
237 delay_(delay), 216 delay_(delay),
238 is_connected_(false), 217 is_connected_(false),
239 addrlist_(addrlist), 218 addrlist_(addrlist),
240 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)), 219 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)),
241 weak_factory_(this) { 220 weak_factory_(this) {}
242 }
243 221
244 // StreamSocket implementation. 222 // StreamSocket implementation.
245 virtual int Connect(const CompletionCallback& callback) OVERRIDE { 223 virtual int Connect(const CompletionCallback& callback) OVERRIDE {
246 base::MessageLoop::current()->PostDelayedTask( 224 base::MessageLoop::current()->PostDelayedTask(
247 FROM_HERE, 225 FROM_HERE,
248 base::Bind(&MockPendingClientSocket::DoCallback, 226 base::Bind(&MockPendingClientSocket::DoCallback,
249 weak_factory_.GetWeakPtr(), callback), 227 weak_factory_.GetWeakPtr(),
228 callback),
250 delay_); 229 delay_);
251 return ERR_IO_PENDING; 230 return ERR_IO_PENDING;
252 } 231 }
253 232
254 virtual void Disconnect() OVERRIDE {} 233 virtual void Disconnect() OVERRIDE {}
255 234
256 virtual bool IsConnected() const OVERRIDE { 235 virtual bool IsConnected() const OVERRIDE { return is_connected_; }
257 return is_connected_; 236 virtual bool IsConnectedAndIdle() const OVERRIDE { return is_connected_; }
258 }
259 virtual bool IsConnectedAndIdle() const OVERRIDE {
260 return is_connected_;
261 }
262 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE { 237 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE {
263 return ERR_UNEXPECTED; 238 return ERR_UNEXPECTED;
264 } 239 }
265 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE { 240 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE {
266 if (!is_connected_) 241 if (!is_connected_)
267 return ERR_SOCKET_NOT_CONNECTED; 242 return ERR_SOCKET_NOT_CONNECTED;
268 if (addrlist_.front().GetFamily() == ADDRESS_FAMILY_IPV4) 243 if (addrlist_.front().GetFamily() == ADDRESS_FAMILY_IPV4)
269 SetIPv4Address(address); 244 SetIPv4Address(address);
270 else 245 else
271 SetIPv6Address(address); 246 SetIPv6Address(address);
272 return OK; 247 return OK;
273 } 248 }
274 virtual const BoundNetLog& NetLog() const OVERRIDE { 249 virtual const BoundNetLog& NetLog() const OVERRIDE { return net_log_; }
275 return net_log_;
276 }
277 250
278 virtual void SetSubresourceSpeculation() OVERRIDE {} 251 virtual void SetSubresourceSpeculation() OVERRIDE {}
279 virtual void SetOmniboxSpeculation() OVERRIDE {} 252 virtual void SetOmniboxSpeculation() OVERRIDE {}
280 virtual bool WasEverUsed() const OVERRIDE { return false; } 253 virtual bool WasEverUsed() const OVERRIDE { return false; }
281 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; } 254 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; }
282 virtual bool WasNpnNegotiated() const OVERRIDE { 255 virtual bool WasNpnNegotiated() const OVERRIDE { return false; }
283 return false;
284 }
285 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 256 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
286 return kProtoUnknown; 257 return kProtoUnknown;
287 } 258 }
288 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 259 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { return false; }
289 return false;
290 }
291 260
292 // Socket implementation. 261 // Socket implementation.
293 virtual int Read(IOBuffer* buf, int buf_len, 262 virtual int Read(IOBuffer* buf,
263 int buf_len,
294 const CompletionCallback& callback) OVERRIDE { 264 const CompletionCallback& callback) OVERRIDE {
295 return ERR_FAILED; 265 return ERR_FAILED;
296 } 266 }
297 267
298 virtual int Write(IOBuffer* buf, int buf_len, 268 virtual int Write(IOBuffer* buf,
269 int buf_len,
299 const CompletionCallback& callback) OVERRIDE { 270 const CompletionCallback& callback) OVERRIDE {
300 return ERR_FAILED; 271 return ERR_FAILED;
301 } 272 }
302 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; } 273 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return OK; }
303 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; } 274 virtual int SetSendBufferSize(int32 size) OVERRIDE { return OK; }
304 275
305 private: 276 private:
306 void DoCallback(const CompletionCallback& callback) { 277 void DoCallback(const CompletionCallback& callback) {
307 if (should_stall_) 278 if (should_stall_)
308 return; 279 return;
(...skipping 26 matching lines...) Expand all
335 MOCK_FAILING_CLIENT_SOCKET, 306 MOCK_FAILING_CLIENT_SOCKET,
336 MOCK_PENDING_CLIENT_SOCKET, 307 MOCK_PENDING_CLIENT_SOCKET,
337 MOCK_PENDING_FAILING_CLIENT_SOCKET, 308 MOCK_PENDING_FAILING_CLIENT_SOCKET,
338 // A delayed socket will pause before connecting through the message loop. 309 // A delayed socket will pause before connecting through the message loop.
339 MOCK_DELAYED_CLIENT_SOCKET, 310 MOCK_DELAYED_CLIENT_SOCKET,
340 // A stalled socket that never connects at all. 311 // A stalled socket that never connects at all.
341 MOCK_STALLED_CLIENT_SOCKET, 312 MOCK_STALLED_CLIENT_SOCKET,
342 }; 313 };
343 314
344 explicit MockClientSocketFactory(NetLog* net_log) 315 explicit MockClientSocketFactory(NetLog* net_log)
345 : net_log_(net_log), allocation_count_(0), 316 : net_log_(net_log),
346 client_socket_type_(MOCK_CLIENT_SOCKET), client_socket_types_(NULL), 317 allocation_count_(0),
347 client_socket_index_(0), client_socket_index_max_(0), 318 client_socket_type_(MOCK_CLIENT_SOCKET),
319 client_socket_types_(NULL),
320 client_socket_index_(0),
321 client_socket_index_max_(0),
348 delay_(base::TimeDelta::FromMilliseconds( 322 delay_(base::TimeDelta::FromMilliseconds(
349 ClientSocketPool::kMaxConnectRetryIntervalMs)) {} 323 ClientSocketPool::kMaxConnectRetryIntervalMs)) {}
350 324
351 virtual scoped_ptr<DatagramClientSocket> CreateDatagramClientSocket( 325 virtual scoped_ptr<DatagramClientSocket> CreateDatagramClientSocket(
352 DatagramSocket::BindType bind_type, 326 DatagramSocket::BindType bind_type,
353 const RandIntCallback& rand_int_cb, 327 const RandIntCallback& rand_int_cb,
354 NetLog* net_log, 328 NetLog* net_log,
355 const NetLog::Source& source) OVERRIDE { 329 const NetLog::Source& source) OVERRIDE {
356 NOTREACHED(); 330 NOTREACHED();
357 return scoped_ptr<DatagramClientSocket>(); 331 return scoped_ptr<DatagramClientSocket>();
(...skipping 12 matching lines...) Expand all
370 } 344 }
371 345
372 switch (type) { 346 switch (type) {
373 case MOCK_CLIENT_SOCKET: 347 case MOCK_CLIENT_SOCKET:
374 return scoped_ptr<StreamSocket>( 348 return scoped_ptr<StreamSocket>(
375 new MockClientSocket(addresses, net_log_)); 349 new MockClientSocket(addresses, net_log_));
376 case MOCK_FAILING_CLIENT_SOCKET: 350 case MOCK_FAILING_CLIENT_SOCKET:
377 return scoped_ptr<StreamSocket>( 351 return scoped_ptr<StreamSocket>(
378 new MockFailingClientSocket(addresses, net_log_)); 352 new MockFailingClientSocket(addresses, net_log_));
379 case MOCK_PENDING_CLIENT_SOCKET: 353 case MOCK_PENDING_CLIENT_SOCKET:
380 return scoped_ptr<StreamSocket>( 354 return scoped_ptr<StreamSocket>(new MockPendingClientSocket(
381 new MockPendingClientSocket( 355 addresses, true, false, base::TimeDelta(), net_log_));
382 addresses, true, false, base::TimeDelta(), net_log_));
383 case MOCK_PENDING_FAILING_CLIENT_SOCKET: 356 case MOCK_PENDING_FAILING_CLIENT_SOCKET:
384 return scoped_ptr<StreamSocket>( 357 return scoped_ptr<StreamSocket>(new MockPendingClientSocket(
385 new MockPendingClientSocket( 358 addresses, false, false, base::TimeDelta(), net_log_));
386 addresses, false, false, base::TimeDelta(), net_log_));
387 case MOCK_DELAYED_CLIENT_SOCKET: 359 case MOCK_DELAYED_CLIENT_SOCKET:
388 return scoped_ptr<StreamSocket>( 360 return scoped_ptr<StreamSocket>(new MockPendingClientSocket(
389 new MockPendingClientSocket( 361 addresses, true, false, delay_, net_log_));
390 addresses, true, false, delay_, net_log_));
391 case MOCK_STALLED_CLIENT_SOCKET: 362 case MOCK_STALLED_CLIENT_SOCKET:
392 return scoped_ptr<StreamSocket>( 363 return scoped_ptr<StreamSocket>(new MockPendingClientSocket(
393 new MockPendingClientSocket( 364 addresses, true, true, base::TimeDelta(), net_log_));
394 addresses, true, true, base::TimeDelta(), net_log_));
395 default: 365 default:
396 NOTREACHED(); 366 NOTREACHED();
397 return scoped_ptr<StreamSocket>( 367 return scoped_ptr<StreamSocket>(
398 new MockClientSocket(addresses, net_log_)); 368 new MockClientSocket(addresses, net_log_));
399 } 369 }
400 } 370 }
401 371
402 virtual scoped_ptr<SSLClientSocket> CreateSSLClientSocket( 372 virtual scoped_ptr<SSLClientSocket> CreateSSLClientSocket(
403 scoped_ptr<ClientSocketHandle> transport_socket, 373 scoped_ptr<ClientSocketHandle> transport_socket,
404 const HostPortPair& host_and_port, 374 const HostPortPair& host_and_port,
405 const SSLConfig& ssl_config, 375 const SSLConfig& ssl_config,
406 const SSLClientSocketContext& context) OVERRIDE { 376 const SSLClientSocketContext& context) OVERRIDE {
407 NOTIMPLEMENTED(); 377 NOTIMPLEMENTED();
408 return scoped_ptr<SSLClientSocket>(); 378 return scoped_ptr<SSLClientSocket>();
409 } 379 }
410 380
411 virtual void ClearSSLSessionCache() OVERRIDE { 381 virtual void ClearSSLSessionCache() OVERRIDE { NOTIMPLEMENTED(); }
412 NOTIMPLEMENTED();
413 }
414 382
415 int allocation_count() const { return allocation_count_; } 383 int allocation_count() const { return allocation_count_; }
416 384
417 // Set the default ClientSocketType. 385 // Set the default ClientSocketType.
418 void set_client_socket_type(ClientSocketType type) { 386 void set_client_socket_type(ClientSocketType type) {
419 client_socket_type_ = type; 387 client_socket_type_ = type;
420 } 388 }
421 389
422 // Set a list of ClientSocketTypes to be used. 390 // Set a list of ClientSocketTypes to be used.
423 void set_client_socket_types(ClientSocketType* type_list, int num_types) { 391 void set_client_socket_types(ClientSocketType* type_list, int num_types) {
(...skipping 15 matching lines...) Expand all
439 base::TimeDelta delay_; 407 base::TimeDelta delay_;
440 408
441 DISALLOW_COPY_AND_ASSIGN(MockClientSocketFactory); 409 DISALLOW_COPY_AND_ASSIGN(MockClientSocketFactory);
442 }; 410 };
443 411
444 class TransportClientSocketPoolTest : public testing::Test { 412 class TransportClientSocketPoolTest : public testing::Test {
445 protected: 413 protected:
446 TransportClientSocketPoolTest() 414 TransportClientSocketPoolTest()
447 : connect_backup_jobs_enabled_( 415 : connect_backup_jobs_enabled_(
448 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), 416 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)),
449 params_( 417 params_(new TransportSocketParams(HostPortPair("www.google.com", 80),
450 new TransportSocketParams(HostPortPair("www.google.com", 80), 418 false,
451 false, false, 419 false,
452 OnHostResolutionCallback())), 420 OnHostResolutionCallback())),
453 histograms_(new ClientSocketPoolHistograms("TCPUnitTest")), 421 histograms_(new ClientSocketPoolHistograms("TCPUnitTest")),
454 host_resolver_(new MockHostResolver), 422 host_resolver_(new MockHostResolver),
455 client_socket_factory_(&net_log_), 423 client_socket_factory_(&net_log_),
456 pool_(kMaxSockets, 424 pool_(kMaxSockets,
457 kMaxSocketsPerGroup, 425 kMaxSocketsPerGroup,
458 histograms_.get(), 426 histograms_.get(),
459 host_resolver_.get(), 427 host_resolver_.get(),
460 &client_socket_factory_, 428 &client_socket_factory_,
461 NULL) { 429 NULL) {}
462 }
463 430
464 virtual ~TransportClientSocketPoolTest() { 431 virtual ~TransportClientSocketPoolTest() {
465 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( 432 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(
466 connect_backup_jobs_enabled_); 433 connect_backup_jobs_enabled_);
467 } 434 }
468 435
469 int StartRequest(const std::string& group_name, RequestPriority priority) { 436 int StartRequest(const std::string& group_name, RequestPriority priority) {
470 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( 437 scoped_refptr<TransportSocketParams> params(
471 HostPortPair("www.google.com", 80), false, false, 438 new TransportSocketParams(HostPortPair("www.google.com", 80),
472 OnHostResolutionCallback())); 439 false,
440 false,
441 OnHostResolutionCallback()));
473 return test_base_.StartRequestUsingPool( 442 return test_base_.StartRequestUsingPool(
474 &pool_, group_name, priority, params); 443 &pool_, group_name, priority, params);
475 } 444 }
476 445
477 int GetOrderOfRequest(size_t index) { 446 int GetOrderOfRequest(size_t index) {
478 return test_base_.GetOrderOfRequest(index); 447 return test_base_.GetOrderOfRequest(index);
479 } 448 }
480 449
481 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { 450 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) {
482 return test_base_.ReleaseOneConnection(keep_alive); 451 return test_base_.ReleaseOneConnection(keep_alive);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 ASSERT_EQ(4u, addrlist.size()); 537 ASSERT_EQ(4u, addrlist.size());
569 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily()); 538 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily());
570 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily()); 539 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily());
571 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily()); 540 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily());
572 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily()); 541 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily());
573 } 542 }
574 543
575 TEST_F(TransportClientSocketPoolTest, Basic) { 544 TEST_F(TransportClientSocketPoolTest, Basic) {
576 TestCompletionCallback callback; 545 TestCompletionCallback callback;
577 ClientSocketHandle handle; 546 ClientSocketHandle handle;
578 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 547 int rv = handle.Init(
579 BoundNetLog()); 548 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog());
580 EXPECT_EQ(ERR_IO_PENDING, rv); 549 EXPECT_EQ(ERR_IO_PENDING, rv);
581 EXPECT_FALSE(handle.is_initialized()); 550 EXPECT_FALSE(handle.is_initialized());
582 EXPECT_FALSE(handle.socket()); 551 EXPECT_FALSE(handle.socket());
583 552
584 EXPECT_EQ(OK, callback.WaitForResult()); 553 EXPECT_EQ(OK, callback.WaitForResult());
585 EXPECT_TRUE(handle.is_initialized()); 554 EXPECT_TRUE(handle.is_initialized());
586 EXPECT_TRUE(handle.socket()); 555 EXPECT_TRUE(handle.socket());
587 TestLoadTimingInfoConnectedNotReused(handle); 556 TestLoadTimingInfoConnectedNotReused(handle);
588 } 557 }
589 558
590 // Make sure that TransportConnectJob passes on its priority to its 559 // Make sure that TransportConnectJob passes on its priority to its
591 // HostResolver request on Init. 560 // HostResolver request on Init.
592 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) { 561 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) {
593 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 562 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
594 RequestPriority priority = static_cast<RequestPriority>(i); 563 RequestPriority priority = static_cast<RequestPriority>(i);
595 TestCompletionCallback callback; 564 TestCompletionCallback callback;
596 ClientSocketHandle handle; 565 ClientSocketHandle handle;
597 EXPECT_EQ(ERR_IO_PENDING, 566 EXPECT_EQ(ERR_IO_PENDING,
598 handle.Init("a", params_, priority, callback.callback(), &pool_, 567 handle.Init("a",
568 params_,
569 priority,
570 callback.callback(),
571 &pool_,
599 BoundNetLog())); 572 BoundNetLog()));
600 EXPECT_EQ(priority, host_resolver_->last_request_priority()); 573 EXPECT_EQ(priority, host_resolver_->last_request_priority());
601 } 574 }
602 } 575 }
603 576
604 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { 577 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) {
605 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); 578 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name");
606 TestCompletionCallback callback; 579 TestCompletionCallback callback;
607 ClientSocketHandle handle; 580 ClientSocketHandle handle;
608 HostPortPair host_port_pair("unresolvable.host.name", 80); 581 HostPortPair host_port_pair("unresolvable.host.name", 80);
609 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 582 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
610 host_port_pair, false, false, 583 host_port_pair, false, false, OnHostResolutionCallback()));
611 OnHostResolutionCallback()));
612 EXPECT_EQ(ERR_IO_PENDING, 584 EXPECT_EQ(ERR_IO_PENDING,
613 handle.Init("a", dest, kDefaultPriority, callback.callback(), 585 handle.Init("a",
614 &pool_, BoundNetLog())); 586 dest,
587 kDefaultPriority,
588 callback.callback(),
589 &pool_,
590 BoundNetLog()));
615 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); 591 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult());
616 } 592 }
617 593
618 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { 594 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) {
619 client_socket_factory_.set_client_socket_type( 595 client_socket_factory_.set_client_socket_type(
620 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); 596 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET);
621 TestCompletionCallback callback; 597 TestCompletionCallback callback;
622 ClientSocketHandle handle; 598 ClientSocketHandle handle;
623 EXPECT_EQ(ERR_IO_PENDING, 599 EXPECT_EQ(ERR_IO_PENDING,
624 handle.Init("a", params_, kDefaultPriority, callback.callback(), 600 handle.Init("a",
625 &pool_, BoundNetLog())); 601 params_,
602 kDefaultPriority,
603 callback.callback(),
604 &pool_,
605 BoundNetLog()));
626 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 606 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
627 607
628 // Make the host resolutions complete synchronously this time. 608 // Make the host resolutions complete synchronously this time.
629 host_resolver_->set_synchronous_mode(true); 609 host_resolver_->set_synchronous_mode(true);
630 EXPECT_EQ(ERR_CONNECTION_FAILED, 610 EXPECT_EQ(ERR_CONNECTION_FAILED,
631 handle.Init("a", params_, kDefaultPriority, callback.callback(), 611 handle.Init("a",
632 &pool_, BoundNetLog())); 612 params_,
613 kDefaultPriority,
614 callback.callback(),
615 &pool_,
616 BoundNetLog()));
633 } 617 }
634 618
635 TEST_F(TransportClientSocketPoolTest, PendingRequests) { 619 TEST_F(TransportClientSocketPoolTest, PendingRequests) {
636 // First request finishes asynchronously. 620 // First request finishes asynchronously.
637 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 621 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
638 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); 622 EXPECT_EQ(OK, (*requests())[0]->WaitForResult());
639 623
640 // Make all subsequent host resolutions complete synchronously. 624 // Make all subsequent host resolutions complete synchronously.
641 host_resolver_->set_synchronous_mode(true); 625 host_resolver_->set_synchronous_mode(true);
642 626
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 EXPECT_EQ(6U, completion_count()); 712 EXPECT_EQ(6U, completion_count());
729 } 713 }
730 714
731 // This test will start up a RequestSocket() and then immediately Cancel() it. 715 // This test will start up a RequestSocket() and then immediately Cancel() it.
732 // The pending host resolution will eventually complete, and destroy the 716 // The pending host resolution will eventually complete, and destroy the
733 // ClientSocketPool which will crash if the group was not cleared properly. 717 // ClientSocketPool which will crash if the group was not cleared properly.
734 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { 718 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) {
735 TestCompletionCallback callback; 719 TestCompletionCallback callback;
736 ClientSocketHandle handle; 720 ClientSocketHandle handle;
737 EXPECT_EQ(ERR_IO_PENDING, 721 EXPECT_EQ(ERR_IO_PENDING,
738 handle.Init("a", params_, kDefaultPriority, callback.callback(), 722 handle.Init("a",
739 &pool_, BoundNetLog())); 723 params_,
724 kDefaultPriority,
725 callback.callback(),
726 &pool_,
727 BoundNetLog()));
740 handle.Reset(); 728 handle.Reset();
741 } 729 }
742 730
743 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { 731 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) {
744 ClientSocketHandle handle; 732 ClientSocketHandle handle;
745 TestCompletionCallback callback; 733 TestCompletionCallback callback;
746 ClientSocketHandle handle2; 734 ClientSocketHandle handle2;
747 TestCompletionCallback callback2; 735 TestCompletionCallback callback2;
748 736
749 EXPECT_EQ(ERR_IO_PENDING, 737 EXPECT_EQ(ERR_IO_PENDING,
750 handle.Init("a", params_, kDefaultPriority, callback.callback(), 738 handle.Init("a",
751 &pool_, BoundNetLog())); 739 params_,
740 kDefaultPriority,
741 callback.callback(),
742 &pool_,
743 BoundNetLog()));
752 EXPECT_EQ(ERR_IO_PENDING, 744 EXPECT_EQ(ERR_IO_PENDING,
753 handle2.Init("a", params_, kDefaultPriority, callback2.callback(), 745 handle2.Init("a",
754 &pool_, BoundNetLog())); 746 params_,
747 kDefaultPriority,
748 callback2.callback(),
749 &pool_,
750 BoundNetLog()));
755 751
756 handle.Reset(); 752 handle.Reset();
757 753
758 EXPECT_EQ(OK, callback2.WaitForResult()); 754 EXPECT_EQ(OK, callback2.WaitForResult());
759 handle2.Reset(); 755 handle2.Reset();
760 } 756 }
761 757
762 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { 758 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) {
763 client_socket_factory_.set_client_socket_type( 759 client_socket_factory_.set_client_socket_type(
764 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); 760 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET);
765 ClientSocketHandle handle; 761 ClientSocketHandle handle;
766 TestCompletionCallback callback; 762 TestCompletionCallback callback;
767 EXPECT_EQ(ERR_IO_PENDING, 763 EXPECT_EQ(ERR_IO_PENDING,
768 handle.Init("a", params_, kDefaultPriority, callback.callback(), 764 handle.Init("a",
769 &pool_, BoundNetLog())); 765 params_,
766 kDefaultPriority,
767 callback.callback(),
768 &pool_,
769 BoundNetLog()));
770 770
771 handle.Reset(); 771 handle.Reset();
772 772
773 TestCompletionCallback callback2; 773 TestCompletionCallback callback2;
774 EXPECT_EQ(ERR_IO_PENDING, 774 EXPECT_EQ(ERR_IO_PENDING,
775 handle.Init("a", params_, kDefaultPriority, callback2.callback(), 775 handle.Init("a",
776 &pool_, BoundNetLog())); 776 params_,
777 kDefaultPriority,
778 callback2.callback(),
779 &pool_,
780 BoundNetLog()));
777 781
778 host_resolver_->set_synchronous_mode(true); 782 host_resolver_->set_synchronous_mode(true);
779 // At this point, handle has two ConnectingSockets out for it. Due to the 783 // At this point, handle has two ConnectingSockets out for it. Due to the
780 // setting the mock resolver into synchronous mode, the host resolution for 784 // setting the mock resolver into synchronous mode, the host resolution for
781 // both will return in the same loop of the MessageLoop. The client socket 785 // both will return in the same loop of the MessageLoop. The client socket
782 // is a pending socket, so the Connect() will asynchronously complete on the 786 // is a pending socket, so the Connect() will asynchronously complete on the
783 // next loop of the MessageLoop. That means that the first 787 // next loop of the MessageLoop. That means that the first
784 // ConnectingSocket will enter OnIOComplete, and then the second one will. 788 // ConnectingSocket will enter OnIOComplete, and then the second one will.
785 // If the first one is not cancelled, it will advance the load state, and 789 // If the first one is not cancelled, it will advance the load state, and
786 // then the second one will crash. 790 // then the second one will crash.
(...skipping 30 matching lines...) Expand all
817 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW)); 821 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOW));
818 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST)); 822 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", LOWEST));
819 823
820 // Cancel a request. 824 // Cancel a request.
821 size_t index_to_cancel = kMaxSocketsPerGroup + 2; 825 size_t index_to_cancel = kMaxSocketsPerGroup + 2;
822 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized()); 826 EXPECT_FALSE((*requests())[index_to_cancel]->handle()->is_initialized());
823 (*requests())[index_to_cancel]->handle()->Reset(); 827 (*requests())[index_to_cancel]->handle()->Reset();
824 828
825 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE); 829 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE);
826 830
827 EXPECT_EQ(kMaxSocketsPerGroup, 831 EXPECT_EQ(kMaxSocketsPerGroup, client_socket_factory_.allocation_count());
828 client_socket_factory_.allocation_count());
829 EXPECT_EQ(requests()->size() - kMaxSocketsPerGroup, completion_count()); 832 EXPECT_EQ(requests()->size() - kMaxSocketsPerGroup, completion_count());
830 833
831 EXPECT_EQ(1, GetOrderOfRequest(1)); 834 EXPECT_EQ(1, GetOrderOfRequest(1));
832 EXPECT_EQ(2, GetOrderOfRequest(2)); 835 EXPECT_EQ(2, GetOrderOfRequest(2));
833 EXPECT_EQ(3, GetOrderOfRequest(3)); 836 EXPECT_EQ(3, GetOrderOfRequest(3));
834 EXPECT_EQ(4, GetOrderOfRequest(4)); 837 EXPECT_EQ(4, GetOrderOfRequest(4));
835 EXPECT_EQ(5, GetOrderOfRequest(5)); 838 EXPECT_EQ(5, GetOrderOfRequest(5));
836 EXPECT_EQ(6, GetOrderOfRequest(6)); 839 EXPECT_EQ(6, GetOrderOfRequest(6));
837 EXPECT_EQ(14, GetOrderOfRequest(7)); 840 EXPECT_EQ(14, GetOrderOfRequest(7));
838 EXPECT_EQ(7, GetOrderOfRequest(8)); 841 EXPECT_EQ(7, GetOrderOfRequest(8));
(...skipping 12 matching lines...) Expand all
851 } 854 }
852 855
853 class RequestSocketCallback : public TestCompletionCallbackBase { 856 class RequestSocketCallback : public TestCompletionCallbackBase {
854 public: 857 public:
855 RequestSocketCallback(ClientSocketHandle* handle, 858 RequestSocketCallback(ClientSocketHandle* handle,
856 TransportClientSocketPool* pool) 859 TransportClientSocketPool* pool)
857 : handle_(handle), 860 : handle_(handle),
858 pool_(pool), 861 pool_(pool),
859 within_callback_(false), 862 within_callback_(false),
860 callback_(base::Bind(&RequestSocketCallback::OnComplete, 863 callback_(base::Bind(&RequestSocketCallback::OnComplete,
861 base::Unretained(this))) { 864 base::Unretained(this))) {}
862 }
863 865
864 virtual ~RequestSocketCallback() {} 866 virtual ~RequestSocketCallback() {}
865 867
866 const CompletionCallback& callback() const { return callback_; } 868 const CompletionCallback& callback() const { return callback_; }
867 869
868 private: 870 private:
869 void OnComplete(int result) { 871 void OnComplete(int result) {
870 SetResult(result); 872 SetResult(result);
871 ASSERT_EQ(OK, result); 873 ASSERT_EQ(OK, result);
872 874
873 if (!within_callback_) { 875 if (!within_callback_) {
874 // Don't allow reuse of the socket. Disconnect it and then release it and 876 // Don't allow reuse of the socket. Disconnect it and then release it and
875 // run through the MessageLoop once to get it completely released. 877 // run through the MessageLoop once to get it completely released.
876 handle_->socket()->Disconnect(); 878 handle_->socket()->Disconnect();
877 handle_->Reset(); 879 handle_->Reset();
878 { 880 {
879 base::MessageLoop::ScopedNestableTaskAllower allow( 881 base::MessageLoop::ScopedNestableTaskAllower allow(
880 base::MessageLoop::current()); 882 base::MessageLoop::current());
881 base::MessageLoop::current()->RunUntilIdle(); 883 base::MessageLoop::current()->RunUntilIdle();
882 } 884 }
883 within_callback_ = true; 885 within_callback_ = true;
884 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 886 scoped_refptr<TransportSocketParams> dest(
885 HostPortPair("www.google.com", 80), false, false, 887 new TransportSocketParams(HostPortPair("www.google.com", 80),
886 OnHostResolutionCallback())); 888 false,
887 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, 889 false,
888 BoundNetLog()); 890 OnHostResolutionCallback()));
891 int rv =
892 handle_->Init("a", dest, LOWEST, callback(), pool_, BoundNetLog());
889 EXPECT_EQ(OK, rv); 893 EXPECT_EQ(OK, rv);
890 } 894 }
891 } 895 }
892 896
893 ClientSocketHandle* const handle_; 897 ClientSocketHandle* const handle_;
894 TransportClientSocketPool* const pool_; 898 TransportClientSocketPool* const pool_;
895 bool within_callback_; 899 bool within_callback_;
896 CompletionCallback callback_; 900 CompletionCallback callback_;
897 901
898 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); 902 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback);
899 }; 903 };
900 904
901 TEST_F(TransportClientSocketPoolTest, RequestTwice) { 905 TEST_F(TransportClientSocketPoolTest, RequestTwice) {
902 ClientSocketHandle handle; 906 ClientSocketHandle handle;
903 RequestSocketCallback callback(&handle, &pool_); 907 RequestSocketCallback callback(&handle, &pool_);
904 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 908 scoped_refptr<TransportSocketParams> dest(
905 HostPortPair("www.google.com", 80), false, false, 909 new TransportSocketParams(HostPortPair("www.google.com", 80),
906 OnHostResolutionCallback())); 910 false,
907 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, 911 false,
908 BoundNetLog()); 912 OnHostResolutionCallback()));
913 int rv = handle.Init(
914 "a", dest, LOWEST, callback.callback(), &pool_, BoundNetLog());
909 ASSERT_EQ(ERR_IO_PENDING, rv); 915 ASSERT_EQ(ERR_IO_PENDING, rv);
910 916
911 // The callback is going to request "www.google.com". We want it to complete 917 // The callback is going to request "www.google.com". We want it to complete
912 // synchronously this time. 918 // synchronously this time.
913 host_resolver_->set_synchronous_mode(true); 919 host_resolver_->set_synchronous_mode(true);
914 920
915 EXPECT_EQ(OK, callback.WaitForResult()); 921 EXPECT_EQ(OK, callback.WaitForResult());
916 922
917 handle.Reset(); 923 handle.Reset();
918 } 924 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 for (int i = 0; i < kNumRequests; i++) 966 for (int i = 0; i < kNumRequests; i++)
961 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 967 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
962 968
963 for (int i = 0; i < kNumRequests; i++) 969 for (int i = 0; i < kNumRequests; i++)
964 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); 970 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult());
965 } 971 }
966 972
967 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) { 973 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) {
968 TestCompletionCallback callback; 974 TestCompletionCallback callback;
969 ClientSocketHandle handle; 975 ClientSocketHandle handle;
970 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 976 int rv = handle.Init(
971 BoundNetLog()); 977 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog());
972 EXPECT_EQ(ERR_IO_PENDING, rv); 978 EXPECT_EQ(ERR_IO_PENDING, rv);
973 EXPECT_FALSE(handle.is_initialized()); 979 EXPECT_FALSE(handle.is_initialized());
974 EXPECT_FALSE(handle.socket()); 980 EXPECT_FALSE(handle.socket());
975 981
976 EXPECT_EQ(OK, callback.WaitForResult()); 982 EXPECT_EQ(OK, callback.WaitForResult());
977 EXPECT_TRUE(handle.is_initialized()); 983 EXPECT_TRUE(handle.is_initialized());
978 EXPECT_TRUE(handle.socket()); 984 EXPECT_TRUE(handle.socket());
979 TestLoadTimingInfoConnectedNotReused(handle); 985 TestLoadTimingInfoConnectedNotReused(handle);
980 986
981 handle.Reset(); 987 handle.Reset();
982 // Need to run all pending to release the socket back to the pool. 988 // Need to run all pending to release the socket back to the pool.
983 base::MessageLoop::current()->RunUntilIdle(); 989 base::MessageLoop::current()->RunUntilIdle();
984 990
985 // Now we should have 1 idle socket. 991 // Now we should have 1 idle socket.
986 EXPECT_EQ(1, pool_.IdleSocketCount()); 992 EXPECT_EQ(1, pool_.IdleSocketCount());
987 993
988 rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 994 rv = handle.Init(
989 BoundNetLog()); 995 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog());
990 EXPECT_EQ(OK, rv); 996 EXPECT_EQ(OK, rv);
991 EXPECT_EQ(0, pool_.IdleSocketCount()); 997 EXPECT_EQ(0, pool_.IdleSocketCount());
992 TestLoadTimingInfoConnectedReused(handle); 998 TestLoadTimingInfoConnectedReused(handle);
993 } 999 }
994 1000
995 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { 1001 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) {
996 TestCompletionCallback callback; 1002 TestCompletionCallback callback;
997 ClientSocketHandle handle; 1003 ClientSocketHandle handle;
998 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, 1004 int rv = handle.Init(
999 BoundNetLog()); 1005 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog());
1000 EXPECT_EQ(ERR_IO_PENDING, rv); 1006 EXPECT_EQ(ERR_IO_PENDING, rv);
1001 EXPECT_FALSE(handle.is_initialized()); 1007 EXPECT_FALSE(handle.is_initialized());
1002 EXPECT_FALSE(handle.socket()); 1008 EXPECT_FALSE(handle.socket());
1003 1009
1004 EXPECT_EQ(OK, callback.WaitForResult()); 1010 EXPECT_EQ(OK, callback.WaitForResult());
1005 EXPECT_TRUE(handle.is_initialized()); 1011 EXPECT_TRUE(handle.is_initialized());
1006 EXPECT_TRUE(handle.socket()); 1012 EXPECT_TRUE(handle.socket());
1007 1013
1008 handle.Reset(); 1014 handle.Reset();
1009 1015
1010 // Need to run all pending to release the socket back to the pool. 1016 // Need to run all pending to release the socket back to the pool.
1011 base::MessageLoop::current()->RunUntilIdle(); 1017 base::MessageLoop::current()->RunUntilIdle();
1012 1018
1013 // Now we should have 1 idle socket. 1019 // Now we should have 1 idle socket.
1014 EXPECT_EQ(1, pool_.IdleSocketCount()); 1020 EXPECT_EQ(1, pool_.IdleSocketCount());
1015 1021
1016 // After an IP address change, we should have 0 idle sockets. 1022 // After an IP address change, we should have 0 idle sockets.
1017 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 1023 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
1018 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async. 1024 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async.
1019 1025
1020 EXPECT_EQ(0, pool_.IdleSocketCount()); 1026 EXPECT_EQ(0, pool_.IdleSocketCount());
1021 } 1027 }
1022 1028
1023 TEST_F(TransportClientSocketPoolTest, BackupSocketConnect) { 1029 TEST_F(TransportClientSocketPoolTest, BackupSocketConnect) {
1024 // Case 1 tests the first socket stalling, and the backup connecting. 1030 // Case 1 tests the first socket stalling, and the backup connecting.
1025 MockClientSocketFactory::ClientSocketType case1_types[] = { 1031 MockClientSocketFactory::ClientSocketType case1_types[] = {
1026 // The first socket will not connect. 1032 // The first socket will not connect.
1027 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, 1033 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET,
1028 // The second socket will connect more quickly. 1034 // The second socket will connect more quickly.
1029 MockClientSocketFactory::MOCK_CLIENT_SOCKET 1035 MockClientSocketFactory::MOCK_CLIENT_SOCKET};
1030 };
1031 1036
1032 // Case 2 tests the first socket being slow, so that we start the 1037 // Case 2 tests the first socket being slow, so that we start the
1033 // second connect, but the second connect stalls, and we still 1038 // second connect, but the second connect stalls, and we still
1034 // complete the first. 1039 // complete the first.
1035 MockClientSocketFactory::ClientSocketType case2_types[] = { 1040 MockClientSocketFactory::ClientSocketType case2_types[] = {
1036 // The first socket will connect, although delayed. 1041 // The first socket will connect, although delayed.
1037 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, 1042 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET,
1038 // The second socket will not connect. 1043 // The second socket will not connect.
1039 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET 1044 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET};
1040 };
1041 1045
1042 MockClientSocketFactory::ClientSocketType* cases[2] = { 1046 MockClientSocketFactory::ClientSocketType* cases[2] = {case1_types,
1043 case1_types, 1047 case2_types};
1044 case2_types
1045 };
1046 1048
1047 for (size_t index = 0; index < arraysize(cases); ++index) { 1049 for (size_t index = 0; index < arraysize(cases); ++index) {
1048 client_socket_factory_.set_client_socket_types(cases[index], 2); 1050 client_socket_factory_.set_client_socket_types(cases[index], 2);
1049 1051
1050 EXPECT_EQ(0, pool_.IdleSocketCount()); 1052 EXPECT_EQ(0, pool_.IdleSocketCount());
1051 1053
1052 TestCompletionCallback callback; 1054 TestCompletionCallback callback;
1053 ClientSocketHandle handle; 1055 ClientSocketHandle handle;
1054 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 1056 int rv = handle.Init(
1055 BoundNetLog()); 1057 "b", params_, LOW, callback.callback(), &pool_, BoundNetLog());
1056 EXPECT_EQ(ERR_IO_PENDING, rv); 1058 EXPECT_EQ(ERR_IO_PENDING, rv);
1057 EXPECT_FALSE(handle.is_initialized()); 1059 EXPECT_FALSE(handle.is_initialized());
1058 EXPECT_FALSE(handle.socket()); 1060 EXPECT_FALSE(handle.socket());
1059 1061
1060 // Create the first socket, set the timer. 1062 // Create the first socket, set the timer.
1061 base::MessageLoop::current()->RunUntilIdle(); 1063 base::MessageLoop::current()->RunUntilIdle();
1062 1064
1063 // Wait for the backup socket timer to fire. 1065 // Wait for the backup socket timer to fire.
1064 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 1066 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
1065 ClientSocketPool::kMaxConnectRetryIntervalMs + 50)); 1067 ClientSocketPool::kMaxConnectRetryIntervalMs + 50));
(...skipping 20 matching lines...) Expand all
1086 client_socket_factory_.set_client_socket_type( 1088 client_socket_factory_.set_client_socket_type(
1087 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); 1089 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET);
1088 1090
1089 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; 1091 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT };
1090 1092
1091 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { 1093 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) {
1092 EXPECT_EQ(0, pool_.IdleSocketCount()); 1094 EXPECT_EQ(0, pool_.IdleSocketCount());
1093 1095
1094 TestCompletionCallback callback; 1096 TestCompletionCallback callback;
1095 ClientSocketHandle handle; 1097 ClientSocketHandle handle;
1096 int rv = handle.Init("c", params_, LOW, callback.callback(), &pool_, 1098 int rv = handle.Init(
1097 BoundNetLog()); 1099 "c", params_, LOW, callback.callback(), &pool_, BoundNetLog());
1098 EXPECT_EQ(ERR_IO_PENDING, rv); 1100 EXPECT_EQ(ERR_IO_PENDING, rv);
1099 EXPECT_FALSE(handle.is_initialized()); 1101 EXPECT_FALSE(handle.is_initialized());
1100 EXPECT_FALSE(handle.socket()); 1102 EXPECT_FALSE(handle.socket());
1101 1103
1102 // Create the first socket, set the timer. 1104 // Create the first socket, set the timer.
1103 base::MessageLoop::current()->RunUntilIdle(); 1105 base::MessageLoop::current()->RunUntilIdle();
1104 1106
1105 if (index == CANCEL_AFTER_WAIT) { 1107 if (index == CANCEL_AFTER_WAIT) {
1106 // Wait for the backup socket timer to fire. 1108 // Wait for the backup socket timer to fire.
1107 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 1109 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
(...skipping 12 matching lines...) Expand all
1120 // One socket is stalled, the other is active. 1122 // One socket is stalled, the other is active.
1121 EXPECT_EQ(0, pool_.IdleSocketCount()); 1123 EXPECT_EQ(0, pool_.IdleSocketCount());
1122 } 1124 }
1123 } 1125 }
1124 1126
1125 // Test the case where a socket took long enough to start the creation 1127 // Test the case where a socket took long enough to start the creation
1126 // of the backup socket and never completes, and then the backup 1128 // of the backup socket and never completes, and then the backup
1127 // connection fails. 1129 // connection fails.
1128 TEST_F(TransportClientSocketPoolTest, BackupSocketFailAfterStall) { 1130 TEST_F(TransportClientSocketPoolTest, BackupSocketFailAfterStall) {
1129 MockClientSocketFactory::ClientSocketType case_types[] = { 1131 MockClientSocketFactory::ClientSocketType case_types[] = {
1130 // The first socket will not connect. 1132 // The first socket will not connect.
1131 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, 1133 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET,
1132 // The second socket will fail immediately. 1134 // The second socket will fail immediately.
1133 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 1135 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET};
1134 };
1135 1136
1136 client_socket_factory_.set_client_socket_types(case_types, 2); 1137 client_socket_factory_.set_client_socket_types(case_types, 2);
1137 1138
1138 EXPECT_EQ(0, pool_.IdleSocketCount()); 1139 EXPECT_EQ(0, pool_.IdleSocketCount());
1139 1140
1140 TestCompletionCallback callback; 1141 TestCompletionCallback callback;
1141 ClientSocketHandle handle; 1142 ClientSocketHandle handle;
1142 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 1143 int rv = handle.Init(
1143 BoundNetLog()); 1144 "b", params_, LOW, callback.callback(), &pool_, BoundNetLog());
1144 EXPECT_EQ(ERR_IO_PENDING, rv); 1145 EXPECT_EQ(ERR_IO_PENDING, rv);
1145 EXPECT_FALSE(handle.is_initialized()); 1146 EXPECT_FALSE(handle.is_initialized());
1146 EXPECT_FALSE(handle.socket()); 1147 EXPECT_FALSE(handle.socket());
1147 1148
1148 // Create the first socket, set the timer. 1149 // Create the first socket, set the timer.
1149 base::MessageLoop::current()->RunUntilIdle(); 1150 base::MessageLoop::current()->RunUntilIdle();
1150 1151
1151 // Wait for the backup socket timer to fire. 1152 // Wait for the backup socket timer to fire.
1152 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 1153 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
1153 ClientSocketPool::kMaxConnectRetryIntervalMs)); 1154 ClientSocketPool::kMaxConnectRetryIntervalMs));
(...skipping 13 matching lines...) Expand all
1167 1168
1168 // Reset for the next case. 1169 // Reset for the next case.
1169 host_resolver_->set_synchronous_mode(false); 1170 host_resolver_->set_synchronous_mode(false);
1170 } 1171 }
1171 1172
1172 // Test the case where a socket took long enough to start the creation 1173 // Test the case where a socket took long enough to start the creation
1173 // of the backup socket and eventually completes, but the backup socket 1174 // of the backup socket and eventually completes, but the backup socket
1174 // fails. 1175 // fails.
1175 TEST_F(TransportClientSocketPoolTest, BackupSocketFailAfterDelay) { 1176 TEST_F(TransportClientSocketPoolTest, BackupSocketFailAfterDelay) {
1176 MockClientSocketFactory::ClientSocketType case_types[] = { 1177 MockClientSocketFactory::ClientSocketType case_types[] = {
1177 // The first socket will connect, although delayed. 1178 // The first socket will connect, although delayed.
1178 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, 1179 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET,
1179 // The second socket will not connect. 1180 // The second socket will not connect.
1180 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET 1181 MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET};
1181 };
1182 1182
1183 client_socket_factory_.set_client_socket_types(case_types, 2); 1183 client_socket_factory_.set_client_socket_types(case_types, 2);
1184 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5)); 1184 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5));
1185 1185
1186 EXPECT_EQ(0, pool_.IdleSocketCount()); 1186 EXPECT_EQ(0, pool_.IdleSocketCount());
1187 1187
1188 TestCompletionCallback callback; 1188 TestCompletionCallback callback;
1189 ClientSocketHandle handle; 1189 ClientSocketHandle handle;
1190 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, 1190 int rv = handle.Init(
1191 BoundNetLog()); 1191 "b", params_, LOW, callback.callback(), &pool_, BoundNetLog());
1192 EXPECT_EQ(ERR_IO_PENDING, rv); 1192 EXPECT_EQ(ERR_IO_PENDING, rv);
1193 EXPECT_FALSE(handle.is_initialized()); 1193 EXPECT_FALSE(handle.is_initialized());
1194 EXPECT_FALSE(handle.socket()); 1194 EXPECT_FALSE(handle.socket());
1195 1195
1196 // Create the first socket, set the timer. 1196 // Create the first socket, set the timer.
1197 base::MessageLoop::current()->RunUntilIdle(); 1197 base::MessageLoop::current()->RunUntilIdle();
1198 1198
1199 // Wait for the backup socket timer to fire. 1199 // Wait for the backup socket timer to fire.
1200 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( 1200 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(
1201 ClientSocketPool::kMaxConnectRetryIntervalMs)); 1201 ClientSocketPool::kMaxConnectRetryIntervalMs));
(...skipping 20 matching lines...) Expand all
1222 // Create a pool without backup jobs. 1222 // Create a pool without backup jobs.
1223 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); 1223 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false);
1224 TransportClientSocketPool pool(kMaxSockets, 1224 TransportClientSocketPool pool(kMaxSockets,
1225 kMaxSocketsPerGroup, 1225 kMaxSocketsPerGroup,
1226 histograms_.get(), 1226 histograms_.get(),
1227 host_resolver_.get(), 1227 host_resolver_.get(),
1228 &client_socket_factory_, 1228 &client_socket_factory_,
1229 NULL); 1229 NULL);
1230 1230
1231 MockClientSocketFactory::ClientSocketType case_types[] = { 1231 MockClientSocketFactory::ClientSocketType case_types[] = {
1232 // This is the IPv6 socket. 1232 // This is the IPv6 socket.
1233 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET, 1233 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET,
1234 // This is the IPv4 socket. 1234 // This is the IPv4 socket.
1235 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET 1235 MockClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET};
1236 };
1237 1236
1238 client_socket_factory_.set_client_socket_types(case_types, 2); 1237 client_socket_factory_.set_client_socket_types(case_types, 2);
1239 1238
1240 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1239 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1241 host_resolver_->rules() 1240 host_resolver_->rules()->AddIPLiteralRule(
1242 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1241 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1243 1242
1244 TestCompletionCallback callback; 1243 TestCompletionCallback callback;
1245 ClientSocketHandle handle; 1244 ClientSocketHandle handle;
1246 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 1245 int rv =
1247 BoundNetLog()); 1246 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog());
1248 EXPECT_EQ(ERR_IO_PENDING, rv); 1247 EXPECT_EQ(ERR_IO_PENDING, rv);
1249 EXPECT_FALSE(handle.is_initialized()); 1248 EXPECT_FALSE(handle.is_initialized());
1250 EXPECT_FALSE(handle.socket()); 1249 EXPECT_FALSE(handle.socket());
1251 1250
1252 EXPECT_EQ(OK, callback.WaitForResult()); 1251 EXPECT_EQ(OK, callback.WaitForResult());
1253 EXPECT_TRUE(handle.is_initialized()); 1252 EXPECT_TRUE(handle.is_initialized());
1254 EXPECT_TRUE(handle.socket()); 1253 EXPECT_TRUE(handle.socket());
1255 IPEndPoint endpoint; 1254 IPEndPoint endpoint;
1256 handle.socket()->GetLocalAddress(&endpoint); 1255 handle.socket()->GetLocalAddress(&endpoint);
1257 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1256 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
1258 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1257 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1259 } 1258 }
1260 1259
1261 // Test the case of the IPv6 address being slow, thus falling back to trying to 1260 // Test the case of the IPv6 address being slow, thus falling back to trying to
1262 // connect to the IPv4 address, but having the connect to the IPv6 address 1261 // connect to the IPv4 address, but having the connect to the IPv6 address
1263 // finish first. 1262 // finish first.
1264 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) { 1263 TEST_F(TransportClientSocketPoolTest, IPv6FallbackSocketIPv6FinishesFirst) {
1265 // Create a pool without backup jobs. 1264 // Create a pool without backup jobs.
1266 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); 1265 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false);
1267 TransportClientSocketPool pool(kMaxSockets, 1266 TransportClientSocketPool pool(kMaxSockets,
1268 kMaxSocketsPerGroup, 1267 kMaxSocketsPerGroup,
1269 histograms_.get(), 1268 histograms_.get(),
1270 host_resolver_.get(), 1269 host_resolver_.get(),
1271 &client_socket_factory_, 1270 &client_socket_factory_,
1272 NULL); 1271 NULL);
1273 1272
1274 MockClientSocketFactory::ClientSocketType case_types[] = { 1273 MockClientSocketFactory::ClientSocketType case_types[] = {
1275 // This is the IPv6 socket. 1274 // This is the IPv6 socket.
1276 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET, 1275 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET,
1277 // This is the IPv4 socket. 1276 // This is the IPv4 socket.
1278 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET 1277 MockClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET};
1279 };
1280 1278
1281 client_socket_factory_.set_client_socket_types(case_types, 2); 1279 client_socket_factory_.set_client_socket_types(case_types, 2);
1282 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( 1280 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds(
1283 TransportConnectJob::kIPv6FallbackTimerInMs + 50)); 1281 TransportConnectJob::kIPv6FallbackTimerInMs + 50));
1284 1282
1285 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. 1283 // Resolve an AddressList with a IPv6 address first and then a IPv4 address.
1286 host_resolver_->rules() 1284 host_resolver_->rules()->AddIPLiteralRule(
1287 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 1285 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
1288 1286
1289 TestCompletionCallback callback; 1287 TestCompletionCallback callback;
1290 ClientSocketHandle handle; 1288 ClientSocketHandle handle;
1291 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 1289 int rv =
1292 BoundNetLog()); 1290 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog());
1293 EXPECT_EQ(ERR_IO_PENDING, rv); 1291 EXPECT_EQ(ERR_IO_PENDING, rv);
1294 EXPECT_FALSE(handle.is_initialized()); 1292 EXPECT_FALSE(handle.is_initialized());
1295 EXPECT_FALSE(handle.socket()); 1293 EXPECT_FALSE(handle.socket());
1296 1294
1297 EXPECT_EQ(OK, callback.WaitForResult()); 1295 EXPECT_EQ(OK, callback.WaitForResult());
1298 EXPECT_TRUE(handle.is_initialized()); 1296 EXPECT_TRUE(handle.is_initialized());
1299 EXPECT_TRUE(handle.socket()); 1297 EXPECT_TRUE(handle.socket());
1300 IPEndPoint endpoint; 1298 IPEndPoint endpoint;
1301 handle.socket()->GetLocalAddress(&endpoint); 1299 handle.socket()->GetLocalAddress(&endpoint);
1302 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 1300 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
1303 EXPECT_EQ(2, client_socket_factory_.allocation_count()); 1301 EXPECT_EQ(2, client_socket_factory_.allocation_count());
1304 } 1302 }
1305 1303
1306 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) { 1304 TEST_F(TransportClientSocketPoolTest, IPv6NoIPv4AddressesToFallbackTo) {
1307 // Create a pool without backup jobs. 1305 // Create a pool without backup jobs.
1308 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); 1306 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false);
1309 TransportClientSocketPool pool(kMaxSockets, 1307 TransportClientSocketPool pool(kMaxSockets,
1310 kMaxSocketsPerGroup, 1308 kMaxSocketsPerGroup,
1311 histograms_.get(), 1309 histograms_.get(),
1312 host_resolver_.get(), 1310 host_resolver_.get(),
1313 &client_socket_factory_, 1311 &client_socket_factory_,
1314 NULL); 1312 NULL);
1315 1313
1316 client_socket_factory_.set_client_socket_type( 1314 client_socket_factory_.set_client_socket_type(
1317 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1315 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1318 1316
1319 // Resolve an AddressList with only IPv6 addresses. 1317 // Resolve an AddressList with only IPv6 addresses.
1320 host_resolver_->rules() 1318 host_resolver_->rules()->AddIPLiteralRule(
1321 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 1319 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
1322 1320
1323 TestCompletionCallback callback; 1321 TestCompletionCallback callback;
1324 ClientSocketHandle handle; 1322 ClientSocketHandle handle;
1325 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 1323 int rv =
1326 BoundNetLog()); 1324 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog());
1327 EXPECT_EQ(ERR_IO_PENDING, rv); 1325 EXPECT_EQ(ERR_IO_PENDING, rv);
1328 EXPECT_FALSE(handle.is_initialized()); 1326 EXPECT_FALSE(handle.is_initialized());
1329 EXPECT_FALSE(handle.socket()); 1327 EXPECT_FALSE(handle.socket());
1330 1328
1331 EXPECT_EQ(OK, callback.WaitForResult()); 1329 EXPECT_EQ(OK, callback.WaitForResult());
1332 EXPECT_TRUE(handle.is_initialized()); 1330 EXPECT_TRUE(handle.is_initialized());
1333 EXPECT_TRUE(handle.socket()); 1331 EXPECT_TRUE(handle.socket());
1334 IPEndPoint endpoint; 1332 IPEndPoint endpoint;
1335 handle.socket()->GetLocalAddress(&endpoint); 1333 handle.socket()->GetLocalAddress(&endpoint);
1336 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 1334 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
(...skipping 11 matching lines...) Expand all
1348 NULL); 1346 NULL);
1349 1347
1350 client_socket_factory_.set_client_socket_type( 1348 client_socket_factory_.set_client_socket_type(
1351 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 1349 MockClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
1352 1350
1353 // Resolve an AddressList with only IPv4 addresses. 1351 // Resolve an AddressList with only IPv4 addresses.
1354 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 1352 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
1355 1353
1356 TestCompletionCallback callback; 1354 TestCompletionCallback callback;
1357 ClientSocketHandle handle; 1355 ClientSocketHandle handle;
1358 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, 1356 int rv =
1359 BoundNetLog()); 1357 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog());
1360 EXPECT_EQ(ERR_IO_PENDING, rv); 1358 EXPECT_EQ(ERR_IO_PENDING, rv);
1361 EXPECT_FALSE(handle.is_initialized()); 1359 EXPECT_FALSE(handle.is_initialized());
1362 EXPECT_FALSE(handle.socket()); 1360 EXPECT_FALSE(handle.socket());
1363 1361
1364 EXPECT_EQ(OK, callback.WaitForResult()); 1362 EXPECT_EQ(OK, callback.WaitForResult());
1365 EXPECT_TRUE(handle.is_initialized()); 1363 EXPECT_TRUE(handle.is_initialized());
1366 EXPECT_TRUE(handle.socket()); 1364 EXPECT_TRUE(handle.socket());
1367 IPEndPoint endpoint; 1365 IPEndPoint endpoint;
1368 handle.socket()->GetLocalAddress(&endpoint); 1366 handle.socket()->GetLocalAddress(&endpoint);
1369 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1367 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
1370 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 1368 EXPECT_EQ(1, client_socket_factory_.allocation_count());
1371 } 1369 }
1372 1370
1373 } // namespace 1371 } // namespace
1374 1372
1375 } // namespace net 1373 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698