Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1213)

Unified Diff: net/quic/chromium/quic_network_transaction_unittest.cc

Issue 2909653004: Increase the QUIC header size limit to 256KB from 16KB. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9ffa06c507ed460c07832e88c7a0ba245138c29b..570bfaadf04f5737aebaffc83b26b177ce18c660 100644
--- a/net/quic/chromium/quic_network_transaction_unittest.cc
+++ b/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <algorithm>
#include <memory>
#include <ostream>
#include <string>
@@ -905,6 +906,112 @@ TEST_P(QuicNetworkTransactionTest, ForceQuic) {
EXPECT_EQ(3, log_stream_id);
}
+TEST_P(QuicNetworkTransactionTest, LargeResponseHeaders) {
+ params_.origins_to_force_quic_on.insert(
+ HostPortPair::FromString("mail.example.org:443"));
+
+ 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));
+ SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK");
+ response_headers["key1"] = std::string(30000, 'A');
+ response_headers["key2"] = std::string(30000, 'A');
+ response_headers["key3"] = std::string(30000, 'A');
+ response_headers["key4"] = std::string(30000, 'A');
+ response_headers["key5"] = std::string(30000, 'A');
+ response_headers["key6"] = std::string(30000, 'A');
+ response_headers["key7"] = std::string(30000, 'A');
+ response_headers["key8"] = std::string(30000, 'A');
+ SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0),
+ std::move(response_headers));
+ SpdyFramer response_framer(SpdyFramer::ENABLE_COMPRESSION);
+ SpdySerializedFrame spdy_frame =
+ response_framer.SerializeFrame(headers_frame);
+
+ QuicPacketNumber packet_number = 1;
+ size_t chunk_size = 1200;
+ for (size_t offset = 0; offset < spdy_frame.size(); offset += chunk_size) {
+ size_t len = std::min(chunk_size, spdy_frame.size() - offset);
+ mock_quic_data.AddRead(ConstructServerDataPacket(
+ packet_number++, kHeadersStreamId, false, false, offset,
+ base::StringPiece(spdy_frame.data() + offset, len)));
+ }
+
+ mock_quic_data.AddRead(
+ ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0),
+ false, true, 0, "hello!"));
+ mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
+ mock_quic_data.AddAsyncWrite(ConstructClientAckPacket(3, 2, 1, 1));
+ mock_quic_data.AddAsyncWrite(
+ ConstructClientAckPacket(4, packet_number, 3, 1));
+
+ mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ CreateSession();
+
+ SendRequestAndExpectQuicResponse("hello!");
+}
+
+TEST_P(QuicNetworkTransactionTest, TooLargeResponseHeaders) {
+ params_.origins_to_force_quic_on.insert(
+ HostPortPair::FromString("mail.example.org:443"));
+
+ 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));
+ SpdyHeaderBlock response_headers = GetResponseHeaders("200 OK");
+ response_headers["key1"] = std::string(30000, 'A');
+ response_headers["key2"] = std::string(30000, 'A');
+ response_headers["key3"] = std::string(30000, 'A');
+ response_headers["key4"] = std::string(30000, 'A');
+ response_headers["key5"] = std::string(30000, 'A');
+ response_headers["key6"] = std::string(30000, 'A');
+ response_headers["key7"] = std::string(30000, 'A');
+ response_headers["key8"] = std::string(30000, 'A');
+ response_headers["key9"] = std::string(30000, 'A');
+ SpdyHeadersIR headers_frame(GetNthClientInitiatedStreamId(0),
+ std::move(response_headers));
+ SpdyFramer response_framer(SpdyFramer::ENABLE_COMPRESSION);
+ SpdySerializedFrame spdy_frame =
+ response_framer.SerializeFrame(headers_frame);
+
+ QuicPacketNumber packet_number = 1;
+ size_t chunk_size = 1200;
+ for (size_t offset = 0; offset < spdy_frame.size(); offset += chunk_size) {
+ size_t len = std::min(chunk_size, spdy_frame.size() - offset);
+ mock_quic_data.AddRead(ConstructServerDataPacket(
+ packet_number++, kHeadersStreamId, false, false, offset,
+ base::StringPiece(spdy_frame.data() + offset, len)));
+ }
+
+ mock_quic_data.AddRead(
+ ConstructServerDataPacket(packet_number, GetNthClientInitiatedStreamId(0),
+ false, true, 0, "hello!"));
+ mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
+ mock_quic_data.AddAsyncWrite(ConstructClientAckPacket(3, 2, 1, 1));
+ mock_quic_data.AddAsyncWrite(ConstructClientAckAndRstPacket(
+ 4, GetNthClientInitiatedStreamId(0), QUIC_HEADERS_TOO_LARGE,
+ packet_number, 3, 1));
+
+ mock_quic_data.AddSocketDataToFactory(&socket_factory_);
+
+ CreateSession();
+
+ 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));
+ EXPECT_THAT(callback.WaitForResult(), IsError(ERR_QUIC_PROTOCOL_ERROR));
+}
+
TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) {
params_.origins_to_force_quic_on.insert(HostPortPair());
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698