OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_unacked_packet_map.h" | 5 #include "net/quic/quic_unacked_packet_map.h" |
6 | 6 |
7 #include "net/quic/test_tools/quic_test_utils.h" | 7 #include "net/quic/test_tools/quic_test_utils.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 using std::min; | 10 using std::min; |
(...skipping 18 matching lines...) Expand all Loading... |
29 } | 29 } |
30 | 30 |
31 SerializedPacket CreateRetransmittablePacket( | 31 SerializedPacket CreateRetransmittablePacket( |
32 QuicPacketSequenceNumber sequence_number) { | 32 QuicPacketSequenceNumber sequence_number) { |
33 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); | 33 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
34 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, | 34 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
35 packets_.back(), 0, | 35 packets_.back(), 0, |
36 new RetransmittableFrames(ENCRYPTION_NONE)); | 36 new RetransmittableFrames(ENCRYPTION_NONE)); |
37 } | 37 } |
38 | 38 |
| 39 SerializedPacket CreateRetransmittablePacketForStream( |
| 40 QuicPacketSequenceNumber sequence_number, |
| 41 QuicStreamId stream_id) { |
| 42 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
| 43 RetransmittableFrames* frames = new RetransmittableFrames(ENCRYPTION_NONE); |
| 44 QuicStreamFrame* frame = new QuicStreamFrame(); |
| 45 frame->stream_id = stream_id; |
| 46 frames->AddStreamFrame(frame); |
| 47 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
| 48 packets_.back(), 0, frames); |
| 49 } |
| 50 |
39 SerializedPacket CreateNonRetransmittablePacket( | 51 SerializedPacket CreateNonRetransmittablePacket( |
40 QuicPacketSequenceNumber sequence_number) { | 52 QuicPacketSequenceNumber sequence_number) { |
41 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); | 53 packets_.push_back(new QuicEncryptedPacket(nullptr, kDefaultLength)); |
42 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, | 54 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, |
43 packets_.back(), 0, nullptr); | 55 packets_.back(), 0, nullptr); |
44 } | 56 } |
45 | 57 |
46 void VerifyInFlightPackets(QuicPacketSequenceNumber* packets, | 58 void VerifyInFlightPackets(QuicPacketSequenceNumber* packets, |
47 size_t num_packets) { | 59 size_t num_packets) { |
48 unacked_packets_.RemoveObsoletePackets(); | 60 unacked_packets_.RemoveObsoletePackets(); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 VerifyUnackedPackets(unacked, arraysize(unacked)); | 170 VerifyUnackedPackets(unacked, arraysize(unacked)); |
159 VerifyInFlightPackets(unacked, arraysize(unacked)); | 171 VerifyInFlightPackets(unacked, arraysize(unacked)); |
160 VerifyRetransmittablePackets(nullptr, 0); | 172 VerifyRetransmittablePackets(nullptr, 0); |
161 | 173 |
162 unacked_packets_.RemoveFromInFlight(1); | 174 unacked_packets_.RemoveFromInFlight(1); |
163 VerifyUnackedPackets(nullptr, 0); | 175 VerifyUnackedPackets(nullptr, 0); |
164 VerifyInFlightPackets(nullptr, 0); | 176 VerifyInFlightPackets(nullptr, 0); |
165 VerifyRetransmittablePackets(nullptr, 0); | 177 VerifyRetransmittablePackets(nullptr, 0); |
166 } | 178 } |
167 | 179 |
| 180 TEST_F(QuicUnackedPacketMapTest, StopRetransmission) { |
| 181 const QuicStreamId stream_id = 2; |
| 182 unacked_packets_.AddSentPacket( |
| 183 CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
| 184 now_, kDefaultLength, true); |
| 185 |
| 186 QuicPacketSequenceNumber unacked[] = {1}; |
| 187 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 188 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 189 QuicPacketSequenceNumber retransmittable[] = {1}; |
| 190 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 191 |
| 192 unacked_packets_.StopRetransmissionForStream(stream_id); |
| 193 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 194 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 195 VerifyRetransmittablePackets(nullptr, 0); |
| 196 } |
| 197 |
| 198 TEST_F(QuicUnackedPacketMapTest, StopRetransmissionOnOtherStream) { |
| 199 const QuicStreamId stream_id = 2; |
| 200 unacked_packets_.AddSentPacket( |
| 201 CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
| 202 now_, kDefaultLength, true); |
| 203 |
| 204 QuicPacketSequenceNumber unacked[] = {1}; |
| 205 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 206 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 207 QuicPacketSequenceNumber retransmittable[] = {1}; |
| 208 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 209 |
| 210 // Stop retransmissions on another stream and verify the packet is unchanged. |
| 211 unacked_packets_.StopRetransmissionForStream(stream_id + 2); |
| 212 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 213 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 214 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 215 } |
| 216 |
| 217 TEST_F(QuicUnackedPacketMapTest, StopRetransmissionAfterRetransmission) { |
| 218 const QuicStreamId stream_id = 2; |
| 219 unacked_packets_.AddSentPacket( |
| 220 CreateRetransmittablePacketForStream(1, stream_id), 0, NOT_RETRANSMISSION, |
| 221 now_, kDefaultLength, true); |
| 222 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, |
| 223 LOSS_RETRANSMISSION, now_, kDefaultLength, |
| 224 true); |
| 225 |
| 226 QuicPacketSequenceNumber unacked[] = {1, 2}; |
| 227 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 228 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 229 QuicPacketSequenceNumber retransmittable[] = {2}; |
| 230 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 231 |
| 232 unacked_packets_.StopRetransmissionForStream(stream_id); |
| 233 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 234 VerifyInFlightPackets(unacked, arraysize(unacked)); |
| 235 VerifyRetransmittablePackets(nullptr, 0); |
| 236 } |
| 237 |
168 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { | 238 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { |
169 // Simulate a retransmittable packet being sent, retransmitted, and the first | 239 // Simulate a retransmittable packet being sent, retransmitted, and the first |
170 // transmission being acked. | 240 // transmission being acked. |
171 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, | 241 unacked_packets_.AddSentPacket(CreateRetransmittablePacket(1), 0, |
172 NOT_RETRANSMISSION, now_, kDefaultLength, | 242 NOT_RETRANSMISSION, now_, kDefaultLength, |
173 true); | 243 true); |
174 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, | 244 unacked_packets_.AddSentPacket(CreateNonRetransmittablePacket(2), 1, |
175 LOSS_RETRANSMISSION, now_, kDefaultLength, | 245 LOSS_RETRANSMISSION, now_, kDefaultLength, |
176 true); | 246 true); |
177 | 247 |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); | 437 EXPECT_TRUE(unacked_packets_.IsUnacked(3)); |
368 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); | 438 EXPECT_FALSE(unacked_packets_.IsUnacked(4)); |
369 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); | 439 EXPECT_TRUE(unacked_packets_.IsUnacked(5)); |
370 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); | 440 EXPECT_EQ(5u, unacked_packets_.largest_sent_packet()); |
371 } | 441 } |
372 | 442 |
373 | 443 |
374 } // namespace | 444 } // namespace |
375 } // namespace test | 445 } // namespace test |
376 } // namespace net | 446 } // namespace net |
OLD | NEW |