Index: net/quic/quic_unacked_packet_map_test.cc |
diff --git a/net/quic/quic_unacked_packet_map_test.cc b/net/quic/quic_unacked_packet_map_test.cc |
index 0e1d68aa08e49e743bf27db3ab6deab5a62159ce..cf622e1e6c5c13bf8cc5dc5ed370cc6e0dcbcc57 100644 |
--- a/net/quic/quic_unacked_packet_map_test.cc |
+++ b/net/quic/quic_unacked_packet_map_test.cc |
@@ -36,6 +36,18 @@ class QuicUnackedPacketMapTest : public ::testing::Test { |
new RetransmittableFrames(ENCRYPTION_NONE)); |
} |
+ SerializedPacket CreateRetransmittablePacketForStream( |
+ QuicPacketSequenceNumber sequence_number, |
+ QuicStreamId stream_id) { |
+ packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
+ RetransmittableFrames* frames = new RetransmittableFrames(ENCRYPTION_NONE); |
+ QuicStreamFrame* frame = new QuicStreamFrame(); |
+ frame->stream_id = stream_id; |
+ frames->AddStreamFrame(frame); |
+ return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
+ packets_.back(), 0, frames); |
+ } |
+ |
SerializedPacket CreateNonRetransmittablePacket( |
QuicPacketSequenceNumber sequence_number) { |
packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
@@ -165,6 +177,64 @@ TEST_F(QuicUnackedPacketMapTest, RetransmittableInflightAndRtt) { |
VerifyRetransmittablePackets(nullptr, 0); |
} |
+TEST_F(QuicUnackedPacketMapTest, StopRetransmission) { |
+ const QuicStreamId stream_id = 2; |
+ unacked_packets_.AddSentPacket( |
+ CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
+ now_, kDefaultLength, true); |
+ |
+ QuicPacketSequenceNumber unacked[] = {1}; |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ QuicPacketSequenceNumber retransmittable[] = {1}; |
+ VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
+ |
+ unacked_packets_.StopRetransmissionForStream(stream_id); |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ VerifyRetransmittablePackets(nullptr, 0); |
+} |
+ |
+TEST_F(QuicUnackedPacketMapTest, StopRetransmissionOnOtherStream) { |
+ const QuicStreamId stream_id = 2; |
+ unacked_packets_.AddSentPacket( |
+ CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
+ now_, kDefaultLength, true); |
+ |
+ QuicPacketSequenceNumber unacked[] = {1}; |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ QuicPacketSequenceNumber retransmittable[] = {1}; |
+ VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
+ |
+ // Stop retransmissions on another stream and verify the packet is unchanged. |
+ unacked_packets_.StopRetransmissionForStream(stream_id + 2); |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
+} |
+ |
+TEST_F(QuicUnackedPacketMapTest, StopRetransmissionAfterRetransmission) { |
+ const QuicStreamId stream_id = 2; |
+ unacked_packets_.AddSentPacket( |
+ CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
+ now_, kDefaultLength, true); |
+ unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, |
+ LOSS_RETRANSMISSION, now_, kDefaultLength, |
+ true); |
+ |
+ QuicPacketSequenceNumber unacked[] = {1, 2}; |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ QuicPacketSequenceNumber retransmittable[] = {2}; |
+ VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
+ |
+ unacked_packets_.StopRetransmissionForStream(stream_id); |
+ VerifyUnackedPackets(unacked, arraysize(unacked)); |
+ VerifyInFlightPackets(unacked, arraysize(unacked)); |
+ VerifyRetransmittablePackets(nullptr, 0); |
+} |
+ |
TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { |
// Simulate a retransmittable packet being sent, retransmitted, and the first |
// transmission being acked. |