summaryrefslogtreecommitdiffstats
path: root/net/quic
diff options
context:
space:
mode:
authorrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 16:54:47 +0000
committerrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 16:54:47 +0000
commit4dca587c55b801e9df97e0b15a004d85c85b6d67 (patch)
tree415dc699ebfb042b358a2729374c28e986fd8058 /net/quic
parent6c17a5e04f733040f25868f1638173fafd2bbf77 (diff)
downloadchromium_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.cc114
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";