Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1254)

Unified Diff: net/tools/quic/quic_server_session_test.cc

Issue 557363003: Allow number of open QUIC streams to grow 10% beyond configured limit at (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@change_initial_RTT_estimate_75389539
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/tools/quic/quic_server_session.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/tools/quic/quic_server_session_test.cc
diff --git a/net/tools/quic/quic_server_session_test.cc b/net/tools/quic/quic_server_session_test.cc
index 6be0e55377c7a5310b243f76ec7c760e85311fa1..887c0b1e259edb0847abc5c2ef194582a959c9e7 100644
--- a/net/tools/quic/quic_server_session_test.cc
+++ b/net/tools/quic/quic_server_session_test.cc
@@ -61,13 +61,16 @@ class QuicServerSessionPeer {
namespace {
+const size_t kMaxStreamsForTest = 10;
+
class QuicServerSessionTest : public ::testing::TestWithParam<QuicVersion> {
protected:
QuicServerSessionTest()
: crypto_config_(QuicCryptoServerConfig::TESTING,
QuicRandom::GetInstance()) {
config_.SetDefaults();
- config_.set_max_streams_per_connection(3, 3);
+ config_.set_max_streams_per_connection(kMaxStreamsForTest,
+ kMaxStreamsForTest);
config_.SetInitialFlowControlWindowToSend(
kInitialSessionFlowControlWindowForTest);
config_.SetInitialStreamFlowControlWindowToSend(
@@ -189,27 +192,66 @@ TEST_P(QuicServerSessionTest, AcceptClosedStream) {
EXPECT_TRUE(connection_->connected());
}
-TEST_P(QuicServerSessionTest, MaxNumConnections) {
+TEST_P(QuicServerSessionTest, MaxOpenStreams) {
+ ValueRestore<bool> old_flag(&FLAGS_quic_allow_more_open_streams, true);
+ // Test that the server closes the connection if a client attempts to open too
+ // many data streams. The server accepts slightly more than the negotiated
+ // stream limit to deal with rare cases where a client FIN/RST is lost.
+
+ // The slightly increased stream limit is set during config negotiation.
+ EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams());
+ session_->OnConfigNegotiated();
+ EXPECT_EQ(kMaxStreamsMultiplier * kMaxStreamsForTest,
+ session_->get_max_open_streams());
+
EXPECT_EQ(0u, session_->GetNumOpenStreams());
- EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(
- session_.get(), kClientDataStreamId1));
- EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(
- session_.get(), kClientDataStreamId2));
- EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(
- session_.get(), kClientDataStreamId3));
+ QuicStreamId stream_id = kClientDataStreamId1;
+ // Open the max configured number of streams, should be no problem.
+ for (size_t i = 0; i < kMaxStreamsForTest; ++i) {
+ EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(session_.get(),
+ stream_id));
+ stream_id += 2;
+ }
+
+ // Open one more stream: server should accept slightly more than the
+ // configured limit.
+ EXPECT_TRUE(
+ QuicServerSessionPeer::GetIncomingDataStream(session_.get(), stream_id));
+
+ // Now violate the server's internal stream limit.
EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS));
- EXPECT_FALSE(QuicServerSessionPeer::GetIncomingDataStream(
- session_.get(), kClientDataStreamId4));
+ stream_id += 2;
+ EXPECT_FALSE(
+ QuicServerSessionPeer::GetIncomingDataStream(session_.get(), stream_id));
}
-TEST_P(QuicServerSessionTest, MaxNumConnectionsImplicit) {
+TEST_P(QuicServerSessionTest, MaxOpenStreamsImplicit) {
+ ValueRestore<bool> old_flag(&FLAGS_quic_allow_more_open_streams, true);
+ // Test that the server closes the connection if a client attempts to open too
+ // many data streams implicitly. The server accepts slightly more than the
+ // negotiated stream limit to deal with rare cases where a client FIN/RST is
+ // lost.
+
+ // The slightly increased stream limit is set during config negotiation.
+ EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams());
+ session_->OnConfigNegotiated();
+ EXPECT_EQ(kMaxStreamsMultiplier * kMaxStreamsForTest,
+ session_->get_max_open_streams());
+
EXPECT_EQ(0u, session_->GetNumOpenStreams());
EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(
session_.get(), kClientDataStreamId1));
- // Implicitly opens two more streams.
+ // Implicitly open streams up to the server's limit.
+ const int kActualMaxStreams = kMaxStreamsMultiplier * kMaxStreamsForTest;
+ const int kMaxValidStreamId =
+ kClientDataStreamId1 + (kActualMaxStreams - 1) * 2;
+ EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(
+ session_.get(), kMaxValidStreamId));
+
+ // Opening a further stream will result in connection close.
EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS));
EXPECT_FALSE(QuicServerSessionPeer::GetIncomingDataStream(
- session_.get(), kClientDataStreamId4));
+ session_.get(), kMaxValidStreamId + 2));
}
TEST_P(QuicServerSessionTest, GetEvenIncomingError) {
« no previous file with comments | « net/tools/quic/quic_server_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698