| 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/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/test_tools/quic_config_peer.h" | 9 #include "net/quic/test_tools/quic_config_peer.h" |
| 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 EXPECT_CALL(*send_algorithm_, | 141 EXPECT_CALL(*send_algorithm_, |
| 142 OnCongestionEvent(rtt_updated, _, | 142 OnCongestionEvent(rtt_updated, _, |
| 143 Pointwise(KeyEq(), ack_vector), | 143 Pointwise(KeyEq(), ack_vector), |
| 144 Pointwise(KeyEq(), lost_vector))); | 144 Pointwise(KeyEq(), lost_vector))); |
| 145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | 145 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 146 .WillRepeatedly(Return(100 * kDefaultTCPMSS)); | 146 .WillRepeatedly(Return(100 * kDefaultTCPMSS)); |
| 147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)). | 147 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)). |
| 148 Times(AnyNumber()); | 148 Times(AnyNumber()); |
| 149 } | 149 } |
| 150 | 150 |
| 151 // Retransmits a packet as though it was a TLP retransmission, because TLP | 151 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number, |
| 152 // leaves the |old_sequence_number| pending. | 152 QuicPacketSequenceNumber new_sequence_number) { |
| 153 // TODO(ianswett): Test with transmission types besides TLP. | |
| 154 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, | |
| 155 QuicPacketSequenceNumber new_sequence_number) { | |
| 156 QuicSentPacketManagerPeer::MarkForRetransmission( | 153 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 157 &manager_, old_sequence_number, TLP_RETRANSMISSION); | 154 &manager_, old_sequence_number, TLP_RETRANSMISSION); |
| 158 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 155 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 159 QuicSentPacketManager::PendingRetransmission next_retransmission = | 156 QuicSentPacketManager::PendingRetransmission next_retransmission = |
| 160 manager_.NextPendingRetransmission(); | 157 manager_.NextPendingRetransmission(); |
| 161 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); | 158 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); |
| 162 EXPECT_EQ(TLP_RETRANSMISSION, | 159 EXPECT_EQ(TLP_RETRANSMISSION, |
| 163 next_retransmission.transmission_type); | 160 next_retransmission.transmission_type); |
| 164 manager_.OnRetransmittedPacket(old_sequence_number, | |
| 165 new_sequence_number); | |
| 166 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( | |
| 167 &manager_, new_sequence_number)); | |
| 168 } | |
| 169 | |
| 170 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number, | |
| 171 QuicPacketSequenceNumber new_sequence_number) { | |
| 172 RetransmitPacket(old_sequence_number, new_sequence_number); | |
| 173 | 161 |
| 174 EXPECT_CALL(*send_algorithm_, | 162 EXPECT_CALL(*send_algorithm_, |
| 175 OnPacketSent(_, BytesInFlight(), new_sequence_number, | 163 OnPacketSent(_, BytesInFlight(), new_sequence_number, |
| 176 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 164 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 177 .WillOnce(Return(true)); | 165 .WillOnce(Return(true)); |
| 178 manager_.OnPacketSent(new_sequence_number, | 166 SerializedPacket packet(CreatePacket(new_sequence_number, false)); |
| 167 manager_.OnPacketSent(&packet, |
| 168 old_sequence_number, |
| 179 clock_.Now(), | 169 clock_.Now(), |
| 180 kDefaultLength, | 170 kDefaultLength, |
| 181 LOSS_RETRANSMISSION, | 171 LOSS_RETRANSMISSION, |
| 182 HAS_RETRANSMITTABLE_DATA); | 172 HAS_RETRANSMITTABLE_DATA); |
| 173 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( |
| 174 &manager_, new_sequence_number)); |
| 183 } | 175 } |
| 184 | 176 |
| 185 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 186 return CreatePacket(sequence_number, true); | 178 return CreatePacket(sequence_number, true); |
| 187 } | 179 } |
| 188 | 180 |
| 189 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
| 190 bool retransmittable) { | 182 bool retransmittable) { |
| 191 packets_.push_back(QuicPacket::NewDataPacket( | 183 packets_.push_back(QuicPacket::NewDataPacket( |
| 192 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 203 PACKET_6BYTE_SEQUENCE_NUMBER)); | 195 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 204 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 205 packets_.back(), 0u, NULL); | 197 packets_.back(), 0u, NULL); |
| 206 } | 198 } |
| 207 | 199 |
| 208 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { | 200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 209 EXPECT_CALL(*send_algorithm_, | 201 EXPECT_CALL(*send_algorithm_, |
| 210 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) | 202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) |
| 211 .Times(1).WillOnce(Return(true)); | 203 .Times(1).WillOnce(Return(true)); |
| 212 SerializedPacket packet(CreateDataPacket(sequence_number)); | 204 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 213 manager_.OnSerializedPacket(packet); | 205 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 214 manager_.OnPacketSent(sequence_number, clock_.Now(), | |
| 215 packet.packet->length(), NOT_RETRANSMISSION, | 206 packet.packet->length(), NOT_RETRANSMISSION, |
| 216 HAS_RETRANSMITTABLE_DATA); | 207 HAS_RETRANSMITTABLE_DATA); |
| 217 } | 208 } |
| 218 | 209 |
| 219 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { | 210 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { |
| 220 EXPECT_CALL(*send_algorithm_, | 211 EXPECT_CALL(*send_algorithm_, |
| 221 OnPacketSent(_, BytesInFlight(), sequence_number, | 212 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 222 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 223 .Times(1).WillOnce(Return(true)); | 214 .Times(1).WillOnce(Return(true)); |
| 224 SerializedPacket packet(CreateDataPacket(sequence_number)); | 215 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 225 packet.retransmittable_frames->AddStreamFrame( | 216 packet.retransmittable_frames->AddStreamFrame( |
| 226 new QuicStreamFrame(1, false, 0, IOVector())); | 217 new QuicStreamFrame(1, false, 0, IOVector())); |
| 227 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); | 218 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); |
| 228 manager_.OnSerializedPacket(packet); | 219 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 229 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | |
| 230 packet.packet->length(), NOT_RETRANSMISSION, | 220 packet.packet->length(), NOT_RETRANSMISSION, |
| 231 HAS_RETRANSMITTABLE_DATA); | 221 HAS_RETRANSMITTABLE_DATA); |
| 232 } | 222 } |
| 233 | 223 |
| 234 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { | 224 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 235 EXPECT_CALL(*send_algorithm_, | 225 EXPECT_CALL(*send_algorithm_, |
| 236 OnPacketSent(_, BytesInFlight(), sequence_number, | 226 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 237 kDefaultLength, NO_RETRANSMITTABLE_DATA)) | 227 kDefaultLength, NO_RETRANSMITTABLE_DATA)) |
| 238 .Times(1).WillOnce(Return(true)); | 228 .Times(1).WillOnce(Return(true)); |
| 239 SerializedPacket packet(CreateFecPacket(sequence_number)); | 229 SerializedPacket packet(CreateFecPacket(sequence_number)); |
| 240 manager_.OnSerializedPacket(packet); | 230 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 241 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | |
| 242 packet.packet->length(), NOT_RETRANSMISSION, | 231 packet.packet->length(), NOT_RETRANSMISSION, |
| 243 NO_RETRANSMITTABLE_DATA); | 232 NO_RETRANSMITTABLE_DATA); |
| 244 } | 233 } |
| 245 | 234 |
| 246 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { | 235 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { |
| 247 EXPECT_CALL(*send_algorithm_, | 236 EXPECT_CALL(*send_algorithm_, |
| 248 OnPacketSent(_, BytesInFlight(), sequence_number, | 237 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 249 kDefaultLength, NO_RETRANSMITTABLE_DATA)) | 238 kDefaultLength, NO_RETRANSMITTABLE_DATA)) |
| 250 .Times(1).WillOnce(Return(false)); | 239 .Times(1).WillOnce(Return(false)); |
| 251 SerializedPacket packet(CreatePacket(sequence_number, false)); | 240 SerializedPacket packet(CreatePacket(sequence_number, false)); |
| 252 manager_.OnSerializedPacket(packet); | 241 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 253 manager_.OnPacketSent(sequence_number, clock_.Now(), | |
| 254 packet.packet->length(), NOT_RETRANSMISSION, | 242 packet.packet->length(), NOT_RETRANSMISSION, |
| 255 NO_RETRANSMITTABLE_DATA); | 243 NO_RETRANSMITTABLE_DATA); |
| 256 } | 244 } |
| 257 | 245 |
| 258 // Based on QuicConnection's WritePendingRetransmissions. | 246 // Based on QuicConnection's WritePendingRetransmissions. |
| 259 void RetransmitNextPacket( | 247 void RetransmitNextPacket( |
| 260 QuicPacketSequenceNumber retransmission_sequence_number) { | 248 QuicPacketSequenceNumber retransmission_sequence_number) { |
| 261 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 249 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 262 EXPECT_CALL(*send_algorithm_, | 250 EXPECT_CALL(*send_algorithm_, |
| 263 OnPacketSent(_, _, retransmission_sequence_number, | 251 OnPacketSent(_, _, retransmission_sequence_number, |
| 264 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 252 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 265 .Times(1).WillOnce(Return(true)); | 253 .Times(1).WillOnce(Return(true)); |
| 266 const QuicSentPacketManager::PendingRetransmission pending = | 254 const QuicSentPacketManager::PendingRetransmission pending = |
| 267 manager_.NextPendingRetransmission(); | 255 manager_.NextPendingRetransmission(); |
| 268 manager_.OnRetransmittedPacket(pending.sequence_number, | 256 SerializedPacket packet( |
| 269 retransmission_sequence_number); | 257 CreatePacket(retransmission_sequence_number, false)); |
| 270 manager_.OnPacketSent(retransmission_sequence_number, clock_.Now(), | 258 manager_.OnPacketSent(&packet, pending.sequence_number, clock_.Now(), |
| 271 kDefaultLength, pending.transmission_type, | 259 kDefaultLength, pending.transmission_type, |
| 272 HAS_RETRANSMITTABLE_DATA); | 260 HAS_RETRANSMITTABLE_DATA); |
| 273 } | 261 } |
| 274 | 262 |
| 275 QuicSentPacketManager manager_; | 263 QuicSentPacketManager manager_; |
| 276 vector<QuicPacket*> packets_; | 264 vector<QuicPacket*> packets_; |
| 277 MockClock clock_; | 265 MockClock clock_; |
| 278 QuicConnectionStats stats_; | 266 QuicConnectionStats stats_; |
| 279 MockSendAlgorithm* send_algorithm_; | 267 MockSendAlgorithm* send_algorithm_; |
| 280 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; | 268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; |
| 281 }; | 269 }; |
| 282 | 270 |
| 283 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 271 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 284 VerifyUnackedPackets(NULL, 0); | 272 VerifyUnackedPackets(NULL, 0); |
| 285 | 273 SendDataPacket(1); |
| 286 SerializedPacket serialized_packet(CreateDataPacket(1)); | |
| 287 | |
| 288 manager_.OnSerializedPacket(serialized_packet); | |
| 289 | 274 |
| 290 QuicPacketSequenceNumber unacked[] = { 1 }; | 275 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 291 VerifyUnackedPackets(unacked, arraysize(unacked)); | 276 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 292 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 277 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 293 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 294 } | 279 } |
| 295 | 280 |
| 296 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 297 SendDataPacket(1); | 282 SendDataPacket(1); |
| 298 RetransmitPacket(1, 2); | 283 RetransmitAndSendPacket(1, 2); |
| 299 | 284 |
| 300 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 285 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
| 301 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 286 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 302 VerifyUnackedPackets(unacked, arraysize(unacked)); | 287 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 303 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 288 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
| 304 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 289 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 305 } | 290 } |
| 306 | 291 |
| 307 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 292 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 308 SendDataPacket(1); | 293 SendDataPacket(1); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 338 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 323 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 339 | 324 |
| 340 // No unacked packets remain. | 325 // No unacked packets remain. |
| 341 VerifyUnackedPackets(NULL, 0); | 326 VerifyUnackedPackets(NULL, 0); |
| 342 VerifyRetransmittablePackets(NULL, 0); | 327 VerifyRetransmittablePackets(NULL, 0); |
| 343 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 344 } | 329 } |
| 345 | 330 |
| 346 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
| 347 SendDataPacket(1); | 332 SendDataPacket(1); |
| 348 RetransmitPacket(1, 2); | |
| 349 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | |
| 350 clock_.AdvanceTime(rtt); | |
| 351 | |
| 352 // Ack 1 but not 2. | |
| 353 ExpectAck(1); | |
| 354 QuicAckFrame ack_frame; | |
| 355 ack_frame.largest_observed = 1; | |
| 356 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | |
| 357 | |
| 358 // 2 should be unacked, since it may provide an RTT measurement. | |
| 359 QuicPacketSequenceNumber unacked[] = { 2 }; | |
| 360 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 361 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | |
| 362 VerifyRetransmittablePackets(NULL, 0); | |
| 363 | |
| 364 // Verify that the retransmission alarm would not fire, | |
| 365 // since there is no retransmittable data outstanding. | |
| 366 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | |
| 367 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); | |
| 368 } | |
| 369 | |
| 370 TEST_F(QuicSentPacketManagerTest, RetransmitAndSendThenAckPrevious) { | |
| 371 SendDataPacket(1); | |
| 372 RetransmitAndSendPacket(1, 2); | 333 RetransmitAndSendPacket(1, 2); |
| 373 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 374 clock_.AdvanceTime(rtt); | 335 clock_.AdvanceTime(rtt); |
| 375 | 336 |
| 376 // Ack 1 but not 2. | 337 // Ack 1 but not 2. |
| 377 ExpectAck(1); | 338 ExpectAck(1); |
| 378 QuicAckFrame ack_frame; | 339 QuicAckFrame ack_frame; |
| 379 ack_frame.largest_observed = 1; | 340 ack_frame.largest_observed = 1; |
| 380 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 381 | 342 |
| 382 // 2 remains unacked, but no packets have retransmittable data. | 343 // 2 remains unacked, but no packets have retransmittable data. |
| 383 QuicPacketSequenceNumber unacked[] = { 2 }; | 344 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 384 VerifyUnackedPackets(unacked, arraysize(unacked)); | 345 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 385 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 386 VerifyRetransmittablePackets(NULL, 0); | 347 VerifyRetransmittablePackets(NULL, 0); |
| 387 | 348 |
| 388 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); | 349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); |
| 389 } | 350 } |
| 390 | 351 |
| 391 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
| 392 SendDataPacket(1); | 353 SendDataPacket(1); |
| 393 RetransmitPacket(1, 2); | 354 RetransmitAndSendPacket(1, 2); |
| 394 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _)) | |
| 395 .WillOnce(Return(true)); | |
| 396 manager_.OnPacketSent(2, clock_.ApproximateNow(), kDefaultLength, | |
| 397 LOSS_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | |
| 398 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 399 clock_.AdvanceTime(rtt); | 356 clock_.AdvanceTime(rtt); |
| 400 | 357 |
| 401 // First, ACK packet 1 which makes packet 2 non-retransmittable. | 358 // First, ACK packet 1 which makes packet 2 non-retransmittable. |
| 402 ExpectAck(1); | 359 ExpectAck(1); |
| 403 QuicAckFrame ack_frame; | 360 QuicAckFrame ack_frame; |
| 404 ack_frame.largest_observed = 1; | 361 ack_frame.largest_observed = 1; |
| 405 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 362 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 406 | 363 |
| 407 SendDataPacket(3); | 364 SendDataPacket(3); |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 VerifyUnackedPackets(unacked, arraysize(unacked)); | 598 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 599 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
| 643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 600 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 644 } | 601 } |
| 645 | 602 |
| 646 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { | 603 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { |
| 647 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 604 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 648 } | 605 } |
| 649 | 606 |
| 650 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { | 607 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { |
| 651 SerializedPacket serialized_packet(CreateDataPacket(1)); | 608 SendDataPacket(1); |
| 652 | |
| 653 manager_.OnSerializedPacket(serialized_packet); | |
| 654 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 609 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 655 } | 610 } |
| 656 | 611 |
| 657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { | 612 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { |
| 658 SerializedPacket serialized_packet(CreateFecPacket(1)); | 613 SendFecPacket(1); |
| 659 | |
| 660 manager_.OnSerializedPacket(serialized_packet); | |
| 661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 614 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 662 } | 615 } |
| 663 | 616 |
| 664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { | 617 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { |
| 665 VerifyUnackedPackets(NULL, 0); | 618 VerifyUnackedPackets(NULL, 0); |
| 666 | 619 |
| 667 SendFecPacket(1); | 620 SendFecPacket(1); |
| 668 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 621 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 669 | 622 |
| 670 SendFecPacket(2); | 623 SendFecPacket(2); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 683 ack_frame.largest_observed = 2; | 636 ack_frame.largest_observed = 2; |
| 684 ack_frame.missing_packets.insert(1); | 637 ack_frame.missing_packets.insert(1); |
| 685 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 638 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 686 | 639 |
| 687 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 640 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 688 } | 641 } |
| 689 | 642 |
| 690 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 643 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 691 VerifyUnackedPackets(NULL, 0); | 644 VerifyUnackedPackets(NULL, 0); |
| 692 | 645 |
| 693 SerializedPacket serialized_packet(CreateFecPacket(1)); | 646 QuicTime sent_time = clock_.Now(); |
| 694 manager_.OnSerializedPacket(serialized_packet); | 647 SendFecPacket(1); |
| 695 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) | 648 QuicTime sent_time2 = clock_.Now(); |
| 696 .Times(1).WillOnce(Return(true)); | 649 SendFecPacket(2); |
| 697 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION, | |
| 698 NO_RETRANSMITTABLE_DATA); | |
| 699 | |
| 700 SerializedPacket serialized_packet2(CreateFecPacket(2)); | |
| 701 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | |
| 702 manager_.OnSerializedPacket(serialized_packet2); | |
| 703 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _)) | |
| 704 .Times(1).WillOnce(Return(true)); | |
| 705 manager_.OnPacketSent(2, sent_time, kDefaultLength, NOT_RETRANSMISSION, | |
| 706 NO_RETRANSMITTABLE_DATA); | |
| 707 | |
| 708 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 650 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 709 VerifyUnackedPackets(unacked, arraysize(unacked)); | 651 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 710 VerifyRetransmittablePackets(NULL, 0); | 652 VerifyRetransmittablePackets(NULL, 0); |
| 711 | 653 |
| 712 EXPECT_TRUE(manager_.HasUnackedPackets()); | 654 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 713 EXPECT_EQ(QuicTime::Zero(), | 655 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 714 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); | 656 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
| 715 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); | |
| 716 } | 657 } |
| 717 | 658 |
| 718 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 659 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
| 719 SendDataPacket(1); | 660 SendDataPacket(1); |
| 720 SendAckPacket(2); | 661 SendAckPacket(2); |
| 721 | 662 |
| 722 // Now ack the ack and expect an RTT update. | 663 // Now ack the ack and expect an RTT update. |
| 723 QuicAckFrame ack_frame; | 664 QuicAckFrame ack_frame; |
| 724 ack_frame.largest_observed = 2; | 665 ack_frame.largest_observed = 2; |
| 725 ack_frame.delta_time_largest_observed = | 666 ack_frame.delta_time_largest_observed = |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 ack_frame.largest_observed = 2; | 954 ack_frame.largest_observed = 2; |
| 1014 ack_frame.missing_packets.insert(1); | 955 ack_frame.missing_packets.insert(1); |
| 1015 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 956 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1016 | 957 |
| 1017 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 958 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1018 QuicPacketSequenceNumber unacked[] = { 3 }; | 959 QuicPacketSequenceNumber unacked[] = { 3 }; |
| 1019 VerifyUnackedPackets(unacked, arraysize(unacked)); | 960 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 1020 } | 961 } |
| 1021 | 962 |
| 1022 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { | 963 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { |
| 1023 // Send 2 crypto packets and serialize 1 data packet. | 964 // Send 2 crypto packets and 1 data packet. |
| 1024 const size_t kNumSentCryptoPackets = 2; | 965 const size_t kNumSentCryptoPackets = 2; |
| 1025 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 966 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 1026 SendCryptoPacket(i); | 967 SendCryptoPacket(i); |
| 1027 } | 968 } |
| 1028 SerializedPacket packet(CreateDataPacket(3)); | 969 SendDataPacket(3); |
| 1029 manager_.OnSerializedPacket(packet); | |
| 1030 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 970 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1031 | 971 |
| 1032 // Retransmit 2 crypto packets, but not the serialized packet. | 972 // Retransmit 2 crypto packets, but not the serialized packet. |
| 1033 manager_.OnRetransmissionTimeout(); | 973 manager_.OnRetransmissionTimeout(); |
| 1034 RetransmitNextPacket(4); | 974 RetransmitNextPacket(4); |
| 1035 RetransmitNextPacket(5); | 975 RetransmitNextPacket(5); |
| 1036 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 976 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1037 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 977 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1038 } | 978 } |
| 1039 | 979 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 QuicAckFrame ack_frame; | 1025 QuicAckFrame ack_frame; |
| 1086 ack_frame.largest_observed = 3; | 1026 ack_frame.largest_observed = 3; |
| 1087 ack_frame.missing_packets.insert(1); | 1027 ack_frame.missing_packets.insert(1); |
| 1088 ack_frame.missing_packets.insert(2); | 1028 ack_frame.missing_packets.insert(2); |
| 1089 ExpectUpdatedRtt(3); | 1029 ExpectUpdatedRtt(3); |
| 1090 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1030 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1091 VerifyUnackedPackets(NULL, 0); | 1031 VerifyUnackedPackets(NULL, 0); |
| 1092 VerifyRetransmittablePackets(NULL, 0); | 1032 VerifyRetransmittablePackets(NULL, 0); |
| 1093 } | 1033 } |
| 1094 | 1034 |
| 1095 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { | |
| 1096 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | |
| 1097 // Serialize two data packets and send the latter. | |
| 1098 SerializedPacket packet(CreateDataPacket(1)); | |
| 1099 manager_.OnSerializedPacket(packet); | |
| 1100 SendDataPacket(2); | |
| 1101 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | |
| 1102 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | |
| 1103 | |
| 1104 // Retransmit 1 unacked packets, but not the first serialized packet. | |
| 1105 manager_.OnRetransmissionTimeout(); | |
| 1106 EXPECT_EQ(QuicTime::Delta::Zero(), | |
| 1107 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | |
| 1108 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | |
| 1109 manager_.MaybeRetransmitTailLossProbe(); | |
| 1110 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | |
| 1111 RetransmitNextPacket(3); | |
| 1112 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( | |
| 1113 QuicTime::Delta::Infinite())); | |
| 1114 EXPECT_EQ(QuicTime::Delta::Infinite(), | |
| 1115 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | |
| 1116 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | |
| 1117 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | |
| 1118 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | |
| 1119 } | |
| 1120 | |
| 1121 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1035 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
| 1122 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1036 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
| 1123 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1037 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1124 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1038 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1125 EXPECT_EQ(min_rtt, | 1039 EXPECT_EQ(min_rtt, |
| 1126 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); | 1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1127 EXPECT_EQ(min_rtt, | 1041 EXPECT_EQ(min_rtt, |
| 1128 QuicSentPacketManagerPeer::GetRttStats( | 1042 QuicSentPacketManagerPeer::GetRttStats( |
| 1129 &manager_)->recent_min_rtt()); | 1043 &manager_)->recent_min_rtt()); |
| 1130 | 1044 |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 .WillRepeatedly(Return(timeout)); | 1279 .WillRepeatedly(Return(timeout)); |
| 1366 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); | 1280 EXPECT_EQ(timeout, manager_.GetRetransmissionTime()); |
| 1367 | 1281 |
| 1368 // Fire the retransmission timeout and ensure the loss detection algorithm | 1282 // Fire the retransmission timeout and ensure the loss detection algorithm |
| 1369 // is invoked. | 1283 // is invoked. |
| 1370 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) | 1284 EXPECT_CALL(*loss_algorithm, DetectLostPackets(_, _, _, _)) |
| 1371 .WillOnce(Return(SequenceNumberSet())); | 1285 .WillOnce(Return(SequenceNumberSet())); |
| 1372 manager_.OnRetransmissionTimeout(); | 1286 manager_.OnRetransmissionTimeout(); |
| 1373 } | 1287 } |
| 1374 | 1288 |
| 1375 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetection) { | |
| 1376 EXPECT_EQ(kNack, | |
| 1377 QuicSentPacketManagerPeer::GetLossAlgorithm( | |
| 1378 &manager_)->GetLossDetectionType()); | |
| 1379 | |
| 1380 QuicConfig config; | |
| 1381 QuicConfigPeer::SetReceivedLossDetection(&config, kTIME); | |
| 1382 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | |
| 1383 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange(_)); | |
| 1384 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) | |
| 1385 .WillOnce(Return(100 * kDefaultTCPMSS)); | |
| 1386 manager_.SetFromConfig(config); | |
| 1387 | |
| 1388 EXPECT_EQ(kTime, | |
| 1389 QuicSentPacketManagerPeer::GetLossAlgorithm( | |
| 1390 &manager_)->GetLossDetectionType()); | |
| 1391 } | |
| 1392 | |
| 1393 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { | 1289 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetectionFromOptions) { |
| 1394 EXPECT_EQ(kNack, | 1290 EXPECT_EQ(kNack, |
| 1395 QuicSentPacketManagerPeer::GetLossAlgorithm( | 1291 QuicSentPacketManagerPeer::GetLossAlgorithm( |
| 1396 &manager_)->GetLossDetectionType()); | 1292 &manager_)->GetLossDetectionType()); |
| 1397 | 1293 |
| 1398 QuicConfig config; | 1294 QuicConfig config; |
| 1399 QuicTagVector options; | 1295 QuicTagVector options; |
| 1400 options.push_back(kTIME); | 1296 options.push_back(kTIME); |
| 1401 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); | 1297 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1402 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1298 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1462 .WillOnce(Return(100 * kDefaultTCPMSS)); | 1358 .WillOnce(Return(100 * kDefaultTCPMSS)); |
| 1463 manager_.SetFromConfig(config); | 1359 manager_.SetFromConfig(config); |
| 1464 | 1360 |
| 1465 EXPECT_EQ(initial_rtt_us, | 1361 EXPECT_EQ(initial_rtt_us, |
| 1466 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1362 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
| 1467 } | 1363 } |
| 1468 | 1364 |
| 1469 } // namespace | 1365 } // namespace |
| 1470 } // namespace test | 1366 } // namespace test |
| 1471 } // namespace net | 1367 } // namespace net |
| OLD | NEW |