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 378a663757631ab9c165ee20d4f9f89420d8e7ed..bc9f397badefe464dc992b5eb53c7314c2ea3f97 100644 |
--- a/net/quic/quic_network_transaction_unittest.cc |
+++ b/net/quic/quic_network_transaction_unittest.cc |
@@ -8,6 +8,7 @@ |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/stl_util.h" |
+#include "base/strings/stringprintf.h" |
#include "net/base/network_quality_estimator.h" |
#include "net/base/socket_performance_watcher.h" |
#include "net/base/test_completion_callback.h" |
@@ -679,6 +680,64 @@ TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
SendRequestAndExpectQuicResponse("hello!"); |
} |
+TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceQuicSupportedVersion) { |
+ std::string altsvc_header = base::StringPrintf( |
+ "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam()); |
+ MockRead http_reads[] = { |
+ MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.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; |
+ mock_quic_data.AddWrite( |
+ ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
+ GetRequestHeaders("GET", "https", "/"))); |
+ 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(ASYNC, ERR_IO_PENDING); // No more data to read |
+ mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
+ |
+ mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
+ |
+ AddHangingNonAlternateProtocolSocketData(); |
+ CreateSessionWithNextProtos(); |
+ |
+ SendRequestAndExpectHttpResponse("hello world"); |
+ SendRequestAndExpectQuicResponse("hello!"); |
+} |
+ |
+TEST_P(QuicNetworkTransactionTest, |
+ DoNotUseAlternativeServiceQuicUnsupportedVersion) { |
+ std::string altsvc_header = base::StringPrintf( |
+ "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam() - 1); |
+ MockRead http_reads[] = { |
+ MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.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_); |
+ socket_factory_.AddSocketDataProvider(&http_data); |
+ socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
+ |
+ CreateSessionWithNextProtos(); |
+ |
+ SendRequestAndExpectHttpResponse("hello world"); |
+ SendRequestAndExpectHttpResponse("hello world"); |
+} |
+ |
// When multiple alternative services are advertised, |
// HttpStreamFactoryImpl::RequestStreamInternal() only passes the first one to |
// Job. This is what the following test verifies. |