| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/test_tools/quic_test_utils.h" | 8 #include "net/quic/test_tools/quic_test_utils.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 MOCK_METHOD2(OnPacketNacked, void(QuicPacketSequenceNumber sequence_number, | 24 MOCK_METHOD2(OnPacketNacked, void(QuicPacketSequenceNumber sequence_number, |
| 25 size_t nack_count)); | 25 size_t nack_count)); |
| 26 }; | 26 }; |
| 27 | 27 |
| 28 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { | 28 class QuicSentPacketManagerTest : public ::testing::TestWithParam<bool> { |
| 29 protected: | 29 protected: |
| 30 QuicSentPacketManagerTest() | 30 QuicSentPacketManagerTest() |
| 31 : manager_(true, &helper_) { | 31 : manager_(true, &helper_) { |
| 32 } | 32 } |
| 33 | 33 |
| 34 void SetUp() { | |
| 35 FLAGS_track_retransmission_history = GetParam(); | |
| 36 } | |
| 37 | |
| 38 ~QuicSentPacketManagerTest() { | 34 ~QuicSentPacketManagerTest() { |
| 39 STLDeleteElements(&packets_); | 35 STLDeleteElements(&packets_); |
| 40 } | 36 } |
| 41 | 37 |
| 42 | 38 |
| 43 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
| 44 size_t num_packets) { | 40 size_t num_packets) { |
| 45 if (num_packets == 0) { | 41 if (num_packets == 0) { |
| 46 EXPECT_FALSE(manager_.HasUnackedPackets()); | 42 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 47 EXPECT_EQ(0u, manager_.GetNumUnackedPackets()); | 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); |
| 48 EXPECT_TRUE(manager_.GetUnackedPackets().empty()); | 44 EXPECT_TRUE(manager_.GetUnackedPackets().empty()); |
| 49 return; | 45 return; |
| 50 } | 46 } |
| 51 | 47 |
| 52 EXPECT_TRUE(manager_.HasUnackedPackets()); | 48 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 53 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
| 54 for (size_t i = 0; i < num_packets; ++i) { | 50 for (size_t i = 0; i < num_packets; ++i) { |
| 55 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
| 56 } | 52 } |
| 57 } | 53 } |
| 58 | 54 |
| 59 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, | 55 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, |
| 60 size_t num_packets) { | 56 size_t num_packets) { |
| 61 SequenceNumberSet unacked = manager_.GetUnackedPackets(); | 57 SequenceNumberSet unacked = manager_.GetUnackedPackets(); |
| 62 for (size_t i = 0; i < num_packets; ++i) { | 58 for (size_t i = 0; i < num_packets; ++i) { |
| 63 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; | 59 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i]; |
| 64 } | 60 } |
| 65 size_t num_retransmittable = 0; | 61 size_t num_retransmittable = 0; |
| 66 for (SequenceNumberSet::const_iterator it = unacked.begin(); | 62 for (SequenceNumberSet::const_iterator it = unacked.begin(); |
| 67 it != unacked.end(); ++it) { | 63 it != unacked.end(); ++it) { |
| 68 if (manager_.HasRetransmittableFrames(*it)) { | 64 if (manager_.HasRetransmittableFrames(*it)) { |
| 69 ++num_retransmittable; | 65 ++num_retransmittable; |
| 70 } | 66 } |
| 71 } | 67 } |
| 68 EXPECT_EQ(num_packets, manager_.GetNumRetransmittablePackets()); |
| 72 EXPECT_EQ(num_packets, num_retransmittable); | 69 EXPECT_EQ(num_packets, num_retransmittable); |
| 73 } | 70 } |
| 74 | 71 |
| 75 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, | 72 void VerifyAckedPackets(QuicPacketSequenceNumber* expected, |
| 76 size_t num_expected, | 73 size_t num_expected, |
| 77 const SequenceNumberSet& actual) { | 74 const SequenceNumberSet& actual) { |
| 78 if (num_expected == 0) { | 75 if (num_expected == 0) { |
| 79 EXPECT_TRUE(actual.empty()); | 76 EXPECT_TRUE(actual.empty()); |
| 80 return; | 77 return; |
| 81 } | 78 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 112 PACKET_6BYTE_SEQUENCE_NUMBER)); | 109 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 113 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 110 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 114 packets_.back(), 0u, NULL); | 111 packets_.back(), 0u, NULL); |
| 115 } | 112 } |
| 116 | 113 |
| 117 testing::StrictMock<MockHelper> helper_; | 114 testing::StrictMock<MockHelper> helper_; |
| 118 QuicSentPacketManager manager_; | 115 QuicSentPacketManager manager_; |
| 119 vector<QuicPacket*> packets_; | 116 vector<QuicPacket*> packets_; |
| 120 }; | 117 }; |
| 121 | 118 |
| 122 INSTANTIATE_TEST_CASE_P(TrackRetransmissionHistory, | 119 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 123 QuicSentPacketManagerTest, | |
| 124 ::testing::Values(false, true)); | |
| 125 | |
| 126 TEST_P(QuicSentPacketManagerTest, IsUnacked) { | |
| 127 VerifyUnackedPackets(NULL, 0); | 120 VerifyUnackedPackets(NULL, 0); |
| 128 | 121 |
| 129 SerializedPacket serialized_packet(CreatePacket(1)); | 122 SerializedPacket serialized_packet(CreatePacket(1)); |
| 130 | 123 |
| 131 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 124 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 132 | 125 |
| 133 QuicPacketSequenceNumber unacked[] = { 1 }; | 126 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 134 VerifyUnackedPackets(unacked, arraysize(unacked)); | 127 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 135 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 128 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 136 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 129 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 137 } | 130 } |
| 138 | 131 |
| 139 TEST_P(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 132 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 140 if (!FLAGS_track_retransmission_history) { | |
| 141 // This tests restransmission tracking specifically. | |
| 142 return; | |
| 143 } | |
| 144 SerializedPacket serialized_packet(CreatePacket(1)); | 133 SerializedPacket serialized_packet(CreatePacket(1)); |
| 145 | 134 |
| 146 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 135 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 147 RetransmitPacket(1, 2); | 136 RetransmitPacket(1, 2); |
| 148 | 137 |
| 149 EXPECT_EQ(1u, manager_.GetRetransmissionCount(2)); | 138 EXPECT_TRUE(manager_.IsRetransmission(2)); |
| 150 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 139 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 151 VerifyUnackedPackets(unacked, arraysize(unacked)); | 140 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 152 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 141 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
| 153 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 142 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 154 | |
| 155 RetransmitPacket(2, 3); | |
| 156 EXPECT_EQ(2u, manager_.GetRetransmissionCount(3)); | |
| 157 QuicPacketSequenceNumber unacked2[] = { 1, 2, 3 }; | |
| 158 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | |
| 159 QuicPacketSequenceNumber retransmittable2[] = { 3 }; | |
| 160 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2)); | |
| 161 } | 143 } |
| 162 | 144 |
| 163 TEST_P(QuicSentPacketManagerTest, RetransmitThenAck) { | 145 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 164 SerializedPacket serialized_packet(CreatePacket(1)); | 146 SerializedPacket serialized_packet(CreatePacket(1)); |
| 165 | 147 |
| 166 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 148 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 167 RetransmitPacket(1, 2); | 149 RetransmitPacket(1, 2); |
| 168 | 150 |
| 169 // Ack 2 but not 1. | 151 // Ack 2 but not 1. |
| 170 ReceivedPacketInfo received_info; | 152 ReceivedPacketInfo received_info; |
| 171 received_info.largest_observed = 2; | 153 received_info.largest_observed = 2; |
| 172 received_info.missing_packets.insert(1); | 154 received_info.missing_packets.insert(1); |
| 173 manager_.OnIncomingAck(received_info, false); | 155 manager_.OnIncomingAck(received_info, false); |
| 174 | 156 |
| 175 // No unacked packets remain. | 157 // No unacked packets remain. |
| 176 VerifyUnackedPackets(NULL, 0); | 158 VerifyUnackedPackets(NULL, 0); |
| 177 VerifyRetransmittablePackets(NULL, 0); | 159 VerifyRetransmittablePackets(NULL, 0); |
| 178 } | 160 } |
| 179 | 161 |
| 180 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 162 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 181 SerializedPacket serialized_packet(CreatePacket(1)); | 163 SerializedPacket serialized_packet(CreatePacket(1)); |
| 182 | 164 |
| 183 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 165 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 184 manager_.MarkForRetransmission(1, NACK_RETRANSMISSION); | 166 manager_.MarkForRetransmission(1, NACK_RETRANSMISSION); |
| 185 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 167 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 186 | 168 |
| 187 // Ack 1. | 169 // Ack 1. |
| 188 ReceivedPacketInfo received_info; | 170 ReceivedPacketInfo received_info; |
| 189 received_info.largest_observed = 1; | 171 received_info.largest_observed = 1; |
| 190 manager_.OnIncomingAck(received_info, false); | 172 manager_.OnIncomingAck(received_info, false); |
| 191 | 173 |
| 192 // There should no longer be a pending retransmission. | 174 // There should no longer be a pending retransmission. |
| 193 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 175 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 194 | 176 |
| 195 // No unacked packets remain. | 177 // No unacked packets remain. |
| 196 VerifyUnackedPackets(NULL, 0); | 178 VerifyUnackedPackets(NULL, 0); |
| 197 VerifyRetransmittablePackets(NULL, 0); | 179 VerifyRetransmittablePackets(NULL, 0); |
| 198 } | 180 } |
| 199 | 181 |
| 200 TEST_P(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 182 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
| 201 if (!FLAGS_track_retransmission_history) { | |
| 202 // This tests restransmission tracking specifically. | |
| 203 return; | |
| 204 } | |
| 205 SerializedPacket serialized_packet(CreatePacket(1)); | 183 SerializedPacket serialized_packet(CreatePacket(1)); |
| 206 | 184 |
| 207 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 185 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 208 RetransmitPacket(1, 2); | 186 RetransmitPacket(1, 2); |
| 209 | 187 |
| 210 // Ack 1 but not 2. | 188 // Ack 1 but not 2. |
| 211 ReceivedPacketInfo received_info; | 189 ReceivedPacketInfo received_info; |
| 212 received_info.largest_observed = 2; | 190 received_info.largest_observed = 2; |
| 213 received_info.missing_packets.insert(2); | 191 received_info.missing_packets.insert(2); |
| 214 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); | 192 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); |
| 215 manager_.OnIncomingAck(received_info, false); | 193 manager_.OnIncomingAck(received_info, false); |
| 216 | 194 |
| 217 // 2 remains unacked, but no packets have retransmittable data. | 195 // 2 remains unacked, but no packets have retransmittable data. |
| 218 QuicPacketSequenceNumber unacked[] = { 2 }; | 196 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 219 VerifyUnackedPackets(unacked, arraysize(unacked)); | 197 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 220 VerifyRetransmittablePackets(NULL, 0); | 198 VerifyRetransmittablePackets(NULL, 0); |
| 221 } | 199 } |
| 222 | 200 |
| 223 TEST_P(QuicSentPacketManagerTest, TruncatedAck) { | 201 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
| 224 if (!FLAGS_track_retransmission_history) { | |
| 225 // This tests restransmission tracking specifically. | |
| 226 return; | |
| 227 } | |
| 228 SerializedPacket serialized_packet(CreatePacket(1)); | 202 SerializedPacket serialized_packet(CreatePacket(1)); |
| 229 | 203 |
| 230 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 204 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 231 RetransmitPacket(1, 2); | 205 RetransmitPacket(1, 2); |
| 232 RetransmitPacket(2, 3); | 206 RetransmitPacket(2, 3); |
| 233 RetransmitPacket(3, 4); | 207 RetransmitPacket(3, 4); |
| 234 | 208 |
| 235 // Truncated ack with 2 NACKs | 209 // Truncated ack with 2 NACKs |
| 236 ReceivedPacketInfo received_info; | 210 ReceivedPacketInfo received_info; |
| 237 received_info.largest_observed = 2; | 211 received_info.largest_observed = 2; |
| 238 received_info.missing_packets.insert(1); | 212 received_info.missing_packets.insert(1); |
| 239 received_info.missing_packets.insert(2); | 213 received_info.missing_packets.insert(2); |
| 240 manager_.OnIncomingAck(received_info, true); | 214 manager_.OnIncomingAck(received_info, true); |
| 241 | 215 |
| 242 // High water mark will be raised. | 216 // High water mark will be raised. |
| 243 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 217 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
| 244 VerifyUnackedPackets(unacked, arraysize(unacked)); | 218 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 245 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 219 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
| 246 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 220 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 247 } | 221 } |
| 248 | 222 |
| 249 TEST_P(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | 223 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { |
| 250 if (!FLAGS_track_retransmission_history) { | |
| 251 // This tests restransmission tracking specifically. | |
| 252 return; | |
| 253 } | |
| 254 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); | 224 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); |
| 255 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); | 225 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); |
| 256 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); | 226 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); |
| 257 | 227 |
| 258 { | 228 { |
| 259 // Ack packets 1 and 3. | 229 // Ack packets 1 and 3. |
| 260 ReceivedPacketInfo received_info; | 230 ReceivedPacketInfo received_info; |
| 261 received_info.largest_observed = 3; | 231 received_info.largest_observed = 3; |
| 262 received_info.missing_packets.insert(2); | 232 received_info.missing_packets.insert(2); |
| 263 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); | 233 EXPECT_CALL(helper_, OnPacketNacked(2, 1)).Times(1); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 manager_.OnIncomingAck(received_info, true); | 355 manager_.OnIncomingAck(received_info, true); |
| 386 | 356 |
| 387 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | 357 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. |
| 388 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | 358 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; |
| 389 VerifyUnackedPackets(unacked, arraysize(unacked)); | 359 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 390 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | 360 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; |
| 391 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 361 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 392 } | 362 } |
| 393 } | 363 } |
| 394 | 364 |
| 395 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 365 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
| 396 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 366 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
| 397 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 367 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 398 } | 368 } |
| 399 | 369 |
| 400 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 370 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
| 401 SerializedPacket serialized_packet(CreatePacket(1)); | 371 SerializedPacket serialized_packet(CreatePacket(1)); |
| 402 | 372 |
| 403 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 373 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 404 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 374 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 405 } | 375 } |
| 406 | 376 |
| 407 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { | 377 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { |
| 408 SerializedPacket serialized_packet(CreateFecPacket(1)); | 378 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 409 | 379 |
| 410 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 380 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 411 // FEC packets do not count as "unacked". | 381 // FEC packets do not count as "unacked". |
| 412 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 382 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
| 413 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 383 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 414 } | 384 } |
| 415 | 385 |
| 416 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { | 386 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { |
| 417 SerializedPacket serialized_packet(CreatePacket(1)); | 387 SerializedPacket serialized_packet(CreatePacket(1)); |
| 418 | 388 |
| 419 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 389 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 420 manager_.DiscardUnackedPacket(1u); | 390 manager_.DiscardUnackedPacket(1u); |
| 421 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 391 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
| 422 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 392 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 423 } | 393 } |
| 424 | 394 |
| 425 TEST_P(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { | 395 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { |
| 426 VerifyUnackedPackets(NULL, 0); | 396 VerifyUnackedPackets(NULL, 0); |
| 427 | 397 |
| 428 SerializedPacket serialized_packet(CreateFecPacket(1)); | 398 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 429 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 399 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 430 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 400 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); |
| 431 | 401 |
| 432 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 402 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 433 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); | 403 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); |
| 434 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 404 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); |
| 435 | 405 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 448 received_info.largest_observed = 2; | 418 received_info.largest_observed = 2; |
| 449 manager_.OnIncomingAck(received_info, false); | 419 manager_.OnIncomingAck(received_info, false); |
| 450 | 420 |
| 451 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); | 421 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); |
| 452 | 422 |
| 453 // Discard the 3rd packet and ensure there are no FEC packets. | 423 // Discard the 3rd packet and ensure there are no FEC packets. |
| 454 manager_.DiscardFecPacket(3); | 424 manager_.DiscardFecPacket(3); |
| 455 EXPECT_FALSE(manager_.HasUnackedFecPackets()); | 425 EXPECT_FALSE(manager_.HasUnackedFecPackets()); |
| 456 } | 426 } |
| 457 | 427 |
| 458 TEST_P(QuicSentPacketManagerTest, GetFecSentTime) { | 428 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { |
| 459 VerifyUnackedPackets(NULL, 0); | 429 VerifyUnackedPackets(NULL, 0); |
| 460 | 430 |
| 461 SerializedPacket serialized_packet(CreateFecPacket(1)); | 431 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 462 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 432 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); |
| 463 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 433 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 464 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | 434 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); |
| 465 manager_.OnSerializedPacket(serialized_packet2, sent_time); | 435 manager_.OnSerializedPacket(serialized_packet2, sent_time); |
| 466 | 436 |
| 467 VerifyUnackedPackets(NULL, 0); | 437 VerifyUnackedPackets(NULL, 0); |
| 468 VerifyRetransmittablePackets(NULL, 0); | 438 VerifyRetransmittablePackets(NULL, 0); |
| 469 | 439 |
| 470 EXPECT_TRUE(manager_.HasUnackedFecPackets()); | 440 EXPECT_TRUE(manager_.HasUnackedFecPackets()); |
| 471 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); | 441 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); |
| 472 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); | 442 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); |
| 473 } | 443 } |
| 474 | 444 |
| 475 } // namespace | 445 } // namespace |
| 476 } // namespace test | 446 } // namespace test |
| 477 } // namespace net | 447 } // namespace net |
| OLD | NEW |