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

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

Issue 1580903002: Convert ignore_limits from a SocketParam to a socket request argument. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: RespectLimits Created 4 years, 10 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
« no previous file with comments | « net/socket/websocket_transport_client_socket_pool.cc ('k') | net/spdy/spdy_session_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/websocket_transport_client_socket_pool.h" 5 #include "net/socket/websocket_transport_client_socket_pool.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 period); 48 period);
49 run_loop.Run(); 49 run_loop.Run();
50 } 50 }
51 51
52 class WebSocketTransportClientSocketPoolTest : public ::testing::Test { 52 class WebSocketTransportClientSocketPoolTest : public ::testing::Test {
53 protected: 53 protected:
54 WebSocketTransportClientSocketPoolTest() 54 WebSocketTransportClientSocketPoolTest()
55 : params_(new TransportSocketParams( 55 : params_(new TransportSocketParams(
56 HostPortPair("www.google.com", 80), 56 HostPortPair("www.google.com", 80),
57 false, 57 false,
58 false,
59 OnHostResolutionCallback(), 58 OnHostResolutionCallback(),
60 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), 59 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)),
61 host_resolver_(new MockHostResolver), 60 host_resolver_(new MockHostResolver),
62 client_socket_factory_(&net_log_), 61 client_socket_factory_(&net_log_),
63 pool_(kMaxSockets, 62 pool_(kMaxSockets,
64 kMaxSocketsPerGroup, 63 kMaxSocketsPerGroup,
65 host_resolver_.get(), 64 host_resolver_.get(),
66 &client_socket_factory_, 65 &client_socket_factory_,
67 NULL) {} 66 NULL) {}
68 67
69 ~WebSocketTransportClientSocketPoolTest() override { 68 ~WebSocketTransportClientSocketPoolTest() override {
70 RunUntilIdle(); 69 RunUntilIdle();
71 // ReleaseAllConnections() calls RunUntilIdle() after releasing each 70 // ReleaseAllConnections() calls RunUntilIdle() after releasing each
72 // connection. 71 // connection.
73 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE); 72 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
74 EXPECT_TRUE(WebSocketEndpointLockManager::GetInstance()->IsEmpty()); 73 EXPECT_TRUE(WebSocketEndpointLockManager::GetInstance()->IsEmpty());
75 } 74 }
76 75
77 static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); } 76 static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); }
78 77
79 int StartRequest(const std::string& group_name, RequestPriority priority) { 78 int StartRequest(const std::string& group_name, RequestPriority priority) {
80 scoped_refptr<TransportSocketParams> params( 79 scoped_refptr<TransportSocketParams> params(
81 new TransportSocketParams( 80 new TransportSocketParams(
82 HostPortPair("www.google.com", 80), 81 HostPortPair("www.google.com", 80),
83 false, 82 false,
84 false,
85 OnHostResolutionCallback(), 83 OnHostResolutionCallback(),
86 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 84 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
87 return test_base_.StartRequestUsingPool( 85 return test_base_.StartRequestUsingPool(
88 &pool_, group_name, priority, params); 86 &pool_, group_name, priority, ClientSocketPool::RespectLimits::ENABLED,
87 params);
89 } 88 }
90 89
91 int GetOrderOfRequest(size_t index) { 90 int GetOrderOfRequest(size_t index) {
92 return test_base_.GetOrderOfRequest(index); 91 return test_base_.GetOrderOfRequest(index);
93 } 92 }
94 93
95 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { 94 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) {
96 return test_base_.ReleaseOneConnection(keep_alive); 95 return test_base_.ReleaseOneConnection(keep_alive);
97 } 96 }
98 97
(...skipping 16 matching lines...) Expand all
115 ClientSocketPoolTest test_base_; 114 ClientSocketPoolTest test_base_;
116 ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_; 115 ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_;
117 116
118 private: 117 private:
119 DISALLOW_COPY_AND_ASSIGN(WebSocketTransportClientSocketPoolTest); 118 DISALLOW_COPY_AND_ASSIGN(WebSocketTransportClientSocketPoolTest);
120 }; 119 };
121 120
122 TEST_F(WebSocketTransportClientSocketPoolTest, Basic) { 121 TEST_F(WebSocketTransportClientSocketPoolTest, Basic) {
123 TestCompletionCallback callback; 122 TestCompletionCallback callback;
124 ClientSocketHandle handle; 123 ClientSocketHandle handle;
125 int rv = handle.Init( 124 int rv =
126 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog()); 125 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
126 callback.callback(), &pool_, BoundNetLog());
127 EXPECT_EQ(ERR_IO_PENDING, rv); 127 EXPECT_EQ(ERR_IO_PENDING, rv);
128 EXPECT_FALSE(handle.is_initialized()); 128 EXPECT_FALSE(handle.is_initialized());
129 EXPECT_FALSE(handle.socket()); 129 EXPECT_FALSE(handle.socket());
130 130
131 EXPECT_EQ(OK, callback.WaitForResult()); 131 EXPECT_EQ(OK, callback.WaitForResult());
132 EXPECT_TRUE(handle.is_initialized()); 132 EXPECT_TRUE(handle.is_initialized());
133 EXPECT_TRUE(handle.socket()); 133 EXPECT_TRUE(handle.socket());
134 TestLoadTimingInfoConnectedNotReused(handle); 134 TestLoadTimingInfoConnectedNotReused(handle);
135 } 135 }
136 136
137 // Make sure that WebSocketTransportConnectJob passes on its priority to its 137 // Make sure that WebSocketTransportConnectJob passes on its priority to its
138 // HostResolver request on Init. 138 // HostResolver request on Init.
139 TEST_F(WebSocketTransportClientSocketPoolTest, SetResolvePriorityOnInit) { 139 TEST_F(WebSocketTransportClientSocketPoolTest, SetResolvePriorityOnInit) {
140 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 140 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
141 RequestPriority priority = static_cast<RequestPriority>(i); 141 RequestPriority priority = static_cast<RequestPriority>(i);
142 TestCompletionCallback callback; 142 TestCompletionCallback callback;
143 ClientSocketHandle handle; 143 ClientSocketHandle handle;
144 EXPECT_EQ(ERR_IO_PENDING, 144 EXPECT_EQ(ERR_IO_PENDING,
145 handle.Init("a", 145 handle.Init("a", params_, priority,
146 params_, 146 ClientSocketPool::RespectLimits::ENABLED,
147 priority, 147 callback.callback(), &pool_, BoundNetLog()));
148 callback.callback(),
149 &pool_,
150 BoundNetLog()));
151 EXPECT_EQ(priority, host_resolver_->last_request_priority()); 148 EXPECT_EQ(priority, host_resolver_->last_request_priority());
152 } 149 }
153 } 150 }
154 151
155 TEST_F(WebSocketTransportClientSocketPoolTest, InitHostResolutionFailure) { 152 TEST_F(WebSocketTransportClientSocketPoolTest, InitHostResolutionFailure) {
156 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); 153 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name");
157 TestCompletionCallback callback; 154 TestCompletionCallback callback;
158 ClientSocketHandle handle; 155 ClientSocketHandle handle;
159 HostPortPair host_port_pair("unresolvable.host.name", 80); 156 HostPortPair host_port_pair("unresolvable.host.name", 80);
160 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 157 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
161 host_port_pair, false, false, OnHostResolutionCallback(), 158 host_port_pair, false, OnHostResolutionCallback(),
162 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 159 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
163 EXPECT_EQ(ERR_IO_PENDING, 160 EXPECT_EQ(ERR_IO_PENDING,
164 handle.Init("a", 161 handle.Init("a", dest, kDefaultPriority,
165 dest, 162 ClientSocketPool::RespectLimits::ENABLED,
166 kDefaultPriority, 163 callback.callback(), &pool_, BoundNetLog()));
167 callback.callback(),
168 &pool_,
169 BoundNetLog()));
170 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); 164 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult());
171 } 165 }
172 166
173 TEST_F(WebSocketTransportClientSocketPoolTest, InitConnectionFailure) { 167 TEST_F(WebSocketTransportClientSocketPoolTest, InitConnectionFailure) {
174 client_socket_factory_.set_default_client_socket_type( 168 client_socket_factory_.set_default_client_socket_type(
175 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); 169 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET);
176 TestCompletionCallback callback; 170 TestCompletionCallback callback;
177 ClientSocketHandle handle; 171 ClientSocketHandle handle;
178 EXPECT_EQ(ERR_IO_PENDING, 172 EXPECT_EQ(ERR_IO_PENDING,
179 handle.Init("a", 173 handle.Init("a", params_, kDefaultPriority,
180 params_, 174 ClientSocketPool::RespectLimits::ENABLED,
181 kDefaultPriority, 175 callback.callback(), &pool_, BoundNetLog()));
182 callback.callback(),
183 &pool_,
184 BoundNetLog()));
185 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 176 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
186 177
187 // Make the host resolutions complete synchronously this time. 178 // Make the host resolutions complete synchronously this time.
188 host_resolver_->set_synchronous_mode(true); 179 host_resolver_->set_synchronous_mode(true);
189 EXPECT_EQ(ERR_CONNECTION_FAILED, 180 EXPECT_EQ(ERR_CONNECTION_FAILED,
190 handle.Init("a", 181 handle.Init("a", params_, kDefaultPriority,
191 params_, 182 ClientSocketPool::RespectLimits::ENABLED,
192 kDefaultPriority, 183 callback.callback(), &pool_, BoundNetLog()));
193 callback.callback(),
194 &pool_,
195 BoundNetLog()));
196 } 184 }
197 185
198 TEST_F(WebSocketTransportClientSocketPoolTest, PendingRequestsFinishFifo) { 186 TEST_F(WebSocketTransportClientSocketPoolTest, PendingRequestsFinishFifo) {
199 // First request finishes asynchronously. 187 // First request finishes asynchronously.
200 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 188 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
201 EXPECT_EQ(OK, request(0)->WaitForResult()); 189 EXPECT_EQ(OK, request(0)->WaitForResult());
202 190
203 // Make all subsequent host resolutions complete synchronously. 191 // Make all subsequent host resolutions complete synchronously.
204 host_resolver_->set_synchronous_mode(true); 192 host_resolver_->set_synchronous_mode(true);
205 193
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 EXPECT_EQ(6U, completion_count()); 248 EXPECT_EQ(6U, completion_count());
261 } 249 }
262 250
263 // This test will start up a RequestSocket() and then immediately Cancel() it. 251 // This test will start up a RequestSocket() and then immediately Cancel() it.
264 // The pending host resolution will eventually complete, and destroy the 252 // The pending host resolution will eventually complete, and destroy the
265 // ClientSocketPool which will crash if the group was not cleared properly. 253 // ClientSocketPool which will crash if the group was not cleared properly.
266 TEST_F(WebSocketTransportClientSocketPoolTest, CancelRequestClearGroup) { 254 TEST_F(WebSocketTransportClientSocketPoolTest, CancelRequestClearGroup) {
267 TestCompletionCallback callback; 255 TestCompletionCallback callback;
268 ClientSocketHandle handle; 256 ClientSocketHandle handle;
269 EXPECT_EQ(ERR_IO_PENDING, 257 EXPECT_EQ(ERR_IO_PENDING,
270 handle.Init("a", 258 handle.Init("a", params_, kDefaultPriority,
271 params_, 259 ClientSocketPool::RespectLimits::ENABLED,
272 kDefaultPriority, 260 callback.callback(), &pool_, BoundNetLog()));
273 callback.callback(),
274 &pool_,
275 BoundNetLog()));
276 handle.Reset(); 261 handle.Reset();
277 } 262 }
278 263
279 TEST_F(WebSocketTransportClientSocketPoolTest, TwoRequestsCancelOne) { 264 TEST_F(WebSocketTransportClientSocketPoolTest, TwoRequestsCancelOne) {
280 ClientSocketHandle handle; 265 ClientSocketHandle handle;
281 TestCompletionCallback callback; 266 TestCompletionCallback callback;
282 ClientSocketHandle handle2; 267 ClientSocketHandle handle2;
283 TestCompletionCallback callback2; 268 TestCompletionCallback callback2;
284 269
285 EXPECT_EQ(ERR_IO_PENDING, 270 EXPECT_EQ(ERR_IO_PENDING,
286 handle.Init("a", 271 handle.Init("a", params_, kDefaultPriority,
287 params_, 272 ClientSocketPool::RespectLimits::ENABLED,
288 kDefaultPriority, 273 callback.callback(), &pool_, BoundNetLog()));
289 callback.callback(),
290 &pool_,
291 BoundNetLog()));
292 EXPECT_EQ(ERR_IO_PENDING, 274 EXPECT_EQ(ERR_IO_PENDING,
293 handle2.Init("a", 275 handle2.Init("a", params_, kDefaultPriority,
294 params_, 276 ClientSocketPool::RespectLimits::ENABLED,
295 kDefaultPriority, 277 callback2.callback(), &pool_, BoundNetLog()));
296 callback2.callback(),
297 &pool_,
298 BoundNetLog()));
299 278
300 handle.Reset(); 279 handle.Reset();
301 280
302 EXPECT_EQ(OK, callback2.WaitForResult()); 281 EXPECT_EQ(OK, callback2.WaitForResult());
303 handle2.Reset(); 282 handle2.Reset();
304 } 283 }
305 284
306 TEST_F(WebSocketTransportClientSocketPoolTest, ConnectCancelConnect) { 285 TEST_F(WebSocketTransportClientSocketPoolTest, ConnectCancelConnect) {
307 client_socket_factory_.set_default_client_socket_type( 286 client_socket_factory_.set_default_client_socket_type(
308 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); 287 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET);
309 ClientSocketHandle handle; 288 ClientSocketHandle handle;
310 TestCompletionCallback callback; 289 TestCompletionCallback callback;
311 EXPECT_EQ(ERR_IO_PENDING, 290 EXPECT_EQ(ERR_IO_PENDING,
312 handle.Init("a", 291 handle.Init("a", params_, kDefaultPriority,
313 params_, 292 ClientSocketPool::RespectLimits::ENABLED,
314 kDefaultPriority, 293 callback.callback(), &pool_, BoundNetLog()));
315 callback.callback(),
316 &pool_,
317 BoundNetLog()));
318 294
319 handle.Reset(); 295 handle.Reset();
320 296
321 TestCompletionCallback callback2; 297 TestCompletionCallback callback2;
322 EXPECT_EQ(ERR_IO_PENDING, 298 EXPECT_EQ(ERR_IO_PENDING,
323 handle.Init("a", 299 handle.Init("a", params_, kDefaultPriority,
324 params_, 300 ClientSocketPool::RespectLimits::ENABLED,
325 kDefaultPriority, 301 callback2.callback(), &pool_, BoundNetLog()));
326 callback2.callback(),
327 &pool_,
328 BoundNetLog()));
329 302
330 host_resolver_->set_synchronous_mode(true); 303 host_resolver_->set_synchronous_mode(true);
331 // At this point, handle has two ConnectingSockets out for it. Due to the 304 // At this point, handle has two ConnectingSockets out for it. Due to the
332 // setting the mock resolver into synchronous mode, the host resolution for 305 // setting the mock resolver into synchronous mode, the host resolution for
333 // both will return in the same loop of the MessageLoop. The client socket 306 // both will return in the same loop of the MessageLoop. The client socket
334 // is a pending socket, so the Connect() will asynchronously complete on the 307 // is a pending socket, so the Connect() will asynchronously complete on the
335 // next loop of the MessageLoop. That means that the first 308 // next loop of the MessageLoop. That means that the first
336 // ConnectingSocket will enter OnIOComplete, and then the second one will. 309 // ConnectingSocket will enter OnIOComplete, and then the second one will.
337 // If the first one is not cancelled, it will advance the load state, and 310 // If the first one is not cancelled, it will advance the load state, and
338 // then the second one will crash. 311 // then the second one will crash.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 WebSocketTransportClientSocketPool* pool, 361 WebSocketTransportClientSocketPool* pool,
389 const CompletionCallback& nested_callback, 362 const CompletionCallback& nested_callback,
390 int first_request_result) { 363 int first_request_result) {
391 EXPECT_EQ(OK, first_request_result); 364 EXPECT_EQ(OK, first_request_result);
392 365
393 // Don't allow reuse of the socket. Disconnect it and then release it. 366 // Don't allow reuse of the socket. Disconnect it and then release it.
394 handle->socket()->Disconnect(); 367 handle->socket()->Disconnect();
395 handle->Reset(); 368 handle->Reset();
396 369
397 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 370 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
398 HostPortPair("www.google.com", 80), false, false, 371 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
399 OnHostResolutionCallback(),
400 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 372 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
401 int rv = 373 int rv =
402 handle->Init("a", dest, LOWEST, nested_callback, pool, BoundNetLog()); 374 handle->Init("a", dest, LOWEST, ClientSocketPool::RespectLimits::ENABLED,
375 nested_callback, pool, BoundNetLog());
403 EXPECT_EQ(ERR_IO_PENDING, rv); 376 EXPECT_EQ(ERR_IO_PENDING, rv);
404 if (ERR_IO_PENDING != rv) 377 if (ERR_IO_PENDING != rv)
405 nested_callback.Run(rv); 378 nested_callback.Run(rv);
406 } 379 }
407 380
408 // Tests the case where a second socket is requested in a completion callback, 381 // Tests the case where a second socket is requested in a completion callback,
409 // and the second socket connects asynchronously. Reuses the same 382 // and the second socket connects asynchronously. Reuses the same
410 // ClientSocketHandle for the second socket, after disconnecting the first. 383 // ClientSocketHandle for the second socket, after disconnecting the first.
411 TEST_F(WebSocketTransportClientSocketPoolTest, RequestTwice) { 384 TEST_F(WebSocketTransportClientSocketPoolTest, RequestTwice) {
412 ClientSocketHandle handle; 385 ClientSocketHandle handle;
413 scoped_refptr<TransportSocketParams> dest( 386 scoped_refptr<TransportSocketParams> dest(
414 new TransportSocketParams( 387 new TransportSocketParams(
415 HostPortPair("www.google.com", 80), 388 HostPortPair("www.google.com", 80),
416 false, 389 false,
417 false,
418 OnHostResolutionCallback(), 390 OnHostResolutionCallback(),
419 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 391 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
420 TestCompletionCallback second_result_callback; 392 TestCompletionCallback second_result_callback;
421 int rv = handle.Init("a", dest, LOWEST, 393 int rv =
422 base::Bind(&RequestSocketOnComplete, &handle, &pool_, 394 handle.Init("a", dest, LOWEST, ClientSocketPool::RespectLimits::ENABLED,
423 second_result_callback.callback()), 395 base::Bind(&RequestSocketOnComplete, &handle, &pool_,
424 &pool_, BoundNetLog()); 396 second_result_callback.callback()),
397 &pool_, BoundNetLog());
425 ASSERT_EQ(ERR_IO_PENDING, rv); 398 ASSERT_EQ(ERR_IO_PENDING, rv);
426 EXPECT_EQ(OK, second_result_callback.WaitForResult()); 399 EXPECT_EQ(OK, second_result_callback.WaitForResult());
427 400
428 handle.Reset(); 401 handle.Reset();
429 } 402 }
430 403
431 // Make sure that pending requests get serviced after active requests get 404 // Make sure that pending requests get serviced after active requests get
432 // cancelled. 405 // cancelled.
433 TEST_F(WebSocketTransportClientSocketPoolTest, 406 TEST_F(WebSocketTransportClientSocketPoolTest,
434 CancelActiveRequestWithPendingRequests) { 407 CancelActiveRequestWithPendingRequests) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 EXPECT_FALSE(request(1)->handle()->is_initialized()); 458 EXPECT_FALSE(request(1)->handle()->is_initialized());
486 request(0)->handle()->Reset(); 459 request(0)->handle()->Reset();
487 RunUntilIdle(); 460 RunUntilIdle();
488 EXPECT_TRUE(request(1)->handle()->is_initialized()); 461 EXPECT_TRUE(request(1)->handle()->is_initialized());
489 } 462 }
490 463
491 // The lock on the endpoint is released when a ClientSocketHandle is deleted. 464 // The lock on the endpoint is released when a ClientSocketHandle is deleted.
492 TEST_F(WebSocketTransportClientSocketPoolTest, LockReleasedOnHandleDelete) { 465 TEST_F(WebSocketTransportClientSocketPoolTest, LockReleasedOnHandleDelete) {
493 TestCompletionCallback callback; 466 TestCompletionCallback callback;
494 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle); 467 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle);
495 int rv = handle->Init( 468 int rv =
496 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog()); 469 handle->Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
470 callback.callback(), &pool_, BoundNetLog());
497 EXPECT_EQ(ERR_IO_PENDING, rv); 471 EXPECT_EQ(ERR_IO_PENDING, rv);
498 472
499 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 473 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
500 EXPECT_EQ(OK, callback.WaitForResult()); 474 EXPECT_EQ(OK, callback.WaitForResult());
501 EXPECT_FALSE(request(0)->handle()->is_initialized()); 475 EXPECT_FALSE(request(0)->handle()->is_initialized());
502 handle.reset(); 476 handle.reset();
503 RunUntilIdle(); 477 RunUntilIdle();
504 EXPECT_TRUE(request(0)->handle()->is_initialized()); 478 EXPECT_TRUE(request(0)->handle()->is_initialized());
505 } 479 }
506 480
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 527
554 client_socket_factory_.set_client_socket_types(case_types, 2); 528 client_socket_factory_.set_client_socket_types(case_types, 2);
555 529
556 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. 530 // Resolve an AddressList with an IPv6 address first and then an IPv4 address.
557 host_resolver_->rules()->AddIPLiteralRule( 531 host_resolver_->rules()->AddIPLiteralRule(
558 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 532 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
559 533
560 TestCompletionCallback callback; 534 TestCompletionCallback callback;
561 ClientSocketHandle handle; 535 ClientSocketHandle handle;
562 int rv = 536 int rv =
563 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 537 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
538 callback.callback(), &pool, BoundNetLog());
564 EXPECT_EQ(ERR_IO_PENDING, rv); 539 EXPECT_EQ(ERR_IO_PENDING, rv);
565 EXPECT_FALSE(handle.is_initialized()); 540 EXPECT_FALSE(handle.is_initialized());
566 EXPECT_FALSE(handle.socket()); 541 EXPECT_FALSE(handle.socket());
567 542
568 EXPECT_EQ(OK, callback.WaitForResult()); 543 EXPECT_EQ(OK, callback.WaitForResult());
569 EXPECT_TRUE(handle.is_initialized()); 544 EXPECT_TRUE(handle.is_initialized());
570 EXPECT_TRUE(handle.socket()); 545 EXPECT_TRUE(handle.socket());
571 IPEndPoint endpoint; 546 IPEndPoint endpoint;
572 handle.socket()->GetLocalAddress(&endpoint); 547 handle.socket()->GetLocalAddress(&endpoint);
573 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 548 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 21 matching lines...) Expand all
595 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( 570 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds(
596 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); 571 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50));
597 572
598 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. 573 // Resolve an AddressList with an IPv6 address first and then an IPv4 address.
599 host_resolver_->rules()->AddIPLiteralRule( 574 host_resolver_->rules()->AddIPLiteralRule(
600 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 575 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
601 576
602 TestCompletionCallback callback; 577 TestCompletionCallback callback;
603 ClientSocketHandle handle; 578 ClientSocketHandle handle;
604 int rv = 579 int rv =
605 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 580 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
581 callback.callback(), &pool, BoundNetLog());
606 EXPECT_EQ(ERR_IO_PENDING, rv); 582 EXPECT_EQ(ERR_IO_PENDING, rv);
607 EXPECT_FALSE(handle.is_initialized()); 583 EXPECT_FALSE(handle.is_initialized());
608 EXPECT_FALSE(handle.socket()); 584 EXPECT_FALSE(handle.socket());
609 585
610 EXPECT_EQ(OK, callback.WaitForResult()); 586 EXPECT_EQ(OK, callback.WaitForResult());
611 EXPECT_TRUE(handle.is_initialized()); 587 EXPECT_TRUE(handle.is_initialized());
612 EXPECT_TRUE(handle.socket()); 588 EXPECT_TRUE(handle.socket());
613 IPEndPoint endpoint; 589 IPEndPoint endpoint;
614 handle.socket()->GetLocalAddress(&endpoint); 590 handle.socket()->GetLocalAddress(&endpoint);
615 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 591 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
(...skipping 11 matching lines...) Expand all
627 client_socket_factory_.set_default_client_socket_type( 603 client_socket_factory_.set_default_client_socket_type(
628 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 604 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
629 605
630 // Resolve an AddressList with only IPv6 addresses. 606 // Resolve an AddressList with only IPv6 addresses.
631 host_resolver_->rules()->AddIPLiteralRule( 607 host_resolver_->rules()->AddIPLiteralRule(
632 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 608 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
633 609
634 TestCompletionCallback callback; 610 TestCompletionCallback callback;
635 ClientSocketHandle handle; 611 ClientSocketHandle handle;
636 int rv = 612 int rv =
637 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 613 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
614 callback.callback(), &pool, BoundNetLog());
638 EXPECT_EQ(ERR_IO_PENDING, rv); 615 EXPECT_EQ(ERR_IO_PENDING, rv);
639 EXPECT_FALSE(handle.is_initialized()); 616 EXPECT_FALSE(handle.is_initialized());
640 EXPECT_FALSE(handle.socket()); 617 EXPECT_FALSE(handle.socket());
641 618
642 EXPECT_EQ(OK, callback.WaitForResult()); 619 EXPECT_EQ(OK, callback.WaitForResult());
643 EXPECT_TRUE(handle.is_initialized()); 620 EXPECT_TRUE(handle.is_initialized());
644 EXPECT_TRUE(handle.socket()); 621 EXPECT_TRUE(handle.socket());
645 IPEndPoint endpoint; 622 IPEndPoint endpoint;
646 handle.socket()->GetLocalAddress(&endpoint); 623 handle.socket()->GetLocalAddress(&endpoint);
647 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 624 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
648 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 625 EXPECT_EQ(1, client_socket_factory_.allocation_count());
649 } 626 }
650 627
651 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { 628 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) {
652 WebSocketTransportClientSocketPool pool(kMaxSockets, 629 WebSocketTransportClientSocketPool pool(kMaxSockets,
653 kMaxSocketsPerGroup, 630 kMaxSocketsPerGroup,
654 host_resolver_.get(), 631 host_resolver_.get(),
655 &client_socket_factory_, 632 &client_socket_factory_,
656 NULL); 633 NULL);
657 634
658 client_socket_factory_.set_default_client_socket_type( 635 client_socket_factory_.set_default_client_socket_type(
659 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 636 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
660 637
661 // Resolve an AddressList with only IPv4 addresses. 638 // Resolve an AddressList with only IPv4 addresses.
662 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 639 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
663 640
664 TestCompletionCallback callback; 641 TestCompletionCallback callback;
665 ClientSocketHandle handle; 642 ClientSocketHandle handle;
666 int rv = 643 int rv =
667 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 644 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
645 callback.callback(), &pool, BoundNetLog());
668 EXPECT_EQ(ERR_IO_PENDING, rv); 646 EXPECT_EQ(ERR_IO_PENDING, rv);
669 EXPECT_FALSE(handle.is_initialized()); 647 EXPECT_FALSE(handle.is_initialized());
670 EXPECT_FALSE(handle.socket()); 648 EXPECT_FALSE(handle.socket());
671 649
672 EXPECT_EQ(OK, callback.WaitForResult()); 650 EXPECT_EQ(OK, callback.WaitForResult());
673 EXPECT_TRUE(handle.is_initialized()); 651 EXPECT_TRUE(handle.is_initialized());
674 EXPECT_TRUE(handle.socket()); 652 EXPECT_TRUE(handle.socket());
675 IPEndPoint endpoint; 653 IPEndPoint endpoint;
676 handle.socket()->GetLocalAddress(&endpoint); 654 handle.socket()->GetLocalAddress(&endpoint);
677 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 655 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 20 matching lines...) Expand all
698 client_socket_factory_.set_client_socket_types(case_types, 676 client_socket_factory_.set_client_socket_types(case_types,
699 arraysize(case_types)); 677 arraysize(case_types));
700 678
701 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address. 679 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address.
702 host_resolver_->rules()->AddIPLiteralRule( 680 host_resolver_->rules()->AddIPLiteralRule(
703 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string()); 681 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string());
704 host_resolver_->set_synchronous_mode(true); 682 host_resolver_->set_synchronous_mode(true);
705 TestCompletionCallback callback; 683 TestCompletionCallback callback;
706 ClientSocketHandle handle; 684 ClientSocketHandle handle;
707 int rv = 685 int rv =
708 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 686 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
687 callback.callback(), &pool, BoundNetLog());
709 EXPECT_EQ(OK, rv); 688 EXPECT_EQ(OK, rv);
710 ASSERT_TRUE(handle.socket()); 689 ASSERT_TRUE(handle.socket());
711 690
712 IPEndPoint endpoint; 691 IPEndPoint endpoint;
713 handle.socket()->GetPeerAddress(&endpoint); 692 handle.socket()->GetPeerAddress(&endpoint);
714 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); 693 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort());
715 } 694 }
716 695
717 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4 696 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4
718 // connections proceed immediately. 697 // connections proceed immediately.
(...skipping 15 matching lines...) Expand all
734 client_socket_factory_.set_client_socket_types(case_types, 713 client_socket_factory_.set_client_socket_types(case_types,
735 arraysize(case_types)); 714 arraysize(case_types));
736 715
737 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address. 716 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address.
738 host_resolver_->rules()->AddIPLiteralRule( 717 host_resolver_->rules()->AddIPLiteralRule(
739 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string()); 718 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string());
740 719
741 TestCompletionCallback callback; 720 TestCompletionCallback callback;
742 ClientSocketHandle handle; 721 ClientSocketHandle handle;
743 int rv = 722 int rv =
744 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 723 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
724 callback.callback(), &pool, BoundNetLog());
745 EXPECT_EQ(ERR_IO_PENDING, rv); 725 EXPECT_EQ(ERR_IO_PENDING, rv);
746 EXPECT_FALSE(handle.socket()); 726 EXPECT_FALSE(handle.socket());
747 727
748 base::TimeTicks start(base::TimeTicks::Now()); 728 base::TimeTicks start(base::TimeTicks::Now());
749 EXPECT_EQ(OK, callback.WaitForResult()); 729 EXPECT_EQ(OK, callback.WaitForResult());
750 EXPECT_LT(base::TimeTicks::Now() - start, 730 EXPECT_LT(base::TimeTicks::Now() - start,
751 base::TimeDelta::FromMilliseconds( 731 base::TimeDelta::FromMilliseconds(
752 TransportConnectJobHelper::kIPv6FallbackTimerInMs)); 732 TransportConnectJobHelper::kIPv6FallbackTimerInMs));
753 ASSERT_TRUE(handle.socket()); 733 ASSERT_TRUE(handle.socket());
754 734
(...skipping 15 matching lines...) Expand all
770 client_socket_factory_.set_default_client_socket_type( 750 client_socket_factory_.set_default_client_socket_type(
771 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET); 751 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET);
772 752
773 // Resolve an AddressList with an IPv6 addresses and an IPv4 address. 753 // Resolve an AddressList with an IPv6 addresses and an IPv4 address.
774 host_resolver_->rules()->AddIPLiteralRule( 754 host_resolver_->rules()->AddIPLiteralRule(
775 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 755 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
776 756
777 TestCompletionCallback callback; 757 TestCompletionCallback callback;
778 ClientSocketHandle handle; 758 ClientSocketHandle handle;
779 int rv = 759 int rv =
780 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 760 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
761 callback.callback(), &pool, BoundNetLog());
781 EXPECT_EQ(ERR_IO_PENDING, rv); 762 EXPECT_EQ(ERR_IO_PENDING, rv);
782 ASSERT_FALSE(handle.socket()); 763 ASSERT_FALSE(handle.socket());
783 764
784 base::Closure ipv6_connect_trigger = 765 base::Closure ipv6_connect_trigger =
785 client_socket_factory_.WaitForTriggerableSocketCreation(); 766 client_socket_factory_.WaitForTriggerableSocketCreation();
786 base::Closure ipv4_connect_trigger = 767 base::Closure ipv4_connect_trigger =
787 client_socket_factory_.WaitForTriggerableSocketCreation(); 768 client_socket_factory_.WaitForTriggerableSocketCreation();
788 769
789 ipv4_connect_trigger.Run(); 770 ipv4_connect_trigger.Run();
790 ipv6_connect_trigger.Run(); 771 ipv6_connect_trigger.Run();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 // After 100ms: Connect to 1:abcd::3:4:ff times out 803 // After 100ms: Connect to 1:abcd::3:4:ff times out
823 // After 200ms: Connect to 2:abcd::3:4:ff times out 804 // After 200ms: Connect to 2:abcd::3:4:ff times out
824 // After 300ms: Connect to 3:abcd::3:4:ff times out, IPv4 fallback starts 805 // After 300ms: Connect to 3:abcd::3:4:ff times out, IPv4 fallback starts
825 // After 400ms: Connect to 4:abcd::3:4:ff and 1.1.1.1 time out 806 // After 400ms: Connect to 4:abcd::3:4:ff and 1.1.1.1 time out
826 // After 500ms: Connect to 2.2.2.2 times out 807 // After 500ms: Connect to 2.2.2.2 times out
827 808
828 TestCompletionCallback callback; 809 TestCompletionCallback callback;
829 ClientSocketHandle handle; 810 ClientSocketHandle handle;
830 base::TimeTicks start(base::TimeTicks::Now()); 811 base::TimeTicks start(base::TimeTicks::Now());
831 int rv = 812 int rv =
832 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 813 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
814 callback.callback(), &pool, BoundNetLog());
833 EXPECT_EQ(ERR_IO_PENDING, rv); 815 EXPECT_EQ(ERR_IO_PENDING, rv);
834 816
835 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 817 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
836 818
837 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5); 819 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5);
838 } 820 }
839 821
840 // Global timeout for all connects applies. This test is disabled by default 822 // Global timeout for all connects applies. This test is disabled by default
841 // because it takes 4 minutes. Run with --gtest_also_run_disabled_tests if you 823 // because it takes 4 minutes. Run with --gtest_also_run_disabled_tests if you
842 // want to run it. 824 // want to run it.
(...skipping 16 matching lines...) Expand all
859 "3:abcd::3:4:ff,4:abcd::3:4:ff," 841 "3:abcd::3:4:ff,4:abcd::3:4:ff,"
860 "5:abcd::3:4:ff,6:abcd::3:4:ff," 842 "5:abcd::3:4:ff,6:abcd::3:4:ff,"
861 "1.1.1.1,2.2.2.2,3.3.3.3," 843 "1.1.1.1,2.2.2.2,3.3.3.3,"
862 "4.4.4.4,5.5.5.5,6.6.6.6", 844 "4.4.4.4,5.5.5.5,6.6.6.6",
863 std::string()); 845 std::string());
864 846
865 TestCompletionCallback callback; 847 TestCompletionCallback callback;
866 ClientSocketHandle handle; 848 ClientSocketHandle handle;
867 849
868 int rv = 850 int rv =
869 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 851 handle.Init("a", params_, LOW, ClientSocketPool::RespectLimits::ENABLED,
852 callback.callback(), &pool, BoundNetLog());
870 EXPECT_EQ(ERR_IO_PENDING, rv); 853 EXPECT_EQ(ERR_IO_PENDING, rv);
871 854
872 EXPECT_EQ(ERR_TIMED_OUT, callback.WaitForResult()); 855 EXPECT_EQ(ERR_TIMED_OUT, callback.WaitForResult());
873 } 856 }
874 857
875 TEST_F(WebSocketTransportClientSocketPoolTest, MaxSocketsEnforced) { 858 TEST_F(WebSocketTransportClientSocketPoolTest, MaxSocketsEnforced) {
876 host_resolver_->set_synchronous_mode(true); 859 host_resolver_->set_synchronous_mode(true);
877 for (int i = 0; i < kMaxSockets; ++i) { 860 for (int i = 0; i < kMaxSockets; ++i) {
878 ASSERT_EQ(OK, StartRequest("a", kDefaultPriority)); 861 ASSERT_EQ(OK, StartRequest("a", kDefaultPriority));
879 WebSocketTransportClientSocketPool::UnlockEndpoint(request(i)->handle()); 862 WebSocketTransportClientSocketPool::UnlockEndpoint(request(i)->handle());
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 EXPECT_EQ(OK, request(1)->WaitForResult()); 1095 EXPECT_EQ(OK, request(1)->WaitForResult());
1113 // Third socket should still be waiting for endpoint. 1096 // Third socket should still be waiting for endpoint.
1114 ASSERT_FALSE(request(2)->handle()->is_initialized()); 1097 ASSERT_FALSE(request(2)->handle()->is_initialized());
1115 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, 1098 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET,
1116 request(2)->handle()->GetLoadState()); 1099 request(2)->handle()->GetLoadState());
1117 } 1100 }
1118 1101
1119 } // namespace 1102 } // namespace
1120 1103
1121 } // namespace net 1104 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/websocket_transport_client_socket_pool.cc ('k') | net/spdy/spdy_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698