Index: net/quic/core/quic_connection_test.cc |
diff --git a/net/quic/core/quic_connection_test.cc b/net/quic/core/quic_connection_test.cc |
index a24a222430932e8519dc4db79107d02761c04585..1f80381a2f1c713fb21f4848253ff2a76acb1400 100644 |
--- a/net/quic/core/quic_connection_test.cc |
+++ b/net/quic/core/quic_connection_test.cc |
@@ -2913,7 +2913,7 @@ TEST_P(QuicConnectionTest, PingAfterSend) { |
ProcessAckPacket(&frame); |
EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
// The ping timer is set slightly less than 15 seconds in the future, because |
- // of the 1s ping timer alarm granularity. |
+ // of the 1st ping timer alarm granularity. |
Ryan Hamilton
2016/09/02 21:26:52
this really mean 1 second, not first.
Zhongyi Shi
2016/09/02 21:44:45
Sorry for misread the code.
|
EXPECT_EQ(clock_.ApproximateNow() + QuicTime::Delta::FromSeconds(15) - |
QuicTime::Delta::FromMilliseconds(5), |
connection_.GetPingAlarm()->deadline()); |
@@ -2932,6 +2932,51 @@ TEST_P(QuicConnectionTest, PingAfterSend) { |
EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
} |
+TEST_P(QuicConnectionTest, ReducedPingTimeout) { |
+ EXPECT_TRUE(connection_.connected()); |
+ EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(true)); |
+ EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
+ |
+ // Use a reduced ping timeout for this connection. |
+ connection_.set_ping_timeout(QuicTime::Delta::FromSeconds(10)); |
Ryan Hamilton
2016/09/02 21:26:52
To confirm, this test fails if you comment out thi
Zhongyi Shi
2016/09/02 21:44:45
Yes! I just ran the test with this setter commente
|
+ |
+ // Advance to 5ms, and send a packet to the peer, which will set |
+ // the ping alarm. |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
+ EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
+ SendStreamDataToPeer(kHeadersStreamId, "GET /", 0, kFin, nullptr); |
+ EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
+ EXPECT_EQ(clock_.ApproximateNow() + QuicTime::Delta::FromSeconds(10), |
+ connection_.GetPingAlarm()->deadline()); |
+ |
+ // Now recevie and ACK of the previous packet, which will move the |
+ // ping alarm forward. |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
+ QuicAckFrame frame = InitAckFrame(1); |
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
+ EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
+ ProcessAckPacket(&frame); |
+ EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
+ // The ping timer is set slightly less than 10 seconds in the future, because |
+ // of the 1st ping timer alarm granularity. |
+ EXPECT_EQ(clock_.ApproximateNow() + QuicTime::Delta::FromSeconds(10) - |
+ QuicTime::Delta::FromMilliseconds(5), |
+ connection_.GetPingAlarm()->deadline()); |
+ |
+ writer_->Reset(); |
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10)); |
+ connection_.GetPingAlarm()->Fire(); |
+ EXPECT_EQ(1u, writer_->frame_count()); |
+ ASSERT_EQ(1u, writer_->ping_frames().size()); |
+ writer_->Reset(); |
+ |
+ EXPECT_CALL(visitor_, HasOpenDynamicStreams()).WillRepeatedly(Return(false)); |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
+ SendAckPacketToPeer(); |
+ |
+ EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
+} |
+ |
// Tests whether sending an MTU discovery packet to peer successfully causes the |
// maximum packet size to increase. |
TEST_P(QuicConnectionTest, SendMtuDiscoveryPacket) { |