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

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: merge Created 4 years, 11 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
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(&pool_, group_name, priority, false,
88 &pool_, group_name, priority, params); 86 params);
89 } 87 }
90 88
91 int GetOrderOfRequest(size_t index) { 89 int GetOrderOfRequest(size_t index) {
92 return test_base_.GetOrderOfRequest(index); 90 return test_base_.GetOrderOfRequest(index);
93 } 91 }
94 92
95 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { 93 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) {
96 return test_base_.ReleaseOneConnection(keep_alive); 94 return test_base_.ReleaseOneConnection(keep_alive);
97 } 95 }
98 96
(...skipping 16 matching lines...) Expand all
115 ClientSocketPoolTest test_base_; 113 ClientSocketPoolTest test_base_;
116 ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_; 114 ScopedWebSocketEndpointZeroUnlockDelay zero_unlock_delay_;
117 115
118 private: 116 private:
119 DISALLOW_COPY_AND_ASSIGN(WebSocketTransportClientSocketPoolTest); 117 DISALLOW_COPY_AND_ASSIGN(WebSocketTransportClientSocketPoolTest);
120 }; 118 };
121 119
122 TEST_F(WebSocketTransportClientSocketPoolTest, Basic) { 120 TEST_F(WebSocketTransportClientSocketPoolTest, Basic) {
123 TestCompletionCallback callback; 121 TestCompletionCallback callback;
124 ClientSocketHandle handle; 122 ClientSocketHandle handle;
125 int rv = handle.Init( 123 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_,
126 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog()); 124 BoundNetLog());
127 EXPECT_EQ(ERR_IO_PENDING, rv); 125 EXPECT_EQ(ERR_IO_PENDING, rv);
128 EXPECT_FALSE(handle.is_initialized()); 126 EXPECT_FALSE(handle.is_initialized());
129 EXPECT_FALSE(handle.socket()); 127 EXPECT_FALSE(handle.socket());
130 128
131 EXPECT_EQ(OK, callback.WaitForResult()); 129 EXPECT_EQ(OK, callback.WaitForResult());
132 EXPECT_TRUE(handle.is_initialized()); 130 EXPECT_TRUE(handle.is_initialized());
133 EXPECT_TRUE(handle.socket()); 131 EXPECT_TRUE(handle.socket());
134 TestLoadTimingInfoConnectedNotReused(handle); 132 TestLoadTimingInfoConnectedNotReused(handle);
135 } 133 }
136 134
137 // Make sure that WebSocketTransportConnectJob passes on its priority to its 135 // Make sure that WebSocketTransportConnectJob passes on its priority to its
138 // HostResolver request on Init. 136 // HostResolver request on Init.
139 TEST_F(WebSocketTransportClientSocketPoolTest, SetResolvePriorityOnInit) { 137 TEST_F(WebSocketTransportClientSocketPoolTest, SetResolvePriorityOnInit) {
140 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { 138 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
141 RequestPriority priority = static_cast<RequestPriority>(i); 139 RequestPriority priority = static_cast<RequestPriority>(i);
142 TestCompletionCallback callback; 140 TestCompletionCallback callback;
143 ClientSocketHandle handle; 141 ClientSocketHandle handle;
144 EXPECT_EQ(ERR_IO_PENDING, 142 EXPECT_EQ(ERR_IO_PENDING,
145 handle.Init("a", 143 handle.Init("a", params_, priority, false, callback.callback(),
146 params_, 144 &pool_, BoundNetLog()));
147 priority,
148 callback.callback(),
149 &pool_,
150 BoundNetLog()));
151 EXPECT_EQ(priority, host_resolver_->last_request_priority()); 145 EXPECT_EQ(priority, host_resolver_->last_request_priority());
152 } 146 }
153 } 147 }
154 148
155 TEST_F(WebSocketTransportClientSocketPoolTest, InitHostResolutionFailure) { 149 TEST_F(WebSocketTransportClientSocketPoolTest, InitHostResolutionFailure) {
156 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); 150 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name");
157 TestCompletionCallback callback; 151 TestCompletionCallback callback;
158 ClientSocketHandle handle; 152 ClientSocketHandle handle;
159 HostPortPair host_port_pair("unresolvable.host.name", 80); 153 HostPortPair host_port_pair("unresolvable.host.name", 80);
160 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 154 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
161 host_port_pair, false, false, OnHostResolutionCallback(), 155 host_port_pair, false, OnHostResolutionCallback(),
162 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 156 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
163 EXPECT_EQ(ERR_IO_PENDING, 157 EXPECT_EQ(ERR_IO_PENDING,
164 handle.Init("a", 158 handle.Init("a", dest, kDefaultPriority, false, callback.callback(),
165 dest, 159 &pool_, BoundNetLog()));
166 kDefaultPriority,
167 callback.callback(),
168 &pool_,
169 BoundNetLog()));
170 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); 160 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult());
171 } 161 }
172 162
173 TEST_F(WebSocketTransportClientSocketPoolTest, InitConnectionFailure) { 163 TEST_F(WebSocketTransportClientSocketPoolTest, InitConnectionFailure) {
174 client_socket_factory_.set_default_client_socket_type( 164 client_socket_factory_.set_default_client_socket_type(
175 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); 165 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET);
176 TestCompletionCallback callback; 166 TestCompletionCallback callback;
177 ClientSocketHandle handle; 167 ClientSocketHandle handle;
178 EXPECT_EQ(ERR_IO_PENDING, 168 EXPECT_EQ(ERR_IO_PENDING,
179 handle.Init("a", 169 handle.Init("a", params_, kDefaultPriority, false,
180 params_, 170 callback.callback(), &pool_, BoundNetLog()));
181 kDefaultPriority,
182 callback.callback(),
183 &pool_,
184 BoundNetLog()));
185 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 171 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
186 172
187 // Make the host resolutions complete synchronously this time. 173 // Make the host resolutions complete synchronously this time.
188 host_resolver_->set_synchronous_mode(true); 174 host_resolver_->set_synchronous_mode(true);
189 EXPECT_EQ(ERR_CONNECTION_FAILED, 175 EXPECT_EQ(ERR_CONNECTION_FAILED,
190 handle.Init("a", 176 handle.Init("a", params_, kDefaultPriority, false,
191 params_, 177 callback.callback(), &pool_, BoundNetLog()));
192 kDefaultPriority,
193 callback.callback(),
194 &pool_,
195 BoundNetLog()));
196 } 178 }
197 179
198 TEST_F(WebSocketTransportClientSocketPoolTest, PendingRequestsFinishFifo) { 180 TEST_F(WebSocketTransportClientSocketPoolTest, PendingRequestsFinishFifo) {
199 // First request finishes asynchronously. 181 // First request finishes asynchronously.
200 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 182 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
201 EXPECT_EQ(OK, request(0)->WaitForResult()); 183 EXPECT_EQ(OK, request(0)->WaitForResult());
202 184
203 // Make all subsequent host resolutions complete synchronously. 185 // Make all subsequent host resolutions complete synchronously.
204 host_resolver_->set_synchronous_mode(true); 186 host_resolver_->set_synchronous_mode(true);
205 187
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 EXPECT_EQ(6U, completion_count()); 242 EXPECT_EQ(6U, completion_count());
261 } 243 }
262 244
263 // This test will start up a RequestSocket() and then immediately Cancel() it. 245 // This test will start up a RequestSocket() and then immediately Cancel() it.
264 // The pending host resolution will eventually complete, and destroy the 246 // The pending host resolution will eventually complete, and destroy the
265 // ClientSocketPool which will crash if the group was not cleared properly. 247 // ClientSocketPool which will crash if the group was not cleared properly.
266 TEST_F(WebSocketTransportClientSocketPoolTest, CancelRequestClearGroup) { 248 TEST_F(WebSocketTransportClientSocketPoolTest, CancelRequestClearGroup) {
267 TestCompletionCallback callback; 249 TestCompletionCallback callback;
268 ClientSocketHandle handle; 250 ClientSocketHandle handle;
269 EXPECT_EQ(ERR_IO_PENDING, 251 EXPECT_EQ(ERR_IO_PENDING,
270 handle.Init("a", 252 handle.Init("a", params_, kDefaultPriority, false,
271 params_, 253 callback.callback(), &pool_, BoundNetLog()));
272 kDefaultPriority,
273 callback.callback(),
274 &pool_,
275 BoundNetLog()));
276 handle.Reset(); 254 handle.Reset();
277 } 255 }
278 256
279 TEST_F(WebSocketTransportClientSocketPoolTest, TwoRequestsCancelOne) { 257 TEST_F(WebSocketTransportClientSocketPoolTest, TwoRequestsCancelOne) {
280 ClientSocketHandle handle; 258 ClientSocketHandle handle;
281 TestCompletionCallback callback; 259 TestCompletionCallback callback;
282 ClientSocketHandle handle2; 260 ClientSocketHandle handle2;
283 TestCompletionCallback callback2; 261 TestCompletionCallback callback2;
284 262
285 EXPECT_EQ(ERR_IO_PENDING, 263 EXPECT_EQ(ERR_IO_PENDING,
286 handle.Init("a", 264 handle.Init("a", params_, kDefaultPriority, false,
287 params_, 265 callback.callback(), &pool_, BoundNetLog()));
288 kDefaultPriority,
289 callback.callback(),
290 &pool_,
291 BoundNetLog()));
292 EXPECT_EQ(ERR_IO_PENDING, 266 EXPECT_EQ(ERR_IO_PENDING,
293 handle2.Init("a", 267 handle2.Init("a", params_, kDefaultPriority, false,
294 params_, 268 callback2.callback(), &pool_, BoundNetLog()));
295 kDefaultPriority,
296 callback2.callback(),
297 &pool_,
298 BoundNetLog()));
299 269
300 handle.Reset(); 270 handle.Reset();
301 271
302 EXPECT_EQ(OK, callback2.WaitForResult()); 272 EXPECT_EQ(OK, callback2.WaitForResult());
303 handle2.Reset(); 273 handle2.Reset();
304 } 274 }
305 275
306 TEST_F(WebSocketTransportClientSocketPoolTest, ConnectCancelConnect) { 276 TEST_F(WebSocketTransportClientSocketPoolTest, ConnectCancelConnect) {
307 client_socket_factory_.set_default_client_socket_type( 277 client_socket_factory_.set_default_client_socket_type(
308 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); 278 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET);
309 ClientSocketHandle handle; 279 ClientSocketHandle handle;
310 TestCompletionCallback callback; 280 TestCompletionCallback callback;
311 EXPECT_EQ(ERR_IO_PENDING, 281 EXPECT_EQ(ERR_IO_PENDING,
312 handle.Init("a", 282 handle.Init("a", params_, kDefaultPriority, false,
313 params_, 283 callback.callback(), &pool_, BoundNetLog()));
314 kDefaultPriority,
315 callback.callback(),
316 &pool_,
317 BoundNetLog()));
318 284
319 handle.Reset(); 285 handle.Reset();
320 286
321 TestCompletionCallback callback2; 287 TestCompletionCallback callback2;
322 EXPECT_EQ(ERR_IO_PENDING, 288 EXPECT_EQ(ERR_IO_PENDING,
323 handle.Init("a", 289 handle.Init("a", params_, kDefaultPriority, false,
324 params_, 290 callback2.callback(), &pool_, BoundNetLog()));
325 kDefaultPriority,
326 callback2.callback(),
327 &pool_,
328 BoundNetLog()));
329 291
330 host_resolver_->set_synchronous_mode(true); 292 host_resolver_->set_synchronous_mode(true);
331 // At this point, handle has two ConnectingSockets out for it. Due to the 293 // 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 294 // 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 295 // 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 296 // is a pending socket, so the Connect() will asynchronously complete on the
335 // next loop of the MessageLoop. That means that the first 297 // next loop of the MessageLoop. That means that the first
336 // ConnectingSocket will enter OnIOComplete, and then the second one will. 298 // 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 299 // If the first one is not cancelled, it will advance the load state, and
338 // then the second one will crash. 300 // then the second one will crash.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 WebSocketTransportClientSocketPool* pool, 350 WebSocketTransportClientSocketPool* pool,
389 const CompletionCallback& nested_callback, 351 const CompletionCallback& nested_callback,
390 int first_request_result) { 352 int first_request_result) {
391 EXPECT_EQ(OK, first_request_result); 353 EXPECT_EQ(OK, first_request_result);
392 354
393 // Don't allow reuse of the socket. Disconnect it and then release it. 355 // Don't allow reuse of the socket. Disconnect it and then release it.
394 handle->socket()->Disconnect(); 356 handle->socket()->Disconnect();
395 handle->Reset(); 357 handle->Reset();
396 358
397 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( 359 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams(
398 HostPortPair("www.google.com", 80), false, false, 360 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(),
399 OnHostResolutionCallback(),
400 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 361 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
401 int rv = 362 int rv = handle->Init("a", dest, LOWEST, false, nested_callback, pool,
402 handle->Init("a", dest, LOWEST, nested_callback, pool, BoundNetLog()); 363 BoundNetLog());
403 EXPECT_EQ(ERR_IO_PENDING, rv); 364 EXPECT_EQ(ERR_IO_PENDING, rv);
404 if (ERR_IO_PENDING != rv) 365 if (ERR_IO_PENDING != rv)
405 nested_callback.Run(rv); 366 nested_callback.Run(rv);
406 } 367 }
407 368
408 // Tests the case where a second socket is requested in a completion callback, 369 // Tests the case where a second socket is requested in a completion callback,
409 // and the second socket connects asynchronously. Reuses the same 370 // and the second socket connects asynchronously. Reuses the same
410 // ClientSocketHandle for the second socket, after disconnecting the first. 371 // ClientSocketHandle for the second socket, after disconnecting the first.
411 TEST_F(WebSocketTransportClientSocketPoolTest, RequestTwice) { 372 TEST_F(WebSocketTransportClientSocketPoolTest, RequestTwice) {
412 ClientSocketHandle handle; 373 ClientSocketHandle handle;
413 scoped_refptr<TransportSocketParams> dest( 374 scoped_refptr<TransportSocketParams> dest(
414 new TransportSocketParams( 375 new TransportSocketParams(
415 HostPortPair("www.google.com", 80), 376 HostPortPair("www.google.com", 80),
416 false, 377 false,
417 false,
418 OnHostResolutionCallback(), 378 OnHostResolutionCallback(),
419 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); 379 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT));
420 TestCompletionCallback second_result_callback; 380 TestCompletionCallback second_result_callback;
421 int rv = handle.Init("a", dest, LOWEST, 381 int rv = handle.Init("a", dest, LOWEST, false,
422 base::Bind(&RequestSocketOnComplete, &handle, &pool_, 382 base::Bind(&RequestSocketOnComplete, &handle, &pool_,
423 second_result_callback.callback()), 383 second_result_callback.callback()),
424 &pool_, BoundNetLog()); 384 &pool_, BoundNetLog());
425 ASSERT_EQ(ERR_IO_PENDING, rv); 385 ASSERT_EQ(ERR_IO_PENDING, rv);
426 EXPECT_EQ(OK, second_result_callback.WaitForResult()); 386 EXPECT_EQ(OK, second_result_callback.WaitForResult());
427 387
428 handle.Reset(); 388 handle.Reset();
429 } 389 }
430 390
431 // Make sure that pending requests get serviced after active requests get 391 // Make sure that pending requests get serviced after active requests get
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 EXPECT_FALSE(request(1)->handle()->is_initialized()); 445 EXPECT_FALSE(request(1)->handle()->is_initialized());
486 request(0)->handle()->Reset(); 446 request(0)->handle()->Reset();
487 RunUntilIdle(); 447 RunUntilIdle();
488 EXPECT_TRUE(request(1)->handle()->is_initialized()); 448 EXPECT_TRUE(request(1)->handle()->is_initialized());
489 } 449 }
490 450
491 // The lock on the endpoint is released when a ClientSocketHandle is deleted. 451 // The lock on the endpoint is released when a ClientSocketHandle is deleted.
492 TEST_F(WebSocketTransportClientSocketPoolTest, LockReleasedOnHandleDelete) { 452 TEST_F(WebSocketTransportClientSocketPoolTest, LockReleasedOnHandleDelete) {
493 TestCompletionCallback callback; 453 TestCompletionCallback callback;
494 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle); 454 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle);
495 int rv = handle->Init( 455 int rv = handle->Init("a", params_, LOW, false, callback.callback(), &pool_,
496 "a", params_, LOW, callback.callback(), &pool_, BoundNetLog()); 456 BoundNetLog());
497 EXPECT_EQ(ERR_IO_PENDING, rv); 457 EXPECT_EQ(ERR_IO_PENDING, rv);
498 458
499 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); 459 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
500 EXPECT_EQ(OK, callback.WaitForResult()); 460 EXPECT_EQ(OK, callback.WaitForResult());
501 EXPECT_FALSE(request(0)->handle()->is_initialized()); 461 EXPECT_FALSE(request(0)->handle()->is_initialized());
502 handle.reset(); 462 handle.reset();
503 RunUntilIdle(); 463 RunUntilIdle();
504 EXPECT_TRUE(request(0)->handle()->is_initialized()); 464 EXPECT_TRUE(request(0)->handle()->is_initialized());
505 } 465 }
506 466
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; 512 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET};
553 513
554 client_socket_factory_.set_client_socket_types(case_types, 2); 514 client_socket_factory_.set_client_socket_types(case_types, 2);
555 515
556 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. 516 // Resolve an AddressList with an IPv6 address first and then an IPv4 address.
557 host_resolver_->rules()->AddIPLiteralRule( 517 host_resolver_->rules()->AddIPLiteralRule(
558 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 518 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
559 519
560 TestCompletionCallback callback; 520 TestCompletionCallback callback;
561 ClientSocketHandle handle; 521 ClientSocketHandle handle;
562 int rv = 522 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
563 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 523 BoundNetLog());
564 EXPECT_EQ(ERR_IO_PENDING, rv); 524 EXPECT_EQ(ERR_IO_PENDING, rv);
565 EXPECT_FALSE(handle.is_initialized()); 525 EXPECT_FALSE(handle.is_initialized());
566 EXPECT_FALSE(handle.socket()); 526 EXPECT_FALSE(handle.socket());
567 527
568 EXPECT_EQ(OK, callback.WaitForResult()); 528 EXPECT_EQ(OK, callback.WaitForResult());
569 EXPECT_TRUE(handle.is_initialized()); 529 EXPECT_TRUE(handle.is_initialized());
570 EXPECT_TRUE(handle.socket()); 530 EXPECT_TRUE(handle.socket());
571 IPEndPoint endpoint; 531 IPEndPoint endpoint;
572 handle.socket()->GetLocalAddress(&endpoint); 532 handle.socket()->GetLocalAddress(&endpoint);
573 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 533 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 20 matching lines...) Expand all
594 client_socket_factory_.set_client_socket_types(case_types, 2); 554 client_socket_factory_.set_client_socket_types(case_types, 2);
595 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( 555 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds(
596 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); 556 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50));
597 557
598 // Resolve an AddressList with an IPv6 address first and then an IPv4 address. 558 // Resolve an AddressList with an IPv6 address first and then an IPv4 address.
599 host_resolver_->rules()->AddIPLiteralRule( 559 host_resolver_->rules()->AddIPLiteralRule(
600 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 560 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
601 561
602 TestCompletionCallback callback; 562 TestCompletionCallback callback;
603 ClientSocketHandle handle; 563 ClientSocketHandle handle;
604 int rv = 564 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
605 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 565 BoundNetLog());
606 EXPECT_EQ(ERR_IO_PENDING, rv); 566 EXPECT_EQ(ERR_IO_PENDING, rv);
607 EXPECT_FALSE(handle.is_initialized()); 567 EXPECT_FALSE(handle.is_initialized());
608 EXPECT_FALSE(handle.socket()); 568 EXPECT_FALSE(handle.socket());
609 569
610 EXPECT_EQ(OK, callback.WaitForResult()); 570 EXPECT_EQ(OK, callback.WaitForResult());
611 EXPECT_TRUE(handle.is_initialized()); 571 EXPECT_TRUE(handle.is_initialized());
612 EXPECT_TRUE(handle.socket()); 572 EXPECT_TRUE(handle.socket());
613 IPEndPoint endpoint; 573 IPEndPoint endpoint;
614 handle.socket()->GetLocalAddress(&endpoint); 574 handle.socket()->GetLocalAddress(&endpoint);
615 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 575 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
(...skipping 10 matching lines...) Expand all
626 586
627 client_socket_factory_.set_default_client_socket_type( 587 client_socket_factory_.set_default_client_socket_type(
628 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 588 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
629 589
630 // Resolve an AddressList with only IPv6 addresses. 590 // Resolve an AddressList with only IPv6 addresses.
631 host_resolver_->rules()->AddIPLiteralRule( 591 host_resolver_->rules()->AddIPLiteralRule(
632 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); 592 "*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string());
633 593
634 TestCompletionCallback callback; 594 TestCompletionCallback callback;
635 ClientSocketHandle handle; 595 ClientSocketHandle handle;
636 int rv = 596 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
637 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 597 BoundNetLog());
638 EXPECT_EQ(ERR_IO_PENDING, rv); 598 EXPECT_EQ(ERR_IO_PENDING, rv);
639 EXPECT_FALSE(handle.is_initialized()); 599 EXPECT_FALSE(handle.is_initialized());
640 EXPECT_FALSE(handle.socket()); 600 EXPECT_FALSE(handle.socket());
641 601
642 EXPECT_EQ(OK, callback.WaitForResult()); 602 EXPECT_EQ(OK, callback.WaitForResult());
643 EXPECT_TRUE(handle.is_initialized()); 603 EXPECT_TRUE(handle.is_initialized());
644 EXPECT_TRUE(handle.socket()); 604 EXPECT_TRUE(handle.socket());
645 IPEndPoint endpoint; 605 IPEndPoint endpoint;
646 handle.socket()->GetLocalAddress(&endpoint); 606 handle.socket()->GetLocalAddress(&endpoint);
647 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); 607 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size());
648 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 608 EXPECT_EQ(1, client_socket_factory_.allocation_count());
649 } 609 }
650 610
651 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) { 611 TEST_F(WebSocketTransportClientSocketPoolTest, IPv4HasNoFallback) {
652 WebSocketTransportClientSocketPool pool(kMaxSockets, 612 WebSocketTransportClientSocketPool pool(kMaxSockets,
653 kMaxSocketsPerGroup, 613 kMaxSocketsPerGroup,
654 host_resolver_.get(), 614 host_resolver_.get(),
655 &client_socket_factory_, 615 &client_socket_factory_,
656 NULL); 616 NULL);
657 617
658 client_socket_factory_.set_default_client_socket_type( 618 client_socket_factory_.set_default_client_socket_type(
659 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); 619 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET);
660 620
661 // Resolve an AddressList with only IPv4 addresses. 621 // Resolve an AddressList with only IPv4 addresses.
662 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); 622 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string());
663 623
664 TestCompletionCallback callback; 624 TestCompletionCallback callback;
665 ClientSocketHandle handle; 625 ClientSocketHandle handle;
666 int rv = 626 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
667 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 627 BoundNetLog());
668 EXPECT_EQ(ERR_IO_PENDING, rv); 628 EXPECT_EQ(ERR_IO_PENDING, rv);
669 EXPECT_FALSE(handle.is_initialized()); 629 EXPECT_FALSE(handle.is_initialized());
670 EXPECT_FALSE(handle.socket()); 630 EXPECT_FALSE(handle.socket());
671 631
672 EXPECT_EQ(OK, callback.WaitForResult()); 632 EXPECT_EQ(OK, callback.WaitForResult());
673 EXPECT_TRUE(handle.is_initialized()); 633 EXPECT_TRUE(handle.is_initialized());
674 EXPECT_TRUE(handle.socket()); 634 EXPECT_TRUE(handle.socket());
675 IPEndPoint endpoint; 635 IPEndPoint endpoint;
676 handle.socket()->GetLocalAddress(&endpoint); 636 handle.socket()->GetLocalAddress(&endpoint);
677 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 637 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
(...skipping 19 matching lines...) Expand all
697 657
698 client_socket_factory_.set_client_socket_types(case_types, 658 client_socket_factory_.set_client_socket_types(case_types,
699 arraysize(case_types)); 659 arraysize(case_types));
700 660
701 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address. 661 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address.
702 host_resolver_->rules()->AddIPLiteralRule( 662 host_resolver_->rules()->AddIPLiteralRule(
703 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string()); 663 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string());
704 host_resolver_->set_synchronous_mode(true); 664 host_resolver_->set_synchronous_mode(true);
705 TestCompletionCallback callback; 665 TestCompletionCallback callback;
706 ClientSocketHandle handle; 666 ClientSocketHandle handle;
707 int rv = 667 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
708 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 668 BoundNetLog());
709 EXPECT_EQ(OK, rv); 669 EXPECT_EQ(OK, rv);
710 ASSERT_TRUE(handle.socket()); 670 ASSERT_TRUE(handle.socket());
711 671
712 IPEndPoint endpoint; 672 IPEndPoint endpoint;
713 handle.socket()->GetPeerAddress(&endpoint); 673 handle.socket()->GetPeerAddress(&endpoint);
714 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort()); 674 EXPECT_EQ("2.2.2.2", endpoint.ToStringWithoutPort());
715 } 675 }
716 676
717 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4 677 // If all IPv6 addresses fail before the IPv4 fallback timeout, then the IPv4
718 // connections proceed immediately. 678 // connections proceed immediately.
(...skipping 14 matching lines...) Expand all
733 693
734 client_socket_factory_.set_client_socket_types(case_types, 694 client_socket_factory_.set_client_socket_types(case_types,
735 arraysize(case_types)); 695 arraysize(case_types));
736 696
737 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address. 697 // Resolve an AddressList with two IPv6 addresses and then an IPv4 address.
738 host_resolver_->rules()->AddIPLiteralRule( 698 host_resolver_->rules()->AddIPLiteralRule(
739 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string()); 699 "*", "2:abcd::3:4:ff,2:abcd::3:5:ff,2.2.2.2", std::string());
740 700
741 TestCompletionCallback callback; 701 TestCompletionCallback callback;
742 ClientSocketHandle handle; 702 ClientSocketHandle handle;
743 int rv = 703 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
744 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 704 BoundNetLog());
745 EXPECT_EQ(ERR_IO_PENDING, rv); 705 EXPECT_EQ(ERR_IO_PENDING, rv);
746 EXPECT_FALSE(handle.socket()); 706 EXPECT_FALSE(handle.socket());
747 707
748 base::TimeTicks start(base::TimeTicks::Now()); 708 base::TimeTicks start(base::TimeTicks::Now());
749 EXPECT_EQ(OK, callback.WaitForResult()); 709 EXPECT_EQ(OK, callback.WaitForResult());
750 EXPECT_LT(base::TimeTicks::Now() - start, 710 EXPECT_LT(base::TimeTicks::Now() - start,
751 base::TimeDelta::FromMilliseconds( 711 base::TimeDelta::FromMilliseconds(
752 TransportConnectJobHelper::kIPv6FallbackTimerInMs)); 712 TransportConnectJobHelper::kIPv6FallbackTimerInMs));
753 ASSERT_TRUE(handle.socket()); 713 ASSERT_TRUE(handle.socket());
754 714
(...skipping 14 matching lines...) Expand all
769 729
770 client_socket_factory_.set_default_client_socket_type( 730 client_socket_factory_.set_default_client_socket_type(
771 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET); 731 MockTransportClientSocketFactory::MOCK_TRIGGERABLE_CLIENT_SOCKET);
772 732
773 // Resolve an AddressList with an IPv6 addresses and an IPv4 address. 733 // Resolve an AddressList with an IPv6 addresses and an IPv4 address.
774 host_resolver_->rules()->AddIPLiteralRule( 734 host_resolver_->rules()->AddIPLiteralRule(
775 "*", "2:abcd::3:4:ff,2.2.2.2", std::string()); 735 "*", "2:abcd::3:4:ff,2.2.2.2", std::string());
776 736
777 TestCompletionCallback callback; 737 TestCompletionCallback callback;
778 ClientSocketHandle handle; 738 ClientSocketHandle handle;
779 int rv = 739 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
780 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 740 BoundNetLog());
781 EXPECT_EQ(ERR_IO_PENDING, rv); 741 EXPECT_EQ(ERR_IO_PENDING, rv);
782 ASSERT_FALSE(handle.socket()); 742 ASSERT_FALSE(handle.socket());
783 743
784 base::Closure ipv6_connect_trigger = 744 base::Closure ipv6_connect_trigger =
785 client_socket_factory_.WaitForTriggerableSocketCreation(); 745 client_socket_factory_.WaitForTriggerableSocketCreation();
786 base::Closure ipv4_connect_trigger = 746 base::Closure ipv4_connect_trigger =
787 client_socket_factory_.WaitForTriggerableSocketCreation(); 747 client_socket_factory_.WaitForTriggerableSocketCreation();
788 748
789 ipv4_connect_trigger.Run(); 749 ipv4_connect_trigger.Run();
790 ipv6_connect_trigger.Run(); 750 ipv6_connect_trigger.Run();
(...skipping 30 matching lines...) Expand all
821 // Expected order of events: 781 // Expected order of events:
822 // After 100ms: Connect to 1:abcd::3:4:ff times out 782 // After 100ms: Connect to 1:abcd::3:4:ff times out
823 // After 200ms: Connect to 2:abcd::3:4:ff times out 783 // 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 784 // 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 785 // 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 786 // After 500ms: Connect to 2.2.2.2 times out
827 787
828 TestCompletionCallback callback; 788 TestCompletionCallback callback;
829 ClientSocketHandle handle; 789 ClientSocketHandle handle;
830 base::TimeTicks start(base::TimeTicks::Now()); 790 base::TimeTicks start(base::TimeTicks::Now());
831 int rv = 791 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
832 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 792 BoundNetLog());
833 EXPECT_EQ(ERR_IO_PENDING, rv); 793 EXPECT_EQ(ERR_IO_PENDING, rv);
834 794
835 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); 795 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult());
836 796
837 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5); 797 EXPECT_GE(base::TimeTicks::Now() - start, delay * 5);
838 } 798 }
839 799
840 // Global timeout for all connects applies. This test is disabled by default 800 // 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 801 // because it takes 4 minutes. Run with --gtest_also_run_disabled_tests if you
842 // want to run it. 802 // want to run it.
(...skipping 15 matching lines...) Expand all
858 "1:abcd::3:4:ff,2:abcd::3:4:ff," 818 "1:abcd::3:4:ff,2:abcd::3:4:ff,"
859 "3:abcd::3:4:ff,4:abcd::3:4:ff," 819 "3:abcd::3:4:ff,4:abcd::3:4:ff,"
860 "5:abcd::3:4:ff,6:abcd::3:4:ff," 820 "5:abcd::3:4:ff,6:abcd::3:4:ff,"
861 "1.1.1.1,2.2.2.2,3.3.3.3," 821 "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", 822 "4.4.4.4,5.5.5.5,6.6.6.6",
863 std::string()); 823 std::string());
864 824
865 TestCompletionCallback callback; 825 TestCompletionCallback callback;
866 ClientSocketHandle handle; 826 ClientSocketHandle handle;
867 827
868 int rv = 828 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool,
869 handle.Init("a", params_, LOW, callback.callback(), &pool, BoundNetLog()); 829 BoundNetLog());
870 EXPECT_EQ(ERR_IO_PENDING, rv); 830 EXPECT_EQ(ERR_IO_PENDING, rv);
871 831
872 EXPECT_EQ(ERR_TIMED_OUT, callback.WaitForResult()); 832 EXPECT_EQ(ERR_TIMED_OUT, callback.WaitForResult());
873 } 833 }
874 834
875 TEST_F(WebSocketTransportClientSocketPoolTest, MaxSocketsEnforced) { 835 TEST_F(WebSocketTransportClientSocketPoolTest, MaxSocketsEnforced) {
876 host_resolver_->set_synchronous_mode(true); 836 host_resolver_->set_synchronous_mode(true);
877 for (int i = 0; i < kMaxSockets; ++i) { 837 for (int i = 0; i < kMaxSockets; ++i) {
878 ASSERT_EQ(OK, StartRequest("a", kDefaultPriority)); 838 ASSERT_EQ(OK, StartRequest("a", kDefaultPriority));
879 WebSocketTransportClientSocketPool::UnlockEndpoint(request(i)->handle()); 839 WebSocketTransportClientSocketPool::UnlockEndpoint(request(i)->handle());
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 EXPECT_EQ(OK, request(1)->WaitForResult()); 1072 EXPECT_EQ(OK, request(1)->WaitForResult());
1113 // Third socket should still be waiting for endpoint. 1073 // Third socket should still be waiting for endpoint.
1114 ASSERT_FALSE(request(2)->handle()->is_initialized()); 1074 ASSERT_FALSE(request(2)->handle()->is_initialized());
1115 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET, 1075 EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET,
1116 request(2)->handle()->GetLoadState()); 1076 request(2)->handle()->GetLoadState());
1117 } 1077 }
1118 1078
1119 } // namespace 1079 } // namespace
1120 1080
1121 } // namespace net 1081 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698