OLD | NEW |
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/macros.h" | 10 #include "base/macros.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 class TransportClientSocketPoolTest : public testing::Test { | 37 class TransportClientSocketPoolTest : public testing::Test { |
38 protected: | 38 protected: |
39 TransportClientSocketPoolTest() | 39 TransportClientSocketPoolTest() |
40 : connect_backup_jobs_enabled_( | 40 : connect_backup_jobs_enabled_( |
41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), | 41 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(true)), |
42 params_( | 42 params_( |
43 new TransportSocketParams( | 43 new TransportSocketParams( |
44 HostPortPair("www.google.com", 80), | 44 HostPortPair("www.google.com", 80), |
45 false, | 45 false, |
46 false, | |
47 OnHostResolutionCallback(), | 46 OnHostResolutionCallback(), |
48 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), | 47 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), |
49 host_resolver_(new MockHostResolver), | 48 host_resolver_(new MockHostResolver), |
50 client_socket_factory_(&net_log_), | 49 client_socket_factory_(&net_log_), |
51 pool_(kMaxSockets, | 50 pool_(kMaxSockets, |
52 kMaxSocketsPerGroup, | 51 kMaxSocketsPerGroup, |
53 host_resolver_.get(), | 52 host_resolver_.get(), |
54 &client_socket_factory_, | 53 &client_socket_factory_, |
55 NULL) { | 54 NULL) { |
56 } | 55 } |
57 | 56 |
58 ~TransportClientSocketPoolTest() override { | 57 ~TransportClientSocketPoolTest() override { |
59 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( | 58 internal::ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled( |
60 connect_backup_jobs_enabled_); | 59 connect_backup_jobs_enabled_); |
61 } | 60 } |
62 | 61 |
63 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() { | 62 scoped_refptr<TransportSocketParams> CreateParamsForTCPFastOpen() { |
64 return new TransportSocketParams(HostPortPair("www.google.com", 80), | 63 return new TransportSocketParams( |
65 false, false, OnHostResolutionCallback(), | 64 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), |
66 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED); | 65 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DESIRED); |
67 } | 66 } |
68 | 67 |
69 int StartRequest(const std::string& group_name, RequestPriority priority) { | 68 int StartRequest(const std::string& group_name, RequestPriority priority) { |
70 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( | 69 scoped_refptr<TransportSocketParams> params(new TransportSocketParams( |
71 HostPortPair("www.google.com", 80), false, false, | 70 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), |
72 OnHostResolutionCallback(), | |
73 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); | 71 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
74 return test_base_.StartRequestUsingPool( | 72 return test_base_.StartRequestUsingPool(&pool_, group_name, priority, |
75 &pool_, group_name, priority, params); | 73 false /* ignore_limits */, params); |
76 } | 74 } |
77 | 75 |
78 int GetOrderOfRequest(size_t index) { | 76 int GetOrderOfRequest(size_t index) { |
79 return test_base_.GetOrderOfRequest(index); | 77 return test_base_.GetOrderOfRequest(index); |
80 } | 78 } |
81 | 79 |
82 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { | 80 bool ReleaseOneConnection(ClientSocketPoolTest::KeepAlive keep_alive) { |
83 return test_base_.ReleaseOneConnection(keep_alive); | 81 return test_base_.ReleaseOneConnection(keep_alive); |
84 } | 82 } |
85 | 83 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 ASSERT_EQ(4u, addrlist.size()); | 169 ASSERT_EQ(4u, addrlist.size()); |
172 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily()); | 170 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[0].GetFamily()); |
173 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily()); | 171 EXPECT_EQ(ADDRESS_FAMILY_IPV4, addrlist[1].GetFamily()); |
174 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily()); | 172 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[2].GetFamily()); |
175 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily()); | 173 EXPECT_EQ(ADDRESS_FAMILY_IPV6, addrlist[3].GetFamily()); |
176 } | 174 } |
177 | 175 |
178 TEST_F(TransportClientSocketPoolTest, Basic) { | 176 TEST_F(TransportClientSocketPoolTest, Basic) { |
179 TestCompletionCallback callback; | 177 TestCompletionCallback callback; |
180 ClientSocketHandle handle; | 178 ClientSocketHandle handle; |
181 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, | 179 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_, |
182 BoundNetLog()); | 180 BoundNetLog()); |
183 EXPECT_EQ(ERR_IO_PENDING, rv); | 181 EXPECT_EQ(ERR_IO_PENDING, rv); |
184 EXPECT_FALSE(handle.is_initialized()); | 182 EXPECT_FALSE(handle.is_initialized()); |
185 EXPECT_FALSE(handle.socket()); | 183 EXPECT_FALSE(handle.socket()); |
186 | 184 |
187 EXPECT_EQ(OK, callback.WaitForResult()); | 185 EXPECT_EQ(OK, callback.WaitForResult()); |
188 EXPECT_TRUE(handle.is_initialized()); | 186 EXPECT_TRUE(handle.is_initialized()); |
189 EXPECT_TRUE(handle.socket()); | 187 EXPECT_TRUE(handle.socket()); |
190 TestLoadTimingInfoConnectedNotReused(handle); | 188 TestLoadTimingInfoConnectedNotReused(handle); |
191 EXPECT_EQ(0u, handle.connection_attempts().size()); | 189 EXPECT_EQ(0u, handle.connection_attempts().size()); |
192 } | 190 } |
193 | 191 |
194 // Make sure that TransportConnectJob passes on its priority to its | 192 // Make sure that TransportConnectJob passes on its priority to its |
195 // HostResolver request on Init. | 193 // HostResolver request on Init. |
196 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) { | 194 TEST_F(TransportClientSocketPoolTest, SetResolvePriorityOnInit) { |
197 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 195 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
198 RequestPriority priority = static_cast<RequestPriority>(i); | 196 RequestPriority priority = static_cast<RequestPriority>(i); |
199 TestCompletionCallback callback; | 197 TestCompletionCallback callback; |
200 ClientSocketHandle handle; | 198 ClientSocketHandle handle; |
201 EXPECT_EQ(ERR_IO_PENDING, | 199 EXPECT_EQ(ERR_IO_PENDING, |
202 handle.Init("a", params_, priority, callback.callback(), &pool_, | 200 handle.Init("a", params_, priority, false, callback.callback(), |
203 BoundNetLog())); | 201 &pool_, BoundNetLog())); |
204 EXPECT_EQ(priority, host_resolver_->last_request_priority()); | 202 EXPECT_EQ(priority, host_resolver_->last_request_priority()); |
205 } | 203 } |
206 } | 204 } |
207 | 205 |
208 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { | 206 TEST_F(TransportClientSocketPoolTest, InitHostResolutionFailure) { |
209 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); | 207 host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); |
210 TestCompletionCallback callback; | 208 TestCompletionCallback callback; |
211 ClientSocketHandle handle; | 209 ClientSocketHandle handle; |
212 HostPortPair host_port_pair("unresolvable.host.name", 80); | 210 HostPortPair host_port_pair("unresolvable.host.name", 80); |
213 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 211 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
214 host_port_pair, false, false, OnHostResolutionCallback(), | 212 host_port_pair, false, OnHostResolutionCallback(), |
215 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); | 213 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
216 EXPECT_EQ(ERR_IO_PENDING, | 214 EXPECT_EQ(ERR_IO_PENDING, |
217 handle.Init("a", dest, kDefaultPriority, callback.callback(), | 215 handle.Init("a", dest, kDefaultPriority, false, callback.callback(), |
218 &pool_, BoundNetLog())); | 216 &pool_, BoundNetLog())); |
219 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); | 217 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback.WaitForResult()); |
220 ASSERT_EQ(1u, handle.connection_attempts().size()); | 218 ASSERT_EQ(1u, handle.connection_attempts().size()); |
221 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty()); | 219 EXPECT_TRUE(handle.connection_attempts()[0].endpoint.address().empty()); |
222 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result); | 220 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, handle.connection_attempts()[0].result); |
223 } | 221 } |
224 | 222 |
225 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { | 223 TEST_F(TransportClientSocketPoolTest, InitConnectionFailure) { |
226 client_socket_factory_.set_default_client_socket_type( | 224 client_socket_factory_.set_default_client_socket_type( |
227 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); | 225 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); |
228 TestCompletionCallback callback; | 226 TestCompletionCallback callback; |
229 ClientSocketHandle handle; | 227 ClientSocketHandle handle; |
230 EXPECT_EQ(ERR_IO_PENDING, | 228 EXPECT_EQ(ERR_IO_PENDING, |
231 handle.Init("a", params_, kDefaultPriority, callback.callback(), | 229 handle.Init("a", params_, kDefaultPriority, false, |
232 &pool_, BoundNetLog())); | 230 callback.callback(), &pool_, BoundNetLog())); |
233 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 231 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
234 ASSERT_EQ(1u, handle.connection_attempts().size()); | 232 ASSERT_EQ(1u, handle.connection_attempts().size()); |
235 EXPECT_EQ("127.0.0.1:80", | 233 EXPECT_EQ("127.0.0.1:80", |
236 handle.connection_attempts()[0].endpoint.ToString()); | 234 handle.connection_attempts()[0].endpoint.ToString()); |
237 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); | 235 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); |
238 | 236 |
239 // Make the host resolutions complete synchronously this time. | 237 // Make the host resolutions complete synchronously this time. |
240 host_resolver_->set_synchronous_mode(true); | 238 host_resolver_->set_synchronous_mode(true); |
241 EXPECT_EQ(ERR_CONNECTION_FAILED, | 239 EXPECT_EQ(ERR_CONNECTION_FAILED, |
242 handle.Init("a", params_, kDefaultPriority, callback.callback(), | 240 handle.Init("a", params_, kDefaultPriority, false, |
243 &pool_, BoundNetLog())); | 241 callback.callback(), &pool_, BoundNetLog())); |
244 ASSERT_EQ(1u, handle.connection_attempts().size()); | 242 ASSERT_EQ(1u, handle.connection_attempts().size()); |
245 EXPECT_EQ("127.0.0.1:80", | 243 EXPECT_EQ("127.0.0.1:80", |
246 handle.connection_attempts()[0].endpoint.ToString()); | 244 handle.connection_attempts()[0].endpoint.ToString()); |
247 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); | 245 EXPECT_EQ(ERR_CONNECTION_FAILED, handle.connection_attempts()[0].result); |
248 } | 246 } |
249 | 247 |
250 TEST_F(TransportClientSocketPoolTest, PendingRequests) { | 248 TEST_F(TransportClientSocketPoolTest, PendingRequests) { |
251 // First request finishes asynchronously. | 249 // First request finishes asynchronously. |
252 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); | 250 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); |
253 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); | 251 EXPECT_EQ(OK, (*requests())[0]->WaitForResult()); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 EXPECT_EQ(6U, completion_count()); | 341 EXPECT_EQ(6U, completion_count()); |
344 } | 342 } |
345 | 343 |
346 // This test will start up a RequestSocket() and then immediately Cancel() it. | 344 // This test will start up a RequestSocket() and then immediately Cancel() it. |
347 // The pending host resolution will eventually complete, and destroy the | 345 // The pending host resolution will eventually complete, and destroy the |
348 // ClientSocketPool which will crash if the group was not cleared properly. | 346 // ClientSocketPool which will crash if the group was not cleared properly. |
349 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { | 347 TEST_F(TransportClientSocketPoolTest, CancelRequestClearGroup) { |
350 TestCompletionCallback callback; | 348 TestCompletionCallback callback; |
351 ClientSocketHandle handle; | 349 ClientSocketHandle handle; |
352 EXPECT_EQ(ERR_IO_PENDING, | 350 EXPECT_EQ(ERR_IO_PENDING, |
353 handle.Init("a", params_, kDefaultPriority, callback.callback(), | 351 handle.Init("a", params_, kDefaultPriority, false, |
354 &pool_, BoundNetLog())); | 352 callback.callback(), &pool_, BoundNetLog())); |
355 handle.Reset(); | 353 handle.Reset(); |
356 } | 354 } |
357 | 355 |
358 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { | 356 TEST_F(TransportClientSocketPoolTest, TwoRequestsCancelOne) { |
359 ClientSocketHandle handle; | 357 ClientSocketHandle handle; |
360 TestCompletionCallback callback; | 358 TestCompletionCallback callback; |
361 ClientSocketHandle handle2; | 359 ClientSocketHandle handle2; |
362 TestCompletionCallback callback2; | 360 TestCompletionCallback callback2; |
363 | 361 |
364 EXPECT_EQ(ERR_IO_PENDING, | 362 EXPECT_EQ(ERR_IO_PENDING, |
365 handle.Init("a", params_, kDefaultPriority, callback.callback(), | 363 handle.Init("a", params_, kDefaultPriority, false, |
366 &pool_, BoundNetLog())); | 364 callback.callback(), &pool_, BoundNetLog())); |
367 EXPECT_EQ(ERR_IO_PENDING, | 365 EXPECT_EQ(ERR_IO_PENDING, |
368 handle2.Init("a", params_, kDefaultPriority, callback2.callback(), | 366 handle2.Init("a", params_, kDefaultPriority, false, |
369 &pool_, BoundNetLog())); | 367 callback2.callback(), &pool_, BoundNetLog())); |
370 | 368 |
371 handle.Reset(); | 369 handle.Reset(); |
372 | 370 |
373 EXPECT_EQ(OK, callback2.WaitForResult()); | 371 EXPECT_EQ(OK, callback2.WaitForResult()); |
374 handle2.Reset(); | 372 handle2.Reset(); |
375 } | 373 } |
376 | 374 |
377 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { | 375 TEST_F(TransportClientSocketPoolTest, ConnectCancelConnect) { |
378 client_socket_factory_.set_default_client_socket_type( | 376 client_socket_factory_.set_default_client_socket_type( |
379 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); | 377 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET); |
380 ClientSocketHandle handle; | 378 ClientSocketHandle handle; |
381 TestCompletionCallback callback; | 379 TestCompletionCallback callback; |
382 EXPECT_EQ(ERR_IO_PENDING, | 380 EXPECT_EQ(ERR_IO_PENDING, |
383 handle.Init("a", params_, kDefaultPriority, callback.callback(), | 381 handle.Init("a", params_, kDefaultPriority, false, |
384 &pool_, BoundNetLog())); | 382 callback.callback(), &pool_, BoundNetLog())); |
385 | 383 |
386 handle.Reset(); | 384 handle.Reset(); |
387 | 385 |
388 TestCompletionCallback callback2; | 386 TestCompletionCallback callback2; |
389 EXPECT_EQ(ERR_IO_PENDING, | 387 EXPECT_EQ(ERR_IO_PENDING, |
390 handle.Init("a", params_, kDefaultPriority, callback2.callback(), | 388 handle.Init("a", params_, kDefaultPriority, false, |
391 &pool_, BoundNetLog())); | 389 callback2.callback(), &pool_, BoundNetLog())); |
392 | 390 |
393 host_resolver_->set_synchronous_mode(true); | 391 host_resolver_->set_synchronous_mode(true); |
394 // At this point, handle has two ConnectingSockets out for it. Due to the | 392 // At this point, handle has two ConnectingSockets out for it. Due to the |
395 // setting the mock resolver into synchronous mode, the host resolution for | 393 // setting the mock resolver into synchronous mode, the host resolution for |
396 // both will return in the same loop of the MessageLoop. The client socket | 394 // both will return in the same loop of the MessageLoop. The client socket |
397 // is a pending socket, so the Connect() will asynchronously complete on the | 395 // is a pending socket, so the Connect() will asynchronously complete on the |
398 // next loop of the MessageLoop. That means that the first | 396 // next loop of the MessageLoop. That means that the first |
399 // ConnectingSocket will enter OnIOComplete, and then the second one will. | 397 // ConnectingSocket will enter OnIOComplete, and then the second one will. |
400 // If the first one is not cancelled, it will advance the load state, and | 398 // If the first one is not cancelled, it will advance the load state, and |
401 // then the second one will crash. | 399 // then the second one will crash. |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 // run through the MessageLoop once to get it completely released. | 488 // run through the MessageLoop once to get it completely released. |
491 handle_->socket()->Disconnect(); | 489 handle_->socket()->Disconnect(); |
492 handle_->Reset(); | 490 handle_->Reset(); |
493 { | 491 { |
494 base::MessageLoop::ScopedNestableTaskAllower allow( | 492 base::MessageLoop::ScopedNestableTaskAllower allow( |
495 base::MessageLoop::current()); | 493 base::MessageLoop::current()); |
496 base::MessageLoop::current()->RunUntilIdle(); | 494 base::MessageLoop::current()->RunUntilIdle(); |
497 } | 495 } |
498 within_callback_ = true; | 496 within_callback_ = true; |
499 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 497 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
500 HostPortPair("www.google.com", 80), false, false, | 498 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), |
501 OnHostResolutionCallback(), | |
502 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); | 499 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
503 int rv = handle_->Init("a", dest, LOWEST, callback(), pool_, | 500 int rv = handle_->Init("a", dest, LOWEST, false, callback(), pool_, |
504 BoundNetLog()); | 501 BoundNetLog()); |
505 EXPECT_EQ(OK, rv); | 502 EXPECT_EQ(OK, rv); |
506 } | 503 } |
507 } | 504 } |
508 | 505 |
509 ClientSocketHandle* const handle_; | 506 ClientSocketHandle* const handle_; |
510 TransportClientSocketPool* const pool_; | 507 TransportClientSocketPool* const pool_; |
511 bool within_callback_; | 508 bool within_callback_; |
512 CompletionCallback callback_; | 509 CompletionCallback callback_; |
513 | 510 |
514 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); | 511 DISALLOW_COPY_AND_ASSIGN(RequestSocketCallback); |
515 }; | 512 }; |
516 | 513 |
517 TEST_F(TransportClientSocketPoolTest, RequestTwice) { | 514 TEST_F(TransportClientSocketPoolTest, RequestTwice) { |
518 ClientSocketHandle handle; | 515 ClientSocketHandle handle; |
519 RequestSocketCallback callback(&handle, &pool_); | 516 RequestSocketCallback callback(&handle, &pool_); |
520 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( | 517 scoped_refptr<TransportSocketParams> dest(new TransportSocketParams( |
521 HostPortPair("www.google.com", 80), false, false, | 518 HostPortPair("www.google.com", 80), false, OnHostResolutionCallback(), |
522 OnHostResolutionCallback(), | |
523 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); | 519 TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); |
524 int rv = handle.Init("a", dest, LOWEST, callback.callback(), &pool_, | 520 int rv = handle.Init("a", dest, LOWEST, false, callback.callback(), &pool_, |
525 BoundNetLog()); | 521 BoundNetLog()); |
526 ASSERT_EQ(ERR_IO_PENDING, rv); | 522 ASSERT_EQ(ERR_IO_PENDING, rv); |
527 | 523 |
528 // The callback is going to request "www.google.com". We want it to complete | 524 // The callback is going to request "www.google.com". We want it to complete |
529 // synchronously this time. | 525 // synchronously this time. |
530 host_resolver_->set_synchronous_mode(true); | 526 host_resolver_->set_synchronous_mode(true); |
531 | 527 |
532 EXPECT_EQ(OK, callback.WaitForResult()); | 528 EXPECT_EQ(OK, callback.WaitForResult()); |
533 | 529 |
534 handle.Reset(); | 530 handle.Reset(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 for (int i = 0; i < kNumRequests; i++) | 573 for (int i = 0; i < kNumRequests; i++) |
578 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); | 574 EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority)); |
579 | 575 |
580 for (int i = 0; i < kNumRequests; i++) | 576 for (int i = 0; i < kNumRequests; i++) |
581 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); | 577 EXPECT_EQ(ERR_CONNECTION_FAILED, (*requests())[i]->WaitForResult()); |
582 } | 578 } |
583 | 579 |
584 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) { | 580 TEST_F(TransportClientSocketPoolTest, IdleSocketLoadTiming) { |
585 TestCompletionCallback callback; | 581 TestCompletionCallback callback; |
586 ClientSocketHandle handle; | 582 ClientSocketHandle handle; |
587 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, | 583 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_, |
588 BoundNetLog()); | 584 BoundNetLog()); |
589 EXPECT_EQ(ERR_IO_PENDING, rv); | 585 EXPECT_EQ(ERR_IO_PENDING, rv); |
590 EXPECT_FALSE(handle.is_initialized()); | 586 EXPECT_FALSE(handle.is_initialized()); |
591 EXPECT_FALSE(handle.socket()); | 587 EXPECT_FALSE(handle.socket()); |
592 | 588 |
593 EXPECT_EQ(OK, callback.WaitForResult()); | 589 EXPECT_EQ(OK, callback.WaitForResult()); |
594 EXPECT_TRUE(handle.is_initialized()); | 590 EXPECT_TRUE(handle.is_initialized()); |
595 EXPECT_TRUE(handle.socket()); | 591 EXPECT_TRUE(handle.socket()); |
596 TestLoadTimingInfoConnectedNotReused(handle); | 592 TestLoadTimingInfoConnectedNotReused(handle); |
597 | 593 |
598 handle.Reset(); | 594 handle.Reset(); |
599 // Need to run all pending to release the socket back to the pool. | 595 // Need to run all pending to release the socket back to the pool. |
600 base::MessageLoop::current()->RunUntilIdle(); | 596 base::MessageLoop::current()->RunUntilIdle(); |
601 | 597 |
602 // Now we should have 1 idle socket. | 598 // Now we should have 1 idle socket. |
603 EXPECT_EQ(1, pool_.IdleSocketCount()); | 599 EXPECT_EQ(1, pool_.IdleSocketCount()); |
604 | 600 |
605 rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, | 601 rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_, |
606 BoundNetLog()); | 602 BoundNetLog()); |
607 EXPECT_EQ(OK, rv); | 603 EXPECT_EQ(OK, rv); |
608 EXPECT_EQ(0, pool_.IdleSocketCount()); | 604 EXPECT_EQ(0, pool_.IdleSocketCount()); |
609 TestLoadTimingInfoConnectedReused(handle); | 605 TestLoadTimingInfoConnectedReused(handle); |
610 } | 606 } |
611 | 607 |
612 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { | 608 TEST_F(TransportClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { |
613 TestCompletionCallback callback; | 609 TestCompletionCallback callback; |
614 ClientSocketHandle handle; | 610 ClientSocketHandle handle; |
615 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool_, | 611 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool_, |
616 BoundNetLog()); | 612 BoundNetLog()); |
617 EXPECT_EQ(ERR_IO_PENDING, rv); | 613 EXPECT_EQ(ERR_IO_PENDING, rv); |
618 EXPECT_FALSE(handle.is_initialized()); | 614 EXPECT_FALSE(handle.is_initialized()); |
619 EXPECT_FALSE(handle.socket()); | 615 EXPECT_FALSE(handle.socket()); |
620 | 616 |
621 EXPECT_EQ(OK, callback.WaitForResult()); | 617 EXPECT_EQ(OK, callback.WaitForResult()); |
622 EXPECT_TRUE(handle.is_initialized()); | 618 EXPECT_TRUE(handle.is_initialized()); |
623 EXPECT_TRUE(handle.socket()); | 619 EXPECT_TRUE(handle.socket()); |
624 | 620 |
625 handle.Reset(); | 621 handle.Reset(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 case2_types | 657 case2_types |
662 }; | 658 }; |
663 | 659 |
664 for (size_t index = 0; index < arraysize(cases); ++index) { | 660 for (size_t index = 0; index < arraysize(cases); ++index) { |
665 client_socket_factory_.set_client_socket_types(cases[index], 2); | 661 client_socket_factory_.set_client_socket_types(cases[index], 2); |
666 | 662 |
667 EXPECT_EQ(0, pool_.IdleSocketCount()); | 663 EXPECT_EQ(0, pool_.IdleSocketCount()); |
668 | 664 |
669 TestCompletionCallback callback; | 665 TestCompletionCallback callback; |
670 ClientSocketHandle handle; | 666 ClientSocketHandle handle; |
671 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, | 667 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_, |
672 BoundNetLog()); | 668 BoundNetLog()); |
673 EXPECT_EQ(ERR_IO_PENDING, rv); | 669 EXPECT_EQ(ERR_IO_PENDING, rv); |
674 EXPECT_FALSE(handle.is_initialized()); | 670 EXPECT_FALSE(handle.is_initialized()); |
675 EXPECT_FALSE(handle.socket()); | 671 EXPECT_FALSE(handle.socket()); |
676 | 672 |
677 // Create the first socket, set the timer. | 673 // Create the first socket, set the timer. |
678 base::MessageLoop::current()->RunUntilIdle(); | 674 base::MessageLoop::current()->RunUntilIdle(); |
679 | 675 |
680 // Wait for the backup socket timer to fire. | 676 // Wait for the backup socket timer to fire. |
681 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( | 677 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( |
(...skipping 21 matching lines...) Expand all Loading... |
703 client_socket_factory_.set_default_client_socket_type( | 699 client_socket_factory_.set_default_client_socket_type( |
704 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); | 700 MockTransportClientSocketFactory::MOCK_STALLED_CLIENT_SOCKET); |
705 | 701 |
706 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; | 702 enum { CANCEL_BEFORE_WAIT, CANCEL_AFTER_WAIT }; |
707 | 703 |
708 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { | 704 for (int index = CANCEL_BEFORE_WAIT; index < CANCEL_AFTER_WAIT; ++index) { |
709 EXPECT_EQ(0, pool_.IdleSocketCount()); | 705 EXPECT_EQ(0, pool_.IdleSocketCount()); |
710 | 706 |
711 TestCompletionCallback callback; | 707 TestCompletionCallback callback; |
712 ClientSocketHandle handle; | 708 ClientSocketHandle handle; |
713 int rv = handle.Init("c", params_, LOW, callback.callback(), &pool_, | 709 int rv = handle.Init("c", params_, LOW, false, callback.callback(), &pool_, |
714 BoundNetLog()); | 710 BoundNetLog()); |
715 EXPECT_EQ(ERR_IO_PENDING, rv); | 711 EXPECT_EQ(ERR_IO_PENDING, rv); |
716 EXPECT_FALSE(handle.is_initialized()); | 712 EXPECT_FALSE(handle.is_initialized()); |
717 EXPECT_FALSE(handle.socket()); | 713 EXPECT_FALSE(handle.socket()); |
718 | 714 |
719 // Create the first socket, set the timer. | 715 // Create the first socket, set the timer. |
720 base::MessageLoop::current()->RunUntilIdle(); | 716 base::MessageLoop::current()->RunUntilIdle(); |
721 | 717 |
722 if (index == CANCEL_AFTER_WAIT) { | 718 if (index == CANCEL_AFTER_WAIT) { |
723 // Wait for the backup socket timer to fire. | 719 // Wait for the backup socket timer to fire. |
(...skipping 25 matching lines...) Expand all Loading... |
749 // The second socket will fail immediately. | 745 // The second socket will fail immediately. |
750 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET | 746 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET |
751 }; | 747 }; |
752 | 748 |
753 client_socket_factory_.set_client_socket_types(case_types, 2); | 749 client_socket_factory_.set_client_socket_types(case_types, 2); |
754 | 750 |
755 EXPECT_EQ(0, pool_.IdleSocketCount()); | 751 EXPECT_EQ(0, pool_.IdleSocketCount()); |
756 | 752 |
757 TestCompletionCallback callback; | 753 TestCompletionCallback callback; |
758 ClientSocketHandle handle; | 754 ClientSocketHandle handle; |
759 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, | 755 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_, |
760 BoundNetLog()); | 756 BoundNetLog()); |
761 EXPECT_EQ(ERR_IO_PENDING, rv); | 757 EXPECT_EQ(ERR_IO_PENDING, rv); |
762 EXPECT_FALSE(handle.is_initialized()); | 758 EXPECT_FALSE(handle.is_initialized()); |
763 EXPECT_FALSE(handle.socket()); | 759 EXPECT_FALSE(handle.socket()); |
764 | 760 |
765 // Create the first socket, set the timer. | 761 // Create the first socket, set the timer. |
766 base::MessageLoop::current()->RunUntilIdle(); | 762 base::MessageLoop::current()->RunUntilIdle(); |
767 | 763 |
768 // Wait for the backup socket timer to fire. | 764 // Wait for the backup socket timer to fire. |
769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( | 765 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( |
(...skipping 29 matching lines...) Expand all Loading... |
799 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET | 795 MockTransportClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET |
800 }; | 796 }; |
801 | 797 |
802 client_socket_factory_.set_client_socket_types(case_types, 2); | 798 client_socket_factory_.set_client_socket_types(case_types, 2); |
803 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5)); | 799 client_socket_factory_.set_delay(base::TimeDelta::FromSeconds(5)); |
804 | 800 |
805 EXPECT_EQ(0, pool_.IdleSocketCount()); | 801 EXPECT_EQ(0, pool_.IdleSocketCount()); |
806 | 802 |
807 TestCompletionCallback callback; | 803 TestCompletionCallback callback; |
808 ClientSocketHandle handle; | 804 ClientSocketHandle handle; |
809 int rv = handle.Init("b", params_, LOW, callback.callback(), &pool_, | 805 int rv = handle.Init("b", params_, LOW, false, callback.callback(), &pool_, |
810 BoundNetLog()); | 806 BoundNetLog()); |
811 EXPECT_EQ(ERR_IO_PENDING, rv); | 807 EXPECT_EQ(ERR_IO_PENDING, rv); |
812 EXPECT_FALSE(handle.is_initialized()); | 808 EXPECT_FALSE(handle.is_initialized()); |
813 EXPECT_FALSE(handle.socket()); | 809 EXPECT_FALSE(handle.socket()); |
814 | 810 |
815 // Create the first socket, set the timer. | 811 // Create the first socket, set the timer. |
816 base::MessageLoop::current()->RunUntilIdle(); | 812 base::MessageLoop::current()->RunUntilIdle(); |
817 | 813 |
818 // Wait for the backup socket timer to fire. | 814 // Wait for the backup socket timer to fire. |
819 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( | 815 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
856 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; | 852 MockTransportClientSocketFactory::MOCK_PENDING_CLIENT_SOCKET}; |
857 | 853 |
858 client_socket_factory_.set_client_socket_types(case_types, 2); | 854 client_socket_factory_.set_client_socket_types(case_types, 2); |
859 | 855 |
860 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 856 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
861 host_resolver_->rules() | 857 host_resolver_->rules() |
862 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 858 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
863 | 859 |
864 TestCompletionCallback callback; | 860 TestCompletionCallback callback; |
865 ClientSocketHandle handle; | 861 ClientSocketHandle handle; |
866 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, | 862 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool, |
867 BoundNetLog()); | 863 BoundNetLog()); |
868 EXPECT_EQ(ERR_IO_PENDING, rv); | 864 EXPECT_EQ(ERR_IO_PENDING, rv); |
869 EXPECT_FALSE(handle.is_initialized()); | 865 EXPECT_FALSE(handle.is_initialized()); |
870 EXPECT_FALSE(handle.socket()); | 866 EXPECT_FALSE(handle.socket()); |
871 | 867 |
872 EXPECT_EQ(OK, callback.WaitForResult()); | 868 EXPECT_EQ(OK, callback.WaitForResult()); |
873 EXPECT_TRUE(handle.is_initialized()); | 869 EXPECT_TRUE(handle.is_initialized()); |
874 EXPECT_TRUE(handle.socket()); | 870 EXPECT_TRUE(handle.socket()); |
875 IPEndPoint endpoint; | 871 IPEndPoint endpoint; |
876 handle.socket()->GetLocalAddress(&endpoint); | 872 handle.socket()->GetLocalAddress(&endpoint); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
908 client_socket_factory_.set_client_socket_types(case_types, 2); | 904 client_socket_factory_.set_client_socket_types(case_types, 2); |
909 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( | 905 client_socket_factory_.set_delay(base::TimeDelta::FromMilliseconds( |
910 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); | 906 TransportConnectJobHelper::kIPv6FallbackTimerInMs + 50)); |
911 | 907 |
912 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 908 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
913 host_resolver_->rules() | 909 host_resolver_->rules() |
914 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 910 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
915 | 911 |
916 TestCompletionCallback callback; | 912 TestCompletionCallback callback; |
917 ClientSocketHandle handle; | 913 ClientSocketHandle handle; |
918 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, | 914 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool, |
919 BoundNetLog()); | 915 BoundNetLog()); |
920 EXPECT_EQ(ERR_IO_PENDING, rv); | 916 EXPECT_EQ(ERR_IO_PENDING, rv); |
921 EXPECT_FALSE(handle.is_initialized()); | 917 EXPECT_FALSE(handle.is_initialized()); |
922 EXPECT_FALSE(handle.socket()); | 918 EXPECT_FALSE(handle.socket()); |
923 | 919 |
924 EXPECT_EQ(OK, callback.WaitForResult()); | 920 EXPECT_EQ(OK, callback.WaitForResult()); |
925 EXPECT_TRUE(handle.is_initialized()); | 921 EXPECT_TRUE(handle.is_initialized()); |
926 EXPECT_TRUE(handle.socket()); | 922 EXPECT_TRUE(handle.socket()); |
927 IPEndPoint endpoint; | 923 IPEndPoint endpoint; |
928 handle.socket()->GetLocalAddress(&endpoint); | 924 handle.socket()->GetLocalAddress(&endpoint); |
(...skipping 21 matching lines...) Expand all Loading... |
950 | 946 |
951 client_socket_factory_.set_default_client_socket_type( | 947 client_socket_factory_.set_default_client_socket_type( |
952 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 948 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
953 | 949 |
954 // Resolve an AddressList with only IPv6 addresses. | 950 // Resolve an AddressList with only IPv6 addresses. |
955 host_resolver_->rules() | 951 host_resolver_->rules() |
956 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); | 952 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); |
957 | 953 |
958 TestCompletionCallback callback; | 954 TestCompletionCallback callback; |
959 ClientSocketHandle handle; | 955 ClientSocketHandle handle; |
960 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, | 956 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool, |
961 BoundNetLog()); | 957 BoundNetLog()); |
962 EXPECT_EQ(ERR_IO_PENDING, rv); | 958 EXPECT_EQ(ERR_IO_PENDING, rv); |
963 EXPECT_FALSE(handle.is_initialized()); | 959 EXPECT_FALSE(handle.is_initialized()); |
964 EXPECT_FALSE(handle.socket()); | 960 EXPECT_FALSE(handle.socket()); |
965 | 961 |
966 EXPECT_EQ(OK, callback.WaitForResult()); | 962 EXPECT_EQ(OK, callback.WaitForResult()); |
967 EXPECT_TRUE(handle.is_initialized()); | 963 EXPECT_TRUE(handle.is_initialized()); |
968 EXPECT_TRUE(handle.socket()); | 964 EXPECT_TRUE(handle.socket()); |
969 IPEndPoint endpoint; | 965 IPEndPoint endpoint; |
970 handle.socket()->GetLocalAddress(&endpoint); | 966 handle.socket()->GetLocalAddress(&endpoint); |
(...skipping 12 matching lines...) Expand all Loading... |
983 NULL); | 979 NULL); |
984 | 980 |
985 client_socket_factory_.set_default_client_socket_type( | 981 client_socket_factory_.set_default_client_socket_type( |
986 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 982 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
987 | 983 |
988 // Resolve an AddressList with only IPv4 addresses. | 984 // Resolve an AddressList with only IPv4 addresses. |
989 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 985 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
990 | 986 |
991 TestCompletionCallback callback; | 987 TestCompletionCallback callback; |
992 ClientSocketHandle handle; | 988 ClientSocketHandle handle; |
993 int rv = handle.Init("a", params_, LOW, callback.callback(), &pool, | 989 int rv = handle.Init("a", params_, LOW, false, callback.callback(), &pool, |
994 BoundNetLog()); | 990 BoundNetLog()); |
995 EXPECT_EQ(ERR_IO_PENDING, rv); | 991 EXPECT_EQ(ERR_IO_PENDING, rv); |
996 EXPECT_FALSE(handle.is_initialized()); | 992 EXPECT_FALSE(handle.is_initialized()); |
997 EXPECT_FALSE(handle.socket()); | 993 EXPECT_FALSE(handle.socket()); |
998 | 994 |
999 EXPECT_EQ(OK, callback.WaitForResult()); | 995 EXPECT_EQ(OK, callback.WaitForResult()); |
1000 EXPECT_TRUE(handle.is_initialized()); | 996 EXPECT_TRUE(handle.is_initialized()); |
1001 EXPECT_TRUE(handle.socket()); | 997 EXPECT_TRUE(handle.socket()); |
1002 IPEndPoint endpoint; | 998 IPEndPoint endpoint; |
1003 handle.socket()->GetLocalAddress(&endpoint); | 999 handle.socket()->GetLocalAddress(&endpoint); |
(...skipping 14 matching lines...) Expand all Loading... |
1018 NULL); | 1014 NULL); |
1019 client_socket_factory_.set_default_client_socket_type( | 1015 client_socket_factory_.set_default_client_socket_type( |
1020 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 1016 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1021 // Resolve an AddressList with only IPv4 addresses. | 1017 // Resolve an AddressList with only IPv4 addresses. |
1022 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); | 1018 host_resolver_->rules()->AddIPLiteralRule("*", "1.1.1.1", std::string()); |
1023 | 1019 |
1024 TestCompletionCallback callback; | 1020 TestCompletionCallback callback; |
1025 ClientSocketHandle handle; | 1021 ClientSocketHandle handle; |
1026 // Enable TCP FastOpen in TransportSocketParams. | 1022 // Enable TCP FastOpen in TransportSocketParams. |
1027 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1023 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1028 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1024 handle.Init("a", params, LOW, false, callback.callback(), &pool, |
| 1025 BoundNetLog()); |
1029 EXPECT_EQ(OK, callback.WaitForResult()); | 1026 EXPECT_EQ(OK, callback.WaitForResult()); |
1030 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); | 1027 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); |
1031 } | 1028 } |
1032 | 1029 |
1033 // Test that if TCP FastOpen is enabled, it is set on the socket | 1030 // Test that if TCP FastOpen is enabled, it is set on the socket |
1034 // when we have only IPv6 addresses. | 1031 // when we have only IPv6 addresses. |
1035 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { | 1032 TEST_F(TransportClientSocketPoolTest, TCPFastOpenOnIPv6WithNoFallback) { |
1036 // Create a pool without backup jobs. | 1033 // Create a pool without backup jobs. |
1037 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); | 1034 ClientSocketPoolBaseHelper::set_connect_backup_jobs_enabled(false); |
1038 TransportClientSocketPool pool(kMaxSockets, | 1035 TransportClientSocketPool pool(kMaxSockets, |
1039 kMaxSocketsPerGroup, | 1036 kMaxSocketsPerGroup, |
1040 host_resolver_.get(), | 1037 host_resolver_.get(), |
1041 &client_socket_factory_, | 1038 &client_socket_factory_, |
1042 NULL); | 1039 NULL); |
1043 client_socket_factory_.set_default_client_socket_type( | 1040 client_socket_factory_.set_default_client_socket_type( |
1044 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); | 1041 MockTransportClientSocketFactory::MOCK_DELAYED_CLIENT_SOCKET); |
1045 // Resolve an AddressList with only IPv6 addresses. | 1042 // Resolve an AddressList with only IPv6 addresses. |
1046 host_resolver_->rules() | 1043 host_resolver_->rules() |
1047 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); | 1044 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,3:abcd::3:4:ff", std::string()); |
1048 | 1045 |
1049 TestCompletionCallback callback; | 1046 TestCompletionCallback callback; |
1050 ClientSocketHandle handle; | 1047 ClientSocketHandle handle; |
1051 // Enable TCP FastOpen in TransportSocketParams. | 1048 // Enable TCP FastOpen in TransportSocketParams. |
1052 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1049 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1053 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1050 handle.Init("a", params, LOW, false, callback.callback(), &pool, |
| 1051 BoundNetLog()); |
1054 EXPECT_EQ(OK, callback.WaitForResult()); | 1052 EXPECT_EQ(OK, callback.WaitForResult()); |
1055 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); | 1053 EXPECT_TRUE(handle.socket()->UsingTCPFastOpen()); |
1056 } | 1054 } |
1057 | 1055 |
1058 // Test that if TCP FastOpen is enabled, it does not do anything when there | 1056 // Test that if TCP FastOpen is enabled, it does not do anything when there |
1059 // is a IPv6 address with fallback to an IPv4 address. This test tests the case | 1057 // is a IPv6 address with fallback to an IPv4 address. This test tests the case |
1060 // when the IPv6 connect fails and the IPv4 one succeeds. | 1058 // when the IPv6 connect fails and the IPv4 one succeeds. |
1061 TEST_F(TransportClientSocketPoolTest, | 1059 TEST_F(TransportClientSocketPoolTest, |
1062 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { | 1060 NoTCPFastOpenOnIPv6FailureWithIPv4Fallback) { |
1063 // Create a pool without backup jobs. | 1061 // Create a pool without backup jobs. |
(...skipping 12 matching lines...) Expand all Loading... |
1076 }; | 1074 }; |
1077 client_socket_factory_.set_client_socket_types(case_types, 2); | 1075 client_socket_factory_.set_client_socket_types(case_types, 2); |
1078 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1076 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1079 host_resolver_->rules() | 1077 host_resolver_->rules() |
1080 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 1078 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
1081 | 1079 |
1082 TestCompletionCallback callback; | 1080 TestCompletionCallback callback; |
1083 ClientSocketHandle handle; | 1081 ClientSocketHandle handle; |
1084 // Enable TCP FastOpen in TransportSocketParams. | 1082 // Enable TCP FastOpen in TransportSocketParams. |
1085 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1083 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1086 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1084 handle.Init("a", params, LOW, false, callback.callback(), &pool, |
| 1085 BoundNetLog()); |
1087 EXPECT_EQ(OK, callback.WaitForResult()); | 1086 EXPECT_EQ(OK, callback.WaitForResult()); |
1088 // Verify that the socket used is connected to the fallback IPv4 address. | 1087 // Verify that the socket used is connected to the fallback IPv4 address. |
1089 IPEndPoint endpoint; | 1088 IPEndPoint endpoint; |
1090 handle.socket()->GetLocalAddress(&endpoint); | 1089 handle.socket()->GetLocalAddress(&endpoint); |
1091 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); | 1090 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); |
1092 EXPECT_EQ(2, client_socket_factory_.allocation_count()); | 1091 EXPECT_EQ(2, client_socket_factory_.allocation_count()); |
1093 // Verify that TCP FastOpen was not turned on for the socket. | 1092 // Verify that TCP FastOpen was not turned on for the socket. |
1094 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); | 1093 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); |
1095 } | 1094 } |
1096 | 1095 |
(...skipping 18 matching lines...) Expand all Loading... |
1115 }; | 1114 }; |
1116 client_socket_factory_.set_client_socket_types(case_types, 2); | 1115 client_socket_factory_.set_client_socket_types(case_types, 2); |
1117 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. | 1116 // Resolve an AddressList with a IPv6 address first and then a IPv4 address. |
1118 host_resolver_->rules() | 1117 host_resolver_->rules() |
1119 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); | 1118 ->AddIPLiteralRule("*", "2:abcd::3:4:ff,2.2.2.2", std::string()); |
1120 | 1119 |
1121 TestCompletionCallback callback; | 1120 TestCompletionCallback callback; |
1122 ClientSocketHandle handle; | 1121 ClientSocketHandle handle; |
1123 // Enable TCP FastOpen in TransportSocketParams. | 1122 // Enable TCP FastOpen in TransportSocketParams. |
1124 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); | 1123 scoped_refptr<TransportSocketParams> params = CreateParamsForTCPFastOpen(); |
1125 handle.Init("a", params, LOW, callback.callback(), &pool, BoundNetLog()); | 1124 handle.Init("a", params, LOW, false, callback.callback(), &pool, |
| 1125 BoundNetLog()); |
1126 EXPECT_EQ(OK, callback.WaitForResult()); | 1126 EXPECT_EQ(OK, callback.WaitForResult()); |
1127 // Verify that the socket used is connected to the IPv6 address. | 1127 // Verify that the socket used is connected to the IPv6 address. |
1128 IPEndPoint endpoint; | 1128 IPEndPoint endpoint; |
1129 handle.socket()->GetLocalAddress(&endpoint); | 1129 handle.socket()->GetLocalAddress(&endpoint); |
1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); | 1130 EXPECT_EQ(kIPv6AddressSize, endpoint.address().size()); |
1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); | 1131 EXPECT_EQ(1, client_socket_factory_.allocation_count()); |
1132 // Verify that TCP FastOpen was not turned on for the socket. | 1132 // Verify that TCP FastOpen was not turned on for the socket. |
1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); | 1133 EXPECT_FALSE(handle.socket()->UsingTCPFastOpen()); |
1134 } | 1134 } |
1135 | 1135 |
1136 } // namespace | 1136 } // namespace |
1137 | 1137 |
1138 } // namespace net | 1138 } // namespace net |
OLD | NEW |