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

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

Issue 283693002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 | Annotate | Revision Log
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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 EXPECT_TRUE(manager_.HasUnackedPackets()); 63 EXPECT_TRUE(manager_.HasUnackedPackets());
64 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); 64 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket());
65 for (size_t i = 0; i < num_packets; ++i) { 65 for (size_t i = 0; i < num_packets; ++i) {
66 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; 66 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i];
67 } 67 }
68 } 68 }
69 69
70 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, 70 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets,
71 size_t num_packets) { 71 size_t num_packets) {
72 SequenceNumberSet unacked =
73 QuicSentPacketManagerPeer::GetUnackedPackets(&manager_);
74 for (size_t i = 0; i < num_packets; ++i) {
75 EXPECT_TRUE(ContainsKey(unacked, packets[i])) << packets[i];
76 }
77 size_t num_retransmittable = 0;
78 for (SequenceNumberSet::const_iterator it = unacked.begin();
79 it != unacked.end(); ++it) {
80 if (manager_.HasRetransmittableFrames(*it)) {
81 ++num_retransmittable;
82 }
83 }
84 EXPECT_EQ(num_packets, 72 EXPECT_EQ(num_packets,
85 QuicSentPacketManagerPeer::GetNumRetransmittablePackets( 73 QuicSentPacketManagerPeer::GetNumRetransmittablePackets(
86 &manager_)); 74 &manager_));
87 EXPECT_EQ(num_packets, num_retransmittable); 75 for (size_t i = 0; i < num_packets; ++i) {
76 EXPECT_TRUE(manager_.HasRetransmittableFrames(packets[i]))
77 << " packets[" << i << "]:" << packets[i];
78 }
88 } 79 }
89 80
90 void ExpectAck(QuicPacketSequenceNumber largest_observed) { 81 void ExpectAck(QuicPacketSequenceNumber largest_observed) {
91 EXPECT_CALL(*send_algorithm_, OnCongestionEvent( 82 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(
92 true, _, ElementsAre(Pair(largest_observed, _)), _)); 83 true, _, ElementsAre(Pair(largest_observed, _)), _));
93 } 84 }
94 85
95 void ExpectUpdatedRtt(QuicPacketSequenceNumber largest_observed) { 86 void ExpectUpdatedRtt(QuicPacketSequenceNumber largest_observed) {
96 EXPECT_CALL(*send_algorithm_, 87 EXPECT_CALL(*send_algorithm_,
97 OnCongestionEvent(true, _, _, _)); 88 OnCongestionEvent(true, _, _, _));
(...skipping 20 matching lines...) Expand all
118 vector<QuicPacketSequenceNumber> lost_vector; 109 vector<QuicPacketSequenceNumber> lost_vector;
119 for (size_t i = 0; i < num_packets_lost; ++i) { 110 for (size_t i = 0; i < num_packets_lost; ++i) {
120 lost_vector.push_back(packets_lost[i]); 111 lost_vector.push_back(packets_lost[i]);
121 } 112 }
122 EXPECT_CALL(*send_algorithm_, 113 EXPECT_CALL(*send_algorithm_,
123 OnCongestionEvent(rtt_updated, _, 114 OnCongestionEvent(rtt_updated, _,
124 Pointwise(KeyEq(), ack_vector), 115 Pointwise(KeyEq(), ack_vector),
125 Pointwise(KeyEq(), lost_vector))); 116 Pointwise(KeyEq(), lost_vector)));
126 } 117 }
127 118
119 // Retransmits a packet as though it was a TLP retransmission, because TLP
120 // leaves the |old_sequence_number| pending.
121 // TODO(ianswett): Test with transmission types besides TLP.
128 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number, 122 void RetransmitPacket(QuicPacketSequenceNumber old_sequence_number,
129 QuicPacketSequenceNumber new_sequence_number) { 123 QuicPacketSequenceNumber new_sequence_number) {
130 QuicSentPacketManagerPeer::MarkForRetransmission( 124 QuicSentPacketManagerPeer::MarkForRetransmission(
131 &manager_, old_sequence_number, LOSS_RETRANSMISSION); 125 &manager_, old_sequence_number, TLP_RETRANSMISSION);
132 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 126 EXPECT_TRUE(manager_.HasPendingRetransmissions());
133 QuicSentPacketManager::PendingRetransmission next_retransmission = 127 QuicSentPacketManager::PendingRetransmission next_retransmission =
134 manager_.NextPendingRetransmission(); 128 manager_.NextPendingRetransmission();
135 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number); 129 EXPECT_EQ(old_sequence_number, next_retransmission.sequence_number);
136 EXPECT_EQ(LOSS_RETRANSMISSION, 130 EXPECT_EQ(TLP_RETRANSMISSION,
137 next_retransmission.transmission_type); 131 next_retransmission.transmission_type);
138 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number); 132 manager_.OnRetransmittedPacket(old_sequence_number, new_sequence_number);
139 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission( 133 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(
140 &manager_, new_sequence_number)); 134 &manager_, new_sequence_number));
141 } 135 }
142 136
143 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number, 137 void RetransmitAndSendPacket(QuicPacketSequenceNumber old_sequence_number,
144 QuicPacketSequenceNumber new_sequence_number) { 138 QuicPacketSequenceNumber new_sequence_number) {
145 RetransmitPacket(old_sequence_number, new_sequence_number); 139 RetransmitPacket(old_sequence_number, new_sequence_number);
146 140
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 } 184 }
191 185
192 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) { 186 void SendCryptoPacket(QuicPacketSequenceNumber sequence_number) {
193 EXPECT_CALL(*send_algorithm_, 187 EXPECT_CALL(*send_algorithm_,
194 OnPacketSent(_, BytesInFlight(), sequence_number, 188 OnPacketSent(_, BytesInFlight(), sequence_number,
195 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) 189 kDefaultLength, HAS_RETRANSMITTABLE_DATA))
196 .Times(1).WillOnce(Return(true)); 190 .Times(1).WillOnce(Return(true));
197 SerializedPacket packet(CreateDataPacket(sequence_number)); 191 SerializedPacket packet(CreateDataPacket(sequence_number));
198 packet.retransmittable_frames->AddStreamFrame( 192 packet.retransmittable_frames->AddStreamFrame(
199 new QuicStreamFrame(1, false, 0, IOVector())); 193 new QuicStreamFrame(1, false, 0, IOVector()));
200 packet.retransmittable_frames->set_encryption_level(ENCRYPTION_NONE);
201 manager_.OnSerializedPacket(packet); 194 manager_.OnSerializedPacket(packet);
202 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(), 195 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
203 packet.packet->length(), NOT_RETRANSMISSION, 196 packet.packet->length(), NOT_RETRANSMISSION,
204 HAS_RETRANSMITTABLE_DATA); 197 HAS_RETRANSMITTABLE_DATA);
205 } 198 }
206 199
207 void SendFecPacket(QuicPacketSequenceNumber sequence_number) { 200 void SendFecPacket(QuicPacketSequenceNumber sequence_number) {
208 EXPECT_CALL(*send_algorithm_, 201 EXPECT_CALL(*send_algorithm_,
209 OnPacketSent(_, BytesInFlight(), sequence_number, 202 OnPacketSent(_, BytesInFlight(), sequence_number,
210 kDefaultLength, NO_RETRANSMITTABLE_DATA)) 203 kDefaultLength, NO_RETRANSMITTABLE_DATA))
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // Packet 1 is unacked, pending, but not retransmittable. 283 // Packet 1 is unacked, pending, but not retransmittable.
291 QuicPacketSequenceNumber unacked[] = { 1 }; 284 QuicPacketSequenceNumber unacked[] = { 1 };
292 VerifyUnackedPackets(unacked, arraysize(unacked)); 285 VerifyUnackedPackets(unacked, arraysize(unacked));
293 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 286 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
294 VerifyRetransmittablePackets(NULL, 0); 287 VerifyRetransmittablePackets(NULL, 0);
295 } 288 }
296 289
297 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 290 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
298 SendDataPacket(1); 291 SendDataPacket(1);
299 QuicSentPacketManagerPeer::MarkForRetransmission( 292 QuicSentPacketManagerPeer::MarkForRetransmission(
300 &manager_, 1, LOSS_RETRANSMISSION); 293 &manager_, 1, TLP_RETRANSMISSION);
301 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 294 EXPECT_TRUE(manager_.HasPendingRetransmissions());
302 295
303 // Ack 1. 296 // Ack 1.
304 ReceivedPacketInfo received_info; 297 ReceivedPacketInfo received_info;
305 received_info.largest_observed = 1; 298 received_info.largest_observed = 1;
306 ExpectAck(1); 299 ExpectAck(1);
307 manager_.OnIncomingAck(received_info, clock_.Now()); 300 manager_.OnIncomingAck(received_info, clock_.Now());
308 301
309 // There should no longer be a pending retransmission. 302 // There should no longer be a pending retransmission.
310 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 303 EXPECT_FALSE(manager_.HasPendingRetransmissions());
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 received_info.missing_packets.insert(2); 543 received_info.missing_packets.insert(2);
551 received_info.missing_packets.insert(3); 544 received_info.missing_packets.insert(3);
552 received_info.missing_packets.insert(4); 545 received_info.missing_packets.insert(4);
553 received_info.is_truncated = true; 546 received_info.is_truncated = true;
554 547
555 QuicPacketSequenceNumber lost[] = { 1 }; 548 QuicPacketSequenceNumber lost[] = { 1 };
556 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost)); 549 ExpectAcksAndLosses(true, NULL, 0, lost, arraysize(lost));
557 manager_.OnIncomingAck(received_info, clock_.Now()); 550 manager_.OnIncomingAck(received_info, clock_.Now());
558 551
559 // High water mark will be raised. 552 // High water mark will be raised.
560 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; 553 QuicPacketSequenceNumber unacked[] = { 2, 3, 4, 5 };
561 VerifyUnackedPackets(unacked, arraysize(unacked)); 554 VerifyUnackedPackets(unacked, arraysize(unacked));
562 QuicPacketSequenceNumber retransmittable[] = { 4 }; 555 QuicPacketSequenceNumber retransmittable[] = { 5 };
563 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 556 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
564 } 557 }
565 558
566 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { 559 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) {
567 SendDataPacket(1); 560 SendDataPacket(1);
568 RetransmitAndSendPacket(1, 2); 561 RetransmitAndSendPacket(1, 2);
569 RetransmitAndSendPacket(2, 3); 562 RetransmitAndSendPacket(2, 3);
570 RetransmitAndSendPacket(3, 4); 563 RetransmitAndSendPacket(3, 4);
571 manager_.OnSerializedPacket(CreateDataPacket(5)); 564 manager_.OnSerializedPacket(CreateDataPacket(5));
572 manager_.OnSerializedPacket(CreateDataPacket(6)); 565 manager_.OnSerializedPacket(CreateDataPacket(6));
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 // Now retransmit all the unacked packets, which occurs when there is a 974 // Now retransmit all the unacked packets, which occurs when there is a
982 // version negotiation. 975 // version negotiation.
983 manager_.RetransmitUnackedPackets(ALL_PACKETS); 976 manager_.RetransmitUnackedPackets(ALL_PACKETS);
984 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 977 QuicPacketSequenceNumber unacked[] = { 1, 2 };
985 VerifyUnackedPackets(unacked, arraysize(unacked)); 978 VerifyUnackedPackets(unacked, arraysize(unacked));
986 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 979 EXPECT_TRUE(manager_.HasPendingRetransmissions());
987 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 980 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
988 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 981 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
989 } 982 }
990 983
991 TEST_F(QuicSentPacketManagerTest,
992 CryptoHandshakeRetransmissionThenAbandonAll) {
993 // Send 1 crypto packet.
994 SendCryptoPacket(1);
995 EXPECT_TRUE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
996
997 // Retransmit the crypto packet as 2.
998 manager_.OnRetransmissionTimeout();
999 RetransmitNextPacket(2);
1000
1001 // Now discard all unacked unencrypted packets, which occurs when the
1002 // connection goes forward secure.
1003 manager_.DiscardUnencryptedPackets();
1004 VerifyUnackedPackets(NULL, 0);
1005 EXPECT_FALSE(manager_.HasPendingRetransmissions());
1006 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1007 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1008 }
1009
1010 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) { 984 TEST_F(QuicSentPacketManagerTest, TailLossProbeTimeoutUnsentDataPacket) {
1011 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); 985 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2);
1012 // Serialize two data packets and send the latter. 986 // Serialize two data packets and send the latter.
1013 SerializedPacket packet(CreateDataPacket(1)); 987 SerializedPacket packet(CreateDataPacket(1));
1014 manager_.OnSerializedPacket(packet); 988 manager_.OnSerializedPacket(packet);
1015 SendDataPacket(2); 989 SendDataPacket(2);
1016 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_)); 990 EXPECT_FALSE(QuicSentPacketManagerPeer::HasUnackedCryptoPackets(&manager_));
1017 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); 991 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_));
1018 992
1019 // Retransmit 1 unacked packets, but not the first serialized packet. 993 // Retransmit 1 unacked packets, but not the first serialized packet.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 1193
1220 EXPECT_EQ(kTime, 1194 EXPECT_EQ(kTime,
1221 QuicSentPacketManagerPeer::GetLossAlgorithm( 1195 QuicSentPacketManagerPeer::GetLossAlgorithm(
1222 &manager_)->GetLossDetectionType()); 1196 &manager_)->GetLossDetectionType());
1223 } 1197 }
1224 1198
1225 1199
1226 } // namespace 1200 } // namespace
1227 } // namespace test 1201 } // namespace test
1228 } // namespace net 1202 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698