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

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

Issue 103973007: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix for android compile error Created 7 years 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
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_sent_packet_manager_peer.h" 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
9 #include "net/quic/test_tools/quic_test_utils.h" 9 #include "net/quic/test_tools/quic_test_utils.h"
10 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 23 matching lines...) Expand all
34 34
35 ~QuicSentPacketManagerTest() { 35 ~QuicSentPacketManagerTest() {
36 STLDeleteElements(&packets_); 36 STLDeleteElements(&packets_);
37 } 37 }
38 38
39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, 39 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets,
40 size_t num_packets) { 40 size_t num_packets) {
41 if (num_packets == 0) { 41 if (num_packets == 0) {
42 EXPECT_FALSE(manager_.HasUnackedPackets()); 42 EXPECT_FALSE(manager_.HasUnackedPackets());
43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets()); 43 EXPECT_EQ(0u, manager_.GetNumRetransmittablePackets());
44 EXPECT_FALSE(manager_.HasUnackedPackets());
45 return; 44 return;
46 } 45 }
47 46
48 EXPECT_TRUE(manager_.HasUnackedPackets()); 47 EXPECT_TRUE(manager_.HasUnackedPackets());
49 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket()); 48 EXPECT_EQ(packets[0], manager_.GetLeastUnackedSentPacket());
50 for (size_t i = 0; i < num_packets; ++i) { 49 for (size_t i = 0; i < num_packets; ++i) {
51 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i]; 50 EXPECT_TRUE(manager_.IsUnacked(packets[i])) << packets[i];
52 } 51 }
53 } 52 }
54 53
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 } 105 }
107 106
108 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) { 107 SerializedPacket CreateFecPacket(QuicPacketSequenceNumber sequence_number) {
109 packets_.push_back(QuicPacket::NewFecPacket( 108 packets_.push_back(QuicPacket::NewFecPacket(
110 NULL, 0, false, PACKET_8BYTE_GUID, false, 109 NULL, 0, false, PACKET_8BYTE_GUID, false,
111 PACKET_6BYTE_SEQUENCE_NUMBER)); 110 PACKET_6BYTE_SEQUENCE_NUMBER));
112 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER, 111 return SerializedPacket(sequence_number, PACKET_6BYTE_SEQUENCE_NUMBER,
113 packets_.back(), 0u, NULL); 112 packets_.back(), 0u, NULL);
114 } 113 }
115 114
115 void SendDataPacket(QuicPacketSequenceNumber sequence_number) {
116 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, sequence_number, _, _, _))
117 .Times(1).WillOnce(Return(true));
118 SerializedPacket packet(CreatePacket(sequence_number));
119 manager_.OnSerializedPacket(packet);
120 manager_.OnPacketSent(sequence_number, clock_.ApproximateNow(),
121 packet.packet->length(), NOT_RETRANSMISSION,
122 HAS_RETRANSMITTABLE_DATA);
123 }
124
125 // Based on QuicConnection's WritePendingRetransmissions.
126 void RetransmitNextPacket(
127 QuicPacketSequenceNumber retransmission_sequence_number) {
128 EXPECT_TRUE(manager_.HasPendingRetransmissions());
129 EXPECT_CALL(*send_algorithm_,
130 OnPacketSent(_, retransmission_sequence_number, _, _, _))
131 .Times(1).WillOnce(Return(true));
132 const QuicSentPacketManager::PendingRetransmission pending =
133 manager_.NextPendingRetransmission();
134 manager_.OnRetransmittedPacket(
135 pending.sequence_number, retransmission_sequence_number);
136 manager_.OnPacketSent(retransmission_sequence_number,
137 clock_.ApproximateNow(), 1000,
138 pending.transmission_type, HAS_RETRANSMITTABLE_DATA);
139 }
140
116 testing::StrictMock<MockHelper> helper_; 141 testing::StrictMock<MockHelper> helper_;
117 QuicSentPacketManager manager_; 142 QuicSentPacketManager manager_;
118 vector<QuicPacket*> packets_; 143 vector<QuicPacket*> packets_;
119 MockClock clock_; 144 MockClock clock_;
120 MockSendAlgorithm* send_algorithm_; 145 MockSendAlgorithm* send_algorithm_;
121 }; 146 };
122 147
123 TEST_F(QuicSentPacketManagerTest, IsUnacked) { 148 TEST_F(QuicSentPacketManagerTest, IsUnacked) {
124 VerifyUnackedPackets(NULL, 0); 149 VerifyUnackedPackets(NULL, 0);
125 150
126 SerializedPacket serialized_packet(CreatePacket(1)); 151 SerializedPacket serialized_packet(CreatePacket(1));
127 152
128 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 153 manager_.OnSerializedPacket(serialized_packet);
129 154
130 QuicPacketSequenceNumber unacked[] = { 1 }; 155 QuicPacketSequenceNumber unacked[] = { 1 };
131 VerifyUnackedPackets(unacked, arraysize(unacked)); 156 VerifyUnackedPackets(unacked, arraysize(unacked));
132 QuicPacketSequenceNumber retransmittable[] = { 1 }; 157 QuicPacketSequenceNumber retransmittable[] = { 1 };
133 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 158 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
134 } 159 }
135 160
136 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { 161 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) {
137 SerializedPacket serialized_packet(CreatePacket(1)); 162 SerializedPacket serialized_packet(CreatePacket(1));
138 163
139 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 164 manager_.OnSerializedPacket(serialized_packet);
140 RetransmitPacket(1, 2); 165 RetransmitPacket(1, 2);
141 166
142 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); 167 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2));
143 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 168 QuicPacketSequenceNumber unacked[] = { 1, 2 };
144 VerifyUnackedPackets(unacked, arraysize(unacked)); 169 VerifyUnackedPackets(unacked, arraysize(unacked));
145 QuicPacketSequenceNumber retransmittable[] = { 2 }; 170 QuicPacketSequenceNumber retransmittable[] = { 2 };
146 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 171 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
147 } 172 }
148 173
149 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { 174 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) {
150 SerializedPacket serialized_packet(CreatePacket(1)); 175 SerializedPacket serialized_packet(CreatePacket(1));
151 176
152 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 177 manager_.OnSerializedPacket(serialized_packet);
153 RetransmitPacket(1, 2); 178 RetransmitPacket(1, 2);
154 179
155 // Ack 2 but not 1. 180 // Ack 2 but not 1.
156 ReceivedPacketInfo received_info; 181 ReceivedPacketInfo received_info;
157 received_info.largest_observed = 2; 182 received_info.largest_observed = 2;
158 received_info.missing_packets.insert(1); 183 received_info.missing_packets.insert(1);
159 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u));
160 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 184 manager_.OnIncomingAck(received_info, QuicTime::Zero());
161 185
162 // No unacked packets remain. 186 // No unacked packets remain.
163 VerifyUnackedPackets(NULL, 0); 187 VerifyUnackedPackets(NULL, 0);
164 VerifyRetransmittablePackets(NULL, 0); 188 VerifyRetransmittablePackets(NULL, 0);
165 } 189 }
166 190
167 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { 191 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) {
168 SerializedPacket serialized_packet(CreatePacket(1)); 192 SerializedPacket serialized_packet(CreatePacket(1));
169 193
170 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 194 manager_.OnSerializedPacket(serialized_packet);
171 QuicSentPacketManagerPeer::MarkForRetransmission( 195 QuicSentPacketManagerPeer::MarkForRetransmission(
172 &manager_, 1, NACK_RETRANSMISSION); 196 &manager_, 1, NACK_RETRANSMISSION);
173 EXPECT_TRUE(manager_.HasPendingRetransmissions()); 197 EXPECT_TRUE(manager_.HasPendingRetransmissions());
174 198
175 // Ack 1. 199 // Ack 1.
176 ReceivedPacketInfo received_info; 200 ReceivedPacketInfo received_info;
177 received_info.largest_observed = 1; 201 received_info.largest_observed = 1;
178 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
179 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 202 manager_.OnIncomingAck(received_info, QuicTime::Zero());
180 203
181 // There should no longer be a pending retransmission. 204 // There should no longer be a pending retransmission.
182 EXPECT_FALSE(manager_.HasPendingRetransmissions()); 205 EXPECT_FALSE(manager_.HasPendingRetransmissions());
183 206
184 // No unacked packets remain. 207 // No unacked packets remain.
185 VerifyUnackedPackets(NULL, 0); 208 VerifyUnackedPackets(NULL, 0);
186 VerifyRetransmittablePackets(NULL, 0); 209 VerifyRetransmittablePackets(NULL, 0);
187 } 210 }
188 211
189 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) { 212 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckPrevious) {
190 SerializedPacket serialized_packet(CreatePacket(1)); 213 SerializedPacket serialized_packet(CreatePacket(1));
191 214
192 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 215 manager_.OnSerializedPacket(serialized_packet);
193 RetransmitPacket(1, 2); 216 RetransmitPacket(1, 2);
194 217
195 // Ack 1 but not 2. 218 // Ack 1 but not 2.
196 ReceivedPacketInfo received_info; 219 ReceivedPacketInfo received_info;
197 received_info.largest_observed = 1; 220 received_info.largest_observed = 1;
198 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(3u));
199 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 221 manager_.OnIncomingAck(received_info, QuicTime::Zero());
200 222
201 // 2 remains unacked, but no packets have retransmittable data. 223 // 2 remains unacked, but no packets have retransmittable data.
202 QuicPacketSequenceNumber unacked[] = { 2 }; 224 QuicPacketSequenceNumber unacked[] = { 2 };
203 VerifyUnackedPackets(unacked, arraysize(unacked)); 225 VerifyUnackedPackets(unacked, arraysize(unacked));
204 VerifyRetransmittablePackets(NULL, 0); 226 VerifyRetransmittablePackets(NULL, 0);
227
228 // Verify that if the retransmission alarm does fire to abandon packet 2,
229 // the sent packet manager is not notified, since there is no retransmittable
230 // data outstanding.
231 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
232 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
233 manager_.OnRetransmissionTimeout();
205 } 234 }
206 235
207 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) { 236 TEST_F(QuicSentPacketManagerTest, RetransmitTwiceThenAckFirst) {
208 SerializedPacket serialized_packet(CreatePacket(1)); 237 SerializedPacket serialized_packet(CreatePacket(1));
209 238
210 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 239 manager_.OnSerializedPacket(serialized_packet);
211 RetransmitPacket(1, 2); 240 RetransmitPacket(1, 2);
212 RetransmitPacket(2, 3); 241 RetransmitPacket(2, 3);
213 242
214 // Ack 1 but not 2 or 3. 243 // Ack 1 but not 2 or 3.
215 ReceivedPacketInfo received_info; 244 ReceivedPacketInfo received_info;
216 received_info.largest_observed = 1; 245 received_info.largest_observed = 1;
217 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
218 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 246 manager_.OnIncomingAck(received_info, QuicTime::Zero());
219 247
220 // 3 remains unacked, but no packets have retransmittable data. 248 // 3 remains unacked, but no packets have retransmittable data.
221 QuicPacketSequenceNumber unacked[] = { 3 }; 249 QuicPacketSequenceNumber unacked[] = { 3 };
222 VerifyUnackedPackets(unacked, arraysize(unacked)); 250 VerifyUnackedPackets(unacked, arraysize(unacked));
223 VerifyRetransmittablePackets(NULL, 0); 251 VerifyRetransmittablePackets(NULL, 0);
252
253 // Verify that if the retransmission alarm does fire to abandon packet 3,
254 // the sent packet manager is not notified, since there is no retransmittable
255 // data outstanding.
256 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
257 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
258 manager_.OnRetransmissionTimeout();
224 } 259 }
225 260
226 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { 261 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
227 SerializedPacket serialized_packet(CreatePacket(1)); 262 SerializedPacket serialized_packet(CreatePacket(1));
228 263
229 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 264 manager_.OnSerializedPacket(serialized_packet);
230 RetransmitPacket(1, 2); 265 RetransmitPacket(1, 2);
231 RetransmitPacket(2, 3); 266 RetransmitPacket(2, 3);
232 RetransmitPacket(3, 4); 267 RetransmitPacket(3, 4);
233 268
234 // Truncated ack with 2 NACKs 269 // Truncated ack with 2 NACKs
235 ReceivedPacketInfo received_info; 270 ReceivedPacketInfo received_info;
236 received_info.largest_observed = 2; 271 received_info.largest_observed = 2;
237 received_info.missing_packets.insert(1); 272 received_info.missing_packets.insert(1);
238 received_info.missing_packets.insert(2); 273 received_info.missing_packets.insert(2);
239 received_info.is_truncated = true; 274 received_info.is_truncated = true;
240 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(5u));
241 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 275 manager_.OnIncomingAck(received_info, QuicTime::Zero());
242 276
243 // High water mark will be raised. 277 // High water mark will be raised.
244 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; 278 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 };
245 VerifyUnackedPackets(unacked, arraysize(unacked)); 279 VerifyUnackedPackets(unacked, arraysize(unacked));
246 QuicPacketSequenceNumber retransmittable[] = { 4 }; 280 QuicPacketSequenceNumber retransmittable[] = { 4 };
247 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 281 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
248 } 282 }
249 283
250 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { 284 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) {
251 manager_.OnSerializedPacket(CreatePacket(1), QuicTime::Zero()); 285 manager_.OnSerializedPacket(CreatePacket(1));
252 manager_.OnSerializedPacket(CreatePacket(2), QuicTime::Zero()); 286 manager_.OnSerializedPacket(CreatePacket(2));
253 manager_.OnSerializedPacket(CreatePacket(3), QuicTime::Zero()); 287 manager_.OnSerializedPacket(CreatePacket(3));
254 288
255 { 289 {
256 // Ack packets 1 and 3. 290 // Ack packets 1 and 3.
257 ReceivedPacketInfo received_info; 291 ReceivedPacketInfo received_info;
258 received_info.largest_observed = 3; 292 received_info.largest_observed = 3;
259 received_info.missing_packets.insert(2); 293 received_info.missing_packets.insert(2);
260 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
261 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 294 manager_.OnIncomingAck(received_info, QuicTime::Zero());
262 295
263 QuicPacketSequenceNumber unacked[] = { 2 }; 296 QuicPacketSequenceNumber unacked[] = { 2 };
264 VerifyUnackedPackets(unacked, arraysize(unacked)); 297 VerifyUnackedPackets(unacked, arraysize(unacked));
265 QuicPacketSequenceNumber retransmittable[] = { 2 }; 298 QuicPacketSequenceNumber retransmittable[] = { 2 };
266 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 299 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
267 } 300 }
268 301
269 manager_.OnSerializedPacket(CreatePacket(4), QuicTime::Zero()); 302 manager_.OnSerializedPacket(CreatePacket(4));
270 manager_.OnSerializedPacket(CreatePacket(5), QuicTime::Zero()); 303 manager_.OnSerializedPacket(CreatePacket(5));
271 304
272 { 305 {
273 // Ack packets 5. 306 // Ack packets 5.
274 ReceivedPacketInfo received_info; 307 ReceivedPacketInfo received_info;
275 received_info.largest_observed = 5; 308 received_info.largest_observed = 5;
276 received_info.missing_packets.insert(2); 309 received_info.missing_packets.insert(2);
277 received_info.missing_packets.insert(4); 310 received_info.missing_packets.insert(4);
278 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(6u));
279 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 311 manager_.OnIncomingAck(received_info, QuicTime::Zero());
280 312
281 QuicPacketSequenceNumber unacked[] = { 2, 4 }; 313 QuicPacketSequenceNumber unacked[] = { 2, 4 };
282 VerifyUnackedPackets(unacked, arraysize(unacked)); 314 VerifyUnackedPackets(unacked, arraysize(unacked));
283 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; 315 QuicPacketSequenceNumber retransmittable[] = { 2, 4 };
284 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 316 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
285 } 317 }
286 318
287 manager_.OnSerializedPacket(CreatePacket(6), QuicTime::Zero()); 319 manager_.OnSerializedPacket(CreatePacket(6));
288 manager_.OnSerializedPacket(CreatePacket(7), QuicTime::Zero()); 320 manager_.OnSerializedPacket(CreatePacket(7));
289 321
290 { 322 {
291 // Ack packets 7. 323 // Ack packets 7.
292 ReceivedPacketInfo received_info; 324 ReceivedPacketInfo received_info;
293 received_info.largest_observed = 7; 325 received_info.largest_observed = 7;
294 received_info.missing_packets.insert(2); 326 received_info.missing_packets.insert(2);
295 received_info.missing_packets.insert(4); 327 received_info.missing_packets.insert(4);
296 received_info.missing_packets.insert(6); 328 received_info.missing_packets.insert(6);
297 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(8u));
298 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 329 manager_.OnIncomingAck(received_info, QuicTime::Zero());
299 330
300 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; 331 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 };
301 VerifyUnackedPackets(unacked, arraysize(unacked)); 332 VerifyUnackedPackets(unacked, arraysize(unacked));
302 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; 333 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 };
303 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 334 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
304 } 335 }
305 336
306 RetransmitPacket(2, 8); 337 RetransmitPacket(2, 8);
307 manager_.OnSerializedPacket(CreatePacket(9), QuicTime::Zero()); 338 manager_.OnSerializedPacket(CreatePacket(9));
308 manager_.OnSerializedPacket(CreatePacket(10), QuicTime::Zero()); 339 manager_.OnSerializedPacket(CreatePacket(10));
309 340
310 { 341 {
311 // Ack packet 10. 342 // Ack packet 10.
312 ReceivedPacketInfo received_info; 343 ReceivedPacketInfo received_info;
313 received_info.largest_observed = 10; 344 received_info.largest_observed = 10;
314 received_info.missing_packets.insert(2); 345 received_info.missing_packets.insert(2);
315 received_info.missing_packets.insert(4); 346 received_info.missing_packets.insert(4);
316 received_info.missing_packets.insert(6); 347 received_info.missing_packets.insert(6);
317 received_info.missing_packets.insert(8); 348 received_info.missing_packets.insert(8);
318 received_info.missing_packets.insert(9); 349 received_info.missing_packets.insert(9);
319 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(11u));
320 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 350 manager_.OnIncomingAck(received_info, QuicTime::Zero());
321 351
322 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; 352 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 };
323 VerifyUnackedPackets(unacked, arraysize(unacked)); 353 VerifyUnackedPackets(unacked, arraysize(unacked));
324 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; 354 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 };
325 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 355 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
326 } 356 }
327 357
328 358
329 RetransmitPacket(4, 11); 359 RetransmitPacket(4, 11);
330 manager_.OnSerializedPacket(CreatePacket(12), QuicTime::Zero()); 360 manager_.OnSerializedPacket(CreatePacket(12));
331 manager_.OnSerializedPacket(CreatePacket(13), QuicTime::Zero()); 361 manager_.OnSerializedPacket(CreatePacket(13));
332 362
333 { 363 {
334 // Ack packet 13. 364 // Ack packet 13.
335 ReceivedPacketInfo received_info; 365 ReceivedPacketInfo received_info;
336 received_info.largest_observed = 13; 366 received_info.largest_observed = 13;
337 received_info.missing_packets.insert(2); 367 received_info.missing_packets.insert(2);
338 received_info.missing_packets.insert(4); 368 received_info.missing_packets.insert(4);
339 received_info.missing_packets.insert(6); 369 received_info.missing_packets.insert(6);
340 received_info.missing_packets.insert(8); 370 received_info.missing_packets.insert(8);
341 received_info.missing_packets.insert(9); 371 received_info.missing_packets.insert(9);
342 received_info.missing_packets.insert(11); 372 received_info.missing_packets.insert(11);
343 received_info.missing_packets.insert(12); 373 received_info.missing_packets.insert(12);
344 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(14u));
345 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 374 manager_.OnIncomingAck(received_info, QuicTime::Zero());
346 375
347 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; 376 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 };
348 VerifyUnackedPackets(unacked, arraysize(unacked)); 377 VerifyUnackedPackets(unacked, arraysize(unacked));
349 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; 378 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 };
350 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 379 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
351 } 380 }
352 381
353 RetransmitPacket(6, 14); 382 RetransmitPacket(6, 14);
354 manager_.OnSerializedPacket(CreatePacket(15), QuicTime::Zero()); 383 manager_.OnSerializedPacket(CreatePacket(15));
355 manager_.OnSerializedPacket(CreatePacket(16), QuicTime::Zero()); 384 manager_.OnSerializedPacket(CreatePacket(16));
356 385
357 { 386 {
358 // Ack packet 16. 387 // Ack packet 16.
359 ReceivedPacketInfo received_info; 388 ReceivedPacketInfo received_info;
360 received_info.largest_observed = 13; 389 received_info.largest_observed = 13;
361 received_info.missing_packets.insert(2); 390 received_info.missing_packets.insert(2);
362 received_info.missing_packets.insert(4); 391 received_info.missing_packets.insert(4);
363 received_info.missing_packets.insert(6); 392 received_info.missing_packets.insert(6);
364 received_info.missing_packets.insert(8); 393 received_info.missing_packets.insert(8);
365 received_info.missing_packets.insert(9); 394 received_info.missing_packets.insert(9);
366 received_info.missing_packets.insert(11); 395 received_info.missing_packets.insert(11);
367 received_info.missing_packets.insert(12); 396 received_info.missing_packets.insert(12);
368 received_info.is_truncated = true; 397 received_info.is_truncated = true;
369 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(17u));
370 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 398 manager_.OnIncomingAck(received_info, QuicTime::Zero());
371 399
372 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. 400 // Truncated ack raises the high water mark by clearing out 2, 4, and 6.
373 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; 401 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 };
374 VerifyUnackedPackets(unacked, arraysize(unacked)); 402 VerifyUnackedPackets(unacked, arraysize(unacked));
375 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; 403 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 };
376 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 404 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
377 } 405 }
378 } 406 }
379 407
380 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { 408 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) {
381 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); 409 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u));
382 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); 410 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
383 } 411 }
384 412
385 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { 413 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) {
386 SerializedPacket serialized_packet(CreatePacket(1)); 414 SerializedPacket serialized_packet(CreatePacket(1));
387 415
388 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 416 manager_.OnSerializedPacket(serialized_packet);
389 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); 417 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
390 } 418 }
391 419
392 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) { 420 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnackedFec) {
393 SerializedPacket serialized_packet(CreateFecPacket(1)); 421 SerializedPacket serialized_packet(CreateFecPacket(1));
394 422
395 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 423 manager_.OnSerializedPacket(serialized_packet);
396 // FEC packets do not count as "unacked". 424 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
397 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
398 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
399 } 425 }
400 426
401 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) { 427 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketDiscardUnacked) {
402 SerializedPacket serialized_packet(CreatePacket(1)); 428 SerializedPacket serialized_packet(CreatePacket(1));
403 429
404 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 430 manager_.OnSerializedPacket(serialized_packet);
405 manager_.DiscardUnackedPacket(1u); 431 manager_.DiscardUnackedPacket(1u);
406 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u)); 432 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(2u));
407 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket()); 433 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
408 } 434 }
409 435
410 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedFecPacketAndDiscard) { 436 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedPacketAndDiscard) {
411 VerifyUnackedPackets(NULL, 0); 437 VerifyUnackedPackets(NULL, 0);
412 438
413 SerializedPacket serialized_packet(CreateFecPacket(1)); 439 SerializedPacket serialized_packet(CreateFecPacket(1));
414 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 440 manager_.OnSerializedPacket(serialized_packet);
415 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 441 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
416 442
417 SerializedPacket serialized_packet2(CreateFecPacket(2)); 443 SerializedPacket serialized_packet2(CreateFecPacket(2));
418 manager_.OnSerializedPacket(serialized_packet2, QuicTime::Zero()); 444 manager_.OnSerializedPacket(serialized_packet2);
419 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 445 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
420 446
421 SerializedPacket serialized_packet3(CreateFecPacket(3)); 447 SerializedPacket serialized_packet3(CreateFecPacket(3));
422 manager_.OnSerializedPacket(serialized_packet3, QuicTime::Zero()); 448 manager_.OnSerializedPacket(serialized_packet3);
423 EXPECT_EQ(1u, manager_.GetLeastUnackedFecPacket()); 449 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket());
424 450
425 VerifyUnackedPackets(NULL, 0); 451 QuicPacketSequenceNumber unacked[] = { 1, 2, 3 };
452 VerifyUnackedPackets(unacked, arraysize(unacked));
426 VerifyRetransmittablePackets(NULL, 0); 453 VerifyRetransmittablePackets(NULL, 0);
427 454
428 manager_.DiscardFecPacket(1); 455 manager_.DiscardUnackedPacket(1);
429 EXPECT_EQ(2u, manager_.GetLeastUnackedFecPacket()); 456 EXPECT_EQ(2u, manager_.GetLeastUnackedSentPacket());
430 457
431 // Ack 2. 458 // Ack 2.
432 ReceivedPacketInfo received_info; 459 ReceivedPacketInfo received_info;
433 received_info.largest_observed = 2; 460 received_info.largest_observed = 2;
434 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(4u));
435 manager_.OnIncomingAck(received_info, QuicTime::Zero()); 461 manager_.OnIncomingAck(received_info, QuicTime::Zero());
436 462
437 EXPECT_EQ(3u, manager_.GetLeastUnackedFecPacket()); 463 EXPECT_EQ(3u, manager_.GetLeastUnackedSentPacket());
438 464
439 // Discard the 3rd packet and ensure there are no FEC packets. 465 // Discard the 3rd packet and ensure there are no FEC packets.
440 manager_.DiscardFecPacket(3); 466 manager_.DiscardUnackedPacket(3);
441 EXPECT_FALSE(manager_.HasUnackedFecPackets()); 467 EXPECT_FALSE(manager_.HasUnackedPackets());
442 } 468 }
443 469
444 TEST_F(QuicSentPacketManagerTest, GetFecSentTime) { 470 TEST_F(QuicSentPacketManagerTest, GetSentTime) {
445 VerifyUnackedPackets(NULL, 0); 471 VerifyUnackedPackets(NULL, 0);
446 472
447 SerializedPacket serialized_packet(CreateFecPacket(1)); 473 SerializedPacket serialized_packet(CreateFecPacket(1));
448 manager_.OnSerializedPacket(serialized_packet, QuicTime::Zero()); 474 manager_.OnSerializedPacket(serialized_packet);
475 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 1, _, _, _))
476 .Times(1).WillOnce(Return(true));
477 manager_.OnPacketSent(
478 1, QuicTime::Zero(), 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
449 SerializedPacket serialized_packet2(CreateFecPacket(2)); 479 SerializedPacket serialized_packet2(CreateFecPacket(2));
450 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1)); 480 QuicTime sent_time = QuicTime::Zero().Add(QuicTime::Delta::FromSeconds(1));
451 manager_.OnSerializedPacket(serialized_packet2, sent_time); 481 manager_.OnSerializedPacket(serialized_packet2);
482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2, _, _, _))
483 .Times(1).WillOnce(Return(true));
484 manager_.OnPacketSent(
485 2, sent_time, 0, NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
452 486
453 VerifyUnackedPackets(NULL, 0); 487 QuicPacketSequenceNumber unacked[] = { 1, 2 };
488 VerifyUnackedPackets(unacked, arraysize(unacked));
454 VerifyRetransmittablePackets(NULL, 0); 489 VerifyRetransmittablePackets(NULL, 0);
455 490
456 EXPECT_TRUE(manager_.HasUnackedFecPackets()); 491 EXPECT_TRUE(manager_.HasUnackedPackets());
457 EXPECT_EQ(QuicTime::Zero(), manager_.GetFecSentTime(1)); 492 EXPECT_EQ(QuicTime::Zero(),
458 EXPECT_EQ(sent_time, manager_.GetFecSentTime(2)); 493 QuicSentPacketManagerPeer::GetSentTime(&manager_, 1));
494 EXPECT_EQ(sent_time, QuicSentPacketManagerPeer::GetSentTime(&manager_, 2));
459 } 495 }
460 496
461 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) { 497 TEST_F(QuicSentPacketManagerTest, NackRetransmit1Packet) {
462 const size_t kNumSentPackets = 4; 498 const size_t kNumSentPackets = 4;
463 // Transmit 4 packets. 499 // Transmit 4 packets.
464 for (size_t i = 1; i <= kNumSentPackets; ++i) { 500 for (size_t i = 1; i <= kNumSentPackets; ++i) {
465 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 501 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
466 .Times(1).WillOnce(Return(true)); 502 .Times(1).WillOnce(Return(true));
467 manager_.OnPacketSent(i, clock_.Now(), 1000, 503 manager_.OnPacketSent(i, clock_.Now(), 1000,
468 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 504 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 received_info.largest_observed = sequence_number; 819 received_info.largest_observed = sequence_number;
784 received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 820 received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
785 manager_.OnIncomingAckFrame(received_info, clock_.Now()); 821 manager_.OnIncomingAckFrame(received_info, clock_.Now());
786 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_)); 822 EXPECT_EQ(expected_rtt, QuicSentPacketManagerPeer::rtt(&manager_));
787 } 823 }
788 824
789 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { 825 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) {
790 // Send 100 packets and then ensure all are abandoned when the RTO fires. 826 // Send 100 packets and then ensure all are abandoned when the RTO fires.
791 const size_t kNumSentPackets = 100; 827 const size_t kNumSentPackets = 100;
792 for (size_t i = 1; i <= kNumSentPackets; ++i) { 828 for (size_t i = 1; i <= kNumSentPackets; ++i) {
793 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 829 SendDataPacket(i);
794 .Times(1).WillOnce(Return(true));
795 manager_.OnPacketSent(i, clock_.Now(), 1000,
796 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
797 } 830 }
798 831
799 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
800 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets); 832 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(_, _)).Times(kNumSentPackets);
801 833
834 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
835 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
802 manager_.OnRetransmissionTimeout(); 837 manager_.OnRetransmissionTimeout();
803 } 838 }
804 839
805 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) { 840 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMin) {
806 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
807 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(1);
808 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 841 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
809 .WillOnce(Return(delay)); 842 .WillOnce(Return(QuicTime::Delta::FromMilliseconds(1)));
810 843
811 manager_.OnRetransmissionTimeout();
812 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), 844 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200),
813 manager_.GetRetransmissionDelay()); 845 manager_.GetRetransmissionDelay());
814 } 846 }
815 847
816 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) { 848 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelayMax) {
817 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
818 QuicTime::Delta delay = QuicTime::Delta::FromSeconds(500);
819 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 849 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
820 .WillOnce(Return(delay)); 850 .WillOnce(Return(QuicTime::Delta::FromSeconds(500)));
821 851
822 manager_.OnRetransmissionTimeout();
823 EXPECT_EQ(QuicTime::Delta::FromSeconds(60), 852 EXPECT_EQ(QuicTime::Delta::FromSeconds(60),
824 manager_.GetRetransmissionDelay()); 853 manager_.GetRetransmissionDelay());
825 } 854 }
826 855
827 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) { 856 TEST_F(QuicSentPacketManagerTest, GetTransmissionDelay) {
857 SendDataPacket(1);
828 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 858 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
829 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 859 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
830 .WillRepeatedly(Return(delay)); 860 .WillRepeatedly(Return(delay));
831 861
832 // Delay should back off exponentially. 862 // Delay should back off exponentially.
833 for (int i = 0; i < 5; ++i) { 863 for (int i = 0; i < 5; ++i) {
834 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); 864 EXPECT_EQ(delay, manager_.GetRetransmissionDelay());
835 delay = delay.Add(delay); 865 delay = delay.Add(delay);
866 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _));
836 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); 867 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
837 manager_.OnRetransmissionTimeout(); 868 manager_.OnRetransmissionTimeout();
869 RetransmitNextPacket(i + 2);
838 } 870 }
839 } 871 }
840 872
841 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) { 873 TEST_F(QuicSentPacketManagerTest, GetTestTransmissionDelayTailDrop) {
842 FLAGS_limit_rto_increase_for_tests = true; 874 FLAGS_limit_rto_increase_for_tests = true;
843 875
876 SendDataPacket(1);
844 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500); 877 QuicTime::Delta delay = QuicTime::Delta::FromMilliseconds(500);
845 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()) 878 EXPECT_CALL(*send_algorithm_, RetransmissionDelay())
846 .WillRepeatedly(Return(delay)); 879 .WillRepeatedly(Return(delay));
847 880
848 // No backoff for the first 5 retransmissions. 881 // No backoff for the first 5 retransmissions.
849 for (int i = 0; i < 5; ++i) { 882 for (int i = 0; i < 5; ++i) {
850 EXPECT_EQ(delay, manager_.GetRetransmissionDelay()); 883 EXPECT_EQ(delay, manager_.GetRetransmissionDelay());
884 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(i + 1, _));
851 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout()); 885 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout());
852 manager_.OnRetransmissionTimeout(); 886 manager_.OnRetransmissionTimeout();
887 RetransmitNextPacket(i + 2);
853 } 888 }
854 889
855 // Then backoff starts 890 // Then backoff starts
856 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay()); 891 EXPECT_EQ(delay.Add(delay), manager_.GetRetransmissionDelay());
857 } 892 }
858 893
859 } // namespace 894 } // namespace
860 } // namespace test 895 } // namespace test
861 } // namespace net 896 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_sent_packet_manager.cc ('k') | net/quic/quic_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698