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 |