blob: 04d21584803721ff5c0c590bac33749581382a42 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/http/http_pipelined_host_forced.h"
#include "base/memory/scoped_ptr.h"
#include "net/base/ssl_config_service.h"
#include "net/http/http_pipelined_host_test_util.h"
#include "net/proxy/proxy_info.h"
#include "net/socket/client_socket_handle.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::NiceMock;
using testing::Ref;
using testing::Return;
namespace net {
namespace {
HttpPipelinedStream* kDummyStream =
reinterpret_cast<HttpPipelinedStream*>(24);
class HttpPipelinedHostForcedTest : public testing::Test {
public:
HttpPipelinedHostForcedTest()
: key_(HostPortPair("host", 123)),
factory_(new MockPipelineFactory), // Owned by |host_|.
host_(new HttpPipelinedHostForced(&delegate_, key_, factory_)) {
}
MockPipeline* AddTestPipeline() {
MockPipeline* pipeline = new MockPipeline(0, true, true);
EXPECT_CALL(*factory_, CreateNewPipeline(&connection_, host_.get(),
MatchesOrigin(key_.origin()),
Ref(ssl_config_), Ref(proxy_info_),
Ref(net_log_), true,
kProtoSPDY2))
.Times(1)
.WillOnce(Return(pipeline));
EXPECT_CALL(*pipeline, CreateNewStream())
.Times(1)
.WillOnce(Return(kDummyStream));
EXPECT_EQ(kDummyStream, host_->CreateStreamOnNewPipeline(
&connection_, ssl_config_, proxy_info_, net_log_, true,
kProtoSPDY2));
return pipeline;
}
ClientSocketHandle connection_;
NiceMock<MockHostDelegate> delegate_;
HttpPipelinedHost::Key key_;
MockPipelineFactory* factory_;
scoped_ptr<HttpPipelinedHostForced> host_;
SSLConfig ssl_config_;
ProxyInfo proxy_info_;
BoundNetLog net_log_;
};
TEST_F(HttpPipelinedHostForcedTest, Delegate) {
EXPECT_TRUE(key_.origin().Equals(host_->GetKey().origin()));
}
TEST_F(HttpPipelinedHostForcedTest, SingleUser) {
EXPECT_FALSE(host_->IsExistingPipelineAvailable());
MockPipeline* pipeline = AddTestPipeline();
EXPECT_TRUE(host_->IsExistingPipelineAvailable());
EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get()))
.Times(1);
EXPECT_CALL(delegate_, OnHostIdle(host_.get()))
.Times(1);
host_->OnPipelineHasCapacity(pipeline);
}
TEST_F(HttpPipelinedHostForcedTest, ReuseExisting) {
EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline());
MockPipeline* pipeline = AddTestPipeline();
EXPECT_CALL(*pipeline, CreateNewStream())
.Times(1)
.WillOnce(Return(kDummyStream));
EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline());
pipeline->SetState(1, true, true);
EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get()))
.Times(1);
EXPECT_CALL(delegate_, OnHostIdle(host_.get()))
.Times(0);
host_->OnPipelineHasCapacity(pipeline);
pipeline->SetState(0, true, true);
EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get()))
.Times(1);
EXPECT_CALL(delegate_, OnHostIdle(host_.get()))
.Times(1);
host_->OnPipelineHasCapacity(pipeline);
}
} // anonymous namespace
} // namespace net