Chromium Code Reviews| Index: net/quic/quic_network_transaction_unittest.cc |
| diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc |
| index 3dfa0e3b592cabd3339afd25c4a808fc24f8cb05..d436ce64aab16998830837309c307a8613a94855 100644 |
| --- a/net/quic/quic_network_transaction_unittest.cc |
| +++ b/net/quic/quic_network_transaction_unittest.cc |
| @@ -51,6 +51,8 @@ namespace { |
| // This is the expected return from a current server advertising QUIC. |
| static const char kQuicAlternateProtocolHttpHeader[] = |
| "Alternate-Protocol: 80:quic\r\n\r\n"; |
| +static const char kQuicAlternateProtocol50pctHttpHeader[] = |
| + "Alternate-Protocol: 80:quic,p=.5\r\n\r\n"; |
|
ramant (doing other things)
2014/06/27 22:38:13
nit: Can one send a header with p less than 0 (or
Ryan Hamilton
2014/06/30 19:02:35
No, the valid range is [0,1]. Added a test for an
ramant (doing other things)
2014/06/30 21:01:24
Great.
|
| static const char kQuicAlternateProtocolHttpsHeader[] = |
| "Alternate-Protocol: 443:quic\r\n\r\n"; |
| @@ -275,13 +277,13 @@ class QuicNetworkTransactionTest |
| MockCryptoClientStream::HandshakeMode handshake_mode) { |
| crypto_client_stream_factory_.set_handshake_mode(handshake_mode); |
| session_->http_server_properties()->SetAlternateProtocol( |
| - HostPortPair::FromURL(request_.url), 80, QUIC); |
| + HostPortPair::FromURL(request_.url), 80, QUIC, 1); |
| } |
| void ExpectBrokenAlternateProtocolMapping() { |
| ASSERT_TRUE(session_->http_server_properties()->HasAlternateProtocol( |
| HostPortPair::FromURL(request_.url))); |
| - const PortAlternateProtocolPair alternate = |
| + const AlternateProtocolInfo alternate = |
| session_->http_server_properties()->GetAlternateProtocol( |
| HostPortPair::FromURL(request_.url)); |
| EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); |
| @@ -290,7 +292,7 @@ class QuicNetworkTransactionTest |
| void ExpectQuicAlternateProtocolMapping() { |
| ASSERT_TRUE(session_->http_server_properties()->HasAlternateProtocol( |
| HostPortPair::FromURL(request_.url))); |
| - const PortAlternateProtocolPair alternate = |
| + const AlternateProtocolInfo alternate = |
| session_->http_server_properties()->GetAlternateProtocol( |
| HostPortPair::FromURL(request_.url)); |
| EXPECT_EQ(QUIC, alternate.protocol); |
| @@ -490,6 +492,66 @@ TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { |
| SendRequestAndExpectQuicResponse("hello!"); |
| } |
| +TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { |
| + MockRead http_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n"), |
| + MockRead(kQuicAlternateProtocol50pctHttpHeader), |
| + MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| + MockRead(ASYNC, OK) |
| + }; |
| + |
| + StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| + NULL, 0); |
| + socket_factory_.AddSocketDataProvider(&http_data); |
| + |
| + MockQuicData mock_quic_data; |
| + mock_quic_data.AddWrite( |
| + ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
| + GetRequestHeaders("GET", "http", "/"))); |
| + mock_quic_data.AddRead( |
| + ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
| + GetResponseHeaders("200 OK"))); |
| + mock_quic_data.AddRead( |
| + ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
| + mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
| + mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
| + |
| + mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); |
| + |
| + // The non-alternate protocol job needs to hang in order to guarantee that |
| + // the alternate-protocol job will "win". |
| + AddHangingNonAlternateProtocolSocketData(); |
| + |
| + http_server_properties.SetAlternateProtocolProbabilityThreshold(.25); |
| + CreateSessionWithNextProtos(); |
| + |
| + SendRequestAndExpectHttpResponse("hello world"); |
| + SendRequestAndExpectQuicResponse("hello!"); |
| +} |
| + |
| +TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) { |
| + MockRead http_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n"), |
| + MockRead(kQuicAlternateProtocol50pctHttpHeader), |
| + MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| + MockRead(ASYNC, OK) |
| + }; |
| + |
| + StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| + NULL, 0); |
| + socket_factory_.AddSocketDataProvider(&http_data); |
| + socket_factory_.AddSocketDataProvider(&http_data); |
| + |
|
ramant (doing other things)
2014/06/27 22:38:13
nit: extra blank line.
|
| + |
| + http_server_properties.SetAlternateProtocolProbabilityThreshold(.75); |
| + CreateSessionWithNextProtos(); |
| + |
| + SendRequestAndExpectHttpResponse("hello world"); |
| + SendRequestAndExpectHttpResponse("hello world"); |
| +} |
| + |
| TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { |
| params_.origin_to_force_quic_on = |
| HostPortPair::FromString("www.google.com:443"); |