| 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 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { | 219 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { |
| 220 EXPECT_CALL(*send_algorithm_, | 220 EXPECT_CALL(*send_algorithm_, |
| 221 OnPacketSent(_, BytesInFlight(), sequence_number, | 221 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 222 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 222 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 223 .Times(1).WillOnce(Return(true)); | 223 .Times(1).WillOnce(Return(true)); |
| 224 SerializedPacket packet(CreateDataPacket(sequence_number)); | 224 SerializedPacket packet(CreateDataPacket(sequence_number)); |
| 225 packet.retransmittable_frames->AddStreamFrame( | 225 packet.retransmittable_frames->AddStreamFrame( |
| 226 new QuicStreamFrame(1, false, 0, IOVector())); | 226 new QuicStreamFrame(1, false, 0, IOVector())); |
| 227 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); | 227 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE); |
| 228 manager_.OnSerializedPacket(packet); | 228 manager_.OnSerializedPacket(packet); |
| 229 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | 229 manager_.OnPacketSent(sequence_number, clock_.Now(), |
| 230 packet.packet->length(), NOT_RETRANSMISSION, | 230 packet.packet->length(), NOT_RETRANSMISSION, |
| 231 HAS_RETRANSMITTABLE_DATA); | 231 HAS_RETRANSMITTABLE_DATA); |
| 232 } | 232 } |
| 233 | 233 |
| 234 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { | 234 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { |
| 235 EXPECT_CALL(*send_algorithm_, | 235 EXPECT_CALL(*send_algorithm_, |
| 236 OnPacketSent(_, BytesInFlight(), sequence_number, | 236 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 237 kDefaultLength, NO_RETRANSMITTABLE_DATA)) | 237 kDefaultLength, NO_RETRANSMITTABLE_DATA)) |
| 238 .Times(1).WillOnce(Return(true)); | 238 .Times(1).WillOnce(Return(true)); |
| 239 SerializedPacket packet(CreateFecPacket(sequence_number)); | 239 SerializedPacket packet(CreateFecPacket(sequence_number)); |
| 240 manager_.OnSerializedPacket(packet); | 240 manager_.OnSerializedPacket(packet); |
| 241 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), | 241 manager_.OnPacketSent(sequence_number, clock_.Now(), |
| 242 packet.packet->length(), NOT_RETRANSMISSION, | 242 packet.packet->length(), NOT_RETRANSMISSION, |
| 243 NO_RETRANSMITTABLE_DATA); | 243 NO_RETRANSMITTABLE_DATA); |
| 244 } | 244 } |
| 245 | 245 |
| 246 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { | 246 void SendAckPacket(QuicPacketSequenceNumber sequence_number) { |
| 247 EXPECT_CALL(*send_algorithm_, | 247 EXPECT_CALL(*send_algorithm_, |
| 248 OnPacketSent(_, BytesInFlight(), sequence_number, | 248 OnPacketSent(_, BytesInFlight(), sequence_number, |
| 249 kDefaultLength, NO_RETRANSMITTABLE_DATA)) | 249 kDefaultLength, NO_RETRANSMITTABLE_DATA)) |
| 250 .Times(1).WillOnce(Return(false)); | 250 .Times(1).WillOnce(Return(false)); |
| 251 SerializedPacket packet(CreatePacket(sequence_number, false)); | 251 SerializedPacket packet(CreatePacket(sequence_number, false)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 275 QuicSentPacketManager manager_; | 275 QuicSentPacketManager manager_; |
| 276 vector<QuicPacket*> packets_; | 276 vector<QuicPacket*> packets_; |
| 277 MockClock clock_; | 277 MockClock clock_; |
| 278 QuicConnectionStats stats_; | 278 QuicConnectionStats stats_; |
| 279 MockSendAlgorithm* send_algorithm_; | 279 MockSendAlgorithm* send_algorithm_; |
| 280 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; | 280 scoped_ptr<MockNetworkChangeVisitor> network_change_visitor_; |
| 281 }; | 281 }; |
| 282 | 282 |
| 283 TEST_F(QuicSentPacketManagerTest, IsUnacked) { | 283 TEST_F(QuicSentPacketManagerTest, IsUnacked) { |
| 284 VerifyUnackedPackets(NULL, 0); | 284 VerifyUnackedPackets(NULL, 0); |
| 285 | 285 SendDataPacket(1); |
| 286 SerializedPacket serialized_packet(CreateDataPacket(1)); | |
| 287 | |
| 288 manager_.OnSerializedPacket(serialized_packet); | |
| 289 | 286 |
| 290 QuicPacketSequenceNumber unacked[] = { 1 }; | 287 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 291 VerifyUnackedPackets(unacked, arraysize(unacked)); | 288 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 292 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 289 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 293 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 290 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 294 } | 291 } |
| 295 | 292 |
| 296 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 293 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 297 SendDataPacket(1); | 294 SendDataPacket(1); |
| 298 RetransmitPacket(1, 2); | 295 RetransmitPacket(1, 2); |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 VerifyUnackedPackets(unacked, arraysize(unacked)); | 638 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 642 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 639 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
| 643 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 640 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 644 } | 641 } |
| 645 | 642 |
| 646 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { | 643 TEST_F(QuicSentPacketManagerTest, GetLeastUnacked) { |
| 647 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 644 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 648 } | 645 } |
| 649 | 646 |
| 650 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { | 647 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnacked) { |
| 651 SerializedPacket serialized_packet(CreateDataPacket(1)); | 648 SendDataPacket(1); |
| 652 | |
| 653 manager_.OnSerializedPacket(serialized_packet); | |
| 654 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 649 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 655 } | 650 } |
| 656 | 651 |
| 657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { | 652 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedUnackedFec) { |
| 658 SerializedPacket serialized_packet(CreateFecPacket(1)); | 653 SendFecPacket(1); |
| 659 | |
| 660 manager_.OnSerializedPacket(serialized_packet); | |
| 661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 654 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 662 } | 655 } |
| 663 | 656 |
| 664 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { | 657 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedAndDiscard) { |
| 665 VerifyUnackedPackets(NULL, 0); | 658 VerifyUnackedPackets(NULL, 0); |
| 666 | 659 |
| 667 SendFecPacket(1); | 660 SendFecPacket(1); |
| 668 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 661 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 669 | 662 |
| 670 SendFecPacket(2); | 663 SendFecPacket(2); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 683 ack_frame.largest_observed = 2; | 676 ack_frame.largest_observed = 2; |
| 684 ack_frame.missing_packets.insert(1); | 677 ack_frame.missing_packets.insert(1); |
| 685 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 678 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 686 | 679 |
| 687 EXPECT_EQ(1u, manager_.GetLeastUnacked()); | 680 EXPECT_EQ(1u, manager_.GetLeastUnacked()); |
| 688 } | 681 } |
| 689 | 682 |
| 690 TEST_F(QuicSentPacketManagerTest, GetSentTime) { | 683 TEST_F(QuicSentPacketManagerTest, GetSentTime) { |
| 691 VerifyUnackedPackets(NULL, 0); | 684 VerifyUnackedPackets(NULL, 0); |
| 692 | 685 |
| 693 SerializedPacket serialized_packet(CreateFecPacket(1)); | 686 QuicTime sent_time = clock_.Now(); |
| 694 manager_.OnSerializedPacket(serialized_packet); | 687 SendFecPacket(1); |
| 695 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)) | 688 QuicTime sent_time2 = clock_.Now(); |
| 696 .Times(1).WillOnce(Return(true)); | 689 SendFecPacket(2); |
| 697 manager_.OnPacketSent(1, QuicTime::Zero(), kDefaultLength, NOT_RETRANSMISSION, | |
| 698 NO_RETRANSMITTABLE_DATA); | |
| 699 | |
| 700 SerializedPacket serialized_packet2(CreateFecPacket(2)); | |
| 701 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); | |
| 702 manager_.OnSerializedPacket(serialized_packet2); | |
| 703 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2, _, _)) | |
| 704 .Times(1).WillOnce(Return(true)); | |
| 705 manager_.OnPacketSent(2, sent_time, kDefaultLength, NOT_RETRANSMISSION, | |
| 706 NO_RETRANSMITTABLE_DATA); | |
| 707 | |
| 708 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 690 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 709 VerifyUnackedPackets(unacked, arraysize(unacked)); | 691 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 710 VerifyRetransmittablePackets(NULL, 0); | 692 VerifyRetransmittablePackets(NULL, 0); |
| 711 | 693 |
| 712 EXPECT_TRUE(manager_.HasUnackedPackets()); | 694 EXPECT_TRUE(manager_.HasUnackedPackets()); |
| 713 EXPECT_EQ(QuicTime::Zero(), | 695 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); |
| 714 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1)); | 696 EXPECT_EQ(sent_time2, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); |
| 715 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2)); | |
| 716 } | 697 } |
| 717 | 698 |
| 718 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { | 699 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) { |
| 719 SendDataPacket(1); | 700 SendDataPacket(1); |
| 720 SendAckPacket(2); | 701 SendAckPacket(2); |
| 721 | 702 |
| 722 // Now ack the ack and expect an RTT update. | 703 // Now ack the ack and expect an RTT update. |
| 723 QuicAckFrame ack_frame; | 704 QuicAckFrame ack_frame; |
| 724 ack_frame.largest_observed = 2; | 705 ack_frame.largest_observed = 2; |
| 725 ack_frame.delta_time_largest_observed = | 706 ack_frame.delta_time_largest_observed = |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 ack_frame.largest_observed = 2; | 994 ack_frame.largest_observed = 2; |
| 1014 ack_frame.missing_packets.insert(1); | 995 ack_frame.missing_packets.insert(1); |
| 1015 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 996 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1016 | 997 |
| 1017 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 998 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1018 QuicPacketSequenceNumber unacked[] = { 3 }; | 999 QuicPacketSequenceNumber unacked[] = { 3 }; |
| 1019 VerifyUnackedPackets(unacked, arraysize(unacked)); | 1000 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 1020 } | 1001 } |
| 1021 | 1002 |
| 1022 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { | 1003 TEST_F(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) { |
| 1023 // Send 2 crypto packets and serialize 1 data packet. | 1004 // Send 2 crypto packets and 1 data packet. |
| 1024 const size_t kNumSentCryptoPackets = 2; | 1005 const size_t kNumSentCryptoPackets = 2; |
| 1025 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { | 1006 for (size_t i = 1; i <= kNumSentCryptoPackets; ++i) { |
| 1026 SendCryptoPacket(i); | 1007 SendCryptoPacket(i); |
| 1027 } | 1008 } |
| 1028 SerializedPacket packet(CreateDataPacket(3)); | 1009 SendDataPacket(3); |
| 1029 manager_.OnSerializedPacket(packet); | |
| 1030 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1010 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1031 | 1011 |
| 1032 // Retransmit 2 crypto packets, but not the serialized packet. | 1012 // Retransmit 2 crypto packets, but not the serialized packet. |
| 1033 manager_.OnRetransmissionTimeout(); | 1013 manager_.OnRetransmissionTimeout(); |
| 1034 RetransmitNextPacket(4); | 1014 RetransmitNextPacket(4); |
| 1035 RetransmitNextPacket(5); | 1015 RetransmitNextPacket(5); |
| 1036 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1016 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 1037 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | 1017 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); |
| 1038 } | 1018 } |
| 1039 | 1019 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 QuicAckFrame ack_frame; | 1065 QuicAckFrame ack_frame; |
| 1086 ack_frame.largest_observed = 3; | 1066 ack_frame.largest_observed = 3; |
| 1087 ack_frame.missing_packets.insert(1); | 1067 ack_frame.missing_packets.insert(1); |
| 1088 ack_frame.missing_packets.insert(2); | 1068 ack_frame.missing_packets.insert(2); |
| 1089 ExpectUpdatedRtt(3); | 1069 ExpectUpdatedRtt(3); |
| 1090 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1070 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1091 VerifyUnackedPackets(NULL, 0); | 1071 VerifyUnackedPackets(NULL, 0); |
| 1092 VerifyRetransmittablePackets(NULL, 0); | 1072 VerifyRetransmittablePackets(NULL, 0); |
| 1093 } | 1073 } |
| 1094 | 1074 |
| 1095 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { | |
| 1096 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | |
| 1097 // Serialize two data packets and send the latter. | |
| 1098 SerializedPacket packet(CreateDataPacket(1)); | |
| 1099 manager_.OnSerializedPacket(packet); | |
| 1100 SendDataPacket(2); | |
| 1101 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | |
| 1102 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | |
| 1103 | |
| 1104 // Retransmit 1 unacked packets, but not the first serialized packet. | |
| 1105 manager_.OnRetransmissionTimeout(); | |
| 1106 EXPECT_EQ(QuicTime::Delta::Zero(), | |
| 1107 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | |
| 1108 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | |
| 1109 manager_.MaybeRetransmitTailLossProbe(); | |
| 1110 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | |
| 1111 RetransmitNextPacket(3); | |
| 1112 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).WillOnce(Return( | |
| 1113 QuicTime::Delta::Infinite())); | |
| 1114 EXPECT_EQ(QuicTime::Delta::Infinite(), | |
| 1115 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | |
| 1116 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | |
| 1117 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); | |
| 1118 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | |
| 1119 } | |
| 1120 | |
| 1121 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1075 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
| 1122 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1076 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
| 1123 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1077 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1124 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1078 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1125 EXPECT_EQ(min_rtt, | 1079 EXPECT_EQ(min_rtt, |
| 1126 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); | 1080 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1127 EXPECT_EQ(min_rtt, | 1081 EXPECT_EQ(min_rtt, |
| 1128 QuicSentPacketManagerPeer::GetRttStats( | 1082 QuicSentPacketManagerPeer::GetRttStats( |
| 1129 &manager_)->recent_min_rtt()); | 1083 &manager_)->recent_min_rtt()); |
| 1130 | 1084 |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1462 .WillOnce(Return(100 * kDefaultTCPMSS)); | 1416 .WillOnce(Return(100 * kDefaultTCPMSS)); |
| 1463 manager_.SetFromConfig(config); | 1417 manager_.SetFromConfig(config); |
| 1464 | 1418 |
| 1465 EXPECT_EQ(initial_rtt_us, | 1419 EXPECT_EQ(initial_rtt_us, |
| 1466 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1420 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); |
| 1467 } | 1421 } |
| 1468 | 1422 |
| 1469 } // namespace | 1423 } // namespace |
| 1470 } // namespace test | 1424 } // namespace test |
| 1471 } // namespace net | 1425 } // namespace net |
| OLD | NEW |