Chromium Code Reviews| Index: net/socket/client_socket_pool_base_unittest.cc |
| diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc |
| index f8e3009a82023f26b27b8943fdd3851c5da90781..51aa25de0f40c5305b201f57fdbded6269543e59 100644 |
| --- a/net/socket/client_socket_pool_base_unittest.cc |
| +++ b/net/socket/client_socket_pool_base_unittest.cc |
| @@ -2032,7 +2032,7 @@ TEST_F(ClientSocketPoolBaseTest, BackupSocketCancelAtMaxSockets) { |
| EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); |
| } |
| -TEST_F(ClientSocketPoolBaseTest, CancelBackupSocketWhenThereAreNoRequests) { |
| +TEST_F(ClientSocketPoolBaseTest, CancelBackupSocketAfterCancelingAllRequests) { |
| CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); |
| pool_->EnableConnectBackupJobs(); |
| @@ -2056,6 +2056,34 @@ TEST_F(ClientSocketPoolBaseTest, CancelBackupSocketWhenThereAreNoRequests) { |
| EXPECT_EQ(1, pool_->NumConnectJobsInGroup("bar")); |
| } |
| +TEST_F(ClientSocketPoolBaseTest, CancelBackupSocketAfterFinishingAllRequests) { |
| + CreatePool(kDefaultMaxSockets, kDefaultMaxSockets); |
| + pool_->EnableConnectBackupJobs(); |
| + |
| + // Create the first socket and set to ERR_IO_PENDING. This starts the backup |
| + // timer. |
| + connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); |
| + ClientSocketHandle handle; |
| + TestCompletionCallback callback; |
| + EXPECT_EQ(ERR_IO_PENDING, handle.Init("bar", params_, kDefaultPriority, |
| + &callback, pool_, BoundNetLog())); |
| + connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); |
|
Mike Belshe
2010/09/27 19:00:49
nit: line 2070 is unnecessary due to line 2065.
willchan no longer on Chromium
2010/09/27 19:05:04
It's necessary. Waiting != Pending. We need a jo
Mike Belshe
2010/09/28 15:14:00
Doh - I misread. Somehow I read them as the same
|
| + ClientSocketHandle handle2; |
| + TestCompletionCallback callback2; |
| + EXPECT_EQ(ERR_IO_PENDING, handle2.Init("bar", params_, kDefaultPriority, |
| + &callback2, pool_, BoundNetLog())); |
| + ASSERT_TRUE(pool_->HasGroup("bar")); |
| + EXPECT_EQ(2, pool_->NumConnectJobsInGroup("bar")); |
| + |
| + // Cancel request 1 and then complete request 2. With the requests finished, |
| + // the backup timer should be cancelled. |
| + handle.Reset(); |
| + EXPECT_EQ(OK, callback2.WaitForResult()); |
| + // Wait for the backup timer to fire (add some slop to ensure it fires) |
| + PlatformThread::Sleep(ClientSocketPool::kMaxConnectRetryIntervalMs / 2 * 3); |
|
Paweł Hajdan Jr.
2010/09/28 08:08:34
Can we use some smarter method to wait than Sleep?
|
| + MessageLoop::current()->RunAllPending(); |
|
Mike Belshe
2010/09/27 19:00:49
nit: We're not actually verifying that the backup
willchan no longer on Chromium
2010/09/27 19:05:04
Well, previously we would hit a LOG(DFATAL) saying
|
| +} |
| + |
| // Test delayed socket binding for the case where we have two connects, |
| // and while one is waiting on a connect, the other frees up. |
| // The socket waiting on a connect should switch immediately to the freed |