| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_server_session_base.h" | 5 #include "net/quic/quic_server_session_base.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 class QuicServerSessionBaseTest : public ::testing::TestWithParam<QuicVersion> { | 124 class QuicServerSessionBaseTest : public ::testing::TestWithParam<QuicVersion> { |
| 125 protected: | 125 protected: |
| 126 QuicServerSessionBaseTest() | 126 QuicServerSessionBaseTest() |
| 127 : crypto_config_(QuicCryptoServerConfig::TESTING, | 127 : crypto_config_(QuicCryptoServerConfig::TESTING, |
| 128 QuicRandom::GetInstance(), | 128 QuicRandom::GetInstance(), |
| 129 CryptoTestUtils::ProofSourceForTesting()), | 129 CryptoTestUtils::ProofSourceForTesting()), |
| 130 compressed_certs_cache_( | 130 compressed_certs_cache_( |
| 131 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) { | 131 QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) { |
| 132 FLAGS_quic_always_log_bugs_for_tests = true; | 132 FLAGS_quic_always_log_bugs_for_tests = true; |
| 133 config_.SetMaxStreamsPerConnection(kMaxStreamsForTest, kMaxStreamsForTest); | 133 config_.SetMaxStreamsPerConnection(kMaxStreamsForTest, kMaxStreamsForTest); |
| 134 config_.SetMaxIncomingDynamicStreamsToSend(kMaxStreamsForTest); |
| 135 QuicConfigPeer::SetReceivedMaxIncomingDynamicStreams(&config_, |
| 136 kMaxStreamsForTest); |
| 134 config_.SetInitialStreamFlowControlWindowToSend( | 137 config_.SetInitialStreamFlowControlWindowToSend( |
| 135 kInitialStreamFlowControlWindowForTest); | 138 kInitialStreamFlowControlWindowForTest); |
| 136 config_.SetInitialSessionFlowControlWindowToSend( | 139 config_.SetInitialSessionFlowControlWindowToSend( |
| 137 kInitialSessionFlowControlWindowForTest); | 140 kInitialSessionFlowControlWindowForTest); |
| 138 | 141 |
| 139 connection_ = new StrictMock<MockQuicConnection>( | 142 connection_ = new StrictMock<MockQuicConnection>( |
| 140 &helper_, &alarm_factory_, Perspective::IS_SERVER, | 143 &helper_, &alarm_factory_, Perspective::IS_SERVER, |
| 141 SupportedVersions(GetParam())); | 144 SupportedVersions(GetParam())); |
| 142 session_.reset(new TestServerSession(config_, connection_, &owner_, | 145 session_.reset(new TestServerSession(config_, connection_, &owner_, |
| 143 &session_helper_, &crypto_config_, | 146 &session_helper_, &crypto_config_, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 // The stream should never be opened, now that the reset is received. | 263 // The stream should never be opened, now that the reset is received. |
| 261 EXPECT_EQ(1u, session_->GetNumOpenIncomingStreams()); | 264 EXPECT_EQ(1u, session_->GetNumOpenIncomingStreams()); |
| 262 EXPECT_TRUE(connection_->connected()); | 265 EXPECT_TRUE(connection_->connected()); |
| 263 } | 266 } |
| 264 | 267 |
| 265 TEST_P(QuicServerSessionBaseTest, MaxOpenStreams) { | 268 TEST_P(QuicServerSessionBaseTest, MaxOpenStreams) { |
| 266 // Test that the server refuses if a client attempts to open too many data | 269 // Test that the server refuses if a client attempts to open too many data |
| 267 // streams. The server accepts slightly more than the negotiated stream limit | 270 // streams. The server accepts slightly more than the negotiated stream limit |
| 268 // to deal with rare cases where a client FIN/RST is lost. | 271 // to deal with rare cases where a client FIN/RST is lost. |
| 269 | 272 |
| 273 if (GetParam() <= QUIC_VERSION_34) { |
| 274 EXPECT_EQ(kMaxStreamsForTest, session_->max_open_incoming_streams()); |
| 275 } |
| 276 |
| 270 // The slightly increased stream limit is set during config negotiation. It | 277 // The slightly increased stream limit is set during config negotiation. It |
| 271 // is either an increase of 10 over negotiated limit, or a fixed percentage | 278 // is either an increase of 10 over negotiated limit, or a fixed percentage |
| 272 // scaling, whichever is larger. Test both before continuing. | 279 // scaling, whichever is larger. Test both before continuing. |
| 273 EXPECT_EQ(kMaxStreamsForTest, session_->max_open_incoming_streams()); | |
| 274 session_->OnConfigNegotiated(); | 280 session_->OnConfigNegotiated(); |
| 275 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest, | 281 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest, |
| 276 kMaxStreamsForTest + kMaxStreamsMinimumIncrement); | 282 kMaxStreamsForTest + kMaxStreamsMinimumIncrement); |
| 277 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement, | 283 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement, |
| 278 session_->max_open_incoming_streams()); | 284 session_->max_open_incoming_streams()); |
| 279 EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams()); | 285 EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams()); |
| 280 QuicStreamId stream_id = kClientDataStreamId1; | 286 QuicStreamId stream_id = kClientDataStreamId1; |
| 281 // Open the max configured number of streams, should be no problem. | 287 // Open the max configured number of streams, should be no problem. |
| 282 for (size_t i = 0; i < kMaxStreamsForTest; ++i) { | 288 for (size_t i = 0; i < kMaxStreamsForTest; ++i) { |
| 283 EXPECT_TRUE(QuicServerSessionBasePeer::GetOrCreateDynamicStream( | 289 EXPECT_TRUE(QuicServerSessionBasePeer::GetOrCreateDynamicStream( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 305 // Even if the connection remains open, the stream creation should fail. | 311 // Even if the connection remains open, the stream creation should fail. |
| 306 EXPECT_FALSE(QuicServerSessionBasePeer::GetOrCreateDynamicStream( | 312 EXPECT_FALSE(QuicServerSessionBasePeer::GetOrCreateDynamicStream( |
| 307 session_.get(), stream_id)); | 313 session_.get(), stream_id)); |
| 308 } | 314 } |
| 309 | 315 |
| 310 TEST_P(QuicServerSessionBaseTest, MaxAvailableStreams) { | 316 TEST_P(QuicServerSessionBaseTest, MaxAvailableStreams) { |
| 311 // Test that the server closes the connection if a client makes too many data | 317 // Test that the server closes the connection if a client makes too many data |
| 312 // streams available. The server accepts slightly more than the negotiated | 318 // streams available. The server accepts slightly more than the negotiated |
| 313 // stream limit to deal with rare cases where a client FIN/RST is lost. | 319 // stream limit to deal with rare cases where a client FIN/RST is lost. |
| 314 | 320 |
| 315 // The slightly increased stream limit is set during config negotiation. | 321 if (GetParam() <= QUIC_VERSION_34) { |
| 316 EXPECT_EQ(kMaxStreamsForTest, session_->max_open_incoming_streams()); | 322 // The slightly increased stream limit is set during config negotiation. |
| 323 EXPECT_EQ(kMaxStreamsForTest, session_->max_open_incoming_streams()); |
| 324 } |
| 317 session_->OnConfigNegotiated(); | 325 session_->OnConfigNegotiated(); |
| 318 const size_t kAvailableStreamLimit = session_->MaxAvailableStreams(); | 326 const size_t kAvailableStreamLimit = session_->MaxAvailableStreams(); |
| 319 EXPECT_EQ( | 327 EXPECT_EQ( |
| 320 session_->max_open_incoming_streams() * kMaxAvailableStreamsMultiplier, | 328 session_->max_open_incoming_streams() * kMaxAvailableStreamsMultiplier, |
| 321 session_->MaxAvailableStreams()); | 329 session_->MaxAvailableStreams()); |
| 322 // The protocol specification requires that there can be at least 10 times | 330 // The protocol specification requires that there can be at least 10 times |
| 323 // as many available streams as the connection's maximum open streams. | 331 // as many available streams as the connection's maximum open streams. |
| 324 EXPECT_LE(10 * kMaxStreamsForTest, kAvailableStreamLimit); | 332 EXPECT_LE(10 * kMaxStreamsForTest, kAvailableStreamLimit); |
| 325 | 333 |
| 326 EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams()); | 334 EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams()); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 EXPECT_FALSE( | 564 EXPECT_FALSE( |
| 557 QuicServerSessionBasePeer::IsBandwidthResumptionEnabled(session_.get())); | 565 QuicServerSessionBasePeer::IsBandwidthResumptionEnabled(session_.get())); |
| 558 session_->OnConfigNegotiated(); | 566 session_->OnConfigNegotiated(); |
| 559 EXPECT_FALSE( | 567 EXPECT_FALSE( |
| 560 QuicServerSessionBasePeer::IsBandwidthResumptionEnabled(session_.get())); | 568 QuicServerSessionBasePeer::IsBandwidthResumptionEnabled(session_.get())); |
| 561 } | 569 } |
| 562 | 570 |
| 563 } // namespace | 571 } // namespace |
| 564 } // namespace test | 572 } // namespace test |
| 565 } // namespace net | 573 } // namespace net |
| OLD | NEW |