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 |