| 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 1ff58d680ffa5988bff738695816daca2436d0b4..61edf02627125e817422fe7db3fb91bc56ec4873 100644
|
| --- a/net/quic/chromium/quic_network_transaction_unittest.cc
|
| +++ b/net/quic/chromium/quic_network_transaction_unittest.cc
|
| @@ -1739,69 +1739,6 @@
|
| ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| }
|
|
|
| -// Verify that if a QUIC protocol error occurs after the handshake is confirmed
|
| -// the request fails with QUIC_PROTOCOL_ERROR.
|
| -TEST_P(QuicNetworkTransactionTest, ProtocolErrorAfterHandshakeConfirmed) {
|
| - // The request will initially go out over QUIC.
|
| - MockQuicData quic_data;
|
| - QuicStreamOffset header_stream_offset = 0;
|
| - quic_data.AddWrite(ConstructClientRequestHeadersPacket(
|
| - 1, kClientDataStreamId1, true, true,
|
| - GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
|
| - quic_data.AddWrite(ConstructSettingsPacket(2, SETTINGS_MAX_HEADER_LIST_SIZE,
|
| - kDefaultMaxUncompressedHeaderSize,
|
| - &header_stream_offset));
|
| - // Peer sending data from an non-existing stream causes this end to raise
|
| - // error and close connection.
|
| - quic_data.AddRead(
|
| - ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR));
|
| - std::string quic_error_details = "Data for nonexistent stream";
|
| - quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket(
|
| - 3, QuicTime::Delta::Zero(), 1, 1, QUIC_INVALID_STREAM_ID,
|
| - quic_error_details));
|
| - quic_data.AddSocketDataToFactory(&socket_factory_);
|
| -
|
| - // In order for a new QUIC session to be established via alternate-protocol
|
| - // without racing an HTTP connection, we need the host resolution to happen
|
| - // synchronously. Of course, even though QUIC *could* perform a 0-RTT
|
| - // connection to the the server, in this test we require confirmation
|
| - // before encrypting so the HTTP job will still start.
|
| - host_resolver_.set_synchronous_mode(true);
|
| - host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
|
| - "");
|
| - HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
|
| - AddressList address;
|
| - std::unique_ptr<HostResolver::Request> request;
|
| - host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
|
| - &request, net_log_.bound());
|
| -
|
| - CreateSession();
|
| -
|
| - AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
|
| -
|
| - HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
|
| - TestCompletionCallback callback;
|
| - int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
|
| - EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
|
| -
|
| - // Pump the message loop to get the request started.
|
| - base::RunLoop().RunUntilIdle();
|
| - // Explicitly confirm the handshake.
|
| - crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
|
| - QuicSession::HANDSHAKE_CONFIRMED);
|
| -
|
| - ASSERT_FALSE(quic_data.AllReadDataConsumed());
|
| -
|
| - // Run the QUIC session to completion.
|
| - base::RunLoop().RunUntilIdle();
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| - ASSERT_TRUE(quic_data.AllReadDataConsumed());
|
| -
|
| - EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
|
| - ExpectQuicAlternateProtocolMapping();
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| -}
|
| -
|
| // Verify that with mark_quic_broken_when_network_blackholes enabled, if a QUIC
|
| // connection times out, then QUIC will be marked as broken and the request
|
| // retried over TCP.
|
| @@ -1916,126 +1853,6 @@
|
|
|
| // Read the response body over TCP.
|
| CheckResponseData(&trans, "hello world");
|
| - ASSERT_TRUE(http_data.AllWriteDataConsumed());
|
| - ASSERT_TRUE(http_data.AllReadDataConsumed());
|
| -}
|
| -
|
| -// Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC
|
| -// connection times out, then QUIC will be marked as broken and the request
|
| -// retried over TCP.
|
| -TEST_P(QuicNetworkTransactionTest, TimeoutAfterHandshakeConfirmedThenBroken2) {
|
| - params_.retry_without_alt_svc_on_quic_errors = true;
|
| - params_.quic_idle_connection_timeout_seconds = 5;
|
| -
|
| - // The request will initially go out over QUIC.
|
| - MockQuicData quic_data;
|
| - QuicStreamOffset header_stream_offset = 0;
|
| - SpdyPriority priority =
|
| - ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
|
| -
|
| - std::string request_data;
|
| - quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData(
|
| - 1, kClientDataStreamId1, true, true, priority,
|
| - GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset,
|
| - &request_data));
|
| -
|
| - std::string settings_data;
|
| - QuicStreamOffset settings_offset = header_stream_offset;
|
| - quic_data.AddWrite(client_maker_.MakeSettingsPacketAndSaveData(
|
| - 2, SETTINGS_MAX_HEADER_LIST_SIZE, kDefaultMaxUncompressedHeaderSize, true,
|
| - &header_stream_offset, &settings_data));
|
| - // TLP 1
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true,
|
| - false, 0, request_data));
|
| - // TLP 2
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(
|
| - 4, kHeadersStreamId, true, false, settings_offset, settings_data));
|
| - // RTO 1
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(5, kHeadersStreamId, true,
|
| - false, 0, request_data));
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(
|
| - 6, kHeadersStreamId, true, false, settings_offset, settings_data));
|
| - // RTO 2
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true,
|
| - false, 0, request_data));
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(
|
| - 8, kHeadersStreamId, true, false, settings_offset, settings_data));
|
| - // RTO 3
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(9, kHeadersStreamId, true,
|
| - false, 0, request_data));
|
| - quic_data.AddWrite(client_maker_.MakeDataPacket(
|
| - 10, kHeadersStreamId, true, false, settings_offset, settings_data));
|
| -
|
| - quic_data.AddRead(ASYNC, ERR_IO_PENDING);
|
| - quic_data.AddRead(ASYNC, OK);
|
| - quic_data.AddSocketDataToFactory(&socket_factory_);
|
| -
|
| - // After that fails, it will be resent via TCP.
|
| - MockWrite http_writes[] = {
|
| - MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
|
| - MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
|
| - MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
|
| -
|
| - MockRead http_reads[] = {
|
| - MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
|
| - MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
|
| - MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
|
| - SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
|
| - arraysize(http_writes));
|
| - socket_factory_.AddSocketDataProvider(&http_data);
|
| - socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
|
| -
|
| - // In order for a new QUIC session to be established via alternate-protocol
|
| - // without racing an HTTP connection, we need the host resolution to happen
|
| - // synchronously. Of course, even though QUIC *could* perform a 0-RTT
|
| - // connection to the the server, in this test we require confirmation
|
| - // before encrypting so the HTTP job will still start.
|
| - host_resolver_.set_synchronous_mode(true);
|
| - host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
|
| - "");
|
| - HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
|
| - AddressList address;
|
| - std::unique_ptr<HostResolver::Request> request;
|
| - host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
|
| - &request, net_log_.bound());
|
| -
|
| - CreateSession();
|
| - // Use a TestTaskRunner to avoid waiting in real time for timeouts.
|
| - scoped_refptr<TestTaskRunner> quic_task_runner_(new TestTaskRunner(clock_));
|
| - QuicStreamFactoryPeer::SetAlarmFactory(
|
| - session_->quic_stream_factory(),
|
| - base::MakeUnique<QuicChromiumAlarmFactory>(quic_task_runner_.get(),
|
| - clock_));
|
| -
|
| - AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
|
| -
|
| - HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
|
| - TestCompletionCallback callback;
|
| - int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
|
| - EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
|
| -
|
| - // Pump the message loop to get the request started.
|
| - base::RunLoop().RunUntilIdle();
|
| - // Explicitly confirm the handshake.
|
| - crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
|
| - QuicSession::HANDSHAKE_CONFIRMED);
|
| -
|
| - // Run the QUIC session to completion.
|
| - quic_task_runner_->RunUntilIdle();
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| -
|
| - ExpectQuicAlternateProtocolMapping();
|
| -
|
| - // Let the transaction proceed which will result in QUIC being marked
|
| - // as broken and the request falling back to TCP.
|
| - EXPECT_THAT(callback.WaitForResult(), IsOk());
|
| -
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| - ASSERT_FALSE(http_data.AllReadDataConsumed());
|
| -
|
| - // Read the response body over TCP.
|
| - CheckResponseData(&trans, "hello world");
|
| - ExpectBrokenAlternateProtocolMapping();
|
| ASSERT_TRUE(http_data.AllWriteDataConsumed());
|
| ASSERT_TRUE(http_data.AllReadDataConsumed());
|
| }
|
| @@ -2387,97 +2204,6 @@
|
| ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| }
|
|
|
| -// Verify that with retry_without_alt_svc_on_quic_errors enabled, if a QUIC
|
| -// protocol error occurs after the handshake is confirmed, the request
|
| -// retried over TCP and the QUIC will be marked as broken.
|
| -TEST_P(QuicNetworkTransactionTest,
|
| - ProtocolErrorAfterHandshakeConfirmedThenBroken) {
|
| - params_.retry_without_alt_svc_on_quic_errors = true;
|
| - params_.quic_idle_connection_timeout_seconds = 5;
|
| -
|
| - // The request will initially go out over QUIC.
|
| - MockQuicData quic_data;
|
| - QuicStreamOffset header_stream_offset = 0;
|
| - quic_data.AddWrite(ConstructClientRequestHeadersPacket(
|
| - 1, kClientDataStreamId1, true, true,
|
| - GetRequestHeaders("GET", "https", "/"), &header_stream_offset));
|
| - quic_data.AddWrite(ConstructSettingsPacket(2, SETTINGS_MAX_HEADER_LIST_SIZE,
|
| - kDefaultMaxUncompressedHeaderSize,
|
| - &header_stream_offset));
|
| - // Peer sending data from an non-existing stream causes this end to raise
|
| - // error and close connection.
|
| - quic_data.AddRead(
|
| - ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR));
|
| - std::string quic_error_details = "Data for nonexistent stream";
|
| - quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket(
|
| - 3, QuicTime::Delta::Zero(), 1, 1, QUIC_INVALID_STREAM_ID,
|
| - quic_error_details));
|
| - quic_data.AddSocketDataToFactory(&socket_factory_);
|
| -
|
| - // After that fails, it will be resent via TCP.
|
| - MockWrite http_writes[] = {
|
| - MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
|
| - MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
|
| - MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
|
| -
|
| - MockRead http_reads[] = {
|
| - MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
|
| - MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
|
| - MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
|
| - SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
|
| - arraysize(http_writes));
|
| - socket_factory_.AddSocketDataProvider(&http_data);
|
| - socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
|
| -
|
| - // In order for a new QUIC session to be established via alternate-protocol
|
| - // without racing an HTTP connection, we need the host resolution to happen
|
| - // synchronously. Of course, even though QUIC *could* perform a 0-RTT
|
| - // connection to the the server, in this test we require confirmation
|
| - // before encrypting so the HTTP job will still start.
|
| - host_resolver_.set_synchronous_mode(true);
|
| - host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
|
| - "");
|
| - HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
|
| - AddressList address;
|
| - std::unique_ptr<HostResolver::Request> request;
|
| - host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
|
| - &request, net_log_.bound());
|
| -
|
| - CreateSession();
|
| -
|
| - AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
|
| -
|
| - HttpNetworkTransaction trans(DEFAULT_PRIORITY, session_.get());
|
| - TestCompletionCallback callback;
|
| - int rv = trans.Start(&request_, callback.callback(), net_log_.bound());
|
| - EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
|
| -
|
| - // Pump the message loop to get the request started.
|
| - base::RunLoop().RunUntilIdle();
|
| - // Explicitly confirm the handshake.
|
| - crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
|
| - QuicSession::HANDSHAKE_CONFIRMED);
|
| -
|
| - // Run the QUIC session to completion.
|
| - base::RunLoop().RunUntilIdle();
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| -
|
| - ExpectQuicAlternateProtocolMapping();
|
| -
|
| - // Let the transaction proceed which will result in QUIC being marked
|
| - // as broken and the request falling back to TCP.
|
| - EXPECT_THAT(callback.WaitForResult(), IsOk());
|
| -
|
| - ASSERT_TRUE(quic_data.AllWriteDataConsumed());
|
| - ASSERT_FALSE(http_data.AllReadDataConsumed());
|
| -
|
| - // Read the response body over TCP.
|
| - CheckResponseData(&trans, "hello world");
|
| - ExpectBrokenAlternateProtocolMapping();
|
| - ASSERT_TRUE(http_data.AllWriteDataConsumed());
|
| - ASSERT_TRUE(http_data.AllReadDataConsumed());
|
| -}
|
| -
|
| TEST_P(QuicNetworkTransactionTest,
|
| DoNotUseAlternativeServiceQuicUnsupportedVersion) {
|
| std::string altsvc_header = base::StringPrintf(
|
|
|