Index: net/quic/quic_connection_test.cc |
diff --git a/net/quic/quic_connection_test.cc b/net/quic/quic_connection_test.cc |
index 829de8620484f2b72ecc6435d5eef879c533e709..c8a228c91ff8906bd5171fdfeee18dbae2980012 100644 |
--- a/net/quic/quic_connection_test.cc |
+++ b/net/quic/quic_connection_test.cc |
@@ -510,6 +510,16 @@ class TestConnection : public QuicConnection { |
QuicConnectionPeer::GetAckAlarm(this)); |
} |
+ TestConnectionHelper::TestAlarm* GetPingAlarm() { |
+ return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
+ QuicConnectionPeer::GetPingAlarm(this)); |
+ } |
+ |
+ TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() { |
+ return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
+ QuicConnectionPeer::GetResumeWritesAlarm(this)); |
+ } |
+ |
TestConnectionHelper::TestAlarm* GetRetransmissionAlarm() { |
return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
QuicConnectionPeer::GetRetransmissionAlarm(this)); |
@@ -520,11 +530,6 @@ class TestConnection : public QuicConnection { |
QuicConnectionPeer::GetSendAlarm(this)); |
} |
- TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() { |
- return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
- QuicConnectionPeer::GetResumeWritesAlarm(this)); |
- } |
- |
TestConnectionHelper::TestAlarm* GetTimeoutAlarm() { |
return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
QuicConnectionPeer::GetTimeoutAlarm(this)); |
@@ -576,6 +581,7 @@ class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> { |
EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); |
EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); |
EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); |
+ EXPECT_CALL(visitor_, HasOpenStreams()).WillRepeatedly(Return(false)); |
EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) |
.WillRepeatedly(Return(QuicTime::Zero())); |
@@ -2576,12 +2582,43 @@ TEST_P(QuicConnectionTest, InitialTimeout) { |
EXPECT_FALSE(connection_.connected()); |
EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
+ EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
} |
+TEST_P(QuicConnectionTest, PingAfterSend) { |
+ EXPECT_TRUE(connection_.connected()); |
+ EXPECT_CALL(visitor_, HasOpenStreams()).WillRepeatedly(Return(true)); |
+ EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
+ |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
+ // Send an ack so we don't set the retransmission alarm. |
+ SendAckPacketToPeer(); |
+ QuicTime ping_timeout = clock_.ApproximateNow().Add( |
+ QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs / 2)); |
+ EXPECT_EQ(ping_timeout, connection_.GetPingAlarm()->deadline()); |
+ |
+ writer_->Reset(); |
+ EXPECT_CALL(*send_algorithm_, |
+ TimeUntilSend(_, _)).WillRepeatedly( |
+ testing::Return(QuicTime::Delta::Zero())); |
+ connection_.GetPingAlarm()->Fire(); |
+ EXPECT_EQ(1u, writer_->frame_count()); |
+ EXPECT_EQ(1u, writer_->stream_frames()->size()); |
+ EXPECT_EQ(kCryptoStreamId, (*writer_->stream_frames())[0].stream_id); |
+ EXPECT_EQ(0u, (*writer_->stream_frames())[0].offset); |
+ writer_->Reset(); |
+ |
+ EXPECT_CALL(visitor_, HasOpenStreams()).WillRepeatedly(Return(false)); |
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
+ SendAckPacketToPeer(); |
+ |
+ EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
+} |
+ |
TEST_P(QuicConnectionTest, TimeoutAfterSend) { |
EXPECT_TRUE(connection_.connected()); |