Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: net/quic/quic_sent_packet_manager_test.cc

Issue 288313003: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src
Patch Set: implemented rch's comments Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/test_tools/quic_config_peer.h" 8 #include "net/quic/test_tools/quic_config_peer.h"
9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 9 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
10 #include "net/quic/test_tools/quic_test_utils.h" 10 #include "net/quic/test_tools/quic_test_utils.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 184 }
185 185
186 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { 186 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) {
187 EXPECT_CALL(*send_algorithm_, 187 EXPECT_CALL(*send_algorithm_,
188 OnPacketSent(_, BytesInFlight(), sequence_number, 188 OnPacketSent(_, BytesInFlight(), sequence_number,
189 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 189 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
190 .Times(1).WillOnce(Return(true)); 190 .Times(1).WillOnce(Return(true));
191 SerializedPacket packet(CreateDataPacket(sequence_number)); 191 SerializedPacket packet(CreateDataPacket(sequence_number));
192 packet.retransmittable_frames->AddStreamFrame( 192 packet.retransmittable_frames->AddStreamFrame(
193 new QuicStreamFrame(1, false, 0, IOVector())); 193 new QuicStreamFrame(1, false, 0, IOVector()));
194 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
194 manager_.OnSerializedPacket(packet); 195 manager_.OnSerializedPacket(packet);
195 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), 196 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
196 packet.packet->length(), NOT_RETRANSMISSION, 197 packet.packet->length(), NOT_RETRANSMISSION,
197 HAS_RETRANSMITTABLE_DATA); 198 HAS_RETRANSMITTABLE_DATA);
198 } 199 }
199 200
200 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { 201 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
201 EXPECT_CALL(*send_algorithm_, 202 EXPECT_CALL(*send_algorithm_,
202 OnPacketSent(_, BytesInFlight(), sequence_number, 203 OnPacketSent(_, BytesInFlight(), sequence_number,
203 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 204 kDefaultLength, NO_RETRANSMITTABLE_DATA))
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 // Now retransmit all the unacked packets, which occurs when there is a 975 // Now retransmit all the unacked packets, which occurs when there is a
975 // version negotiation. 976 // version negotiation.
976 manager_.RetransmitUnackedPackets(ALL_PACKETS); 977 manager_.RetransmitUnackedPackets(ALL_PACKETS);
977 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 978 QuicPacketSequenceNumber unacked[] = { 1, 2 };
978 VerifyUnackedPackets(unacked, arraysize(unacked)); 979 VerifyUnackedPackets(unacked, arraysize(unacked));
979 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 980 EXPECT_TRUE(manager_.HasPendingRetransmissions());
980 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 981 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
981 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 982 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
982 } 983 }
983 984
985 TEST_F(QuicSentPacketManagerTest,
986 CryptoHandshakeRetransmissionThenNeuterAndAck) {
987 // Send 1 crypto packet.
988 SendCryptoPacket(1);
989 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
990
991 // Retransmit the crypto packet as 2.
992 manager_.OnRetransmissionTimeout();
993 RetransmitNextPacket(2);
994
995 // Retransmit the crypto packet as 3.
996 manager_.OnRetransmissionTimeout();
997 RetransmitNextPacket(3);
998
999 // Now neuter all unacked unencrypted packets, which occurs when the
1000 // connection goes forward secure.
1001 manager_.NeuterUnencryptedPackets();
1002 QuicPacketSequenceNumber unacked[] = { 1, 2, 3};
1003 VerifyUnackedPackets(unacked, arraysize(unacked));
1004 VerifyRetransmittablePackets(NULL, 0);
1005 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1006 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1007 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1008
1009 // Ensure both packets get discarded when packet 2 is acked.
1010 ReceivedPacketInfo received_info;
1011 received_info.largest_observed = 3;
1012 received_info.missing_packets.insert(1);
1013 received_info.missing_packets.insert(2);
1014 ExpectUpdatedRtt(3);
1015 manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
1016 VerifyUnackedPackets(NULL, 0);
1017 VerifyRetransmittablePackets(NULL, 0);
1018 }
1019
984 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { 1020 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
985 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 1021 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
986 // Serialize two data packets and send the latter. 1022 // Serialize two data packets and send the latter.
987 SerializedPacket packet(CreateDataPacket(1)); 1023 SerializedPacket packet(CreateDataPacket(1));
988 manager_.OnSerializedPacket(packet); 1024 manager_.OnSerializedPacket(packet);
989 SendDataPacket(2); 1025 SendDataPacket(2);
990 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1026 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
991 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1027 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
992 1028
993 // Retransmit 1 unacked packets, but not the first serialized packet. 1029 // Retransmit 1 unacked packets, but not the first serialized packet.
994 manager_.OnRetransmissionTimeout(); 1030 manager_.OnRetransmissionTimeout();
995 RetransmitNextPacket(3); 1031 RetransmitNextPacket(3);
996 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 1032 EXPECT_FALSE(manager_.HasPendingRetransmissions());
997 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 1033 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
998 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 1034 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
999 } 1035 }
1000 1036
1037 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) {
1038 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50);
1039 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt(
1040 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero());
1041 EXPECT_EQ(min_rtt,
1042 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
1043 EXPECT_EQ(min_rtt,
1044 QuicSentPacketManagerPeer::GetRttStats(
1045 &manager_)->recent_min_rtt());
1046
1047 // Send two packets with no prior bytes in flight.
1048 SendDataPacket(1);
1049 SendDataPacket(2);
1050
1051 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100));
1052 // Ack two packets with 100ms RTT observations.
1053 ReceivedPacketInfo received_info;
1054 received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
1055 received_info.largest_observed = 1;
1056 ExpectAck(1);
1057 manager_.OnIncomingAck(received_info, clock_.Now());
1058
1059 // First ack does not change recent min rtt.
1060 EXPECT_EQ(min_rtt,
1061 QuicSentPacketManagerPeer::GetRttStats(
1062 &manager_)->recent_min_rtt());
1063
1064 received_info.largest_observed = 2;
1065 ExpectAck(2);
1066 manager_.OnIncomingAck(received_info, clock_.Now());
1067
1068 EXPECT_EQ(min_rtt,
1069 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt());
1070 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100),
1071 QuicSentPacketManagerPeer::GetRttStats(
1072 &manager_)->recent_min_rtt());
1073 }
1074
1001 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 1075 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
1002 // Send 100 packets and then ensure all are abandoned when the RTO fires. 1076 // Send 100 packets and then ensure all are abandoned when the RTO fires.
1003 const size_t kNumSentPackets = 100; 1077 const size_t kNumSentPackets = 100;
1004 for (size_t i = 1; i <= kNumSentPackets; ++i) { 1078 for (size_t i = 1; i <= kNumSentPackets; ++i) {
1005 SendDataPacket(i); 1079 SendDataPacket(i);
1006 } 1080 }
1007 1081
1008 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); 1082 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
1009 manager_.OnRetransmissionTimeout(); 1083 manager_.OnRetransmissionTimeout();
1010 } 1084 }
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 1267
1194 EXPECT_EQ(kTime, 1268 EXPECT_EQ(kTime,
1195 QuicSentPacketManagerPeer::GetLossAlgorithm( 1269 QuicSentPacketManagerPeer::GetLossAlgorithm(
1196 &manager_)->GetLossDetectionType()); 1270 &manager_)->GetLossDetectionType());
1197 } 1271 }
1198 1272
1199 1273
1200 } // namespace 1274 } // namespace
1201 } // namespace test 1275 } // namespace test
1202 } // namespace net 1276 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698