diff options
author | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 16:54:47 +0000 |
---|---|---|
committer | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 16:54:47 +0000 |
commit | 4dca587c55b801e9df97e0b15a004d85c85b6d67 (patch) | |
tree | 415dc699ebfb042b358a2729374c28e986fd8058 /net/quic | |
parent | 6c17a5e04f733040f25868f1638173fafd2bbf77 (diff) | |
download | chromium_src-4dca587c55b801e9df97e0b15a004d85c85b6d67.zip chromium_src-4dca587c55b801e9df97e0b15a004d85c85b6d67.tar.gz chromium_src-4dca587c55b801e9df97e0b15a004d85c85b6d67.tar.bz2 |
Change --origin-port-to-force-quic-on to apply only to http urls.
Review URL: https://chromiumcodereview.appspot.com/12463004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186728 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/quic')
-rw-r--r-- | net/quic/quic_network_transaction_unittest.cc | 114 |
1 files changed, 111 insertions, 3 deletions
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc index b50a25b..b1a9d24 100644 --- a/net/quic/quic_network_transaction_unittest.cc +++ b/net/quic/quic_network_transaction_unittest.cc @@ -218,6 +218,9 @@ class QuicNetworkTransactionTest : public PlatformTest { } void CreateSession() { + params_.enable_quic = true; + params_.quic_clock = clock_; + params_.quic_random = &random_generator_; params_.client_socket_factory = &socket_factory_; params_.host_resolver = &host_resolver_; params_.cert_verifier = &cert_verifier_; @@ -243,12 +246,117 @@ class QuicNetworkTransactionTest : public PlatformTest { HttpNetworkSession::Params params_; }; +TEST_F(QuicNetworkTransactionTest, ForceQuic) { + params_.origin_port_to_force_quic_on = 80; + + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("http://www.google.com/"); + request.load_flags = 0; + + scoped_ptr<QuicEncryptedPacket> chlo(ConstructChlo()); + scoped_ptr<QuicEncryptedPacket> data( + ConstructDataPacket(2, true, 0, GetRequestString("GET", "/"))); + scoped_ptr<QuicEncryptedPacket> ack(ConstructAckPacket(2, 1)); + + MockWrite quic_writes[] = { + MockWrite(SYNCHRONOUS, chlo->data(), chlo->length()), + MockWrite(SYNCHRONOUS, data->data(), data->length()), + MockWrite(SYNCHRONOUS, ack->data(), ack->length()), + }; + + scoped_ptr<QuicEncryptedPacket> shlo(ConstructShlo()); + scoped_ptr<QuicEncryptedPacket> resp( + ConstructDataPacket(2, true, 0, GetResponseString("200 OK", "hello!"))); + MockRead quic_reads[] = { + MockRead(SYNCHRONOUS, shlo->data(), shlo->length()), + MockRead(SYNCHRONOUS, resp->data(), resp->length()), + MockRead(ASYNC, OK), // EOF + }; + + DelayedSocketData quic_data( + 1, // wait for one write to finish before reading. + quic_reads, arraysize(quic_reads), + quic_writes, arraysize(quic_writes)); + + socket_factory_.AddSocketDataProvider(&quic_data); + + // The non-alternate protocol job needs to hang in order to guarantee that the + // alternate-protocol job will "win". + MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); + StaticSocketDataProvider hanging_non_alternate_protocol_socket( + NULL, 0, NULL, 0); + hanging_non_alternate_protocol_socket.set_connect_data( + never_finishing_connect); + socket_factory_.AddSocketDataProvider( + &hanging_non_alternate_protocol_socket); + + TestCompletionCallback callback; + + CreateSession(); + scoped_ptr<HttpNetworkTransaction> trans( + new HttpNetworkTransaction(session_)); + + int rv = trans->Start(&request, callback.callback(), BoundNetLog()); + EXPECT_EQ(ERR_IO_PENDING, rv); + EXPECT_EQ(OK, callback.WaitForResult()); + + const HttpResponseInfo* response = trans->GetResponseInfo(); + ASSERT_TRUE(response != NULL); + ASSERT_TRUE(response->headers != NULL); + EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); + EXPECT_TRUE(response->was_fetched_via_spdy); + + std::string response_data; + ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); + EXPECT_EQ("hello!", response_data); +} + +TEST_F(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { + // Attempt to "force" quic on 443, which will not be honored. + params_.origin_port_to_force_quic_on = 443; + + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("https://www.google.com/"); + request.load_flags = 0; + + MockRead data_reads[] = { + MockRead("HTTP/1.1 200 OK\r\n\r\n"), + MockRead("hello world"), + MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), + MockRead(ASYNC, OK) + }; + + StaticSocketDataProvider data( + data_reads, arraysize(data_reads), NULL, 0); + socket_factory_.AddSocketDataProvider(&data); + SSLSocketDataProvider ssl(ASYNC, OK); + socket_factory_.AddSSLSocketDataProvider(&ssl); + + TestCompletionCallback callback; + + CreateSession(); + scoped_ptr<HttpNetworkTransaction> trans( + new HttpNetworkTransaction(session_)); + + int rv = trans->Start(&request, callback.callback(), BoundNetLog()); + EXPECT_EQ(ERR_IO_PENDING, rv); + EXPECT_EQ(OK, callback.WaitForResult()); + + const HttpResponseInfo* response = trans->GetResponseInfo(); + ASSERT_TRUE(response != NULL); + ASSERT_TRUE(response->headers != NULL); + EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); + + std::string response_data; + ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); + EXPECT_EQ("hello world", response_data); +} + TEST_F(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { HttpStreamFactory::set_use_alternate_protocols(true); HttpStreamFactory::SetNextProtos(QuicNextProtos()); - params_.enable_quic = true; - params_.quic_clock = clock_; - params_.quic_random = &random_generator_; HttpRequestInfo request; request.method = "GET"; |