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

Unified Diff: net/quic/core/quic_session_test.cc

Issue 2236973002: Landing Recent QUIC changes until 4AM, Aug 7, 2016 UTC-4 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: flip quic_sequencer_buffer_retire_block_in_time to true Created 4 years, 4 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/quic/core/quic_session.cc ('k') | net/quic/core/quic_spdy_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/quic_session_test.cc
diff --git a/net/quic/core/quic_session_test.cc b/net/quic/core/quic_session_test.cc
index 64de93ec0ccafa13f8e113ec5d0ad13a36c67317..0399e2b78db255c2f5df8baa1fd9806fdf41b73e 100644
--- a/net/quic/core/quic_session_test.cc
+++ b/net/quic/core/quic_session_test.cc
@@ -119,6 +119,8 @@ class TestSession : public QuicSpdySession {
Initialize();
}
+ ~TestSession() override { delete connection(); }
+
TestCryptoStream* GetCryptoStream() override { return &crypto_stream_; }
TestStream* CreateOutgoingDynamicStream(SpdyPriority priority) override {
@@ -280,7 +282,7 @@ class QuicSessionTestServer : public QuicSessionTestBase {
INSTANTIATE_TEST_CASE_P(Tests,
QuicSessionTestServer,
- ::testing::ValuesIn(QuicSupportedVersions()));
+ ::testing::ValuesIn(AllSupportedVersions()));
TEST_P(QuicSessionTestServer, PeerAddress) {
EXPECT_EQ(IPEndPoint(Loopback4(), kTestPort), session_.peer_address());
@@ -490,6 +492,8 @@ TEST_P(QuicSessionTestServer, TestBatchedWrites) {
}
TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
+ FLAGS_quic_enable_app_limited_check = true;
+
// Encryption needs to be established before data can be sent.
CryptoHandshakeMessage msg;
session_.GetCryptoStream()->OnHandshakeMessage(msg);
@@ -511,6 +515,7 @@ TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
.WillRepeatedly(Return(QuicTime::Delta::Zero()));
EXPECT_CALL(*send_algorithm, GetCongestionWindow())
.WillRepeatedly(Return(kMaxPacketSize * 10));
+ EXPECT_CALL(*send_algorithm, InRecovery()).WillRepeatedly(Return(false));
EXPECT_CALL(*stream2, OnCanWrite())
.WillOnce(testing::IgnoreResult(
Invoke(CreateFunctor(&TestSession::SendStreamData,
@@ -531,11 +536,14 @@ TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
EXPECT_CALL(*writer, WritePacket(_, _, _, _, _))
.WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
EXPECT_CALL(*send_algorithm, OnPacketSent(_, _, _, _, _));
+ EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
session_.OnCanWrite();
EXPECT_FALSE(session_.WillingAndAbleToWrite());
}
TEST_P(QuicSessionTestServer, OnCanWriteCongestionControlBlocks) {
+ FLAGS_quic_enable_app_limited_check = true;
+
InSequence s;
// Drive congestion control manually.
@@ -576,10 +584,41 @@ TEST_P(QuicSessionTestServer, OnCanWriteCongestionControlBlocks) {
EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
.WillOnce(Return(QuicTime::Delta::Zero()));
EXPECT_CALL(*stream4, OnCanWrite());
+ EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
session_.OnCanWrite();
EXPECT_FALSE(session_.WillingAndAbleToWrite());
}
+TEST_P(QuicSessionTestServer, OnCanWriteWriterBlocks) {
+ FLAGS_quic_enable_app_limited_check = true;
+
+ // Drive congestion control manually in order to ensure that
+ // application-limited signaling is handled correctly.
+ MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+ QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+ send_algorithm);
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+ .WillRepeatedly(Return(QuicTime::Delta::Zero()));
+
+ // Drive packet writer manually.
+ MockPacketWriter* writer = static_cast<MockPacketWriter*>(
+ QuicConnectionPeer::GetWriter(session_.connection()));
+ EXPECT_CALL(*writer, IsWriteBlocked()).WillRepeatedly(Return(true));
+ EXPECT_CALL(*writer, IsWriteBlockedDataBuffered())
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(*writer, WritePacket(_, _, _, _, _)).Times(0);
+
+ TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+ session_.MarkConnectionLevelWriteBlocked(stream2->id());
+
+ EXPECT_CALL(*stream2, OnCanWrite()).Times(0);
+ EXPECT_CALL(*send_algorithm, OnApplicationLimited(_)).Times(0);
+
+ session_.OnCanWrite();
+ EXPECT_TRUE(session_.WillingAndAbleToWrite());
+}
+
TEST_P(QuicSessionTestServer, BufferedHandshake) {
EXPECT_FALSE(session_.HasPendingHandshake()); // Default value.
@@ -642,6 +681,16 @@ TEST_P(QuicSessionTestServer, OnCanWriteWithClosedStream) {
}
TEST_P(QuicSessionTestServer, OnCanWriteLimitsNumWritesIfFlowControlBlocked) {
+ FLAGS_quic_enable_app_limited_check = true;
+
+ // Drive congestion control manually in order to ensure that
+ // application-limited signaling is handled correctly.
+ MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+ QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+ send_algorithm);
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+ .WillRepeatedly(Return(QuicTime::Delta::Zero()));
+
// Ensure connection level flow control blockage.
QuicFlowControllerPeer::SetSendWindowOffset(session_.flow_controller(), 0);
EXPECT_TRUE(session_.flow_controller()->IsBlocked());
@@ -667,6 +716,10 @@ TEST_P(QuicSessionTestServer, OnCanWriteLimitsNumWritesIfFlowControlBlocked) {
QuicSpdySessionPeer::SetHeadersStream(&session_, headers_stream);
EXPECT_CALL(*headers_stream, OnCanWrite());
+ // After the crypto and header streams perform a write, the connection will be
+ // blocked by the flow control, hence it should become application-limited.
+ EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
+
session_.OnCanWrite();
EXPECT_FALSE(session_.WillingAndAbleToWrite());
}
@@ -1127,7 +1180,7 @@ class QuicSessionTestClient : public QuicSessionTestBase {
INSTANTIATE_TEST_CASE_P(Tests,
QuicSessionTestClient,
- ::testing::ValuesIn(QuicSupportedVersions()));
+ ::testing::ValuesIn(AllSupportedVersions()));
TEST_P(QuicSessionTestClient, AvailableStreamsClient) {
ASSERT_TRUE(session_.GetOrCreateDynamicStream(6) != nullptr);
« no previous file with comments | « net/quic/core/quic_session.cc ('k') | net/quic/core/quic_spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698