| 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 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 634 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 635 | 635 |
| 636 // The second tail loss probe retransmits 1 packet. | 636 // The second tail loss probe retransmits 1 packet. |
| 637 manager_.OnRetransmissionTimeout(); | 637 manager_.OnRetransmissionTimeout(); |
| 638 EXPECT_EQ(QuicTime::Delta::Zero(), | 638 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 639 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 639 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 640 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 640 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 641 manager_.MaybeRetransmitTailLossProbe(); | 641 manager_.MaybeRetransmitTailLossProbe(); |
| 642 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 642 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 643 RetransmitNextPacket(3); | 643 RetransmitNextPacket(3); |
| 644 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 644 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 645 .WillOnce(Return(QuicTime::Delta::Infinite())); | 645 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 646 EXPECT_EQ(QuicTime::Delta::Infinite(), | 646 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 647 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 647 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 648 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 648 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 649 | 649 |
| 650 // Ack the third and ensure the first two are still pending. | 650 // Ack the third and ensure the first two are still pending. |
| 651 ExpectAck(3); | 651 ExpectAck(3); |
| 652 QuicAckFrame ack_frame; | 652 QuicAckFrame ack_frame; |
| 653 ack_frame.largest_observed = 3; | 653 ack_frame.largest_observed = 3; |
| 654 ack_frame.missing_packets.Add(1, 3); | 654 ack_frame.missing_packets.Add(1, 3); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 681 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 681 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 682 | 682 |
| 683 // The first tail loss probe retransmits 1 packet. | 683 // The first tail loss probe retransmits 1 packet. |
| 684 manager_.OnRetransmissionTimeout(); | 684 manager_.OnRetransmissionTimeout(); |
| 685 EXPECT_EQ(QuicTime::Delta::Zero(), | 685 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 686 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 686 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 687 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 687 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 688 manager_.MaybeRetransmitTailLossProbe(); | 688 manager_.MaybeRetransmitTailLossProbe(); |
| 689 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 689 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 690 RetransmitNextPacket(101); | 690 RetransmitNextPacket(101); |
| 691 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 691 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 692 .WillOnce(Return(QuicTime::Delta::Infinite())); | 692 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 693 EXPECT_EQ(QuicTime::Delta::Infinite(), | 693 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 694 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 694 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 695 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 695 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 696 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); | 696 clock_.AdvanceTime(manager_.GetRetransmissionTime().Subtract(clock_.Now())); |
| 697 | 697 |
| 698 // The second tail loss probe retransmits 1 packet. | 698 // The second tail loss probe retransmits 1 packet. |
| 699 manager_.OnRetransmissionTimeout(); | 699 manager_.OnRetransmissionTimeout(); |
| 700 EXPECT_EQ(QuicTime::Delta::Zero(), | 700 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 701 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 701 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 702 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 702 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 703 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 703 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 704 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 704 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 705 RetransmitNextPacket(102); | 705 RetransmitNextPacket(102); |
| 706 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 706 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 707 .WillOnce(Return(QuicTime::Delta::Infinite())); | 707 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 708 EXPECT_EQ(QuicTime::Delta::Infinite(), | 708 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 709 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 709 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 710 | 710 |
| 711 // Ensure the RTO is set based on the correct packet. | 711 // Ensure the RTO is set based on the correct packet. |
| 712 rto_packet_time = clock_.Now(); | 712 rto_packet_time = clock_.Now(); |
| 713 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 713 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 714 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); | 714 .WillOnce(Return(QuicTime::Delta::FromSeconds(1))); |
| 715 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), | 715 EXPECT_EQ(rto_packet_time.Add(QuicTime::Delta::FromSeconds(1)), |
| 716 manager_.GetRetransmissionTime()); | 716 manager_.GetRetransmissionTime()); |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 | 1156 |
| 1157 // Retransmit the packet by invoking the retransmission timeout. | 1157 // Retransmit the packet by invoking the retransmission timeout. |
| 1158 clock_.AdvanceTime(expected_tlp_delay); | 1158 clock_.AdvanceTime(expected_tlp_delay); |
| 1159 manager_.OnRetransmissionTimeout(); | 1159 manager_.OnRetransmissionTimeout(); |
| 1160 EXPECT_EQ(QuicTime::Delta::Zero(), | 1160 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1161 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1161 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1162 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1162 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1163 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); | 1163 EXPECT_TRUE(manager_.MaybeRetransmitTailLossProbe()); |
| 1164 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 1164 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1165 RetransmitNextPacket(3); | 1165 RetransmitNextPacket(3); |
| 1166 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 1166 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1167 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1167 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1168 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1168 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1169 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1169 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1170 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1170 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1171 | 1171 |
| 1172 expected_time = clock_.Now().Add(expected_tlp_delay); | 1172 expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1173 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1173 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1174 } | 1174 } |
| 1175 | 1175 |
| 1176 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { | 1176 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 .WillOnce(Return(10 * kDefaultTCPMSS)); | 1505 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1506 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1506 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1507 EXPECT_CALL(*network_change_visitor_, OnRttChange()); | 1507 EXPECT_CALL(*network_change_visitor_, OnRttChange()); |
| 1508 manager_.SetFromConfig(client_config); | 1508 manager_.SetFromConfig(client_config); |
| 1509 | 1509 |
| 1510 EXPECT_EQ(kMinSocketReceiveBuffer, | 1510 EXPECT_EQ(kMinSocketReceiveBuffer, |
| 1511 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1511 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1512 | 1512 |
| 1513 // Ensure the smaller send window only allows 16 packets to be sent. | 1513 // Ensure the smaller send window only allows 16 packets to be sent. |
| 1514 for (QuicPacketNumber i = 1; i <= 16; ++i) { | 1514 for (QuicPacketNumber i = 1; i <= 16; ++i) { |
| 1515 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 1515 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1516 .WillOnce(Return(QuicTime::Delta::Zero())); | 1516 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1517 EXPECT_EQ(QuicTime::Delta::Zero(), | 1517 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1518 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1518 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1519 EXPECT_CALL(*send_algorithm_, | 1519 EXPECT_CALL(*send_algorithm_, |
| 1520 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1520 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1521 HAS_RETRANSMITTABLE_DATA)) | 1521 HAS_RETRANSMITTABLE_DATA)) |
| 1522 .WillOnce(Return(true)); | 1522 .WillOnce(Return(true)); |
| 1523 SerializedPacket packet(CreatePacket(i, true)); | 1523 SerializedPacket packet(CreatePacket(i, true)); |
| 1524 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1524 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, |
| 1525 HAS_RETRANSMITTABLE_DATA); | 1525 HAS_RETRANSMITTABLE_DATA); |
| 1526 } | 1526 } |
| 1527 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 1527 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1528 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1528 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1529 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1529 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1530 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1530 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1531 } | 1531 } |
| 1532 | 1532 |
| 1533 TEST_F(QuicSentPacketManagerTest, ReceiveWindowLimited) { | 1533 TEST_F(QuicSentPacketManagerTest, ReceiveWindowLimited) { |
| 1534 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1534 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1535 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1535 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1536 | 1536 |
| 1537 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. | 1537 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. |
| 1538 for (QuicPacketNumber i = 1; i <= 244; ++i) { | 1538 for (QuicPacketNumber i = 1; i <= 244; ++i) { |
| 1539 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 1539 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1540 .WillOnce(Return(QuicTime::Delta::Zero())); | 1540 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1541 EXPECT_EQ(QuicTime::Delta::Zero(), | 1541 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1542 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1542 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1543 EXPECT_CALL(*send_algorithm_, | 1543 EXPECT_CALL(*send_algorithm_, |
| 1544 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1544 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1545 HAS_RETRANSMITTABLE_DATA)) | 1545 HAS_RETRANSMITTABLE_DATA)) |
| 1546 .WillOnce(Return(true)); | 1546 .WillOnce(Return(true)); |
| 1547 SerializedPacket packet(CreatePacket(i, true)); | 1547 SerializedPacket packet(CreatePacket(i, true)); |
| 1548 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1548 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, |
| 1549 HAS_RETRANSMITTABLE_DATA); | 1549 HAS_RETRANSMITTABLE_DATA); |
| 1550 } | 1550 } |
| 1551 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)) | 1551 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1552 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1552 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1553 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1553 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1554 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1554 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1555 } | 1555 } |
| 1556 | 1556 |
| 1557 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1557 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1558 uint32_t initial_rtt_us = 325000; | 1558 uint32_t initial_rtt_us = 325000; |
| 1559 EXPECT_NE(initial_rtt_us, | 1559 EXPECT_NE(initial_rtt_us, |
| 1560 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); | 1560 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1561 | 1561 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1634 manager_.OnConnectionMigration(PORT_CHANGE); | 1634 manager_.OnConnectionMigration(PORT_CHANGE); |
| 1635 | 1635 |
| 1636 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1636 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1637 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1637 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1638 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1638 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1639 } | 1639 } |
| 1640 | 1640 |
| 1641 } // namespace | 1641 } // namespace |
| 1642 } // namespace test | 1642 } // namespace test |
| 1643 } // namespace net | 1643 } // namespace net |
| OLD | NEW |