Index: net/quic/quic_session_test.cc |
diff --git a/net/quic/quic_session_test.cc b/net/quic/quic_session_test.cc |
index fbfe449b2df8f9c4b862abc917efa96f69e743f6..2d362fda0027fe008664efa8552fe5e180c4da8e 100644 |
--- a/net/quic/quic_session_test.cc |
+++ b/net/quic/quic_session_test.cc |
@@ -28,6 +28,7 @@ using std::vector; |
using testing::_; |
using testing::InSequence; |
using testing::InvokeWithoutArgs; |
+using testing::Return; |
using testing::StrictMock; |
namespace net { |
@@ -328,6 +329,49 @@ TEST_P(QuicSessionTest, OnCanWrite) { |
EXPECT_FALSE(session_.OnCanWrite()); |
} |
+TEST_P(QuicSessionTest, OnCanWriteCongestionControlBlocks) { |
+ InSequence s; |
+ |
+ // Drive congestion control manually. |
+ MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>; |
+ QuicConnectionPeer::SetSendAlgorithm(session_.connection(), send_algorithm); |
+ |
+ TestStream* stream2 = session_.CreateOutgoingDataStream(); |
+ TestStream* stream4 = session_.CreateOutgoingDataStream(); |
+ TestStream* stream6 = session_.CreateOutgoingDataStream(); |
+ |
+ session_.MarkWriteBlocked(stream2->id(), kSomeMiddlePriority); |
+ session_.MarkWriteBlocked(stream6->id(), kSomeMiddlePriority); |
+ session_.MarkWriteBlocked(stream4->id(), kSomeMiddlePriority); |
+ |
+ StreamBlocker stream2_blocker(&session_, stream2->id()); |
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _, _)).WillOnce(Return( |
+ QuicTime::Delta::Zero())); |
+ EXPECT_CALL(*stream2, OnCanWrite()); |
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _, _)).WillOnce(Return( |
+ QuicTime::Delta::Zero())); |
+ EXPECT_CALL(*stream6, OnCanWrite()); |
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _, _)).WillOnce(Return( |
+ QuicTime::Delta::Infinite())); |
+ // stream4->OnCanWrite is not called. |
+ |
+ // TODO(avd) change return value to 'true', since the connection |
+ // can't write because it is congestion control blocked. |
+ EXPECT_FALSE(session_.OnCanWrite()); |
+ |
+ // Still congestion-control blocked. |
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _, _)).WillOnce(Return( |
+ QuicTime::Delta::Infinite())); |
+ EXPECT_FALSE(session_.OnCanWrite()); |
+ |
+ // stream4->OnCanWrite is called once the connection stops being |
+ // congestion-control blocked. |
+ EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _, _)).WillOnce(Return( |
+ QuicTime::Delta::Zero())); |
+ EXPECT_CALL(*stream4, OnCanWrite()); |
+ EXPECT_TRUE(session_.OnCanWrite()); |
+} |
+ |
TEST_P(QuicSessionTest, BufferedHandshake) { |
EXPECT_FALSE(session_.HasPendingHandshake()); // Default value. |