Chromium Code Reviews| 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)); |
|
jar (doing other things)
2014/07/14 21:49:23
nit: either indent 4 from the "EXP..." or 4 from
ramant (doing other things)
2014/07/16 19:43:08
Done.
|
| + server_thread_->Resume(); |
| +} |
| + |
| } // namespace |
| } // namespace test |
| } // namespace tools |