| 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_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 ~QuicSentPacketManagerTest() { | 35 ~QuicSentPacketManagerTest() { |
| 36 STLDeleteElements(&packets_); | 36 STLDeleteElements(&packets_); |
| 37 } | 37 } |
| 38 | 38 |
| 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, | 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, |
| 40 size_t num_packets) { | 40 size_t num_packets) { |
| 41 if (num_packets == 0) { | 41 if (num_packets == 0) { |
| 42 EXPECT_FALSE(manager_.HasUnackedPackets()); | 42 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); | 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); |
| 44 EXPECT_FALSE(manager_.HasUnackedPackets()); | |
| 45 return; | 44 return; |
| 46 } | 45 } |
| 47 | 46 |
| 48 EXPECT_TRUE(manager_.HasUnackedPackets()); | 47 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); | 48 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); |
| 50 for (size_t i = 0; i < num_packets; ++i) { | 49 for (size_t i = 0; i < num_packets; ++i) { |
| 51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; | 50 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; |
| 52 } | 51 } |
| 53 } | 52 } |
| 54 | 53 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 } | 105 } |
| 107 | 106 |
| 108 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 107 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 109 packets_.push_back(QuicPacket::NewFecPacket( | 108 packets_.push_back(QuicPacket::NewFecPacket( |
| 110 NULL, 0, false, PACKET_8BYTE_GUID, false, | 109 NULL, 0, false, PACKET_8BYTE_GUID, false, |
| 111 PACKET_6BYTE_SEQUENCE_NUMBER)); | 110 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 112 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 111 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 113 packets_.back(), 0u, NULL); | 112 packets_.back(), 0u, NULL); |
| 114 } | 113 } |
| 115 | 114 |
| 115 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 116 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _)) |
| 117 .Times(1).WillOnce(Return(true)); |
| 118 SerializedPacket packet(CreatePacket(sequence_number)); |
| 119 manager_.OnSerializedPacket(packet); |
| 120 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), |
| 121 packet.packet->length(), NOT_RETRANSMISSION, |
| 122 HAS_RETRANSMITTABLE_DATA); |
| 123 } |
| 124 |
| 125 // Based on QuicConnection's WritePendingRetransmissions. |
| 126 void RetransmitNextPacket( |
| 127 QuicPacketSequenceNumber retransmission_sequence_number) { |
| 128 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 129 EXPECT_CALL(*send_algorithm_, |
| 130 OnPacketSent(_, retransmission_sequence_number, _, _, _)) |
| 131 .Times(1).WillOnce(Return(true)); |
| 132 const QuicSentPacketManager::PendingRetransmission pending = |
| 133 manager_.NextPendingRetransmission(); |
| 134 manager_.OnRetransmittedPacket( |
| 135 pending.sequence_number, retransmission_sequence_number); |
| 136 manager_.OnPacketSent(retransmission_sequence_number, |
| 137 clock_.ApproximateNow(), 1000, |
| 138 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); |
| 139 } |
| 140 |
| 116 testing::StrictMock<MockHelper> helper_; | 141 testing::StrictMock<MockHelper> helper_; |
| 117 QuicSentPacketManager manager_; | 142 QuicSentPacketManager manager_; |
| 118 vector<QuicPacket*> packets_; | 143 vector<QuicPacket*> packets_; |
| 119 MockClock clock_; | 144 MockClock clock_; |
| 120 MockSendAlgorithm* send_algorithm_; | 145 MockSendAlgorithm* send_algorithm_; |
| 121 }; | 146 }; |
| 122 | 147 |
| 123 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 148 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 124 VerifyUnackedPackets(NULL, 0); | 149 VerifyUnackedPackets(NULL, 0); |
| 125 | 150 |
| 126 SerializedPacket serialized_packet(CreatePacket(1)); | 151 SerializedPacket serialized_packet(CreatePacket(1)); |
| 127 | 152 |
| 128 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 153 manager_.OnSerializedPacket(serialized_packet); |
| 129 | 154 |
| 130 QuicPacketSequenceNumber unacked[] = { 1 }; | 155 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 131 VerifyUnackedPackets(unacked, arraysize(unacked)); | 156 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 132 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 157 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 133 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 158 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 134 } | 159 } |
| 135 | 160 |
| 136 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 161 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 137 SerializedPacket serialized_packet(CreatePacket(1)); | 162 SerializedPacket serialized_packet(CreatePacket(1)); |
| 138 | 163 |
| 139 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 164 manager_.OnSerializedPacket(serialized_packet); |
| 140 RetransmitPacket(1, 2); | 165 RetransmitPacket(1, 2); |
| 141 | 166 |
| 142 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 167 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
| 143 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 168 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 144 VerifyUnackedPackets(unacked, arraysize(unacked)); | 169 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 145 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 170 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
| 146 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 171 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 147 } | 172 } |
| 148 | 173 |
| 149 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 174 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 150 SerializedPacket serialized_packet(CreatePacket(1)); | 175 SerializedPacket serialized_packet(CreatePacket(1)); |
| 151 | 176 |
| 152 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 177 manager_.OnSerializedPacket(serialized_packet); |
| 153 RetransmitPacket(1, 2); | 178 RetransmitPacket(1, 2); |
| 154 | 179 |
| 155 // Ack 2 but not 1. | 180 // Ack 2 but not 1. |
| 156 ReceivedPacketInfo received_info; | 181 ReceivedPacketInfo received_info; |
| 157 received_info.largest_observed = 2; | 182 received_info.largest_observed = 2; |
| 158 received_info.missing_packets.insert(1); | 183 received_info.missing_packets.insert(1); |
| 159 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u)); | |
| 160 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 184 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 161 | 185 |
| 162 // No unacked packets remain. | 186 // No unacked packets remain. |
| 163 VerifyUnackedPackets(NULL, 0); | 187 VerifyUnackedPackets(NULL, 0); |
| 164 VerifyRetransmittablePackets(NULL, 0); | 188 VerifyRetransmittablePackets(NULL, 0); |
| 165 } | 189 } |
| 166 | 190 |
| 167 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 191 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 168 SerializedPacket serialized_packet(CreatePacket(1)); | 192 SerializedPacket serialized_packet(CreatePacket(1)); |
| 169 | 193 |
| 170 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 194 manager_.OnSerializedPacket(serialized_packet); |
| 171 QuicSentPacketManagerPeer::MarkForRetransmission( | 195 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 172 &manager_, 1, NACK_RETRANSMISSION); | 196 &manager_, 1, NACK_RETRANSMISSION); |
| 173 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 197 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 174 | 198 |
| 175 // Ack 1. | 199 // Ack 1. |
| 176 ReceivedPacketInfo received_info; | 200 ReceivedPacketInfo received_info; |
| 177 received_info.largest_observed = 1; | 201 received_info.largest_observed = 1; |
| 178 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | |
| 179 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 202 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 180 | 203 |
| 181 // There should no longer be a pending retransmission. | 204 // There should no longer be a pending retransmission. |
| 182 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 205 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 183 | 206 |
| 184 // No unacked packets remain. | 207 // No unacked packets remain. |
| 185 VerifyUnackedPackets(NULL, 0); | 208 VerifyUnackedPackets(NULL, 0); |
| 186 VerifyRetransmittablePackets(NULL, 0); | 209 VerifyRetransmittablePackets(NULL, 0); |
| 187 } | 210 } |
| 188 | 211 |
| 189 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 212 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
| 190 SerializedPacket serialized_packet(CreatePacket(1)); | 213 SerializedPacket serialized_packet(CreatePacket(1)); |
| 191 | 214 |
| 192 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 215 manager_.OnSerializedPacket(serialized_packet); |
| 193 RetransmitPacket(1, 2); | 216 RetransmitPacket(1, 2); |
| 194 | 217 |
| 195 // Ack 1 but not 2. | 218 // Ack 1 but not 2. |
| 196 ReceivedPacketInfo received_info; | 219 ReceivedPacketInfo received_info; |
| 197 received_info.largest_observed = 1; | 220 received_info.largest_observed = 1; |
| 198 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u)); | |
| 199 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 221 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 200 | 222 |
| 201 // 2 remains unacked, but no packets have retransmittable data. | 223 // 2 remains unacked, but no packets have retransmittable data. |
| 202 QuicPacketSequenceNumber unacked[] = { 2 }; | 224 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 203 VerifyUnackedPackets(unacked, arraysize(unacked)); | 225 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 204 VerifyRetransmittablePackets(NULL, 0); | 226 VerifyRetransmittablePackets(NULL, 0); |
| 227 |
| 228 // Verify that if the retransmission alarm does fire to abandon packet 2, |
| 229 // the sent packet manager is not notified, since there is no retransmittable |
| 230 // data outstanding. |
| 231 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 232 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 233 manager_.OnRetransmissionTimeout(); |
| 205 } | 234 } |
| 206 | 235 |
| 207 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 236 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
| 208 SerializedPacket serialized_packet(CreatePacket(1)); | 237 SerializedPacket serialized_packet(CreatePacket(1)); |
| 209 | 238 |
| 210 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 239 manager_.OnSerializedPacket(serialized_packet); |
| 211 RetransmitPacket(1, 2); | 240 RetransmitPacket(1, 2); |
| 212 RetransmitPacket(2, 3); | 241 RetransmitPacket(2, 3); |
| 213 | 242 |
| 214 // Ack 1 but not 2 or 3. | 243 // Ack 1 but not 2 or 3. |
| 215 ReceivedPacketInfo received_info; | 244 ReceivedPacketInfo received_info; |
| 216 received_info.largest_observed = 1; | 245 received_info.largest_observed = 1; |
| 217 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
| 218 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 246 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 219 | 247 |
| 220 // 3 remains unacked, but no packets have retransmittable data. | 248 // 3 remains unacked, but no packets have retransmittable data. |
| 221 QuicPacketSequenceNumber unacked[] = { 3 }; | 249 QuicPacketSequenceNumber unacked[] = { 3 }; |
| 222 VerifyUnackedPackets(unacked, arraysize(unacked)); | 250 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 223 VerifyRetransmittablePackets(NULL, 0); | 251 VerifyRetransmittablePackets(NULL, 0); |
| 252 |
| 253 // Verify that if the retransmission alarm does fire to abandon packet 3, |
| 254 // the sent packet manager is not notified, since there is no retransmittable |
| 255 // data outstanding. |
| 256 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 257 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 258 manager_.OnRetransmissionTimeout(); |
| 224 } | 259 } |
| 225 | 260 |
| 226 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 261 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
| 227 SerializedPacket serialized_packet(CreatePacket(1)); | 262 SerializedPacket serialized_packet(CreatePacket(1)); |
| 228 | 263 |
| 229 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 264 manager_.OnSerializedPacket(serialized_packet); |
| 230 RetransmitPacket(1, 2); | 265 RetransmitPacket(1, 2); |
| 231 RetransmitPacket(2, 3); | 266 RetransmitPacket(2, 3); |
| 232 RetransmitPacket(3, 4); | 267 RetransmitPacket(3, 4); |
| 233 | 268 |
| 234 // Truncated ack with 2 NACKs | 269 // Truncated ack with 2 NACKs |
| 235 ReceivedPacketInfo received_info; | 270 ReceivedPacketInfo received_info; |
| 236 received_info.largest_observed = 2; | 271 received_info.largest_observed = 2; |
| 237 received_info.missing_packets.insert(1); | 272 received_info.missing_packets.insert(1); |
| 238 received_info.missing_packets.insert(2); | 273 received_info.missing_packets.insert(2); |
| 239 received_info.is_truncated = true; | 274 received_info.is_truncated = true; |
| 240 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(5u)); | |
| 241 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 275 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 242 | 276 |
| 243 // High water mark will be raised. | 277 // High water mark will be raised. |
| 244 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 278 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
| 245 VerifyUnackedPackets(unacked, arraysize(unacked)); | 279 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 246 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 280 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
| 247 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 281 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 248 } | 282 } |
| 249 | 283 |
| 250 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | 284 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { |
| 251 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); | 285 manager_.OnSerializedPacket(CreatePacket(1)); |
| 252 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); | 286 manager_.OnSerializedPacket(CreatePacket(2)); |
| 253 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); | 287 manager_.OnSerializedPacket(CreatePacket(3)); |
| 254 | 288 |
| 255 { | 289 { |
| 256 // Ack packets 1 and 3. | 290 // Ack packets 1 and 3. |
| 257 ReceivedPacketInfo received_info; | 291 ReceivedPacketInfo received_info; |
| 258 received_info.largest_observed = 3; | 292 received_info.largest_observed = 3; |
| 259 received_info.missing_packets.insert(2); | 293 received_info.missing_packets.insert(2); |
| 260 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
| 261 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 294 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 262 | 295 |
| 263 QuicPacketSequenceNumber unacked[] = { 2 }; | 296 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 264 VerifyUnackedPackets(unacked, arraysize(unacked)); | 297 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 265 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 298 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
| 266 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 299 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 267 } | 300 } |
| 268 | 301 |
| 269 manager_.OnSerializedPacket(CreatePacket(4), QuicTime::Zero()); | 302 manager_.OnSerializedPacket(CreatePacket(4)); |
| 270 manager_.OnSerializedPacket(CreatePacket(5), QuicTime::Zero()); | 303 manager_.OnSerializedPacket(CreatePacket(5)); |
| 271 | 304 |
| 272 { | 305 { |
| 273 // Ack packets 5. | 306 // Ack packets 5. |
| 274 ReceivedPacketInfo received_info; | 307 ReceivedPacketInfo received_info; |
| 275 received_info.largest_observed = 5; | 308 received_info.largest_observed = 5; |
| 276 received_info.missing_packets.insert(2); | 309 received_info.missing_packets.insert(2); |
| 277 received_info.missing_packets.insert(4); | 310 received_info.missing_packets.insert(4); |
| 278 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(6u)); | |
| 279 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 311 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 280 | 312 |
| 281 QuicPacketSequenceNumber unacked[] = { 2, 4 }; | 313 QuicPacketSequenceNumber unacked[] = { 2, 4 }; |
| 282 VerifyUnackedPackets(unacked, arraysize(unacked)); | 314 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 283 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; | 315 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; |
| 284 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 316 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 285 } | 317 } |
| 286 | 318 |
| 287 manager_.OnSerializedPacket(CreatePacket(6), QuicTime::Zero()); | 319 manager_.OnSerializedPacket(CreatePacket(6)); |
| 288 manager_.OnSerializedPacket(CreatePacket(7), QuicTime::Zero()); | 320 manager_.OnSerializedPacket(CreatePacket(7)); |
| 289 | 321 |
| 290 { | 322 { |
| 291 // Ack packets 7. | 323 // Ack packets 7. |
| 292 ReceivedPacketInfo received_info; | 324 ReceivedPacketInfo received_info; |
| 293 received_info.largest_observed = 7; | 325 received_info.largest_observed = 7; |
| 294 received_info.missing_packets.insert(2); | 326 received_info.missing_packets.insert(2); |
| 295 received_info.missing_packets.insert(4); | 327 received_info.missing_packets.insert(4); |
| 296 received_info.missing_packets.insert(6); | 328 received_info.missing_packets.insert(6); |
| 297 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(8u)); | |
| 298 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 329 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 299 | 330 |
| 300 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; | 331 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; |
| 301 VerifyUnackedPackets(unacked, arraysize(unacked)); | 332 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 302 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; | 333 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; |
| 303 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 334 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 304 } | 335 } |
| 305 | 336 |
| 306 RetransmitPacket(2, 8); | 337 RetransmitPacket(2, 8); |
| 307 manager_.OnSerializedPacket(CreatePacket(9), QuicTime::Zero()); | 338 manager_.OnSerializedPacket(CreatePacket(9)); |
| 308 manager_.OnSerializedPacket(CreatePacket(10), QuicTime::Zero()); | 339 manager_.OnSerializedPacket(CreatePacket(10)); |
| 309 | 340 |
| 310 { | 341 { |
| 311 // Ack packet 10. | 342 // Ack packet 10. |
| 312 ReceivedPacketInfo received_info; | 343 ReceivedPacketInfo received_info; |
| 313 received_info.largest_observed = 10; | 344 received_info.largest_observed = 10; |
| 314 received_info.missing_packets.insert(2); | 345 received_info.missing_packets.insert(2); |
| 315 received_info.missing_packets.insert(4); | 346 received_info.missing_packets.insert(4); |
| 316 received_info.missing_packets.insert(6); | 347 received_info.missing_packets.insert(6); |
| 317 received_info.missing_packets.insert(8); | 348 received_info.missing_packets.insert(8); |
| 318 received_info.missing_packets.insert(9); | 349 received_info.missing_packets.insert(9); |
| 319 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(11u)); | |
| 320 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 350 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 321 | 351 |
| 322 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; | 352 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; |
| 323 VerifyUnackedPackets(unacked, arraysize(unacked)); | 353 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 324 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; | 354 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; |
| 325 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 355 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 326 } | 356 } |
| 327 | 357 |
| 328 | 358 |
| 329 RetransmitPacket(4, 11); | 359 RetransmitPacket(4, 11); |
| 330 manager_.OnSerializedPacket(CreatePacket(12), QuicTime::Zero()); | 360 manager_.OnSerializedPacket(CreatePacket(12)); |
| 331 manager_.OnSerializedPacket(CreatePacket(13), QuicTime::Zero()); | 361 manager_.OnSerializedPacket(CreatePacket(13)); |
| 332 | 362 |
| 333 { | 363 { |
| 334 // Ack packet 13. | 364 // Ack packet 13. |
| 335 ReceivedPacketInfo received_info; | 365 ReceivedPacketInfo received_info; |
| 336 received_info.largest_observed = 13; | 366 received_info.largest_observed = 13; |
| 337 received_info.missing_packets.insert(2); | 367 received_info.missing_packets.insert(2); |
| 338 received_info.missing_packets.insert(4); | 368 received_info.missing_packets.insert(4); |
| 339 received_info.missing_packets.insert(6); | 369 received_info.missing_packets.insert(6); |
| 340 received_info.missing_packets.insert(8); | 370 received_info.missing_packets.insert(8); |
| 341 received_info.missing_packets.insert(9); | 371 received_info.missing_packets.insert(9); |
| 342 received_info.missing_packets.insert(11); | 372 received_info.missing_packets.insert(11); |
| 343 received_info.missing_packets.insert(12); | 373 received_info.missing_packets.insert(12); |
| 344 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(14u)); | |
| 345 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 374 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 346 | 375 |
| 347 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; | 376 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; |
| 348 VerifyUnackedPackets(unacked, arraysize(unacked)); | 377 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 349 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; | 378 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; |
| 350 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 379 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 351 } | 380 } |
| 352 | 381 |
| 353 RetransmitPacket(6, 14); | 382 RetransmitPacket(6, 14); |
| 354 manager_.OnSerializedPacket(CreatePacket(15), QuicTime::Zero()); | 383 manager_.OnSerializedPacket(CreatePacket(15)); |
| 355 manager_.OnSerializedPacket(CreatePacket(16), QuicTime::Zero()); | 384 manager_.OnSerializedPacket(CreatePacket(16)); |
| 356 | 385 |
| 357 { | 386 { |
| 358 // Ack packet 16. | 387 // Ack packet 16. |
| 359 ReceivedPacketInfo received_info; | 388 ReceivedPacketInfo received_info; |
| 360 received_info.largest_observed = 13; | 389 received_info.largest_observed = 13; |
| 361 received_info.missing_packets.insert(2); | 390 received_info.missing_packets.insert(2); |
| 362 received_info.missing_packets.insert(4); | 391 received_info.missing_packets.insert(4); |
| 363 received_info.missing_packets.insert(6); | 392 received_info.missing_packets.insert(6); |
| 364 received_info.missing_packets.insert(8); | 393 received_info.missing_packets.insert(8); |
| 365 received_info.missing_packets.insert(9); | 394 received_info.missing_packets.insert(9); |
| 366 received_info.missing_packets.insert(11); | 395 received_info.missing_packets.insert(11); |
| 367 received_info.missing_packets.insert(12); | 396 received_info.missing_packets.insert(12); |
| 368 received_info.is_truncated = true; | 397 received_info.is_truncated = true; |
| 369 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(17u)); | |
| 370 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 398 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 371 | 399 |
| 372 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | 400 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. |
| 373 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | 401 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; |
| 374 VerifyUnackedPackets(unacked, arraysize(unacked)); | 402 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 375 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | 403 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; |
| 376 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 404 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 377 } | 405 } |
| 378 } | 406 } |
| 379 | 407 |
| 380 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 408 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
| 381 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 409 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
| 382 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 410 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 383 } | 411 } |
| 384 | 412 |
| 385 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 413 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
| 386 SerializedPacket serialized_packet(CreatePacket(1)); | 414 SerializedPacket serialized_packet(CreatePacket(1)); |
| 387 | 415 |
| 388 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 416 manager_.OnSerializedPacket(serialized_packet); |
| 389 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 417 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 390 } | 418 } |
| 391 | 419 |
| 392 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { | 420 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { |
| 393 SerializedPacket serialized_packet(CreateFecPacket(1)); | 421 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 394 | 422 |
| 395 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 423 manager_.OnSerializedPacket(serialized_packet); |
| 396 // FEC packets do not count as "unacked". | 424 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 397 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | |
| 398 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | |
| 399 } | 425 } |
| 400 | 426 |
| 401 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { | 427 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { |
| 402 SerializedPacket serialized_packet(CreatePacket(1)); | 428 SerializedPacket serialized_packet(CreatePacket(1)); |
| 403 | 429 |
| 404 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 430 manager_.OnSerializedPacket(serialized_packet); |
| 405 manager_.DiscardUnackedPacket(1u); | 431 manager_.DiscardUnackedPacket(1u); |
| 406 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); | 432 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); |
| 407 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); | 433 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 408 } | 434 } |
| 409 | 435 |
| 410 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { | 436 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedPacketAndDiscard) { |
| 411 VerifyUnackedPackets(NULL, 0); | 437 VerifyUnackedPackets(NULL, 0); |
| 412 | 438 |
| 413 SerializedPacket serialized_packet(CreateFecPacket(1)); | 439 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 414 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 440 manager_.OnSerializedPacket(serialized_packet); |
| 415 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 441 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 416 | 442 |
| 417 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 443 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 418 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); | 444 manager_.OnSerializedPacket(serialized_packet2); |
| 419 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 445 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 420 | 446 |
| 421 SerializedPacket serialized_packet3(CreateFecPacket(3)); | 447 SerializedPacket serialized_packet3(CreateFecPacket(3)); |
| 422 manager_.OnSerializedPacket(serialized_packet3, QuicTime::Zero()); | 448 manager_.OnSerializedPacket(serialized_packet3); |
| 423 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); | 449 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 424 | 450 |
| 425 VerifyUnackedPackets(NULL, 0); | 451 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
| 452 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 426 VerifyRetransmittablePackets(NULL, 0); | 453 VerifyRetransmittablePackets(NULL, 0); |
| 427 | 454 |
| 428 manager_.DiscardFecPacket(1); | 455 manager_.DiscardUnackedPacket(1); |
| 429 EXPECT_EQ(2u, manager_.GetLeastUnackedFecPacket()); | 456 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); |
| 430 | 457 |
| 431 // Ack 2. | 458 // Ack 2. |
| 432 ReceivedPacketInfo received_info; | 459 ReceivedPacketInfo received_info; |
| 433 received_info.largest_observed = 2; | 460 received_info.largest_observed = 2; |
| 434 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u)); | |
| 435 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 461 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 436 | 462 |
| 437 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); | 463 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket()); |
| 438 | 464 |
| 439 // Discard the 3rd packet and ensure there are no FEC packets. | 465 // Discard the 3rd packet and ensure there are no FEC packets. |
| 440 manager_.DiscardFecPacket(3); | 466 manager_.DiscardUnackedPacket(3); |
| 441 EXPECT_FALSE(manager_.HasUnackedFecPackets()); | 467 EXPECT_FALSE(manager_.HasUnackedPackets()); |
| 442 } | 468 } |
| 443 | 469 |
| 444 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { | 470 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 445 VerifyUnackedPackets(NULL, 0); | 471 VerifyUnackedPackets(NULL, 0); |
| 446 | 472 |
| 447 SerializedPacket serialized_packet(CreateFecPacket(1)); | 473 SerializedPacket serialized_packet(CreateFecPacket(1)); |
| 448 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); | 474 manager_.OnSerializedPacket(serialized_packet); |
| 475 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _)) |
| 476 .Times(1).WillOnce(Return(true)); |
| 477 manager_.OnPacketSent( |
| 478 1, QuicTime::Zero(), 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 449 SerializedPacket serialized_packet2(CreateFecPacket(2)); | 479 SerializedPacket serialized_packet2(CreateFecPacket(2)); |
| 450 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | 480 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); |
| 451 manager_.OnSerializedPacket(serialized_packet2, sent_time); | 481 manager_.OnSerializedPacket(serialized_packet2); |
| 482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _)) |
| 483 .Times(1).WillOnce(Return(true)); |
| 484 manager_.OnPacketSent( |
| 485 2, sent_time, 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 452 | 486 |
| 453 VerifyUnackedPackets(NULL, 0); | 487 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 488 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 454 VerifyRetransmittablePackets(NULL, 0); | 489 VerifyRetransmittablePackets(NULL, 0); |
| 455 | 490 |
| 456 EXPECT_TRUE(manager_.HasUnackedFecPackets()); | 491 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 457 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); | 492 EXPECT_EQ(QuicTime::Zero(), |
| 458 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); | 493 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 494 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
| 459 } | 495 } |
| 460 | 496 |
| 461 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { | 497 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { |
| 462 const size_t kNumSentPackets = 4; | 498 const size_t kNumSentPackets = 4; |
| 463 // Transmit 4 packets. | 499 // Transmit 4 packets. |
| 464 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 500 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 465 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) |
| 466 .Times(1).WillOnce(Return(true)); | 502 .Times(1).WillOnce(Return(true)); |
| 467 manager_.OnPacketSent(i, clock_.Now(), 1000, | 503 manager_.OnPacketSent(i, clock_.Now(), 1000, |
| 468 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 504 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 received_info.largest_observed = sequence_number; | 819 received_info.largest_observed = sequence_number; |
| 784 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 820 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 785 manager_.OnIncomingAckFrame(received_info, clock_.Now()); | 821 manager_.OnIncomingAckFrame(received_info, clock_.Now()); |
| 786 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); | 822 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); |
| 787 } | 823 } |
| 788 | 824 |
| 789 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
| 790 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 826 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
| 791 const size_t kNumSentPackets = 100; | 827 const size_t kNumSentPackets = 100; |
| 792 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 828 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 793 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) | 829 SendDataPacket(i); |
| 794 .Times(1).WillOnce(Return(true)); | |
| 795 manager_.OnPacketSent(i, clock_.Now(), 1000, | |
| 796 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | |
| 797 } | 830 } |
| 798 | 831 |
| 799 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 800 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); | 832 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); |
| 801 | 833 |
| 834 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 835 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
| 802 manager_.OnRetransmissionTimeout(); | 837 manager_.OnRetransmissionTimeout(); |
| 803 } | 838 } |
| 804 | 839 |
| 805 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { | 840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { |
| 806 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 807 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1); | |
| 808 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 841 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 809 .WillOnce(Return(delay)); | 842 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1))); |
| 810 | 843 |
| 811 manager_.OnRetransmissionTimeout(); | |
| 812 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), | 844 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), |
| 813 manager_.GetRetransmissionDelay()); | 845 manager_.GetRetransmissionDelay()); |
| 814 } | 846 } |
| 815 | 847 |
| 816 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { | 848 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { |
| 817 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | |
| 818 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500); | |
| 819 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 849 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 820 .WillOnce(Return(delay)); | 850 .WillOnce(Return(QuicTime::Delta::FromSeconds(500))); |
| 821 | 851 |
| 822 manager_.OnRetransmissionTimeout(); | |
| 823 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), | 852 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), |
| 824 manager_.GetRetransmissionDelay()); | 853 manager_.GetRetransmissionDelay()); |
| 825 } | 854 } |
| 826 | 855 |
| 827 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { | 856 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { |
| 857 SendDataPacket(1); |
| 828 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 858 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
| 829 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 859 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 830 .WillRepeatedly(Return(delay)); | 860 .WillRepeatedly(Return(delay)); |
| 831 | 861 |
| 832 // Delay should back off exponentially. | 862 // Delay should back off exponentially. |
| 833 for (int i = 0; i < 5; ++i) { | 863 for (int i = 0; i < 5; ++i) { |
| 834 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); | 864 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
| 835 delay = delay.Add(delay); | 865 delay = delay.Add(delay); |
| 866 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
| 836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | 867 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
| 837 manager_.OnRetransmissionTimeout(); | 868 manager_.OnRetransmissionTimeout(); |
| 869 RetransmitNextPacket(i + 2); |
| 838 } | 870 } |
| 839 } | 871 } |
| 840 | 872 |
| 841 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { | 873 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { |
| 842 FLAGS_limit_rto_increase_for_tests = true; | 874 FLAGS_limit_rto_increase_for_tests = true; |
| 843 | 875 |
| 876 SendDataPacket(1); |
| 844 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); | 877 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); |
| 845 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 878 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 846 .WillRepeatedly(Return(delay)); | 879 .WillRepeatedly(Return(delay)); |
| 847 | 880 |
| 848 // No backoff for the first 5 retransmissions. | 881 // No backoff for the first 5 retransmissions. |
| 849 for (int i = 0; i < 5; ++i) { | 882 for (int i = 0; i < 5; ++i) { |
| 850 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); | 883 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); |
| 884 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _)); |
| 851 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); | 885 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); |
| 852 manager_.OnRetransmissionTimeout(); | 886 manager_.OnRetransmissionTimeout(); |
| 887 RetransmitNextPacket(i + 2); |
| 853 } | 888 } |
| 854 | 889 |
| 855 // Then backoff starts | 890 // Then backoff starts |
| 856 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); | 891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); |
| 857 } | 892 } |
| 858 | 893 |
| 859 } // namespace | 894 } // namespace |
| 860 } // namespace test | 895 } // namespace test |
| 861 } // namespace net | 896 } // namespace net |
| OLD | NEW |