| Index: net/http/http_stream_factory_impl_unittest.cc
|
| diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
|
| index 67fe38c5458529de58356a15e206fd93af4bffef..87b9d6f861d7674bbb0ccf341196b2deb7245276 100644
|
| --- a/net/http/http_stream_factory_impl_unittest.cc
|
| +++ b/net/http/http_stream_factory_impl_unittest.cc
|
| @@ -11,10 +11,8 @@
|
|
|
| #include "base/compiler_specific.h"
|
| #include "base/macros.h"
|
| -#include "base/run_loop.h"
|
| #include "net/base/port_util.h"
|
| #include "net/base/test_completion_callback.h"
|
| -#include "net/base/test_data_directory.h"
|
| #include "net/cert/mock_cert_verifier.h"
|
| #include "net/dns/mock_host_resolver.h"
|
| #include "net/http/http_auth_handler_factory.h"
|
| @@ -30,14 +28,8 @@
|
| #include "net/net_features.h"
|
| #include "net/proxy/proxy_info.h"
|
| #include "net/proxy/proxy_service.h"
|
| -#include "net/quic/quic_http_utils.h"
|
| #include "net/quic/quic_server_id.h"
|
| -#include "net/quic/test_tools/crypto_test_utils.h"
|
| -#include "net/quic/test_tools/mock_crypto_client_stream_factory.h"
|
| -#include "net/quic/test_tools/mock_random.h"
|
| #include "net/quic/test_tools/quic_stream_factory_peer.h"
|
| -#include "net/quic/test_tools/quic_test_packet_maker.h"
|
| -#include "net/quic/test_tools/quic_test_utils.h"
|
| #include "net/socket/client_socket_handle.h"
|
| #include "net/socket/mock_client_socket_pool_manager.h"
|
| #include "net/socket/next_proto.h"
|
| @@ -47,8 +39,6 @@
|
| #include "net/spdy/spdy_test_util_common.h"
|
| #include "net/ssl/ssl_config_service.h"
|
| #include "net/ssl/ssl_config_service_defaults.h"
|
| -#include "net/test/cert_test_util.h"
|
| -
|
| // This file can be included from net/http even though
|
| // it is in net/websockets because it doesn't
|
| // introduce any link dependency to net/websockets.
|
| @@ -57,7 +47,6 @@
|
|
|
| #if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
|
| #include "net/http/bidirectional_stream_job.h"
|
| -#include "net/http/bidirectional_stream_request_info.h"
|
| #endif
|
|
|
| namespace net {
|
| @@ -749,72 +738,6 @@
|
| }
|
| }
|
|
|
| -#if BUILDFLAG(ENABLE_BIDIRECTIONAL_STREAM)
|
| -// BidirectionalStreamJob::Delegate to wait until response headers are
|
| -// received.
|
| -class TestBidirectionalDelegate : public BidirectionalStreamJob::Delegate {
|
| - public:
|
| - void WaitUntilDone() { loop_.Run(); }
|
| -
|
| - const SpdyHeaderBlock& response_headers() const { return response_headers_; }
|
| -
|
| - private:
|
| - void OnHeadersSent() override {}
|
| - void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override {
|
| - response_headers_ = response_headers;
|
| - loop_.Quit();
|
| - }
|
| - void OnDataRead(int bytes_read) override { NOTREACHED(); }
|
| - void OnDataSent() override { NOTREACHED(); }
|
| - void OnTrailersReceived(const SpdyHeaderBlock& trailers) override {
|
| - NOTREACHED();
|
| - }
|
| - void OnFailed(int error) override { NOTREACHED(); }
|
| - base::RunLoop loop_;
|
| - SpdyHeaderBlock response_headers_;
|
| -};
|
| -
|
| -// Helper class to encapsulate MockReads and MockWrites for QUIC.
|
| -// Simplify ownership issues and the interaction with the MockSocketFactory.
|
| -class MockQuicData {
|
| - public:
|
| - MockQuicData() : packet_number_(0) {}
|
| -
|
| - ~MockQuicData() { STLDeleteElements(&packets_); }
|
| -
|
| - void AddRead(scoped_ptr<QuicEncryptedPacket> packet) {
|
| - reads_.push_back(
|
| - MockRead(ASYNC, packet->data(), packet->length(), packet_number_++));
|
| - packets_.push_back(packet.release());
|
| - }
|
| -
|
| - void AddRead(IoMode mode, int rv) {
|
| - reads_.push_back(MockRead(mode, rv, packet_number_++));
|
| - }
|
| -
|
| - void AddWrite(scoped_ptr<QuicEncryptedPacket> packet) {
|
| - writes_.push_back(MockWrite(SYNCHRONOUS, packet->data(), packet->length(),
|
| - packet_number_++));
|
| - packets_.push_back(packet.release());
|
| - }
|
| -
|
| - void AddSocketDataToFactory(MockClientSocketFactory* factory) {
|
| - MockRead* reads = reads_.empty() ? nullptr : &reads_[0];
|
| - MockWrite* writes = writes_.empty() ? nullptr : &writes_[0];
|
| - socket_data_.reset(
|
| - new SequencedSocketData(reads, reads_.size(), writes, writes_.size()));
|
| - factory->AddSocketDataProvider(socket_data_.get());
|
| - }
|
| -
|
| - private:
|
| - std::vector<QuicEncryptedPacket*> packets_;
|
| - std::vector<MockWrite> writes_;
|
| - std::vector<MockRead> reads_;
|
| - size_t packet_number_;
|
| - scoped_ptr<SequencedSocketData> socket_data_;
|
| -};
|
| -#endif
|
| -
|
| } // namespace
|
|
|
| TEST_P(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
|
| @@ -1519,161 +1442,6 @@
|
| ->num_orphaned_jobs());
|
| }
|
|
|
| -class HttpStreamFactoryBidirectionalQuicTest
|
| - : public ::testing::Test,
|
| - public ::testing::WithParamInterface<QuicVersion> {
|
| - protected:
|
| - HttpStreamFactoryBidirectionalQuicTest()
|
| - : clock_(new MockClock),
|
| - packet_maker_(GetParam(), 0, clock_, "www.example.org"),
|
| - random_generator_(0),
|
| - proxy_service_(ProxyService::CreateDirect()),
|
| - ssl_config_service_(new SSLConfigServiceDefaults) {
|
| - clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
|
| - }
|
| -
|
| - void Initialize() {
|
| - params_.enable_quic = true;
|
| - params_.http_server_properties = http_server_properties_.GetWeakPtr();
|
| - params_.quic_host_whitelist.insert("www.example.org");
|
| - params_.quic_random = &random_generator_;
|
| - params_.quic_clock = clock_;
|
| -
|
| - // Load a certificate that is valid for *.example.org
|
| - scoped_refptr<X509Certificate> test_cert(
|
| - ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
|
| - EXPECT_TRUE(test_cert.get());
|
| - verify_details_.cert_verify_result.verified_cert = test_cert;
|
| - verify_details_.cert_verify_result.is_issued_by_known_root = true;
|
| - crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
|
| - crypto_client_stream_factory_.set_handshake_mode(
|
| - MockCryptoClientStream::CONFIRM_HANDSHAKE);
|
| - params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
|
| - params_.quic_supported_versions = test::SupportedVersions(GetParam());
|
| - params_.transport_security_state = &transport_security_state_;
|
| - params_.host_resolver = &host_resolver_;
|
| - params_.proxy_service = proxy_service_.get();
|
| - params_.ssl_config_service = ssl_config_service_.get();
|
| - params_.client_socket_factory = &socket_factory_;
|
| - session_.reset(new HttpNetworkSession(params_));
|
| - session_->quic_stream_factory()->set_require_confirmation(false);
|
| - }
|
| -
|
| - void AddQuicAlternativeService() {
|
| - const AlternativeService alternative_service(QUIC, "www.example.org", 443);
|
| - AlternativeServiceInfoVector alternative_service_info_vector;
|
| - base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
|
| - alternative_service_info_vector.push_back(
|
| - AlternativeServiceInfo(alternative_service, 1.0, expiration));
|
| - HostPortPair host_port_pair(alternative_service.host_port_pair());
|
| - http_server_properties_.SetAlternativeServices(
|
| - host_port_pair, alternative_service_info_vector);
|
| - };
|
| -
|
| - test::QuicTestPacketMaker& packet_maker() { return packet_maker_; }
|
| -
|
| - MockClientSocketFactory& socket_factory() { return socket_factory_; }
|
| -
|
| - HttpNetworkSession* session() { return session_.get(); }
|
| -
|
| - private:
|
| - MockClock* clock_; // Owned by QuicStreamFactory
|
| - test::QuicTestPacketMaker packet_maker_;
|
| - MockClientSocketFactory socket_factory_;
|
| - scoped_ptr<HttpNetworkSession> session_;
|
| - test::MockRandom random_generator_;
|
| - ProofVerifyDetailsChromium verify_details_;
|
| - MockCryptoClientStreamFactory crypto_client_stream_factory_;
|
| - HttpServerPropertiesImpl http_server_properties_;
|
| - TransportSecurityState transport_security_state_;
|
| - MockHostResolver host_resolver_;
|
| - scoped_ptr<ProxyService> proxy_service_;
|
| - scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
|
| - HttpNetworkSession::Params params_;
|
| -};
|
| -
|
| -INSTANTIATE_TEST_CASE_P(Version,
|
| - HttpStreamFactoryBidirectionalQuicTest,
|
| - ::testing::ValuesIn(QuicSupportedVersions()));
|
| -
|
| -TEST_P(HttpStreamFactoryBidirectionalQuicTest,
|
| - RequestBidirectionalStreamJobQuicAlternative) {
|
| - GURL url = GURL("https://www.example.org");
|
| -
|
| - MockQuicData mock_quic_data;
|
| - SpdyPriority priority =
|
| - ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
|
| - size_t spdy_headers_frame_length;
|
| - mock_quic_data.AddWrite(packet_maker().MakeRequestHeadersPacket(
|
| - 1, test::kClientDataStreamId1, /*should_include_version=*/true,
|
| - /*fin=*/true, priority,
|
| - packet_maker().GetRequestHeaders("GET", "https", "/"),
|
| - &spdy_headers_frame_length));
|
| - size_t spdy_response_headers_frame_length;
|
| - mock_quic_data.AddRead(packet_maker().MakeResponseHeadersPacket(
|
| - 1, test::kClientDataStreamId1, /*should_include_version=*/false,
|
| - /*fin=*/true, packet_maker().GetResponseHeaders("200"),
|
| - &spdy_response_headers_frame_length));
|
| - mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data.
|
| - mock_quic_data.AddSocketDataToFactory(&socket_factory());
|
| -
|
| - // Add hanging data for http job.
|
| - scoped_ptr<StaticSocketDataProvider> hanging_data;
|
| - hanging_data.reset(new StaticSocketDataProvider());
|
| - MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING);
|
| - hanging_data->set_connect_data(hanging_connect);
|
| - socket_factory().AddSocketDataProvider(hanging_data.get());
|
| - SSLSocketDataProvider ssl_data(ASYNC, OK);
|
| - socket_factory().AddSSLSocketDataProvider(&ssl_data);
|
| -
|
| - // Set up QUIC as alternative_service.
|
| - AddQuicAlternativeService();
|
| - Initialize();
|
| -
|
| - // Now request a stream.
|
| - SSLConfig ssl_config;
|
| - HttpRequestInfo request_info;
|
| - request_info.method = "GET";
|
| - request_info.url = GURL("https://www.example.org");
|
| - request_info.load_flags = 0;
|
| -
|
| - StreamRequestWaiter waiter;
|
| - scoped_ptr<HttpStreamRequest> request(
|
| - session()->http_stream_factory()->RequestBidirectionalStreamJob(
|
| - request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
|
| - BoundNetLog()));
|
| -
|
| - waiter.WaitForStream();
|
| - EXPECT_TRUE(waiter.stream_done());
|
| - EXPECT_FALSE(waiter.websocket_stream());
|
| - ASSERT_FALSE(waiter.stream());
|
| - ASSERT_TRUE(waiter.bidirectional_stream_job());
|
| - BidirectionalStreamJob* job = waiter.bidirectional_stream_job();
|
| -
|
| - BidirectionalStreamRequestInfo bidi_request_info;
|
| - bidi_request_info.method = "GET";
|
| - bidi_request_info.url = GURL("https://www.example.org/");
|
| - bidi_request_info.end_stream_on_headers = true;
|
| - bidi_request_info.priority = LOWEST;
|
| -
|
| - TestBidirectionalDelegate delegate;
|
| - job->Start(&bidi_request_info, BoundNetLog(), &delegate, nullptr);
|
| - delegate.WaitUntilDone();
|
| -
|
| - scoped_refptr<IOBuffer> buffer = new net::IOBuffer(1);
|
| - EXPECT_EQ(OK, job->ReadData(buffer.get(), 1));
|
| - EXPECT_EQ("200", delegate.response_headers().find(":status")->second);
|
| - EXPECT_EQ(1, GetSocketPoolGroupCount(session()->GetTransportSocketPool(
|
| - HttpNetworkSession::NORMAL_SOCKET_POOL)));
|
| - EXPECT_EQ(1, GetSocketPoolGroupCount(session()->GetSSLSocketPool(
|
| - HttpNetworkSession::NORMAL_SOCKET_POOL)));
|
| - EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetTransportSocketPool(
|
| - HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
|
| - EXPECT_EQ(0, GetSocketPoolGroupCount(session()->GetSSLSocketPool(
|
| - HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
|
| - EXPECT_TRUE(waiter.used_proxy_info().is_direct());
|
| -}
|
| -
|
| TEST_P(HttpStreamFactoryTest, RequestBidirectionalStreamJobFailure) {
|
| SpdySessionDependencies session_deps(GetParam(),
|
| ProxyService::CreateDirect());
|
|
|