| Index: net/socket/client_socket_pool_base_unittest.cc
|
| ===================================================================
|
| --- net/socket/client_socket_pool_base_unittest.cc (revision 132618)
|
| +++ net/socket/client_socket_pool_base_unittest.cc (working copy)
|
| @@ -3416,173 +3416,6 @@
|
| EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
|
| }
|
|
|
| -class MockLayeredPool : public LayeredPool {
|
| - public:
|
| - MockLayeredPool(TestClientSocketPool* pool,
|
| - const std::string& group_name)
|
| - : pool_(pool),
|
| - params_(new TestSocketParams),
|
| - group_name_(group_name),
|
| - can_release_connection_(true) {
|
| - pool_->AddLayeredPool(this);
|
| - }
|
| -
|
| - ~MockLayeredPool() {
|
| - pool_->RemoveLayeredPool(this);
|
| - }
|
| -
|
| - int RequestSocket(TestClientSocketPool* pool) {
|
| - return handle_.Init(group_name_, params_, kDefaultPriority,
|
| - callback_.callback(), pool, BoundNetLog());
|
| - }
|
| -
|
| - int RequestSocketWithoutLimits(TestClientSocketPool* pool) {
|
| - params_->set_ignore_limits(true);
|
| - return handle_.Init(group_name_, params_, kDefaultPriority,
|
| - callback_.callback(), pool, BoundNetLog());
|
| - }
|
| -
|
| - bool ReleaseOneConnection() {
|
| - if (!handle_.is_initialized() || !can_release_connection_) {
|
| - return false;
|
| - }
|
| - handle_.socket()->Disconnect();
|
| - handle_.Reset();
|
| - return true;
|
| - }
|
| -
|
| - void set_can_release_connection(bool can_release_connection) {
|
| - can_release_connection_ = can_release_connection;
|
| - }
|
| -
|
| - MOCK_METHOD0(CloseOneIdleConnection, bool());
|
| -
|
| - private:
|
| - TestClientSocketPool* const pool_;
|
| - scoped_refptr<TestSocketParams> params_;
|
| - ClientSocketHandle handle_;
|
| - TestCompletionCallback callback_;
|
| - const std::string group_name_;
|
| - bool can_release_connection_;
|
| -};
|
| -
|
| -TEST_F(ClientSocketPoolBaseTest, FailToCloseIdleSocketsNotHeldByLayeredPool) {
|
| - CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
|
| - connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
|
| -
|
| - MockLayeredPool mock_layered_pool(pool_.get(), "foo");
|
| - EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
|
| - .WillOnce(Return(false));
|
| - EXPECT_FALSE(pool_->CloseOneIdleConnectionInLayeredPool());
|
| -}
|
| -
|
| -TEST_F(ClientSocketPoolBaseTest, ForciblyCloseIdleSocketsHeldByLayeredPool) {
|
| - CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
|
| - connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
|
| -
|
| - MockLayeredPool mock_layered_pool(pool_.get(), "foo");
|
| - EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
|
| - .WillOnce(Invoke(&mock_layered_pool,
|
| - &MockLayeredPool::ReleaseOneConnection));
|
| - EXPECT_TRUE(pool_->CloseOneIdleConnectionInLayeredPool());
|
| -}
|
| -
|
| -// This test exercises the codepath which caused http://crbug.com/109876
|
| -TEST_F(ClientSocketPoolBaseTest,
|
| - CloseIdleSocketsHeldByLayeredPoolInSameGroupWhenNeeded) {
|
| - CreatePool(2, 2);
|
| - std::list<TestConnectJob::JobType> job_types;
|
| - job_types.push_back(TestConnectJob::kMockJob);
|
| - job_types.push_back(TestConnectJob::kMockJob);
|
| - job_types.push_back(TestConnectJob::kMockFailingJob);
|
| - job_types.push_back(TestConnectJob::kMockJob);
|
| - connect_job_factory_->set_job_types(&job_types);
|
| -
|
| - ClientSocketHandle handle1;
|
| - TestCompletionCallback callback1;
|
| - EXPECT_EQ(OK, handle1.Init("group1",
|
| - params_,
|
| - kDefaultPriority,
|
| - callback1.callback(),
|
| - pool_.get(),
|
| - BoundNetLog()));
|
| -
|
| - MockLayeredPool mock_layered_pool(pool_.get(), "group2");
|
| - EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
|
| - .WillRepeatedly(Invoke(&mock_layered_pool,
|
| - &MockLayeredPool::ReleaseOneConnection));
|
| - mock_layered_pool.set_can_release_connection(false);
|
| -
|
| - // This connection attempt will fail when the next request causes the
|
| - // MockLayeredPool to delete the socket it's holding. This request is
|
| - // needed to trigger the destruction of the "group2" Group.
|
| - ClientSocketHandle handle3;
|
| - TestCompletionCallback callback3;
|
| - EXPECT_EQ(ERR_IO_PENDING, handle3.Init("group2",
|
| - params_,
|
| - kDefaultPriority,
|
| - callback3.callback(),
|
| - pool_.get(),
|
| - BoundNetLog()));
|
| -
|
| - mock_layered_pool.set_can_release_connection(true);
|
| - ClientSocketHandle handle4;
|
| - TestCompletionCallback callback4;
|
| - EXPECT_EQ(OK, handle4.Init("group2",
|
| - params_,
|
| - kDefaultPriority,
|
| - callback4.callback(),
|
| - pool_.get(),
|
| - BoundNetLog()));
|
| -}
|
| -
|
| -TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketsHeldByLayeredPoolWhenNeeded) {
|
| - CreatePool(1, 1);
|
| - connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
|
| -
|
| - MockLayeredPool mock_layered_pool(pool_.get(), "foo");
|
| - EXPECT_EQ(OK, mock_layered_pool.RequestSocket(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool, CloseOneIdleConnection())
|
| - .WillOnce(Invoke(&mock_layered_pool,
|
| - &MockLayeredPool::ReleaseOneConnection));
|
| - ClientSocketHandle handle;
|
| - TestCompletionCallback callback;
|
| - EXPECT_EQ(OK, handle.Init("a",
|
| - params_,
|
| - kDefaultPriority,
|
| - callback.callback(),
|
| - pool_.get(),
|
| - BoundNetLog()));
|
| -}
|
| -
|
| -TEST_F(ClientSocketPoolBaseTest,
|
| - CloseMultipleIdleSocketsHeldByLayeredPoolWhenNeeded) {
|
| - CreatePool(1, 1);
|
| - connect_job_factory_->set_job_type(TestConnectJob::kMockJob);
|
| -
|
| - MockLayeredPool mock_layered_pool1(pool_.get(), "foo");
|
| - EXPECT_EQ(OK, mock_layered_pool1.RequestSocket(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool1, CloseOneIdleConnection())
|
| - .WillRepeatedly(Invoke(&mock_layered_pool1,
|
| - &MockLayeredPool::ReleaseOneConnection));
|
| - MockLayeredPool mock_layered_pool2(pool_.get(), "bar");
|
| - EXPECT_EQ(OK, mock_layered_pool2.RequestSocketWithoutLimits(pool_.get()));
|
| - EXPECT_CALL(mock_layered_pool2, CloseOneIdleConnection())
|
| - .WillRepeatedly(Invoke(&mock_layered_pool2,
|
| - &MockLayeredPool::ReleaseOneConnection));
|
| - ClientSocketHandle handle;
|
| - TestCompletionCallback callback;
|
| - EXPECT_EQ(OK, handle.Init("a",
|
| - params_,
|
| - kDefaultPriority,
|
| - callback.callback(),
|
| - pool_.get(),
|
| - BoundNetLog()));
|
| -}
|
| -
|
| } // namespace
|
|
|
| } // namespace net
|
|
|