Index: net/tools/quic/end_to_end_test.cc |
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc |
index 6bc9faf9502ce53352dfbb00eb97ea9a9373ced2..e21b230ca4b76adb7bc6256a40aebe290d3c7a13 100644 |
--- a/net/tools/quic/end_to_end_test.cc |
+++ b/net/tools/quic/end_to_end_test.cc |
@@ -2612,6 +2612,14 @@ TEST_P(EndToEndTestServerPush, ServerPush) { |
DVLOG(1) << "send request for /push_example"; |
EXPECT_EQ(kBody, client_->SendSynchronousRequest( |
"https://example.com/push_example")); |
+ QuicHeadersStream* headers_stream = |
+ QuicSpdySessionPeer::GetHeadersStream(client_->client()->session()); |
+ QuicStreamSequencer* sequencer = |
+ ReliableQuicStreamPeer::sequencer(headers_stream); |
+ // Headers stream's sequencer buffer shouldn't be released because server push |
+ // hasn't finished yet. |
+ EXPECT_TRUE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); |
+ |
for (const string& url : push_urls) { |
DVLOG(1) << "send request for pushed stream on url " << url; |
string expected_body = "This is server push response body for " + url; |
@@ -2619,6 +2627,9 @@ TEST_P(EndToEndTestServerPush, ServerPush) { |
DVLOG(1) << "response body " << response_body; |
EXPECT_EQ(expected_body, response_body); |
} |
+ EXPECT_NE(FLAGS_quic_headers_stream_release_sequencer_buffer && |
+ FLAGS_quic_reduce_sequencer_buffer_memory_life_time, |
+ QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); |
} |
TEST_P(EndToEndTestServerPush, ServerPushUnderLimit) { |
@@ -2908,6 +2919,20 @@ TEST_P(EndToEndTest, DISABLED_TestHugeResponseWithPacketLoss) { |
} |
} |
+TEST_P(EndToEndTest, ReleaseHeadersStreamBufferWhenIdle) { |
+ // Tests that when client side has no active request and no waiting |
+ // PUSH_PROMISE, its headers stream's sequencer buffer should be released. |
+ ASSERT_TRUE(Initialize()); |
+ client_->SendSynchronousRequest("/foo"); |
+ QuicHeadersStream* headers_stream = |
+ QuicSpdySessionPeer::GetHeadersStream(client_->client()->session()); |
+ QuicStreamSequencer* sequencer = |
+ ReliableQuicStreamPeer::sequencer(headers_stream); |
+ EXPECT_NE(FLAGS_quic_headers_stream_release_sequencer_buffer && |
+ FLAGS_quic_reduce_sequencer_buffer_memory_life_time, |
+ QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer)); |
+} |
+ |
class EndToEndBufferedPacketsTest : public EndToEndTest { |
public: |
EndToEndBufferedPacketsTest() : EndToEndTest() { |