| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
| 11 #include "net/quic/test_tools/quic_config_peer.h" | 11 #include "net/quic/test_tools/quic_config_peer.h" |
| 12 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 12 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 13 #include "net/quic/test_tools/quic_test_utils.h" | 13 #include "net/quic/test_tools/quic_test_utils.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 using std::vector; | 17 using std::vector; |
| 18 using testing::AnyNumber; | 18 using testing::AnyNumber; |
| 19 using testing::ElementsAre; | 19 using testing::ElementsAre; |
| 20 using testing::IsEmpty; | 20 using testing::IsEmpty; |
| 21 using testing::Not; | 21 using testing::Not; |
| 22 using testing::Pair; | 22 using testing::Pair; |
| 23 using testing::Pointwise; | 23 using testing::Pointwise; |
| 24 using testing::Return; | 24 using testing::Return; |
| 25 using testing::SetArgPointee; |
| 25 using testing::StrictMock; | 26 using testing::StrictMock; |
| 26 using testing::_; | 27 using testing::_; |
| 27 | 28 |
| 28 namespace net { | 29 namespace net { |
| 29 namespace test { | 30 namespace test { |
| 30 namespace { | 31 namespace { |
| 31 | 32 |
| 32 // Default packet length. | 33 // Default packet length. |
| 33 const uint32_t kDefaultLength = 1000; | 34 const uint32_t kDefaultLength = 1000; |
| 34 | 35 |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 TEST_P(QuicSentPacketManagerTest, Rtt) { | 644 TEST_P(QuicSentPacketManagerTest, Rtt) { |
| 644 QuicPacketNumber packet_number = 1; | 645 QuicPacketNumber packet_number = 1; |
| 645 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); | 646 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(15); |
| 646 SendDataPacket(packet_number); | 647 SendDataPacket(packet_number); |
| 647 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 648 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
| 648 | 649 |
| 649 ExpectAck(packet_number); | 650 ExpectAck(packet_number); |
| 650 QuicAckFrame ack_frame = InitAckFrame(packet_number); | 651 QuicAckFrame ack_frame = InitAckFrame(packet_number); |
| 651 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); | 652 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(5); |
| 652 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 653 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 653 EXPECT_EQ(expected_rtt, | 654 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); |
| 654 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | |
| 655 } | 655 } |
| 656 | 656 |
| 657 TEST_P(QuicSentPacketManagerTest, RttWithInvalidDelta) { | 657 TEST_P(QuicSentPacketManagerTest, RttWithInvalidDelta) { |
| 658 // Expect that the RTT is equal to the local time elapsed, since the | 658 // Expect that the RTT is equal to the local time elapsed, since the |
| 659 // ack_delay_time is larger than the local time elapsed | 659 // ack_delay_time is larger than the local time elapsed |
| 660 // and is hence invalid. | 660 // and is hence invalid. |
| 661 QuicPacketNumber packet_number = 1; | 661 QuicPacketNumber packet_number = 1; |
| 662 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 662 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 663 SendDataPacket(packet_number); | 663 SendDataPacket(packet_number); |
| 664 clock_.AdvanceTime(expected_rtt); | 664 clock_.AdvanceTime(expected_rtt); |
| 665 | 665 |
| 666 ExpectAck(packet_number); | 666 ExpectAck(packet_number); |
| 667 QuicAckFrame ack_frame = InitAckFrame(packet_number); | 667 QuicAckFrame ack_frame = InitAckFrame(packet_number); |
| 668 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(11); | 668 ack_frame.ack_delay_time = QuicTime::Delta::FromMilliseconds(11); |
| 669 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 669 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 670 EXPECT_EQ(expected_rtt, | 670 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); |
| 671 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | |
| 672 } | 671 } |
| 673 | 672 |
| 674 TEST_P(QuicSentPacketManagerTest, RttWithInfiniteDelta) { | 673 TEST_P(QuicSentPacketManagerTest, RttWithInfiniteDelta) { |
| 675 // Expect that the RTT is equal to the local time elapsed, since the | 674 // Expect that the RTT is equal to the local time elapsed, since the |
| 676 // ack_delay_time is infinite, and is hence invalid. | 675 // ack_delay_time is infinite, and is hence invalid. |
| 677 QuicPacketNumber packet_number = 1; | 676 QuicPacketNumber packet_number = 1; |
| 678 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 677 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 679 SendDataPacket(packet_number); | 678 SendDataPacket(packet_number); |
| 680 clock_.AdvanceTime(expected_rtt); | 679 clock_.AdvanceTime(expected_rtt); |
| 681 | 680 |
| 682 ExpectAck(packet_number); | 681 ExpectAck(packet_number); |
| 683 QuicAckFrame ack_frame = InitAckFrame(packet_number); | 682 QuicAckFrame ack_frame = InitAckFrame(packet_number); |
| 684 ack_frame.ack_delay_time = QuicTime::Delta::Infinite(); | 683 ack_frame.ack_delay_time = QuicTime::Delta::Infinite(); |
| 685 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 684 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 686 EXPECT_EQ(expected_rtt, | 685 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); |
| 687 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | |
| 688 } | 686 } |
| 689 | 687 |
| 690 TEST_P(QuicSentPacketManagerTest, RttZeroDelta) { | 688 TEST_P(QuicSentPacketManagerTest, RttZeroDelta) { |
| 691 // Expect that the RTT is the time between send and receive since the | 689 // Expect that the RTT is the time between send and receive since the |
| 692 // ack_delay_time is zero. | 690 // ack_delay_time is zero. |
| 693 QuicPacketNumber packet_number = 1; | 691 QuicPacketNumber packet_number = 1; |
| 694 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); | 692 QuicTime::Delta expected_rtt = QuicTime::Delta::FromMilliseconds(10); |
| 695 SendDataPacket(packet_number); | 693 SendDataPacket(packet_number); |
| 696 clock_.AdvanceTime(expected_rtt); | 694 clock_.AdvanceTime(expected_rtt); |
| 697 | 695 |
| 698 ExpectAck(packet_number); | 696 ExpectAck(packet_number); |
| 699 QuicAckFrame ack_frame = InitAckFrame(packet_number); | 697 QuicAckFrame ack_frame = InitAckFrame(packet_number); |
| 700 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 698 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
| 701 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 699 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 702 EXPECT_EQ(expected_rtt, | 700 EXPECT_EQ(expected_rtt, manager_.GetRttStats()->latest_rtt()); |
| 703 QuicSentPacketManagerPeer::GetRttStats(&manager_)->latest_rtt()); | |
| 704 } | 701 } |
| 705 | 702 |
| 706 TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) { | 703 TEST_P(QuicSentPacketManagerTest, TailLossProbeTimeout) { |
| 707 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 704 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 708 | 705 |
| 709 // Send 1 packet. | 706 // Send 1 packet. |
| 710 QuicPacketNumber packet_number = 1; | 707 QuicPacketNumber packet_number = 1; |
| 711 SendDataPacket(packet_number); | 708 SendDataPacket(packet_number); |
| 712 | 709 |
| 713 // The first tail loss probe retransmits 1 packet. | 710 // The first tail loss probe retransmits 1 packet. |
| (...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1181 } | 1178 } |
| 1182 | 1179 |
| 1183 TEST_P(QuicSentPacketManagerTest, GetTransmissionTime) { | 1180 TEST_P(QuicSentPacketManagerTest, GetTransmissionTime) { |
| 1184 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 1181 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 1185 } | 1182 } |
| 1186 | 1183 |
| 1187 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 1184 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
| 1188 SendCryptoPacket(1); | 1185 SendCryptoPacket(1); |
| 1189 | 1186 |
| 1190 // Check the min. | 1187 // Check the min. |
| 1191 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); | 1188 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1192 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); | 1189 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); |
| 1193 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1190 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1194 manager_.GetRetransmissionTime()); | 1191 manager_.GetRetransmissionTime()); |
| 1195 | 1192 |
| 1196 // Test with a standard smoothed RTT. | 1193 // Test with a standard smoothed RTT. |
| 1197 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); | 1194 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
| 1198 | 1195 |
| 1199 QuicTime::Delta srtt = | 1196 QuicTime::Delta srtt = |
| 1200 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); | 1197 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
| 1201 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); | 1198 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
| 1202 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1199 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1203 | 1200 |
| 1204 // Retransmit the packet by invoking the retransmission timeout. | 1201 // Retransmit the packet by invoking the retransmission timeout. |
| 1205 clock_.AdvanceTime(srtt.Multiply(1.5)); | 1202 clock_.AdvanceTime(srtt.Multiply(1.5)); |
| 1206 manager_.OnRetransmissionTimeout(); | 1203 manager_.OnRetransmissionTimeout(); |
| 1207 RetransmitNextPacket(2); | 1204 RetransmitNextPacket(2); |
| 1208 | 1205 |
| 1209 // The retransmission time should now be twice as far in the future. | 1206 // The retransmission time should now be twice as far in the future. |
| 1210 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); | 1207 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
| 1211 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1208 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1212 } | 1209 } |
| 1213 | 1210 |
| 1214 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 1211 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
| 1215 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1212 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1216 SendDataPacket(1); | 1213 SendDataPacket(1); |
| 1217 SendDataPacket(2); | 1214 SendDataPacket(2); |
| 1218 | 1215 |
| 1219 // Check the min. | 1216 // Check the min. |
| 1220 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); | 1217 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1221 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); | 1218 rtt_stats->set_initial_rtt_us(1 * kNumMicrosPerMilli); |
| 1222 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1219 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1223 manager_.GetRetransmissionTime()); | 1220 manager_.GetRetransmissionTime()); |
| 1224 | 1221 |
| 1225 // Test with a standard smoothed RTT. | 1222 // Test with a standard smoothed RTT. |
| 1226 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); | 1223 rtt_stats->set_initial_rtt_us(100 * kNumMicrosPerMilli); |
| 1227 QuicTime::Delta srtt = | 1224 QuicTime::Delta srtt = |
| 1228 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); | 1225 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
| 1229 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1226 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
| 1230 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1227 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1243 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1240 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1244 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1241 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1245 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1242 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1246 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1243 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1247 | 1244 |
| 1248 expected_time = clock_.Now().Add(expected_tlp_delay); | 1245 expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1249 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1246 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1250 } | 1247 } |
| 1251 | 1248 |
| 1252 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { | 1249 TEST_P(QuicSentPacketManagerTest, GetTransmissionTimeSpuriousRTO) { |
| 1253 QuicSentPacketManagerPeer::GetRttStats(&manager_) | 1250 const_cast<RttStats*>(manager_.GetRttStats()) |
| 1254 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), | 1251 ->UpdateRtt(QuicTime::Delta::FromMilliseconds(100), |
| 1255 QuicTime::Delta::Zero(), QuicTime::Zero()); | 1252 QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1256 | |
| 1257 SendDataPacket(1); | 1253 SendDataPacket(1); |
| 1258 SendDataPacket(2); | 1254 SendDataPacket(2); |
| 1259 SendDataPacket(3); | 1255 SendDataPacket(3); |
| 1260 SendDataPacket(4); | 1256 SendDataPacket(4); |
| 1261 | 1257 |
| 1262 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); | 1258 QuicTime::Delta expected_rto_delay = QuicTime::Delta::FromMilliseconds(500); |
| 1263 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) | 1259 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) |
| 1264 .WillRepeatedly(Return(expected_rto_delay)); | 1260 .WillRepeatedly(Return(expected_rto_delay)); |
| 1265 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); | 1261 QuicTime expected_time = clock_.Now().Add(expected_rto_delay); |
| 1266 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1262 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1541 | 1537 |
| 1542 options.push_back(kNRTO); | 1538 options.push_back(kNRTO); |
| 1543 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); | 1539 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1544 client_config.SetConnectionOptionsToSend(options); | 1540 client_config.SetConnectionOptionsToSend(options); |
| 1545 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); | 1541 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1546 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1542 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1547 manager_.SetFromConfig(client_config); | 1543 manager_.SetFromConfig(client_config); |
| 1548 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); | 1544 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUseNewRto(&manager_)); |
| 1549 } | 1545 } |
| 1550 | 1546 |
| 1547 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtServer) { |
| 1548 FLAGS_quic_loss_recovery_use_largest_acked = true; |
| 1549 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
| 1550 QuicConfig config; |
| 1551 QuicTagVector options; |
| 1552 |
| 1553 options.push_back(kUNDO); |
| 1554 QuicConfigPeer::SetReceivedConnectionOptions(&config, options); |
| 1555 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1556 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1557 manager_.SetFromConfig(config); |
| 1558 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
| 1559 |
| 1560 // Ensure undo works as intended. |
| 1561 // Send 5 packets, mark the first 4 for retransmission, and then cancel |
| 1562 // them when 1 is acked. |
| 1563 EXPECT_CALL(*send_algorithm_, PacingRate()) |
| 1564 .WillRepeatedly(Return(QuicBandwidth::Zero())); |
| 1565 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()) |
| 1566 .WillOnce(Return(10 * kDefaultTCPMSS)); |
| 1567 const size_t kNumSentPackets = 5; |
| 1568 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 1569 SendDataPacket(i); |
| 1570 } |
| 1571 MockLossAlgorithm* loss_algorithm = new MockLossAlgorithm(); |
| 1572 QuicSentPacketManagerPeer::SetLossAlgorithm(&manager_, loss_algorithm); |
| 1573 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
| 1574 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1575 SendAlgorithmInterface::CongestionVector lost_packets; |
| 1576 for (size_t i = 1; i < kNumSentPackets; ++i) { |
| 1577 lost_packets.push_back(std::make_pair(i, kMaxPacketSize)); |
| 1578 } |
| 1579 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)) |
| 1580 .WillOnce(SetArgPointee<4>(lost_packets)); |
| 1581 QuicAckFrame ack_frame = InitAckFrame(kNumSentPackets); |
| 1582 NackPackets(1, kNumSentPackets, &ack_frame); |
| 1583 // Congestion block the sending right before losing the packets. |
| 1584 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1585 .WillRepeatedly(Return(QuicTime::Delta::Infinite())); |
| 1586 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1587 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 1588 EXPECT_EQ(0u, BytesInFlight()); |
| 1589 |
| 1590 // Ack 1 and ensure the retransmissions are cancelled and put back in flight. |
| 1591 EXPECT_CALL(*loss_algorithm, DetectLosses(_, _, _, _, _)); |
| 1592 ack_frame = InitAckFrame(5); |
| 1593 NackPackets(2, kNumSentPackets, &ack_frame); |
| 1594 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1595 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1596 EXPECT_EQ(3u * kDefaultLength, BytesInFlight()); |
| 1597 } |
| 1598 |
| 1599 TEST_P(QuicSentPacketManagerTest, NegotiateUndoFromOptionsAtClient) { |
| 1600 FLAGS_quic_loss_recovery_use_largest_acked = true; |
| 1601 EXPECT_FALSE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
| 1602 QuicConfig client_config; |
| 1603 QuicTagVector options; |
| 1604 |
| 1605 options.push_back(kUNDO); |
| 1606 QuicSentPacketManagerPeer::SetPerspective(&manager_, Perspective::IS_CLIENT); |
| 1607 client_config.SetConnectionOptionsToSend(options); |
| 1608 EXPECT_CALL(*network_change_visitor_, OnCongestionChange()); |
| 1609 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1610 manager_.SetFromConfig(client_config); |
| 1611 EXPECT_TRUE(QuicSentPacketManagerPeer::GetUndoRetransmits(&manager_)); |
| 1612 } |
| 1613 |
| 1551 TEST_P(QuicSentPacketManagerTest, | 1614 TEST_P(QuicSentPacketManagerTest, |
| 1552 NegotiateConservativeReceiveWindowFromOptions) { | 1615 NegotiateConservativeReceiveWindowFromOptions) { |
| 1553 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1616 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1554 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1617 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1555 | 1618 |
| 1556 // Try to set a size below the minimum and ensure it gets set to the min. | 1619 // Try to set a size below the minimum and ensure it gets set to the min. |
| 1557 QuicConfig client_config; | 1620 QuicConfig client_config; |
| 1558 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); | 1621 QuicConfigPeer::SetReceivedSocketReceiveBuffer(&client_config, 1024); |
| 1559 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1622 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1560 EXPECT_CALL(*send_algorithm_, | 1623 EXPECT_CALL(*send_algorithm_, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1635 CachedNetworkParameters cached_network_params; | 1698 CachedNetworkParameters cached_network_params; |
| 1636 cached_network_params.set_min_rtt_ms(kRttMs); | 1699 cached_network_params.set_min_rtt_ms(kRttMs); |
| 1637 | 1700 |
| 1638 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_, false)); | 1701 EXPECT_CALL(*send_algorithm_, ResumeConnectionState(_, false)); |
| 1639 manager_.ResumeConnectionState(cached_network_params, false); | 1702 manager_.ResumeConnectionState(cached_network_params, false); |
| 1640 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, | 1703 EXPECT_EQ(kRttMs * kNumMicrosPerMilli, |
| 1641 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us())); | 1704 static_cast<uint64_t>(manager_.GetRttStats()->initial_rtt_us())); |
| 1642 } | 1705 } |
| 1643 | 1706 |
| 1644 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) { | 1707 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationUnspecifiedChange) { |
| 1645 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); | 1708 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1646 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1709 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1647 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1710 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1648 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1711 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1649 | 1712 |
| 1650 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1713 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1651 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1714 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1652 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1715 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1653 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1716 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1654 | 1717 |
| 1655 EXPECT_CALL(*send_algorithm_, OnConnectionMigration()); | 1718 EXPECT_CALL(*send_algorithm_, OnConnectionMigration()); |
| 1656 manager_.OnConnectionMigration(UNSPECIFIED_CHANGE); | 1719 manager_.OnConnectionMigration(UNSPECIFIED_CHANGE); |
| 1657 | 1720 |
| 1658 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us()); | 1721 EXPECT_EQ(default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1659 EXPECT_EQ(0u, manager_.consecutive_rto_count()); | 1722 EXPECT_EQ(0u, manager_.consecutive_rto_count()); |
| 1660 EXPECT_EQ(0u, manager_.consecutive_tlp_count()); | 1723 EXPECT_EQ(0u, manager_.consecutive_tlp_count()); |
| 1661 } | 1724 } |
| 1662 | 1725 |
| 1663 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) { | 1726 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationIPSubnetChange) { |
| 1664 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); | 1727 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1665 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1728 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1666 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1729 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1667 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1730 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1668 | 1731 |
| 1669 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1732 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1670 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1733 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1671 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1734 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1672 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1735 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1673 | 1736 |
| 1674 manager_.OnConnectionMigration(IPV4_SUBNET_CHANGE); | 1737 manager_.OnConnectionMigration(IPV4_SUBNET_CHANGE); |
| 1675 | 1738 |
| 1676 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1739 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1677 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1740 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1678 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1741 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1679 } | 1742 } |
| 1680 | 1743 |
| 1681 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) { | 1744 TEST_P(QuicSentPacketManagerTest, ConnectionMigrationPortChange) { |
| 1682 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); | 1745 RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); |
| 1683 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); | 1746 int64_t default_init_rtt = rtt_stats->initial_rtt_us(); |
| 1684 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); | 1747 rtt_stats->set_initial_rtt_us(default_init_rtt * 2); |
| 1685 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1748 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1686 | 1749 |
| 1687 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); | 1750 QuicSentPacketManagerPeer::SetConsecutiveRtoCount(&manager_, 1); |
| 1688 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1751 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1689 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); | 1752 QuicSentPacketManagerPeer::SetConsecutiveTlpCount(&manager_, 2); |
| 1690 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1753 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1691 | 1754 |
| 1692 manager_.OnConnectionMigration(PORT_CHANGE); | 1755 manager_.OnConnectionMigration(PORT_CHANGE); |
| 1693 | 1756 |
| 1694 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1757 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1695 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1758 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1696 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1759 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1697 } | 1760 } |
| 1698 | 1761 |
| 1699 } // namespace | 1762 } // namespace |
| 1700 } // namespace test | 1763 } // namespace test |
| 1701 } // namespace net | 1764 } // namespace net |
| OLD | NEW |