| Index: net/quic/quic_sent_packet_manager_test.cc
|
| diff --git a/net/quic/quic_sent_packet_manager_test.cc b/net/quic/quic_sent_packet_manager_test.cc
|
| index ffc11e5739377f2d5aedcc51b040be10230f5ce3..6b8f96e50adff54a99cac201294d788f239a7338 100644
|
| --- a/net/quic/quic_sent_packet_manager_test.cc
|
| +++ b/net/quic/quic_sent_packet_manager_test.cc
|
| @@ -22,6 +22,7 @@ using testing::Not;
|
| using testing::Pair;
|
| using testing::Pointwise;
|
| using testing::Return;
|
| +using testing::SetArgPointee;
|
| using testing::StrictMock;
|
| using testing::_;
|
|
|
| @@ -650,8 +651,7 @@ TEST_P(QuicSentPacketManagerTest, Rtt) {
|
| QuicAckFrame ack_frame = InitAckFrame(packet_number);
|
| ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5);
|
| manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| - EXPECT_EQ(expected_rtt,
|
| - QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
|
| + EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, RttWithInvalidDelta) {
|
| @@ -667,8 +667,7 @@ TEST_P(QuicSentPacketManagerTest, RttWithInvalidDelta) {
|
| QuicAckFrame ack_frame = InitAckFrame(packet_number);
|
| ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(11);
|
| manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| - EXPECT_EQ(expected_rtt,
|
| - QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
|
| + EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, RttWithInfiniteDelta) {
|
| @@ -683,8 +682,7 @@ TEST_P(QuicSentPacketManagerTest, RttWithInfiniteDelta) {
|
| QuicAckFrame ack_frame = InitAckFrame(packet_number);
|
| ack_frame.ack_delay_time = QuicTime::Delta::Infinite();
|
| manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| - EXPECT_EQ(expected_rtt,
|
| - QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
|
| + EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, RttZeroDelta) {
|
| @@ -699,8 +697,7 @@ TEST_P(QuicSentPacketManagerTest, RttZeroDelta) {
|
| QuicAckFrame ack_frame = InitAckFrame(packet_number);
|
| ack_frame.ack_delay_time = QuicTime::Delta::Zero();
|
| manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| - EXPECT_EQ(expected_rtt,
|
| - QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt());
|
| + EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt());
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) {
|
| @@ -1188,7 +1185,7 @@ TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) {
|
| SendCryptoPacket(1);
|
|
|
| // Check the min.
|
| - RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_);
|
| + RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
|
| rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli);
|
| EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)),
|
| manager_.GetRetransmissionTime());
|
| @@ -1217,7 +1214,7 @@ TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) {
|
| SendDataPacket(2);
|
|
|
| // Check the min.
|
| - RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_);
|
| + RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
|
| rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli);
|
| EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)),
|
| manager_.GetRetransmissionTime());
|
| @@ -1250,10 +1247,9 @@ TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) {
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) {
|
| - QuicSentPacketManagerPeer::GetRttStats(&manager_)
|
| + const_cast<RttStats*>(manager_.GetRttStats())
|
| ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100),
|
| QuicTime::Delta::Zero(), QuicTime::Zero());
|
| -
|
| SendDataPacket(1);
|
| SendDataPacket(2);
|
| SendDataPacket(3);
|
| @@ -1548,6 +1544,73 @@ TEST_P(QuicSentPacketManagerTest, NegotiateNewRTOFromOptionsAtClient) {
|
| EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_));
|
| }
|
|
|
| +TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) {
|
| + FLAGS_quic_loss_recovery_use_largest_acked = true;
|
| + EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
|
| + QuicConfig config;
|
| + QuicTagVector options;
|
| +
|
| + options.push_back(kUNDO);
|
| + QuicConfigPeer::SetReceivedConnectionOptions(&config, options);
|
| + EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
|
| + EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
|
| + manager_.SetFromConfig(config);
|
| + EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
|
| +
|
| + // Ensure undo works as intended.
|
| + // Send 5 packets, mark the first 4 for retransmission, and then cancel
|
| + // them when 1 is acked.
|
| + EXPECT_CALL(*send_algorithm_, PacingRate())
|
| + .WillRepeatedly(Return(QuicBandwidth::Zero()));
|
| + EXPECT_CALL(*send_algorithm_, GetCongestionWindow())
|
| + .WillOnce(Return(10 * kDefaultTCPMSS));
|
| + const size_t kNumSentPackets = 5;
|
| + for (size_t i = 1; i <= kNumSentPackets; ++i) {
|
| + SendDataPacket(i);
|
| + }
|
| + MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm();
|
| + QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm);
|
| + EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| + EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
|
| + SendAlgorithmInterface::CongestionVector lost_packets;
|
| + for (size_t i = 1; i < kNumSentPackets; ++i) {
|
| + lost_packets.push_back(std::make_pair(i, kMaxPacketSize));
|
| + }
|
| + EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _))
|
| + .WillOnce(SetArgPointee<4>(lost_packets));
|
| + QuicAckFrame ack_frame = InitAckFrame(kNumSentPackets);
|
| + NackPackets(1, kNumSentPackets, &ack_frame);
|
| + // Congestion block the sending right before losing the packets.
|
| + EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _))
|
| + .WillRepeatedly(Return(QuicTime::Delta::Infinite()));
|
| + manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| + EXPECT_TRUE(manager_.HasPendingRetransmissions());
|
| + EXPECT_EQ(0u, BytesInFlight());
|
| +
|
| + // Ack 1 and ensure the retransmissions are cancelled and put back in flight.
|
| + EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _));
|
| + ack_frame = InitAckFrame(5);
|
| + NackPackets(2, kNumSentPackets, &ack_frame);
|
| + manager_.OnIncomingAck(ack_frame, clock_.Now());
|
| + EXPECT_FALSE(manager_.HasPendingRetransmissions());
|
| + EXPECT_EQ(3u * kDefaultLength, BytesInFlight());
|
| +}
|
| +
|
| +TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) {
|
| + FLAGS_quic_loss_recovery_use_largest_acked = true;
|
| + EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
|
| + QuicConfig client_config;
|
| + QuicTagVector options;
|
| +
|
| + options.push_back(kUNDO);
|
| + QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT);
|
| + client_config.SetConnectionOptionsToSend(options);
|
| + EXPECT_CALL(*network_change_visitor_, OnCongestionChange());
|
| + EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
|
| + manager_.SetFromConfig(client_config);
|
| + EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_));
|
| +}
|
| +
|
| TEST_P(QuicSentPacketManagerTest,
|
| NegotiateConservativeReceiveWindowFromOptions) {
|
| EXPECT_EQ(kDefaultSocketReceiveBuffer,
|
| @@ -1642,7 +1705,7 @@ TEST_P(QuicSentPacketManagerTest, ResumeConnectionState) {
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) {
|
| - RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_);
|
| + RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
|
| int64_t default_init_rtt = rtt_stats->initial_rtt_us();
|
| rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
|
| EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
|
| @@ -1661,7 +1724,7 @@ TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) {
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) {
|
| - RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_);
|
| + RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
|
| int64_t default_init_rtt = rtt_stats->initial_rtt_us();
|
| rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
|
| EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
|
| @@ -1679,7 +1742,7 @@ TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) {
|
| }
|
|
|
| TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) {
|
| - RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_);
|
| + RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats());
|
| int64_t default_init_rtt = rtt_stats->initial_rtt_us();
|
| rtt_stats->set_initial_rtt_us(default_init_rtt * 2);
|
| EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us());
|
|
|