OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_session.h" | 5 #include "net/quic/quic_session.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked()); | 722 EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked()); |
723 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 723 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
724 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 724 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
725 QuicHeadersStream* headers_stream = | 725 QuicHeadersStream* headers_stream = |
726 QuicSessionPeer::GetHeadersStream(&session_); | 726 QuicSessionPeer::GetHeadersStream(&session_); |
727 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); | 727 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); |
728 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 728 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
729 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 729 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
730 QuicStreamId stream_id = 5; | 730 QuicStreamId stream_id = 5; |
731 // Write until the header stream is flow control blocked. | 731 // Write until the header stream is flow control blocked. |
| 732 SpdyHeaderBlock headers; |
732 while (!headers_stream->flow_controller()->IsBlocked() && stream_id < 2010) { | 733 while (!headers_stream->flow_controller()->IsBlocked() && stream_id < 2010) { |
733 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 734 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
734 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 735 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
735 SpdyHeaderBlock headers; | |
736 headers["header"] = base::Uint64ToString(base::RandUint64()) + | 736 headers["header"] = base::Uint64ToString(base::RandUint64()) + |
737 base::Uint64ToString(base::RandUint64()) + | 737 base::Uint64ToString(base::RandUint64()) + |
738 base::Uint64ToString(base::RandUint64()); | 738 base::Uint64ToString(base::RandUint64()); |
739 headers_stream->WriteHeaders(stream_id, headers, true, nullptr); | 739 headers_stream->WriteHeaders(stream_id, headers, true, nullptr); |
740 stream_id += 2; | 740 stream_id += 2; |
741 } | 741 } |
| 742 // Write one more to ensure that the headers stream has buffered data. The |
| 743 // random headers may have exactly filled the flow control window. |
| 744 headers_stream->WriteHeaders(stream_id, headers, true, nullptr); |
| 745 EXPECT_TRUE(headers_stream->HasBufferedData()); |
| 746 |
742 EXPECT_TRUE(headers_stream->flow_controller()->IsBlocked()); | 747 EXPECT_TRUE(headers_stream->flow_controller()->IsBlocked()); |
743 EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked()); | 748 EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked()); |
744 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 749 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
745 EXPECT_TRUE(session_.IsStreamFlowControlBlocked()); | 750 EXPECT_TRUE(session_.IsStreamFlowControlBlocked()); |
746 EXPECT_FALSE(session_.HasDataToWrite()); | 751 EXPECT_FALSE(session_.HasDataToWrite()); |
747 // TODO(rtenneti): crbug.com/423586 headers_stream->HasBufferedData is flaky. | |
748 // EXPECT_TRUE(headers_stream->HasBufferedData()); | |
749 | 752 |
750 // Now complete the crypto handshake, resulting in an increased flow control | 753 // Now complete the crypto handshake, resulting in an increased flow control |
751 // send window. | 754 // send window. |
752 CryptoHandshakeMessage msg; | 755 CryptoHandshakeMessage msg; |
753 session_.GetCryptoStream()->OnHandshakeMessage(msg); | 756 session_.GetCryptoStream()->OnHandshakeMessage(msg); |
754 | 757 |
755 // Stream is now unblocked and will no longer have buffered data. | 758 // Stream is now unblocked and will no longer have buffered data. |
756 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); | 759 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); |
757 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 760 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
758 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 761 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 } | 1021 } |
1019 | 1022 |
1020 // Called after any new data is received by the session, and triggers the call | 1023 // Called after any new data is received by the session, and triggers the call |
1021 // to close the connection. | 1024 // to close the connection. |
1022 session_.PostProcessAfterData(); | 1025 session_.PostProcessAfterData(); |
1023 } | 1026 } |
1024 | 1027 |
1025 } // namespace | 1028 } // namespace |
1026 } // namespace test | 1029 } // namespace test |
1027 } // namespace net | 1030 } // namespace net |
OLD | NEW |