| 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 fc646deb431c0d2a66d1fe6fbcbd0f28f38b6763..d8d3c05bbe6e6ca92de0d3462d995637b5879335 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -1275,6 +1275,60 @@ TEST_P(EndToEndTest, DifferentFlowControlWindowsQ020) {
|
| server_thread_->Resume();
|
| }
|
|
|
| +TEST_P(EndToEndTest, HeadersAndCryptoStreamsNoConnectionFlowControl) {
|
| + // The special headers and crypto streams should be subject to per-stream flow
|
| + // control limits, but should not be subject to connection level flow control.
|
| + const uint32 kStreamIFCW = 123456;
|
| + const uint32 kSessionIFCW = 234567;
|
| + set_client_initial_stream_flow_control_receive_window(kStreamIFCW);
|
| + set_client_initial_session_flow_control_receive_window(kSessionIFCW);
|
| + set_server_initial_stream_flow_control_receive_window(kStreamIFCW);
|
| + set_server_initial_session_flow_control_receive_window(kSessionIFCW);
|
| +
|
| + ASSERT_TRUE(Initialize());
|
| + if (negotiated_version_ <= QUIC_VERSION_20) {
|
| + return;
|
| + }
|
| +
|
| + // Wait for crypto handshake to finish. This should have contributed to the
|
| + // crypto stream flow control window, but not affected the session flow
|
| + // control window.
|
| + client_->client()->WaitForCryptoHandshakeConfirmed();
|
| + server_thread_->WaitForCryptoHandshakeConfirmed();
|
| +
|
| + QuicCryptoStream* crypto_stream =
|
| + QuicSessionPeer::GetCryptoStream(client_->client()->session());
|
| + EXPECT_LT(
|
| + QuicFlowControllerPeer::SendWindowSize(crypto_stream->flow_controller()),
|
| + kStreamIFCW);
|
| + EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::SendWindowSize(
|
| + client_->client()->session()->flow_controller()));
|
| +
|
| + // Send a request with no body, and verify that the connection level window
|
| + // has not been affected.
|
| + EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
|
| +
|
| + QuicHeadersStream* headers_stream =
|
| + QuicSessionPeer::GetHeadersStream(client_->client()->session());
|
| + EXPECT_LT(
|
| + QuicFlowControllerPeer::SendWindowSize(headers_stream->flow_controller()),
|
| + kStreamIFCW);
|
| + EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::SendWindowSize(
|
| + client_->client()->session()->flow_controller()));
|
| +
|
| + // Server should be in a similar state: connection flow control window should
|
| + // not have any bytes marked as received.
|
| + server_thread_->Pause();
|
| + QuicDispatcher* dispatcher =
|
| + QuicServerPeer::GetDispatcher(server_thread_->server());
|
| + QuicSession* session = dispatcher->session_map().begin()->second;
|
| + QuicFlowController* server_connection_flow_controller =
|
| + session->flow_controller();
|
| + EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::ReceiveWindowSize(
|
| + server_connection_flow_controller));
|
| + server_thread_->Resume();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace test
|
| } // namespace tools
|
|
|