OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/client_socket_pool_base.h" | 5 #include "net/socket/client_socket_pool_base.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/platform_thread.h" | 10 #include "base/platform_thread.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
24 | 24 |
25 namespace net { | 25 namespace net { |
26 | 26 |
27 namespace { | 27 namespace { |
28 | 28 |
29 const int kDefaultMaxSockets = 4; | 29 const int kDefaultMaxSockets = 4; |
30 const int kDefaultMaxSocketsPerGroup = 2; | 30 const int kDefaultMaxSocketsPerGroup = 2; |
31 const net::RequestPriority kDefaultPriority = MEDIUM; | 31 const net::RequestPriority kDefaultPriority = MEDIUM; |
32 | 32 |
33 typedef const void* TestSocketParams; | 33 struct TestSocketParams {}; |
34 typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase; | 34 typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase; |
35 | 35 |
36 class MockClientSocket : public ClientSocket { | 36 class MockClientSocket : public ClientSocket { |
37 public: | 37 public: |
38 MockClientSocket() : connected_(false) {} | 38 MockClientSocket() : connected_(false) {} |
39 | 39 |
40 // Socket methods: | 40 // Socket methods: |
41 virtual int Read( | 41 virtual int Read( |
42 IOBuffer* /* buf */, int /* len */, CompletionCallback* /* callback */) { | 42 IOBuffer* /* buf */, int /* len */, CompletionCallback* /* callback */) { |
43 return ERR_UNEXPECTED; | 43 return ERR_UNEXPECTED; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 unused_idle_socket_timeout, used_idle_socket_timeout, | 292 unused_idle_socket_timeout, used_idle_socket_timeout, |
293 connect_job_factory, NULL) {} | 293 connect_job_factory, NULL) {} |
294 | 294 |
295 virtual int RequestSocket( | 295 virtual int RequestSocket( |
296 const std::string& group_name, | 296 const std::string& group_name, |
297 const void* params, | 297 const void* params, |
298 net::RequestPriority priority, | 298 net::RequestPriority priority, |
299 ClientSocketHandle* handle, | 299 ClientSocketHandle* handle, |
300 CompletionCallback* callback, | 300 CompletionCallback* callback, |
301 const BoundNetLog& net_log) { | 301 const BoundNetLog& net_log) { |
| 302 const TestSocketParams* casted_socket_params = |
| 303 static_cast<const TestSocketParams*>(params); |
302 return base_.RequestSocket( | 304 return base_.RequestSocket( |
303 group_name, params, priority, handle, callback, net_log); | 305 group_name, *casted_socket_params, priority, handle, callback, net_log); |
304 } | 306 } |
305 | 307 |
306 virtual void CancelRequest( | 308 virtual void CancelRequest( |
307 const std::string& group_name, | 309 const std::string& group_name, |
308 const ClientSocketHandle* handle) { | 310 const ClientSocketHandle* handle) { |
309 base_.CancelRequest(group_name, handle); | 311 base_.CancelRequest(group_name, handle); |
310 } | 312 } |
311 | 313 |
312 virtual void ReleaseSocket( | 314 virtual void ReleaseSocket( |
313 const std::string& group_name, | 315 const std::string& group_name, |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 pool_ = new TestClientSocketPool(max_sockets, | 433 pool_ = new TestClientSocketPool(max_sockets, |
432 max_sockets_per_group, | 434 max_sockets_per_group, |
433 histograms_, | 435 histograms_, |
434 unused_idle_socket_timeout, | 436 unused_idle_socket_timeout, |
435 used_idle_socket_timeout, | 437 used_idle_socket_timeout, |
436 connect_job_factory_); | 438 connect_job_factory_); |
437 } | 439 } |
438 | 440 |
439 int StartRequest(const std::string& group_name, | 441 int StartRequest(const std::string& group_name, |
440 net::RequestPriority priority) { | 442 net::RequestPriority priority) { |
| 443 TestSocketParams params; |
441 return StartRequestUsingPool<TestClientSocketPool, TestSocketParams>( | 444 return StartRequestUsingPool<TestClientSocketPool, TestSocketParams>( |
442 pool_, group_name, priority, NULL); | 445 pool_, group_name, priority, params); |
443 } | 446 } |
444 | 447 |
445 virtual void TearDown() { | 448 virtual void TearDown() { |
446 // We post all of our delayed tasks with a 2ms delay. I.e. they don't | 449 // We post all of our delayed tasks with a 2ms delay. I.e. they don't |
447 // actually become pending until 2ms after they have been created. In order | 450 // actually become pending until 2ms after they have been created. In order |
448 // to flush all tasks, we need to wait so that we know there are no | 451 // to flush all tasks, we need to wait so that we know there are no |
449 // soon-to-be-pending tasks waiting. | 452 // soon-to-be-pending tasks waiting. |
450 PlatformThread::Sleep(10); | 453 PlatformThread::Sleep(10); |
451 MessageLoop::current()->RunAllPending(); | 454 MessageLoop::current()->RunAllPending(); |
452 | 455 |
(...skipping 14 matching lines...) Expand all Loading... |
467 }; | 470 }; |
468 | 471 |
469 // Helper function which explicitly specifies the template parameters, since | 472 // Helper function which explicitly specifies the template parameters, since |
470 // the compiler will infer (in this case, incorrectly) that NULL is of type int. | 473 // the compiler will infer (in this case, incorrectly) that NULL is of type int. |
471 int InitHandle(ClientSocketHandle* handle, | 474 int InitHandle(ClientSocketHandle* handle, |
472 const std::string& group_name, | 475 const std::string& group_name, |
473 net::RequestPriority priority, | 476 net::RequestPriority priority, |
474 CompletionCallback* callback, | 477 CompletionCallback* callback, |
475 const scoped_refptr<TestClientSocketPool>& pool, | 478 const scoped_refptr<TestClientSocketPool>& pool, |
476 const BoundNetLog& net_log) { | 479 const BoundNetLog& net_log) { |
| 480 TestSocketParams params; |
477 return handle->Init<TestSocketParams, TestClientSocketPool>( | 481 return handle->Init<TestSocketParams, TestClientSocketPool>( |
478 group_name, NULL, priority, callback, pool, net_log); | 482 group_name, params, priority, callback, pool, net_log); |
479 } | 483 } |
480 | 484 |
481 // Even though a timeout is specified, it doesn't time out on a synchronous | 485 // Even though a timeout is specified, it doesn't time out on a synchronous |
482 // completion. | 486 // completion. |
483 TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) { | 487 TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) { |
484 TestConnectJobDelegate delegate; | 488 TestConnectJobDelegate delegate; |
485 ClientSocketHandle ignored; | 489 ClientSocketHandle ignored; |
| 490 TestSocketParams params; |
486 TestClientSocketPoolBase::Request request( | 491 TestClientSocketPoolBase::Request request( |
487 &ignored, NULL, kDefaultPriority, NULL, BoundNetLog()); | 492 &ignored, NULL, kDefaultPriority, params, BoundNetLog()); |
488 scoped_ptr<TestConnectJob> job( | 493 scoped_ptr<TestConnectJob> job( |
489 new TestConnectJob(TestConnectJob::kMockJob, | 494 new TestConnectJob(TestConnectJob::kMockJob, |
490 "a", | 495 "a", |
491 request, | 496 request, |
492 base::TimeDelta::FromMicroseconds(1), | 497 base::TimeDelta::FromMicroseconds(1), |
493 &delegate, | 498 &delegate, |
494 &client_socket_factory_, | 499 &client_socket_factory_, |
495 NULL)); | 500 NULL)); |
496 EXPECT_EQ(OK, job->Connect()); | 501 EXPECT_EQ(OK, job->Connect()); |
497 } | 502 } |
498 | 503 |
499 TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) { | 504 TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) { |
500 TestConnectJobDelegate delegate; | 505 TestConnectJobDelegate delegate; |
501 ClientSocketHandle ignored; | 506 ClientSocketHandle ignored; |
502 CapturingNetLog log(CapturingNetLog::kUnbounded); | 507 CapturingNetLog log(CapturingNetLog::kUnbounded); |
503 | 508 |
| 509 TestSocketParams params; |
504 TestClientSocketPoolBase::Request request( | 510 TestClientSocketPoolBase::Request request( |
505 &ignored, NULL, kDefaultPriority, NULL, BoundNetLog()); | 511 &ignored, NULL, kDefaultPriority, params, BoundNetLog()); |
506 // Deleted by TestConnectJobDelegate. | 512 // Deleted by TestConnectJobDelegate. |
507 TestConnectJob* job = | 513 TestConnectJob* job = |
508 new TestConnectJob(TestConnectJob::kMockPendingJob, | 514 new TestConnectJob(TestConnectJob::kMockPendingJob, |
509 "a", | 515 "a", |
510 request, | 516 request, |
511 base::TimeDelta::FromMicroseconds(1), | 517 base::TimeDelta::FromMicroseconds(1), |
512 &delegate, | 518 &delegate, |
513 &client_socket_factory_, | 519 &client_socket_factory_, |
514 &log); | 520 &log); |
515 ASSERT_EQ(ERR_IO_PENDING, job->Connect()); | 521 ASSERT_EQ(ERR_IO_PENDING, job->Connect()); |
(...skipping 1254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1770 EXPECT_EQ(ERR_IO_PENDING, | 1776 EXPECT_EQ(ERR_IO_PENDING, |
1771 InitHandle(&handle, "a", kDefaultPriority, | 1777 InitHandle(&handle, "a", kDefaultPriority, |
1772 &callback, pool_, BoundNetLog())); | 1778 &callback, pool_, BoundNetLog())); |
1773 EXPECT_EQ(OK, callback.WaitForResult()); | 1779 EXPECT_EQ(OK, callback.WaitForResult()); |
1774 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); | 1780 EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); |
1775 } | 1781 } |
1776 | 1782 |
1777 } // namespace | 1783 } // namespace |
1778 | 1784 |
1779 } // namespace net | 1785 } // namespace net |
OLD | NEW |