| 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 c6a1ced51193316523f610acf868102df74e244f..01c5d88f714555e8a0fcb5f263efbd3a5769f946 100644
|
| --- a/net/quic/quic_network_transaction_unittest.cc
|
| +++ b/net/quic/quic_network_transaction_unittest.cc
|
| @@ -417,6 +417,28 @@ class QuicNetworkTransactionTest
|
| packet_number, stream_id, should_include_version, fin, offset, data);
|
| }
|
|
|
| + std::unique_ptr<QuicEncryptedPacket> ConstructClientDataPacket(
|
| + QuicPacketNumber packet_number,
|
| + QuicStreamId stream_id,
|
| + bool should_include_version,
|
| + bool fin,
|
| + QuicStreamOffset offset,
|
| + base::StringPiece data) {
|
| + return client_maker_.MakeDataPacket(
|
| + packet_number, stream_id, should_include_version, fin, offset, data);
|
| + }
|
| +
|
| + std::unique_ptr<QuicEncryptedPacket> ConstructClientForceHolDataPacket(
|
| + QuicPacketNumber packet_number,
|
| + QuicStreamId stream_id,
|
| + bool should_include_version,
|
| + bool fin,
|
| + QuicStreamOffset* offset,
|
| + base::StringPiece data) {
|
| + return client_maker_.MakeForceHolDataPacket(
|
| + packet_number, stream_id, should_include_version, fin, offset, data);
|
| + }
|
| +
|
| std::unique_ptr<QuicEncryptedPacket> ConstructClientRequestHeadersPacket(
|
| QuicPacketNumber packet_number,
|
| QuicStreamId stream_id,
|
| @@ -2353,6 +2375,56 @@ TEST_P(QuicNetworkTransactionTest, QuicServerPush) {
|
| EXPECT_LT(0, pos);
|
| }
|
|
|
| +TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) {
|
| + FLAGS_quic_enable_version_35 = true;
|
| + FLAGS_quic_enable_version_36 = true;
|
| + params_.quic_force_hol_blocking = true;
|
| + params_.origins_to_force_quic_on.insert(
|
| + HostPortPair::FromString("mail.example.org:443"));
|
| +
|
| + MockQuicData mock_quic_data;
|
| +
|
| + QuicStreamOffset offset = 0;
|
| + mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
|
| + 1, kClientDataStreamId1, true, false,
|
| + GetRequestHeaders("POST", "https", "/"), &offset));
|
| +
|
| + std::unique_ptr<QuicEncryptedPacket> packet;
|
| + if (GetParam() > QUIC_VERSION_35) {
|
| + packet = ConstructClientForceHolDataPacket(2, kClientDataStreamId1, true,
|
| + true, &offset, "1");
|
| + } else {
|
| + packet =
|
| + ConstructClientDataPacket(2, kClientDataStreamId1, true, true, 0, "1");
|
| + }
|
| + mock_quic_data.AddWrite(std::move(packet));
|
| +
|
| + mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
|
| + 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
|
| +
|
| + mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1,
|
| + 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_);
|
| +
|
| + // The non-alternate protocol job needs to hang in order to guarantee that
|
| + // the alternate-protocol job will "win".
|
| + AddHangingNonAlternateProtocolSocketData();
|
| +
|
| + CreateSession();
|
| + request_.method = "POST";
|
| + ChunkedUploadDataStream upload_data(0);
|
| + upload_data.AppendData("1", 1, true);
|
| +
|
| + request_.upload_data_stream = &upload_data;
|
| +
|
| + SendRequestAndExpectQuicResponse("hello!");
|
| +}
|
| +
|
| class QuicNetworkTransactionWithDestinationTest
|
| : public PlatformTest,
|
| public ::testing::WithParamInterface<PoolingTestParams> {
|
|
|