| 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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 &manager_, new_sequence_number)); | 174 &manager_, new_sequence_number)); |
| 175 } | 175 } |
| 176 | 176 |
| 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { | 177 SerializedPacket CreateDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 178 return CreatePacket(sequence_number, true); | 178 return CreatePacket(sequence_number, true); |
| 179 } | 179 } |
| 180 | 180 |
| 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, | 181 SerializedPacket CreatePacket(QuicPacketSequenceNumber sequence_number, |
| 182 bool retransmittable) { | 182 bool retransmittable) { |
| 183 packets_.push_back(QuicPacket::NewDataPacket( | 183 packets_.push_back(QuicPacket::NewDataPacket( |
| 184 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 184 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
| 185 PACKET_6BYTE_SEQUENCE_NUMBER)); | 185 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 186 return SerializedPacket( | 186 return SerializedPacket( |
| 187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 187 sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, packets_.back(), 0u, |
| 188 packets_.back(), 0u, | 188 retransmittable ? new RetransmittableFrames() : nullptr); |
| 189 retransmittable ? new RetransmittableFrames() : NULL); | |
| 190 } | 189 } |
| 191 | 190 |
| 192 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { | 191 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 193 packets_.push_back(QuicPacket::NewFecPacket( | 192 packets_.push_back(QuicPacket::NewFecPacket( |
| 194 NULL, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, | 193 nullptr, kDefaultLength, false, PACKET_8BYTE_CONNECTION_ID, false, |
| 195 PACKET_6BYTE_SEQUENCE_NUMBER)); | 194 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 196 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, | 195 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, |
| 197 packets_.back(), 0u, NULL); | 196 packets_.back(), 0u, nullptr); |
| 198 } | 197 } |
| 199 | 198 |
| 200 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { | 199 void SendDataPacket(QuicPacketSequenceNumber sequence_number) { |
| 201 EXPECT_CALL(*send_algorithm_, | 200 EXPECT_CALL(*send_algorithm_, |
| 202 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) | 201 OnPacketSent(_, BytesInFlight(), sequence_number, _, _)) |
| 203 .Times(1).WillOnce(Return(true)); | 202 .Times(1).WillOnce(Return(true)); |
| 204 SerializedPacket packet(CreateDataPacket(sequence_number)); | 203 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 205 manager_.OnPacketSent(&packet, 0, clock_.Now(), | 204 manager_.OnPacketSent(&packet, 0, clock_.Now(), |
| 206 packet.packet->length(), NOT_RETRANSMISSION, | 205 packet.packet->length(), NOT_RETRANSMISSION, |
| 207 HAS_RETRANSMITTABLE_DATA); | 206 HAS_RETRANSMITTABLE_DATA); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 | 261 |
| 263 QuicSentPacketManager manager_; | 262 QuicSentPacketManager manager_; |
| 264 vector<QuicPacket*> packets_; | 263 vector<QuicPacket*> packets_; |
| 265 MockClock clock_; | 264 MockClock clock_; |
| 266 QuicConnectionStats stats_; | 265 QuicConnectionStats stats_; |
| 267 MockSendAlgorithm* send_algorithm_; | 266 MockSendAlgorithm* send_algorithm_; |
| 268 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; | 267 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; |
| 269 }; | 268 }; |
| 270 | 269 |
| 271 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 270 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 272 VerifyUnackedPackets(NULL, 0); | 271 VerifyUnackedPackets(nullptr, 0); |
| 273 SendDataPacket(1); | 272 SendDataPacket(1); |
| 274 | 273 |
| 275 QuicPacketSequenceNumber unacked[] = { 1 }; | 274 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 276 VerifyUnackedPackets(unacked, arraysize(unacked)); | 275 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 277 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 276 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 278 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 277 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 279 } | 278 } |
| 280 | 279 |
| 281 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 280 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 282 SendDataPacket(1); | 281 SendDataPacket(1); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 297 QuicAckFrame ack_frame; | 296 QuicAckFrame ack_frame; |
| 298 ack_frame.largest_observed = 2; | 297 ack_frame.largest_observed = 2; |
| 299 ack_frame.missing_packets.insert(1); | 298 ack_frame.missing_packets.insert(1); |
| 300 ExpectAck(2); | 299 ExpectAck(2); |
| 301 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 300 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 302 | 301 |
| 303 // Packet 1 is unacked, pending, but not retransmittable. | 302 // Packet 1 is unacked, pending, but not retransmittable. |
| 304 QuicPacketSequenceNumber unacked[] = { 1 }; | 303 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 305 VerifyUnackedPackets(unacked, arraysize(unacked)); | 304 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 306 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 305 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 307 VerifyRetransmittablePackets(NULL, 0); | 306 VerifyRetransmittablePackets(nullptr, 0); |
| 308 } | 307 } |
| 309 | 308 |
| 310 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 309 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 311 SendDataPacket(1); | 310 SendDataPacket(1); |
| 312 QuicSentPacketManagerPeer::MarkForRetransmission( | 311 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 313 &manager_, 1, TLP_RETRANSMISSION); | 312 &manager_, 1, TLP_RETRANSMISSION); |
| 314 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 313 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 315 | 314 |
| 316 // Ack 1. | 315 // Ack 1. |
| 317 QuicAckFrame ack_frame; | 316 QuicAckFrame ack_frame; |
| 318 ack_frame.largest_observed = 1; | 317 ack_frame.largest_observed = 1; |
| 319 ExpectAck(1); | 318 ExpectAck(1); |
| 320 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 319 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 321 | 320 |
| 322 // There should no longer be a pending retransmission. | 321 // There should no longer be a pending retransmission. |
| 323 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 322 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 324 | 323 |
| 325 // No unacked packets remain. | 324 // No unacked packets remain. |
| 326 VerifyUnackedPackets(NULL, 0); | 325 VerifyUnackedPackets(nullptr, 0); |
| 327 VerifyRetransmittablePackets(NULL, 0); | 326 VerifyRetransmittablePackets(nullptr, 0); |
| 328 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); | 327 EXPECT_EQ(0u, stats_.packets_spuriously_retransmitted); |
| 329 } | 328 } |
| 330 | 329 |
| 331 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { | 330 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { |
| 332 SendDataPacket(1); | 331 SendDataPacket(1); |
| 333 RetransmitAndSendPacket(1, 2); | 332 RetransmitAndSendPacket(1, 2); |
| 334 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 333 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 335 clock_.AdvanceTime(rtt); | 334 clock_.AdvanceTime(rtt); |
| 336 | 335 |
| 337 // Ack 1 but not 2. | 336 // Ack 1 but not 2. |
| 338 ExpectAck(1); | 337 ExpectAck(1); |
| 339 QuicAckFrame ack_frame; | 338 QuicAckFrame ack_frame; |
| 340 ack_frame.largest_observed = 1; | 339 ack_frame.largest_observed = 1; |
| 341 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 340 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 342 | 341 |
| 343 // 2 remains unacked, but no packets have retransmittable data. | 342 // 2 remains unacked, but no packets have retransmittable data. |
| 344 QuicPacketSequenceNumber unacked[] = { 2 }; | 343 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 345 VerifyUnackedPackets(unacked, arraysize(unacked)); | 344 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 346 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 345 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 347 VerifyRetransmittablePackets(NULL, 0); | 346 VerifyRetransmittablePackets(nullptr, 0); |
| 348 | 347 |
| 349 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); | 348 EXPECT_EQ(1u, stats_.packets_spuriously_retransmitted); |
| 350 } | 349 } |
| 351 | 350 |
| 352 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { | 351 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPreviousThenNackRetransmit) { |
| 353 SendDataPacket(1); | 352 SendDataPacket(1); |
| 354 RetransmitAndSendPacket(1, 2); | 353 RetransmitAndSendPacket(1, 2); |
| 355 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 354 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 356 clock_.AdvanceTime(rtt); | 355 clock_.AdvanceTime(rtt); |
| 357 | 356 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 374 | 373 |
| 375 ack_frame.largest_observed = 4; | 374 ack_frame.largest_observed = 4; |
| 376 ExpectAck(4); | 375 ExpectAck(4); |
| 377 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 376 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 378 | 377 |
| 379 ack_frame.largest_observed = 5; | 378 ack_frame.largest_observed = 5; |
| 380 ExpectAckAndLoss(true, 5, 2); | 379 ExpectAckAndLoss(true, 5, 2); |
| 381 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 380 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 382 | 381 |
| 383 // No packets remain unacked. | 382 // No packets remain unacked. |
| 384 VerifyUnackedPackets(NULL, 0); | 383 VerifyUnackedPackets(nullptr, 0); |
| 385 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 384 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 386 VerifyRetransmittablePackets(NULL, 0); | 385 VerifyRetransmittablePackets(nullptr, 0); |
| 387 | 386 |
| 388 // Verify that the retransmission alarm would not fire, | 387 // Verify that the retransmission alarm would not fire, |
| 389 // since there is no retransmittable data outstanding. | 388 // since there is no retransmittable data outstanding. |
| 390 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 389 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 391 } | 390 } |
| 392 | 391 |
| 393 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { | 392 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckPreviousBeforeSend) { |
| 394 SendDataPacket(1); | 393 SendDataPacket(1); |
| 395 RetransmitAndSendPacket(1, 2); | 394 RetransmitAndSendPacket(1, 2); |
| 396 | 395 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 408 QuicAckFrame ack_frame; | 407 QuicAckFrame ack_frame; |
| 409 ack_frame.largest_observed = 1; | 408 ack_frame.largest_observed = 1; |
| 410 ExpectUpdatedRtt(1); | 409 ExpectUpdatedRtt(1); |
| 411 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); | 410 EXPECT_CALL(*send_algorithm_, RevertRetransmissionTimeout()); |
| 412 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 411 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 413 | 412 |
| 414 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. | 413 // Since 2 was marked for retransmit, when 1 is acked, 2 is kept for RTT. |
| 415 QuicPacketSequenceNumber unacked[] = { 2 }; | 414 QuicPacketSequenceNumber unacked[] = { 2 }; |
| 416 VerifyUnackedPackets(unacked, arraysize(unacked)); | 415 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 417 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 416 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 418 VerifyRetransmittablePackets(NULL, 0); | 417 VerifyRetransmittablePackets(nullptr, 0); |
| 419 | 418 |
| 420 // Verify that the retransmission alarm would not fire, | 419 // Verify that the retransmission alarm would not fire, |
| 421 // since there is no retransmittable data outstanding. | 420 // since there is no retransmittable data outstanding. |
| 422 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 421 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 423 } | 422 } |
| 424 | 423 |
| 425 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { | 424 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { |
| 426 StrictMock<MockDebugDelegate> debug_delegate; | 425 StrictMock<MockDebugDelegate> debug_delegate; |
| 427 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( | 426 EXPECT_CALL(debug_delegate, OnSpuriousPacketRetransmition( |
| 428 TLP_RETRANSMISSION, kDefaultLength)).Times(2); | 427 TLP_RETRANSMISSION, kDefaultLength)).Times(2); |
| 429 manager_.set_debug_delegate(&debug_delegate); | 428 manager_.set_debug_delegate(&debug_delegate); |
| 430 | 429 |
| 431 SendDataPacket(1); | 430 SendDataPacket(1); |
| 432 RetransmitAndSendPacket(1, 2); | 431 RetransmitAndSendPacket(1, 2); |
| 433 RetransmitAndSendPacket(2, 3); | 432 RetransmitAndSendPacket(2, 3); |
| 434 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); | 433 QuicTime::Delta rtt = QuicTime::Delta::FromMilliseconds(15); |
| 435 clock_.AdvanceTime(rtt); | 434 clock_.AdvanceTime(rtt); |
| 436 | 435 |
| 437 // Ack 1 but not 2 or 3. | 436 // Ack 1 but not 2 or 3. |
| 438 ExpectAck(1); | 437 ExpectAck(1); |
| 439 QuicAckFrame ack_frame; | 438 QuicAckFrame ack_frame; |
| 440 ack_frame.largest_observed = 1; | 439 ack_frame.largest_observed = 1; |
| 441 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 440 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 442 | 441 |
| 443 // 2 and 3 remain unacked, but no packets have retransmittable data. | 442 // 2 and 3 remain unacked, but no packets have retransmittable data. |
| 444 QuicPacketSequenceNumber unacked[] = { 2, 3 }; | 443 QuicPacketSequenceNumber unacked[] = { 2, 3 }; |
| 445 VerifyUnackedPackets(unacked, arraysize(unacked)); | 444 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 446 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 445 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 447 VerifyRetransmittablePackets(NULL, 0); | 446 VerifyRetransmittablePackets(nullptr, 0); |
| 448 | 447 |
| 449 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. | 448 // Ensure packet 2 is lost when 4 is sent and 3 and 4 are acked. |
| 450 SendDataPacket(4); | 449 SendDataPacket(4); |
| 451 ack_frame.largest_observed = 4; | 450 ack_frame.largest_observed = 4; |
| 452 ack_frame.missing_packets.insert(2); | 451 ack_frame.missing_packets.insert(2); |
| 453 QuicPacketSequenceNumber acked[] = { 3, 4 }; | 452 QuicPacketSequenceNumber acked[] = { 3, 4 }; |
| 454 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 453 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
| 455 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 454 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 456 | 455 |
| 457 QuicPacketSequenceNumber unacked2[] = { 2 }; | 456 QuicPacketSequenceNumber unacked2[] = { 2 }; |
| 458 VerifyUnackedPackets(unacked2, arraysize(unacked2)); | 457 VerifyUnackedPackets(unacked2, arraysize(unacked2)); |
| 459 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 458 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 460 | 459 |
| 461 SendDataPacket(5); | 460 SendDataPacket(5); |
| 462 ack_frame.largest_observed = 5; | 461 ack_frame.largest_observed = 5; |
| 463 ExpectAckAndLoss(true, 5, 2); | 462 ExpectAckAndLoss(true, 5, 2); |
| 464 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 463 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 465 | 464 |
| 466 VerifyUnackedPackets(NULL, 0); | 465 VerifyUnackedPackets(nullptr, 0); |
| 467 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 466 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 468 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); | 467 EXPECT_EQ(2u, stats_.packets_spuriously_retransmitted); |
| 469 } | 468 } |
| 470 | 469 |
| 471 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { | 470 TEST_F(QuicSentPacketManagerTest, LoseButDontRetransmitRevivedPacket) { |
| 472 SendDataPacket(1); | 471 SendDataPacket(1); |
| 473 SendDataPacket(2); | 472 SendDataPacket(2); |
| 474 SendFecPacket(3); | 473 SendFecPacket(3); |
| 475 SendDataPacket(4); | 474 SendDataPacket(4); |
| 476 | 475 |
| 477 // Ack 2 and 3, and mark 1 as revived. | 476 // Ack 2 and 3, and mark 1 as revived. |
| 478 QuicAckFrame ack_frame; | 477 QuicAckFrame ack_frame; |
| 479 ack_frame.largest_observed = 3; | 478 ack_frame.largest_observed = 3; |
| 480 ack_frame.missing_packets.insert(1); | 479 ack_frame.missing_packets.insert(1); |
| 481 ack_frame.revived_packets.insert(1); | 480 ack_frame.revived_packets.insert(1); |
| 482 QuicPacketSequenceNumber acked[] = { 2, 3 }; | 481 QuicPacketSequenceNumber acked[] = { 2, 3 }; |
| 483 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 482 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
| 484 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 483 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 485 | 484 |
| 486 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 485 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 487 QuicPacketSequenceNumber unacked[] = { 1, 4 }; | 486 QuicPacketSequenceNumber unacked[] = { 1, 4 }; |
| 488 VerifyUnackedPackets(unacked, arraysize(unacked)); | 487 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 489 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 488 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 490 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 489 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
| 491 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 490 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 492 | 491 |
| 493 // Ack the 4th packet and expect the 1st to be considered lost. | 492 // Ack the 4th packet and expect the 1st to be considered lost. |
| 494 ack_frame.largest_observed = 4; | 493 ack_frame.largest_observed = 4; |
| 495 ExpectAckAndLoss(true, 4, 1); | 494 ExpectAckAndLoss(true, 4, 1); |
| 496 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 495 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 497 | 496 |
| 498 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 497 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 499 VerifyRetransmittablePackets(NULL, 0); | 498 VerifyRetransmittablePackets(nullptr, 0); |
| 500 } | 499 } |
| 501 | 500 |
| 502 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { | 501 TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) { |
| 503 SendDataPacket(1); | 502 SendDataPacket(1); |
| 504 SendDataPacket(2); | 503 SendDataPacket(2); |
| 505 SendDataPacket(3); | 504 SendDataPacket(3); |
| 506 SendDataPacket(4); | 505 SendDataPacket(4); |
| 507 SendFecPacket(5); | 506 SendFecPacket(5); |
| 508 | 507 |
| 509 // Ack 2, 3, and 4, and expect the 1st to be considered lost. | 508 // Ack 2, 3, and 4, and expect the 1st to be considered lost. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 522 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 521 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 523 | 522 |
| 524 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be | 523 // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be |
| 525 // removed from pending retransmissions map. | 524 // removed from pending retransmissions map. |
| 526 ack_frame.largest_observed = 5; | 525 ack_frame.largest_observed = 5; |
| 527 ack_frame.revived_packets.insert(1); | 526 ack_frame.revived_packets.insert(1); |
| 528 ExpectAck(5); | 527 ExpectAck(5); |
| 529 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 528 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 530 | 529 |
| 531 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 530 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 532 VerifyRetransmittablePackets(NULL, 0); | 531 VerifyRetransmittablePackets(nullptr, 0); |
| 533 } | 532 } |
| 534 | 533 |
| 535 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 534 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
| 536 SendDataPacket(1); | 535 SendDataPacket(1); |
| 537 RetransmitAndSendPacket(1, 2); | 536 RetransmitAndSendPacket(1, 2); |
| 538 RetransmitAndSendPacket(2, 3); | 537 RetransmitAndSendPacket(2, 3); |
| 539 RetransmitAndSendPacket(3, 4); | 538 RetransmitAndSendPacket(3, 4); |
| 540 RetransmitAndSendPacket(4, 5); | 539 RetransmitAndSendPacket(4, 5); |
| 541 | 540 |
| 542 // Truncated ack with 4 NACKs, so the first packet is lost. | 541 // Truncated ack with 4 NACKs, so the first packet is lost. |
| 543 QuicAckFrame ack_frame; | 542 QuicAckFrame ack_frame; |
| 544 ack_frame.largest_observed = 4; | 543 ack_frame.largest_observed = 4; |
| 545 ack_frame.missing_packets.insert(1); | 544 ack_frame.missing_packets.insert(1); |
| 546 ack_frame.missing_packets.insert(2); | 545 ack_frame.missing_packets.insert(2); |
| 547 ack_frame.missing_packets.insert(3); | 546 ack_frame.missing_packets.insert(3); |
| 548 ack_frame.missing_packets.insert(4); | 547 ack_frame.missing_packets.insert(4); |
| 549 ack_frame.is_truncated = true; | 548 ack_frame.is_truncated = true; |
| 550 | 549 |
| 551 QuicPacketSequenceNumber lost[] = { 1 }; | 550 QuicPacketSequenceNumber lost[] = { 1 }; |
| 552 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost)); | 551 ExpectAcksAndLosses(true, nullptr, 0, lost, arraysize(lost)); |
| 553 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 552 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 554 | 553 |
| 555 // High water mark will be raised. | 554 // High water mark will be raised. |
| 556 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; | 555 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 }; |
| 557 VerifyUnackedPackets(unacked, arraysize(unacked)); | 556 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 558 QuicPacketSequenceNumber retransmittable[] = { 5 }; | 557 QuicPacketSequenceNumber retransmittable[] = { 5 }; |
| 559 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 558 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 560 } | 559 } |
| 561 | 560 |
| 562 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 561 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 SendDataPacket(1); | 607 SendDataPacket(1); |
| 609 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 608 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 610 } | 609 } |
| 611 | 610 |
| 612 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { | 611 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { |
| 613 SendFecPacket(1); | 612 SendFecPacket(1); |
| 614 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 613 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 615 } | 614 } |
| 616 | 615 |
| 617 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { | 616 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { |
| 618 VerifyUnackedPackets(NULL, 0); | 617 VerifyUnackedPackets(nullptr, 0); |
| 619 | 618 |
| 620 SendFecPacket(1); | 619 SendFecPacket(1); |
| 621 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 620 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 622 | 621 |
| 623 SendFecPacket(2); | 622 SendFecPacket(2); |
| 624 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 623 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 625 | 624 |
| 626 SendFecPacket(3); | 625 SendFecPacket(3); |
| 627 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 626 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 628 | 627 |
| 629 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; | 628 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 }; |
| 630 VerifyUnackedPackets(unacked, arraysize(unacked)); | 629 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 631 VerifyRetransmittablePackets(NULL, 0); | 630 VerifyRetransmittablePackets(nullptr, 0); |
| 632 | 631 |
| 633 // Ack 2, so there's an rtt update. | 632 // Ack 2, so there's an rtt update. |
| 634 ExpectAck(2); | 633 ExpectAck(2); |
| 635 QuicAckFrame ack_frame; | 634 QuicAckFrame ack_frame; |
| 636 ack_frame.largest_observed = 2; | 635 ack_frame.largest_observed = 2; |
| 637 ack_frame.missing_packets.insert(1); | 636 ack_frame.missing_packets.insert(1); |
| 638 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 637 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 639 | 638 |
| 640 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 639 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 641 } | 640 } |
| 642 | 641 |
| 643 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 642 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 644 VerifyUnackedPackets(NULL, 0); | 643 VerifyUnackedPackets(nullptr, 0); |
| 645 | 644 |
| 646 QuicTime sent_time = clock_.Now(); | 645 QuicTime sent_time = clock_.Now(); |
| 647 SendFecPacket(1); | 646 SendFecPacket(1); |
| 648 QuicTime sent_time2 = clock_.Now(); | 647 QuicTime sent_time2 = clock_.Now(); |
| 649 SendFecPacket(2); | 648 SendFecPacket(2); |
| 650 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 649 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 651 VerifyUnackedPackets(unacked, arraysize(unacked)); | 650 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 652 VerifyRetransmittablePackets(NULL, 0); | 651 VerifyRetransmittablePackets(nullptr, 0); |
| 653 | 652 |
| 654 EXPECT_TRUE(manager_.HasUnackedPackets()); | 653 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 655 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); | 654 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 656 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); | 655 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
| 657 } | 656 } |
| 658 | 657 |
| 659 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 658 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
| 660 SendDataPacket(1); | 659 SendDataPacket(1); |
| 661 SendAckPacket(2); | 660 SendAckPacket(2); |
| 662 | 661 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 ack_frame.largest_observed = 3; | 782 ack_frame.largest_observed = 3; |
| 784 ack_frame.missing_packets.insert(1); | 783 ack_frame.missing_packets.insert(1); |
| 785 ack_frame.missing_packets.insert(2); | 784 ack_frame.missing_packets.insert(2); |
| 786 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 785 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 787 | 786 |
| 788 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 787 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 789 | 788 |
| 790 // Acking two more packets will lose both of them due to nacks. | 789 // Acking two more packets will lose both of them due to nacks. |
| 791 ack_frame.largest_observed = 5; | 790 ack_frame.largest_observed = 5; |
| 792 QuicPacketSequenceNumber lost[] = { 1, 2 }; | 791 QuicPacketSequenceNumber lost[] = { 1, 2 }; |
| 793 ExpectAcksAndLosses(false, NULL, 0, lost, arraysize(lost)); | 792 ExpectAcksAndLosses(false, nullptr, 0, lost, arraysize(lost)); |
| 794 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 793 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 795 | 794 |
| 796 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 795 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 797 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 796 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 798 EXPECT_EQ(2u, stats_.tlp_count); | 797 EXPECT_EQ(2u, stats_.tlp_count); |
| 799 EXPECT_EQ(0u, stats_.rto_count); | 798 EXPECT_EQ(0u, stats_.rto_count); |
| 800 } | 799 } |
| 801 | 800 |
| 802 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { | 801 TEST_F(QuicSentPacketManagerTest, TailLossProbeThenRTO) { |
| 803 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 802 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 EXPECT_EQ(QuicTime::Delta::Zero(), | 874 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 876 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 875 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 877 RetransmitNextPacket(8); | 876 RetransmitNextPacket(8); |
| 878 RetransmitNextPacket(9); | 877 RetransmitNextPacket(9); |
| 879 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 878 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 880 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 879 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 881 | 880 |
| 882 // Now ack the two crypto packets and the speculatively encrypted request, | 881 // Now ack the two crypto packets and the speculatively encrypted request, |
| 883 // and ensure the first four crypto packets get abandoned, but not lost. | 882 // and ensure the first four crypto packets get abandoned, but not lost. |
| 884 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; | 883 QuicPacketSequenceNumber acked[] = { 3, 4, 5, 8, 9 }; |
| 885 ExpectAcksAndLosses(true, acked, arraysize(acked), NULL, 0); | 884 ExpectAcksAndLosses(true, acked, arraysize(acked), nullptr, 0); |
| 886 QuicAckFrame ack_frame; | 885 QuicAckFrame ack_frame; |
| 887 ack_frame.largest_observed = 9; | 886 ack_frame.largest_observed = 9; |
| 888 ack_frame.missing_packets.insert(1); | 887 ack_frame.missing_packets.insert(1); |
| 889 ack_frame.missing_packets.insert(2); | 888 ack_frame.missing_packets.insert(2); |
| 890 ack_frame.missing_packets.insert(6); | 889 ack_frame.missing_packets.insert(6); |
| 891 ack_frame.missing_packets.insert(7); | 890 ack_frame.missing_packets.insert(7); |
| 892 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 891 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 893 | 892 |
| 894 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 893 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 895 } | 894 } |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 | 1008 |
| 1010 // Retransmit the crypto packet as 3. | 1009 // Retransmit the crypto packet as 3. |
| 1011 manager_.OnRetransmissionTimeout(); | 1010 manager_.OnRetransmissionTimeout(); |
| 1012 RetransmitNextPacket(3); | 1011 RetransmitNextPacket(3); |
| 1013 | 1012 |
| 1014 // Now neuter all unacked unencrypted packets, which occurs when the | 1013 // Now neuter all unacked unencrypted packets, which occurs when the |
| 1015 // connection goes forward secure. | 1014 // connection goes forward secure. |
| 1016 manager_.NeuterUnencryptedPackets(); | 1015 manager_.NeuterUnencryptedPackets(); |
| 1017 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; | 1016 QuicPacketSequenceNumber unacked[] = { 1, 2, 3}; |
| 1018 VerifyUnackedPackets(unacked, arraysize(unacked)); | 1017 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 1019 VerifyRetransmittablePackets(NULL, 0); | 1018 VerifyRetransmittablePackets(nullptr, 0); |
| 1020 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1019 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1020 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1022 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 1021 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 1023 | 1022 |
| 1024 // Ensure both packets get discarded when packet 2 is acked. | 1023 // Ensure both packets get discarded when packet 2 is acked. |
| 1025 QuicAckFrame ack_frame; | 1024 QuicAckFrame ack_frame; |
| 1026 ack_frame.largest_observed = 3; | 1025 ack_frame.largest_observed = 3; |
| 1027 ack_frame.missing_packets.insert(1); | 1026 ack_frame.missing_packets.insert(1); |
| 1028 ack_frame.missing_packets.insert(2); | 1027 ack_frame.missing_packets.insert(2); |
| 1029 ExpectUpdatedRtt(3); | 1028 ExpectUpdatedRtt(3); |
| 1030 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1029 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1031 VerifyUnackedPackets(NULL, 0); | 1030 VerifyUnackedPackets(nullptr, 0); |
| 1032 VerifyRetransmittablePackets(NULL, 0); | 1031 VerifyRetransmittablePackets(nullptr, 0); |
| 1033 } | 1032 } |
| 1034 | 1033 |
| 1035 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1034 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
| 1036 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1035 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
| 1037 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1036 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1038 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1037 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1039 EXPECT_EQ(min_rtt, | 1038 EXPECT_EQ(min_rtt, |
| 1040 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); | 1039 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1041 EXPECT_EQ(min_rtt, | 1040 EXPECT_EQ(min_rtt, |
| 1042 QuicSentPacketManagerPeer::GetRttStats( | 1041 QuicSentPacketManagerPeer::GetRttStats( |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 .WillOnce(Return(100 * kDefaultTCPMSS)); | 1381 .WillOnce(Return(100 * kDefaultTCPMSS)); |
| 1383 manager_.SetFromConfig(config); | 1382 manager_.SetFromConfig(config); |
| 1384 | 1383 |
| 1385 EXPECT_EQ(initial_rtt_us, | 1384 EXPECT_EQ(initial_rtt_us, |
| 1386 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1385 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
| 1387 } | 1386 } |
| 1388 | 1387 |
| 1389 } // namespace | 1388 } // namespace |
| 1390 } // namespace test | 1389 } // namespace test |
| 1391 } // namespace net | 1390 } // namespace net |
| OLD | NEW |