| 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 b9031a1d3bdb9a7f35cc9aa2a28c46c3ad97e7fd..9c85fd4a9b4b5c27d8390d3dc2b7183511c39fbf 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -1817,23 +1817,71 @@ TEST_P(EndToEndTest, FlowControlsSynced) {
|
| QuicServerPeer::GetDispatcher(server_thread_->server());
|
| auto server_session = static_cast<QuicSpdySession*>(
|
| dispatcher->session_map().begin()->second.get());
|
| -
|
| ExpectFlowControlsSynced(client_session->flow_controller(),
|
| server_session->flow_controller());
|
| ExpectFlowControlsSynced(
|
| QuicSessionPeer::GetCryptoStream(client_session)->flow_controller(),
|
| QuicSessionPeer::GetCryptoStream(server_session)->flow_controller());
|
| - ExpectFlowControlsSynced(
|
| - QuicSpdySessionPeer::GetHeadersStream(client_session)->flow_controller(),
|
| - QuicSpdySessionPeer::GetHeadersStream(server_session)->flow_controller());
|
| + SpdyFramer spdy_framer(HTTP2);
|
| + SpdySettingsIR settings_frame;
|
| + settings_frame.AddSetting(SETTINGS_MAX_HEADER_LIST_SIZE, false, false,
|
| + kDefaultMaxUncompressedHeaderSize);
|
| + SpdySerializedFrame frame(spdy_framer.SerializeFrame(settings_frame));
|
| + QuicFlowController* client_header_stream_flow_controller =
|
| + QuicSpdySessionPeer::GetHeadersStream(client_session)->flow_controller();
|
| + QuicFlowController* server_header_stream_flow_controller =
|
| + QuicSpdySessionPeer::GetHeadersStream(server_session)->flow_controller();
|
| + if (FLAGS_quic_send_max_header_list_size) {
|
| + // Both client and server are sending this SETTINGS frame, and the send
|
| + // window is consumed. But because of timing issue, the server may send or
|
| + // not send the frame, and the client may send/ not send / receive / not
|
| + // receive the frame.
|
| + // TODO(fayang): Rewrite this part because it is hacky.
|
| + QuicByteCount win_difference1 = QuicFlowControllerPeer::ReceiveWindowSize(
|
| + server_header_stream_flow_controller) -
|
| + QuicFlowControllerPeer::SendWindowSize(
|
| + client_header_stream_flow_controller);
|
| + QuicByteCount win_difference2 = QuicFlowControllerPeer::ReceiveWindowSize(
|
| + client_header_stream_flow_controller) -
|
| + QuicFlowControllerPeer::SendWindowSize(
|
| + server_header_stream_flow_controller);
|
| + EXPECT_TRUE(win_difference1 == 0 || win_difference1 == frame.size());
|
| + EXPECT_TRUE(win_difference2 == 0 || win_difference2 == frame.size());
|
| + } else {
|
| + ExpectFlowControlsSynced(
|
| + QuicSpdySessionPeer::GetHeadersStream(client_session)
|
| + ->flow_controller(),
|
| + QuicSpdySessionPeer::GetHeadersStream(server_session)
|
| + ->flow_controller());
|
| + }
|
|
|
| if (!client_session->force_hol_blocking()) {
|
| - EXPECT_EQ(static_cast<float>(QuicFlowControllerPeer::ReceiveWindowSize(
|
| - client_session->flow_controller())) /
|
| - QuicFlowControllerPeer::ReceiveWindowSize(
|
| - QuicSpdySessionPeer::GetHeadersStream(client_session)
|
| - ->flow_controller()),
|
| - kSessionToStreamRatio);
|
| + if (FLAGS_quic_send_max_header_list_size) {
|
| + // Client *may* have received the SETTINGs frame.
|
| + // TODO(fayang): Rewrite this part because it is hacky.
|
| + float ratio1 =
|
| + static_cast<float>(QuicFlowControllerPeer::ReceiveWindowSize(
|
| + client_session->flow_controller())) /
|
| + QuicFlowControllerPeer::ReceiveWindowSize(
|
| + QuicSpdySessionPeer::GetHeadersStream(client_session)
|
| + ->flow_controller());
|
| + float ratio2 =
|
| + static_cast<float>(QuicFlowControllerPeer::ReceiveWindowSize(
|
| + client_session->flow_controller())) /
|
| + (QuicFlowControllerPeer::ReceiveWindowSize(
|
| + QuicSpdySessionPeer::GetHeadersStream(client_session)
|
| + ->flow_controller()) +
|
| + frame.size());
|
| + EXPECT_TRUE(ratio1 == kSessionToStreamRatio ||
|
| + ratio2 == kSessionToStreamRatio);
|
| + } else {
|
| + EXPECT_EQ(static_cast<float>(QuicFlowControllerPeer::ReceiveWindowSize(
|
| + client_session->flow_controller())) /
|
| + QuicFlowControllerPeer::ReceiveWindowSize(
|
| + QuicSpdySessionPeer::GetHeadersStream(client_session)
|
| + ->flow_controller()),
|
| + kSessionToStreamRatio);
|
| + }
|
| }
|
|
|
| server_thread_->Resume();
|
|
|