Index: net/quic/core/quic_sent_packet_manager_test.cc |
diff --git a/net/quic/core/quic_sent_packet_manager_test.cc b/net/quic/core/quic_sent_packet_manager_test.cc |
index 8f531c32fed80217368602d722f760647958ff37..a6a54477348d376689e13d85de4e19da8fea7407 100644 |
--- a/net/quic/core/quic_sent_packet_manager_test.cc |
+++ b/net/quic/core/quic_sent_packet_manager_test.cc |
@@ -1165,6 +1165,48 @@ TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
} |
+TEST_P(QuicSentPacketManagerTest, |
+ GetConservativeTransmissionTimeCryptoHandshake) { |
+ FLAGS_quic_conservative_handshake_retransmits = true; |
+ QuicConfig config; |
+ QuicTagVector options; |
+ options.push_back(kCONH); |
+ QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
+ EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
+ manager_.SetFromConfig(config); |
+ // Calling SetFromConfig requires mocking out some send algorithm methods. |
+ EXPECT_CALL(*send_algorithm_, PacingRate(_)) |
+ .WillRepeatedly(Return(QuicBandwidth::Zero())); |
+ EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
+ .WillRepeatedly(Return(10 * kDefaultTCPMSS)); |
+ |
+ SendCryptoPacket(1); |
+ |
+ // Check the min. |
+ RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
+ rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); |
+ EXPECT_EQ(clock_.Now() + QuicTime::Delta::FromMilliseconds(25), |
+ manager_.GetRetransmissionTime()); |
+ |
+ // Test with a standard smoothed RTT. |
+ rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
+ |
+ QuicTime::Delta srtt = |
+ QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
+ QuicTime expected_time = clock_.Now() + 2 * srtt; |
+ EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
+ |
+ // Retransmit the packet by invoking the retransmission timeout. |
+ clock_.AdvanceTime(2 * srtt); |
+ manager_.OnRetransmissionTimeout(); |
+ RetransmitNextPacket(2); |
+ |
+ // The retransmission time should now be twice as far in the future. |
+ expected_time = clock_.Now() + srtt * 2 * 2; |
+ EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
+} |
+ |
TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
SendDataPacket(1); |