| Index: net/quic/quic_connection_test.cc
|
| diff --git a/net/quic/quic_connection_test.cc b/net/quic/quic_connection_test.cc
|
| index ebc588d9f30731c3581316d204053461ab449316..a55c57590f8b4055cbb399b5839aba3fdbbc09a9 100644
|
| --- a/net/quic/quic_connection_test.cc
|
| +++ b/net/quic/quic_connection_test.cc
|
| @@ -1761,8 +1761,13 @@ TEST_P(QuicConnectionTest, RemoveFECFromInflightOnRetransmissionTimeout) {
|
| // the first transmission will have 1 byte for FEC group number and 2 bytes of
|
| // stream frame size, which are absent in the retransmission.
|
| size_t retransmitted_packet = protected_packet - 3;
|
| - EXPECT_EQ(retransmitted_packet,
|
| - QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
|
| + if (FLAGS_quic_use_new_rto) {
|
| + EXPECT_EQ(protected_packet + retransmitted_packet,
|
| + QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
|
| + } else {
|
| + EXPECT_EQ(retransmitted_packet,
|
| + QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
|
| + }
|
| EXPECT_FALSE(connection_.GetFecAlarm()->IsSet());
|
|
|
| // Receive ack for the retransmission. No data should be outstanding.
|
| @@ -1770,11 +1775,13 @@ TEST_P(QuicConnectionTest, RemoveFECFromInflightOnRetransmissionTimeout) {
|
| NackPacket(1, &ack);
|
| NackPacket(2, &ack);
|
| SequenceNumberSet lost_packets;
|
| + if (FLAGS_quic_use_new_rto) {
|
| + lost_packets.insert(1);
|
| + }
|
| EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
|
| .WillOnce(Return(lost_packets));
|
| EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| ProcessAckPacket(&ack);
|
| - EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
|
|
|
| // Ensure the alarm is not set since all packets have been acked or abandoned.
|
| EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
|
| @@ -1999,9 +2006,12 @@ TEST_P(QuicConnectionTest, NoTLPForFECPacket) {
|
|
|
| // Simulate the retransmission alarm firing. FEC packet is no longer
|
| // outstanding.
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(false));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(false));
|
| + }
|
| clock_.AdvanceTime(rto_time.Subtract(clock_.Now()));
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| +
|
| EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
|
| EXPECT_EQ(0u, QuicSentPacketManagerPeer::GetBytesInFlight(manager_));
|
| }
|
| @@ -2326,21 +2336,27 @@ TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) {
|
| connection_.SendStreamDataWithString(3, "foo", i * 3, !kFin, nullptr);
|
| }
|
|
|
| - // Block the congestion window and ensure they're queued.
|
| + // Block the writer and ensure they're queued.
|
| BlockOnNextWrite();
|
| clock_.AdvanceTime(DefaultRetransmissionTime());
|
| // Only one packet should be retransmitted.
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| EXPECT_TRUE(connection_.HasQueuedData());
|
|
|
| - // Unblock the congestion window.
|
| + // Unblock the writer.
|
| writer_->SetWritable();
|
| clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(
|
| 2 * DefaultRetransmissionTime().ToMicroseconds()));
|
| // Retransmit already retransmitted packets event though the sequence number
|
| // greater than the largest observed.
|
| - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(10);
|
| + if (FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
|
| + } else {
|
| + EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(10);
|
| + }
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| connection_.OnCanWrite();
|
| }
|
| @@ -2365,7 +2381,9 @@ TEST_P(QuicConnectionTest, RetransmitWriteBlockedAckedOriginalThenSent) {
|
| BlockOnNextWrite();
|
| writer_->set_is_write_blocked_data_buffered(true);
|
| // Simulate the retransmission alarm firing.
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(_));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(_));
|
| + }
|
| clock_.AdvanceTime(DefaultRetransmissionTime());
|
| connection_.GetRetransmissionAlarm()->Fire();
|
|
|
| @@ -2373,7 +2391,9 @@ TEST_P(QuicConnectionTest, RetransmitWriteBlockedAckedOriginalThenSent) {
|
| // rare circumstances with write blocked sockets.
|
| QuicAckFrame ack = InitAckFrame(1);
|
| EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| - EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + }
|
| ProcessAckPacket(&ack);
|
|
|
| writer_->SetWritable();
|
| @@ -2658,7 +2678,9 @@ TEST_P(QuicConnectionTest, RTO) {
|
| connection_.GetRetransmissionAlarm()->deadline());
|
| // Simulate the retransmission alarm firing.
|
| clock_.AdvanceTime(DefaultRetransmissionTime());
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _));
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| EXPECT_EQ(2u, writer_->header().packet_sequence_number);
|
| @@ -2686,7 +2708,9 @@ TEST_P(QuicConnectionTest, RTOWithSameEncryptionLevel) {
|
| connection_.GetRetransmissionAlarm()->deadline());
|
| {
|
| InSequence s;
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 3, _, _));
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 4, _, _));
|
| }
|
| @@ -2740,7 +2764,9 @@ TEST_P(QuicConnectionTest,
|
|
|
| // Simulate the retransmission alarm firing and the socket blocking.
|
| BlockOnNextWrite();
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| clock_.AdvanceTime(DefaultRetransmissionTime());
|
| connection_.GetRetransmissionAlarm()->Fire();
|
|
|
| @@ -2902,7 +2928,9 @@ TEST_P(QuicConnectionTest, TestRetransmitOrder) {
|
| EXPECT_NE(first_packet_size, second_packet_size);
|
| // Advance the clock by huge time to make sure packets will be retransmitted.
|
| clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| {
|
| InSequence s;
|
| EXPECT_CALL(*send_algorithm_,
|
| @@ -2914,7 +2942,9 @@ TEST_P(QuicConnectionTest, TestRetransmitOrder) {
|
|
|
| // Advance again and expect the packets to be sent again in the same order.
|
| clock_.AdvanceTime(QuicTime::Delta::FromSeconds(20));
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| {
|
| InSequence s;
|
| EXPECT_CALL(*send_algorithm_,
|
| @@ -2925,58 +2955,6 @@ TEST_P(QuicConnectionTest, TestRetransmitOrder) {
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| }
|
|
|
| -TEST_P(QuicConnectionTest, RetransmissionCountCalculation) {
|
| - EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| - QuicPacketSequenceNumber original_sequence_number;
|
| - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
|
| - .WillOnce(DoAll(SaveArg<2>(&original_sequence_number), Return(true)));
|
| - connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
|
| -
|
| - EXPECT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
|
| - &connection_, original_sequence_number));
|
| - EXPECT_FALSE(QuicConnectionPeer::IsRetransmission(
|
| - &connection_, original_sequence_number));
|
| - // Force retransmission due to RTO.
|
| - clock_.AdvanceTime(QuicTime::Delta::FromSeconds(10));
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| - QuicPacketSequenceNumber rto_sequence_number;
|
| - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
|
| - .WillOnce(DoAll(SaveArg<2>(&rto_sequence_number), Return(true)));
|
| - connection_.GetRetransmissionAlarm()->Fire();
|
| - EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
|
| - &connection_, original_sequence_number));
|
| - ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
|
| - &connection_, rto_sequence_number));
|
| - EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
|
| - &connection_, rto_sequence_number));
|
| - // Once by explicit nack.
|
| - SequenceNumberSet lost_packets;
|
| - lost_packets.insert(rto_sequence_number);
|
| - EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
|
| - .WillOnce(Return(lost_packets));
|
| - EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| - QuicPacketSequenceNumber nack_sequence_number = 0;
|
| - // Ack packets might generate some other packets, which are not
|
| - // retransmissions. (More ack packets).
|
| - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
|
| - .Times(AnyNumber());
|
| - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
|
| - .WillOnce(DoAll(SaveArg<2>(&nack_sequence_number), Return(true)));
|
| - QuicAckFrame ack = InitAckFrame(rto_sequence_number);
|
| - // Nack the retransmitted packet.
|
| - NackPacket(original_sequence_number, &ack);
|
| - NackPacket(rto_sequence_number, &ack);
|
| - ProcessAckPacket(&ack);
|
| -
|
| - ASSERT_NE(0u, nack_sequence_number);
|
| - EXPECT_FALSE(QuicConnectionPeer::IsSavedForRetransmission(
|
| - &connection_, rto_sequence_number));
|
| - ASSERT_TRUE(QuicConnectionPeer::IsSavedForRetransmission(
|
| - &connection_, nack_sequence_number));
|
| - EXPECT_TRUE(QuicConnectionPeer::IsRetransmission(
|
| - &connection_, nack_sequence_number));
|
| -}
|
| -
|
| TEST_P(QuicConnectionTest, SetRTOAfterWritingToSocket) {
|
| BlockOnNextWrite();
|
| connection_.SendStreamDataWithString(1, "foo", 0, !kFin, nullptr);
|
| @@ -3015,7 +2993,9 @@ TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) {
|
| // Ensure the second packet gets retransmitted when it finally fires.
|
| EXPECT_TRUE(retransmission_alarm->IsSet());
|
| EXPECT_LT(retransmission_alarm->deadline(), clock_.ApproximateNow());
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
|
| // Manually cancel the alarm to simulate a real test.
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| @@ -3992,7 +3972,9 @@ TEST_P(QuicConnectionTest, CheckSendStats) {
|
| EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| EXPECT_CALL(visitor_, OnCanWrite()).Times(2);
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| - EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + }
|
| ProcessAckPacket(&nack_three);
|
|
|
| EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(
|
| @@ -4238,7 +4220,9 @@ TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) {
|
| connection_.GetRetransmissionAlarm()->deadline());
|
| // Simulate the retransmission alarm firing.
|
| clock_.AdvanceTime(DefaultRetransmissionTime());
|
| - EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
|
| + }
|
| EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _));
|
| connection_.GetRetransmissionAlarm()->Fire();
|
| EXPECT_EQ(2u, writer_->header().packet_sequence_number);
|
| @@ -4248,7 +4232,9 @@ TEST_P(QuicConnectionTest, AckNotifierCallbackForAckAfterRTO) {
|
| // Ack the original packet, which will revert the RTO.
|
| EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
|
| EXPECT_CALL(*delegate.get(), OnAckNotification(1, _, _));
|
| - EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + if (!FLAGS_quic_use_new_rto) {
|
| + EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout());
|
| + }
|
| EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _));
|
| QuicAckFrame ack_frame = InitAckFrame(1);
|
| ProcessAckPacket(&ack_frame);
|
|
|