Chromium Code Reviews| Index: net/quic/chromium/quic_network_transaction_unittest.cc |
| diff --git a/net/quic/chromium/quic_network_transaction_unittest.cc b/net/quic/chromium/quic_network_transaction_unittest.cc |
| index 95487579367f68827d2eea6f48a74d2d89fd0773..87d165b285a320e17fbb88a76824ad7670a41379 100644 |
| --- a/net/quic/chromium/quic_network_transaction_unittest.cc |
| +++ b/net/quic/chromium/quic_network_transaction_unittest.cc |
| @@ -1359,6 +1359,114 @@ TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
| SendRequestAndExpectQuicResponse("hello!"); |
| } |
| +TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceWithVersionForQuic1) { |
| + // Server advertises support {QUIC_VERSION_40/QUIC_VERSION_39, version_} |
| + // Client supports {QUIC_VERSION_38/QUIC_VERSION_37, version_} |
| + // The QuicStreamFactoy will pick the single overlapped |version_|, which is |
| + // verified as the PacketMakers are using |version_|. |
| + QuicVersion advertised_version_2 = QUIC_VERSION_40; |
| + if (version_ == QUIC_VERSION_40) |
| + advertised_version_2 = QUIC_VERSION_39; |
| + std::string QuicAltSvcWithVersionHeader = |
| + base::StringPrintf("Alt-Svc: quic=\":443\";v=\"%d,%d\"\r\n\r\n", |
| + advertised_version_2, version_); |
| + |
| + QuicVersionVector supported_versions; |
| + QuicVersion supported_version_2 = QUIC_VERSION_38; |
| + if (version_ == QUIC_VERSION_38) |
| + supported_version_2 = QUIC_VERSION_37; |
| + supported_versions.push_back( |
| + supported_version_2); // 0th entry, preferred QUIC version. |
| + supported_versions.push_back(version_); |
| + |
| + MockRead http_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n"), |
| + MockRead(QuicAltSvcWithVersionHeader.c_str()), MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| + MockRead(ASYNC, OK)}; |
| + |
| + StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| + 0); |
| + socket_factory_.AddSocketDataProvider(&http_data); |
| + socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| + |
| + MockQuicData mock_quic_data; |
| + QuicStreamOffset header_stream_offset = 0; |
| + mock_quic_data.AddWrite( |
| + ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| + mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| + 2, GetNthClientInitiatedStreamId(0), true, true, |
| + GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| + mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| + 1, GetNthClientInitiatedStreamId(0), false, false, |
| + GetResponseHeaders("200 OK"))); |
| + mock_quic_data.AddRead(ConstructServerDataPacket( |
| + 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| + mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| + mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| + mock_quic_data.AddRead(ASYNC, 0); // EOF |
| + |
| + mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| + |
| + AddHangingNonAlternateProtocolSocketData(); |
| + CreateSession(supported_versions); |
| + |
| + SendRequestAndExpectHttpResponse("hello world"); |
| + SendRequestAndExpectQuicResponse("hello!"); |
| +} |
| + |
| +TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceWithVersionForQuic2) { |
| + // Server advertises support {QUIC_VERSION_40/QUIC_VERSION_39, version_} |
| + // Client supports {version_, QUIC_VERSION_40/QUIC_VERSION_39} |
| + // Client and Server mutualy support more than one QUIC_VERSION. |
|
Bence
2017/06/28 19:08:58
s/mutualy/mutually/
Zhongyi Shi
2017/07/05 23:08:59
Done.
|
| + // The QuicStreamFactoy will pick the preferred QUIC_VERSION: |version_|, |
| + // which is verified as the PacketMakers are using |version_|. |
| + QuicVersion common_version_2 = QUIC_VERSION_40; |
| + if (version_ == QUIC_VERSION_40) |
| + common_version_2 = QUIC_VERSION_39; |
| + std::string QuicAltSvcWithVersionHeader = base::StringPrintf( |
| + "Alt-Svc: quic=\":443\";v=\"%d,%d\"\r\n\r\n", common_version_2, version_); |
| + |
| + QuicVersionVector supported_versions; |
| + supported_versions.push_back(version_); // 0th entry, preferred QUIC version. |
| + supported_versions.push_back(common_version_2); |
| + |
| + MockRead http_reads[] = { |
| + MockRead("HTTP/1.1 200 OK\r\n"), |
| + MockRead(QuicAltSvcWithVersionHeader.c_str()), MockRead("hello world"), |
| + MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| + MockRead(ASYNC, OK)}; |
| + |
| + StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| + 0); |
| + socket_factory_.AddSocketDataProvider(&http_data); |
| + socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| + |
| + MockQuicData mock_quic_data; |
| + QuicStreamOffset header_stream_offset = 0; |
| + mock_quic_data.AddWrite( |
| + ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| + mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| + 2, GetNthClientInitiatedStreamId(0), true, true, |
| + GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
| + mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| + 1, GetNthClientInitiatedStreamId(0), false, false, |
| + GetResponseHeaders("200 OK"))); |
| + mock_quic_data.AddRead(ConstructServerDataPacket( |
| + 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
| + mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
| + mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| + mock_quic_data.AddRead(ASYNC, 0); // EOF |
| + |
| + mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| + |
| + AddHangingNonAlternateProtocolSocketData(); |
| + CreateSession(supported_versions); |
| + |
| + SendRequestAndExpectHttpResponse("hello world"); |
| + SendRequestAndExpectQuicResponse("hello!"); |
| +} |
| + |
| TEST_P(QuicNetworkTransactionTest, |
| UseAlternativeServiceWithProbabilityForQuic) { |
| MockRead http_reads[] = { |