| 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 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 988 frames.push_back(window_update_frame); | 988 frames.push_back(window_update_frame); |
| 989 session_.OnWindowUpdateFrames(frames); | 989 session_.OnWindowUpdateFrames(frames); |
| 990 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); | 990 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); |
| 991 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 991 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
| 992 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 992 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
| 993 } | 993 } |
| 994 | 994 |
| 995 TEST_P(QuicSessionTest, TooManyUnfinishedStreamsCauseConnectionClose) { | 995 TEST_P(QuicSessionTest, TooManyUnfinishedStreamsCauseConnectionClose) { |
| 996 // If a buggy/malicious peer creates too many streams that are not ended with | 996 // If a buggy/malicious peer creates too many streams that are not ended with |
| 997 // a FIN or RST then we send a connection close. | 997 // a FIN or RST then we send a connection close. |
| 998 FLAGS_close_quic_connection_unfinished_streams_2 = true; | 998 ValueRestore<bool> old_flag(&FLAGS_close_quic_connection_unfinished_streams_2, |
| 999 true); |
| 999 | 1000 |
| 1000 EXPECT_CALL(*connection_, | 1001 EXPECT_CALL(*connection_, |
| 1001 SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS)).Times(1); | 1002 SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS)).Times(1); |
| 1002 | 1003 |
| 1003 const int kMaxStreams = 5; | 1004 const int kMaxStreams = 5; |
| 1004 QuicSessionPeer::SetMaxOpenStreams(&session_, kMaxStreams); | 1005 QuicSessionPeer::SetMaxOpenStreams(&session_, kMaxStreams); |
| 1005 | 1006 |
| 1006 // Create kMaxStreams + 1 data streams, and close them all without receiving a | 1007 // Create kMaxStreams + 1 data streams, and close them all without receiving a |
| 1007 // FIN or a RST from the client. | 1008 // FIN or a RST from the client. |
| 1008 const int kFirstStreamId = kClientDataStreamId1; | 1009 const int kFirstStreamId = kClientDataStreamId1; |
| 1009 const int kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams + 1; | 1010 const int kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams + 1; |
| 1010 for (int i = kFirstStreamId; i < kFinalStreamId; i += 2) { | 1011 for (int i = kFirstStreamId; i < kFinalStreamId; i += 2) { |
| 1011 QuicStreamFrame data1(i, false, 0, MakeIOVector("HT")); | 1012 QuicStreamFrame data1(i, false, 0, MakeIOVector("HT")); |
| 1012 vector<QuicStreamFrame> frames; | 1013 vector<QuicStreamFrame> frames; |
| 1013 frames.push_back(data1); | 1014 frames.push_back(data1); |
| 1014 session_.OnStreamFrames(frames); | 1015 session_.OnStreamFrames(frames); |
| 1015 EXPECT_EQ(1u, session_.GetNumOpenStreams()); | 1016 EXPECT_EQ(1u, session_.GetNumOpenStreams()); |
| 1016 session_.CloseStream(i); | 1017 session_.CloseStream(i); |
| 1017 } | 1018 } |
| 1018 | 1019 |
| 1019 // Called after any new data is received by the session, and triggers the call | 1020 // Called after any new data is received by the session, and triggers the call |
| 1020 // to close the connection. | 1021 // to close the connection. |
| 1021 session_.PostProcessAfterData(); | 1022 session_.PostProcessAfterData(); |
| 1022 } | 1023 } |
| 1023 | 1024 |
| 1024 } // namespace | 1025 } // namespace |
| 1025 } // namespace test | 1026 } // namespace test |
| 1026 } // namespace net | 1027 } // namespace net |
| OLD | NEW |