| 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.
|
|
|