Index: net/quic/congestion_control/pacing_sender_test.cc |
diff --git a/net/quic/congestion_control/pacing_sender_test.cc b/net/quic/congestion_control/pacing_sender_test.cc |
index 38e5d02d718c602724361ee69ffeee0feaa6c401..2dc696098ffae1b648fd0a7a437feb5d983b88c1 100644 |
--- a/net/quic/congestion_control/pacing_sender_test.cc |
+++ b/net/quic/congestion_control/pacing_sender_test.cc |
@@ -38,15 +38,17 @@ class PacingSenderTest : public ::testing::Test { |
void CheckPacketIsSentImmediately() { |
// In order for the packet to be sendable, the underlying sender must |
// permit it to be sent immediately. |
- EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)) |
- .WillOnce(Return(zero_time_)); |
- // Verify that the packet can be sent immediately. |
- EXPECT_EQ(zero_time_, |
- pacing_sender_->TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)); |
+ for (int i = 0; i < 2; ++i) { |
+ EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)) |
+ .WillOnce(Return(zero_time_)); |
+ // Verify that the packet can be sent immediately. |
+ EXPECT_EQ(zero_time_, |
+ pacing_sender_->TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)); |
+ } |
// Actually send the packet. |
EXPECT_CALL(*mock_sender_, |
@@ -82,15 +84,17 @@ class PacingSenderTest : public ::testing::Test { |
void CheckPacketIsDelayed(QuicTime::Delta delay) { |
// In order for the packet to be sendable, the underlying sender must |
// permit it to be sent immediately. |
- EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)) |
- .WillOnce(Return(zero_time_)); |
- // Verify that the packet is delayed. |
- EXPECT_EQ(delay.ToMicroseconds(), |
- pacing_sender_->TimeUntilSend( |
- clock_.Now(), kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA).ToMicroseconds()); |
+ for (int i = 0; i < 2; ++i) { |
+ EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)) |
+ .WillOnce(Return(zero_time_)); |
+ // Verify that the packet is delayed. |
+ EXPECT_EQ(delay.ToMicroseconds(), |
+ pacing_sender_->TimeUntilSend( |
+ clock_.Now(), kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA).ToMicroseconds()); |
+ } |
} |
const QuicTime::Delta zero_time_; |
@@ -102,25 +106,29 @@ class PacingSenderTest : public ::testing::Test { |
}; |
TEST_F(PacingSenderTest, NoSend) { |
- EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)) |
- .WillOnce(Return(infinite_time_)); |
- EXPECT_EQ(infinite_time_, |
- pacing_sender_->TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)); |
+ for (int i = 0; i < 2; ++i) { |
+ EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)) |
+ .WillOnce(Return(infinite_time_)); |
+ EXPECT_EQ(infinite_time_, |
+ pacing_sender_->TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)); |
+ } |
} |
TEST_F(PacingSenderTest, SendNow) { |
- EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)) |
- .WillOnce(Return(zero_time_)); |
- EXPECT_EQ(zero_time_, |
- pacing_sender_->TimeUntilSend(clock_.Now(), |
- kBytesInFlight, |
- HAS_RETRANSMITTABLE_DATA)); |
+ for (int i = 0; i < 2; ++i) { |
+ EXPECT_CALL(*mock_sender_, TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)) |
+ .WillOnce(Return(zero_time_)); |
+ EXPECT_EQ(zero_time_, |
+ pacing_sender_->TimeUntilSend(clock_.Now(), |
+ kBytesInFlight, |
+ HAS_RETRANSMITTABLE_DATA)); |
+ } |
} |
TEST_F(PacingSenderTest, VariousSending) { |
@@ -163,6 +171,29 @@ TEST_F(PacingSenderTest, VariousSending) { |
CheckPacketIsSentImmediately(); |
CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); |
+ // Wake up really late. |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); |
+ |
+ // Wake up really late again, but application pause partway through. |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100)); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsSentImmediately(); |
+ CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); |
+ |
// Wake up too early. |
CheckPacketIsDelayed(QuicTime::Delta::FromMilliseconds(2)); |