| 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 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 EXPECT_TRUE(session_.goaway_sent()); | 576 EXPECT_TRUE(session_.goaway_sent()); |
| 577 session_.SendGoAway(QUIC_PEER_GOING_AWAY, "Going Away."); | 577 session_.SendGoAway(QUIC_PEER_GOING_AWAY, "Going Away."); |
| 578 } | 578 } |
| 579 | 579 |
| 580 TEST_P(QuicSessionTest, IncreasedTimeoutAfterCryptoHandshake) { | 580 TEST_P(QuicSessionTest, IncreasedTimeoutAfterCryptoHandshake) { |
| 581 // Add 1 to the connection timeout on the server side. | 581 // Add 1 to the connection timeout on the server side. |
| 582 EXPECT_EQ(kDefaultInitialTimeoutSecs + 1, | 582 EXPECT_EQ(kDefaultInitialTimeoutSecs + 1, |
| 583 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); | 583 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); |
| 584 CryptoHandshakeMessage msg; | 584 CryptoHandshakeMessage msg; |
| 585 session_.GetCryptoStream()->OnHandshakeMessage(msg); | 585 session_.GetCryptoStream()->OnHandshakeMessage(msg); |
| 586 EXPECT_EQ(kDefaultTimeoutSecs + 1, | 586 EXPECT_EQ(kMaximumIdleTimeoutSecs + 1, |
| 587 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); | 587 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); |
| 588 } | 588 } |
| 589 | 589 |
| 590 TEST_P(QuicSessionTest, RstStreamBeforeHeadersDecompressed) { | 590 TEST_P(QuicSessionTest, RstStreamBeforeHeadersDecompressed) { |
| 591 // Send two bytes of payload. | 591 // Send two bytes of payload. |
| 592 QuicStreamFrame data1(kClientDataStreamId1, false, 0, MakeIOVector("HT")); | 592 QuicStreamFrame data1(kClientDataStreamId1, false, 0, MakeIOVector("HT")); |
| 593 vector<QuicStreamFrame> frames; | 593 vector<QuicStreamFrame> frames; |
| 594 frames.push_back(data1); | 594 frames.push_back(data1); |
| 595 session_.OnStreamFrames(frames); | 595 session_.OnStreamFrames(frames); |
| 596 EXPECT_EQ(1u, session_.GetNumOpenStreams()); | 596 EXPECT_EQ(1u, session_.GetNumOpenStreams()); |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 session_.OnWindowUpdateFrames(frames); | 927 session_.OnWindowUpdateFrames(frames); |
| 928 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); | 928 EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked()); |
| 929 } | 929 } |
| 930 | 930 |
| 931 TEST_P(QuicSessionTest, TooManyUnfinishedStreamsCauseConnectionClose) { | 931 TEST_P(QuicSessionTest, TooManyUnfinishedStreamsCauseConnectionClose) { |
| 932 if (version() < QUIC_VERSION_18) { | 932 if (version() < QUIC_VERSION_18) { |
| 933 return; | 933 return; |
| 934 } | 934 } |
| 935 // If a buggy/malicious peer creates too many streams that are not ended with | 935 // If a buggy/malicious peer creates too many streams that are not ended with |
| 936 // a FIN or RST then we send a connection close. | 936 // a FIN or RST then we send a connection close. |
| 937 ValueRestore<bool> old_flag(&FLAGS_close_quic_connection_unfinished_streams, | 937 ValueRestore<bool> old_flag(&FLAGS_close_quic_connection_unfinished_streams_2, |
| 938 true); | 938 true); |
| 939 | 939 |
| 940 EXPECT_CALL(*connection_, | 940 EXPECT_CALL(*connection_, |
| 941 SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS)).Times(1); | 941 SendConnectionClose(QUIC_TOO_MANY_UNFINISHED_STREAMS)).Times(1); |
| 942 | 942 |
| 943 const int kMaxStreams = 5; | 943 const int kMaxStreams = 5; |
| 944 QuicSessionPeer::SetMaxOpenStreams(&session_, kMaxStreams); | 944 QuicSessionPeer::SetMaxOpenStreams(&session_, kMaxStreams); |
| 945 | 945 |
| 946 // Create kMaxStreams + 1 data streams, and close them all without receiving a | 946 // Create kMaxStreams + 1 data streams, and close them all without receiving a |
| 947 // FIN or a RST from the client. | 947 // FIN or a RST from the client. |
| 948 const int kFirstStreamId = kClientDataStreamId1; | 948 const int kFirstStreamId = kClientDataStreamId1; |
| 949 const int kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams + 1; | 949 const int kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams + 1; |
| 950 for (int i = kFirstStreamId; i < kFinalStreamId; i += 2) { | 950 for (int i = kFirstStreamId; i < kFinalStreamId; i += 2) { |
| 951 QuicStreamFrame data1(i, false, 0, MakeIOVector("HT")); | 951 QuicStreamFrame data1(i, false, 0, MakeIOVector("HT")); |
| 952 vector<QuicStreamFrame> frames; | 952 vector<QuicStreamFrame> frames; |
| 953 frames.push_back(data1); | 953 frames.push_back(data1); |
| 954 session_.OnStreamFrames(frames); | 954 session_.OnStreamFrames(frames); |
| 955 EXPECT_EQ(1u, session_.GetNumOpenStreams()); | 955 EXPECT_EQ(1u, session_.GetNumOpenStreams()); |
| 956 session_.CloseStream(i); | 956 session_.CloseStream(i); |
| 957 } | 957 } |
| 958 |
| 959 // Called after any new data is received by the session, and triggers the call |
| 960 // to close the connection. |
| 961 session_.PostProcessAfterData(); |
| 958 } | 962 } |
| 959 | 963 |
| 960 } // namespace | 964 } // namespace |
| 961 } // namespace test | 965 } // namespace test |
| 962 } // namespace net | 966 } // namespace net |
| OLD | NEW |