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

Side by Side Diff: net/quic/core/quic_packet_generator_test.cc

Issue 2846033002: Part of QUIC v39 change: 1) do not ack acks. 2) Send a WINDOW_UPDATE frame every 20 packets which d… (Closed)
Patch Set: Created 3 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
« no previous file with comments | « net/quic/core/quic_packet_generator.cc ('k') | net/quic/core/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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/core/quic_packet_generator.h" 5 #include "net/quic/core/quic_packet_generator.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 class MockDebugDelegate : public QuicPacketCreator::DebugDelegate { 234 class MockDebugDelegate : public QuicPacketCreator::DebugDelegate {
235 public: 235 public:
236 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&)); 236 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&));
237 }; 237 };
238 238
239 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { 239 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) {
240 delegate_.SetCanNotWrite(); 240 delegate_.SetCanNotWrite();
241 241
242 generator_.SetShouldSendAck(false); 242 generator_.SetShouldSendAck(false);
243 EXPECT_TRUE(generator_.HasQueuedFrames()); 243 EXPECT_TRUE(generator_.HasQueuedFrames());
244 EXPECT_FALSE(generator_.HasRetransmittableFrames());
244 } 245 }
245 246
246 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { 247 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) {
247 StrictMock<MockDebugDelegate> debug_delegate; 248 StrictMock<MockDebugDelegate> debug_delegate;
248 249
249 generator_.set_debug_delegate(&debug_delegate); 250 generator_.set_debug_delegate(&debug_delegate);
250 delegate_.SetCanWriteOnlyNonRetransmittable(); 251 delegate_.SetCanWriteOnlyNonRetransmittable();
251 generator_.StartBatchOperations(); 252 generator_.StartBatchOperations();
252 253
253 EXPECT_CALL(delegate_, GetUpdatedAckFrame()) 254 EXPECT_CALL(delegate_, GetUpdatedAckFrame())
254 .WillOnce(Return(QuicFrame(&ack_frame_))); 255 .WillOnce(Return(QuicFrame(&ack_frame_)));
255 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); 256 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1);
256 257
257 generator_.SetShouldSendAck(false); 258 generator_.SetShouldSendAck(false);
258 EXPECT_TRUE(generator_.HasQueuedFrames()); 259 EXPECT_TRUE(generator_.HasQueuedFrames());
260 EXPECT_FALSE(generator_.HasRetransmittableFrames());
259 } 261 }
260 262
261 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { 263 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) {
262 delegate_.SetCanWriteOnlyNonRetransmittable(); 264 delegate_.SetCanWriteOnlyNonRetransmittable();
263 265
264 EXPECT_CALL(delegate_, GetUpdatedAckFrame()) 266 EXPECT_CALL(delegate_, GetUpdatedAckFrame())
265 .WillOnce(Return(QuicFrame(&ack_frame_))); 267 .WillOnce(Return(QuicFrame(&ack_frame_)));
266 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 268 EXPECT_CALL(delegate_, OnSerializedPacket(_))
267 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 269 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
268 270
269 generator_.SetShouldSendAck(false); 271 generator_.SetShouldSendAck(false);
270 EXPECT_FALSE(generator_.HasQueuedFrames()); 272 EXPECT_FALSE(generator_.HasQueuedFrames());
273 EXPECT_FALSE(generator_.HasRetransmittableFrames());
271 274
272 PacketContents contents; 275 PacketContents contents;
273 contents.num_ack_frames = 1; 276 contents.num_ack_frames = 1;
274 CheckPacketContains(contents, 0); 277 CheckPacketContains(contents, 0);
275 } 278 }
276 279
277 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_MultipleCalls) { 280 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_MultipleCalls) {
278 // Make sure that calling SetShouldSendAck multiple times does not result in a 281 // Make sure that calling SetShouldSendAck multiple times does not result in a
279 // crash. Previously this would result in multiple QuicFrames queued in the 282 // crash. Previously this would result in multiple QuicFrames queued in the
280 // packet generator, with all but the last with internal pointers to freed 283 // packet generator, with all but the last with internal pointers to freed
(...skipping 11 matching lines...) Expand all
292 generator_.SetShouldSendAck(false); 295 generator_.SetShouldSendAck(false);
293 generator_.SetShouldSendAck(false); 296 generator_.SetShouldSendAck(false);
294 generator_.FinishBatchOperations(); 297 generator_.FinishBatchOperations();
295 } 298 }
296 299
297 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { 300 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) {
298 delegate_.SetCanNotWrite(); 301 delegate_.SetCanNotWrite();
299 302
300 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 303 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
301 EXPECT_TRUE(generator_.HasQueuedFrames()); 304 EXPECT_TRUE(generator_.HasQueuedFrames());
305 EXPECT_TRUE(generator_.HasRetransmittableFrames());
302 } 306 }
303 307
304 TEST_F(QuicPacketGeneratorTest, AddControlFrame_OnlyAckWritable) { 308 TEST_F(QuicPacketGeneratorTest, AddControlFrame_OnlyAckWritable) {
305 delegate_.SetCanWriteOnlyNonRetransmittable(); 309 delegate_.SetCanWriteOnlyNonRetransmittable();
306 310
307 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 311 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
308 EXPECT_TRUE(generator_.HasQueuedFrames()); 312 EXPECT_TRUE(generator_.HasQueuedFrames());
313 EXPECT_TRUE(generator_.HasRetransmittableFrames());
309 } 314 }
310 315
311 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) { 316 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) {
312 delegate_.SetCanWriteAnything(); 317 delegate_.SetCanWriteAnything();
313 generator_.StartBatchOperations(); 318 generator_.StartBatchOperations();
314 319
315 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 320 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
316 EXPECT_TRUE(generator_.HasQueuedFrames()); 321 EXPECT_TRUE(generator_.HasQueuedFrames());
322 EXPECT_TRUE(generator_.HasRetransmittableFrames());
317 } 323 }
318 324
319 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) { 325 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) {
320 delegate_.SetCanNotWrite(); 326 delegate_.SetCanNotWrite();
321 generator_.StartBatchOperations(); 327 generator_.StartBatchOperations();
322 328
323 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 329 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
324 EXPECT_TRUE(generator_.HasQueuedFrames()); 330 EXPECT_TRUE(generator_.HasQueuedFrames());
331 EXPECT_TRUE(generator_.HasRetransmittableFrames());
325 generator_.FinishBatchOperations(); 332 generator_.FinishBatchOperations();
326 EXPECT_TRUE(generator_.HasQueuedFrames()); 333 EXPECT_TRUE(generator_.HasQueuedFrames());
334 EXPECT_TRUE(generator_.HasRetransmittableFrames());
327 335
328 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 336 EXPECT_CALL(delegate_, OnSerializedPacket(_))
329 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 337 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
330 generator_.FlushAllQueuedFrames(); 338 generator_.FlushAllQueuedFrames();
331 EXPECT_FALSE(generator_.HasQueuedFrames()); 339 EXPECT_FALSE(generator_.HasQueuedFrames());
340 EXPECT_FALSE(generator_.HasRetransmittableFrames());
332 341
333 PacketContents contents; 342 PacketContents contents;
334 contents.num_rst_stream_frames = 1; 343 contents.num_rst_stream_frames = 1;
335 CheckPacketContains(contents, 0); 344 CheckPacketContains(contents, 0);
336 } 345 }
337 346
338 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { 347 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) {
339 delegate_.SetCanWriteAnything(); 348 delegate_.SetCanWriteAnything();
340 349
341 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 350 EXPECT_CALL(delegate_, OnSerializedPacket(_))
342 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 351 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
343 352
344 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 353 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
345 EXPECT_FALSE(generator_.HasQueuedFrames()); 354 EXPECT_FALSE(generator_.HasQueuedFrames());
355 EXPECT_FALSE(generator_.HasRetransmittableFrames());
346 356
347 PacketContents contents; 357 PacketContents contents;
348 contents.num_rst_stream_frames = 1; 358 contents.num_rst_stream_frames = 1;
349 CheckPacketContains(contents, 0); 359 CheckPacketContains(contents, 0);
350 } 360 }
351 361
352 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 362 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
353 delegate_.SetCanNotWrite(); 363 delegate_.SetCanNotWrite();
354 364
355 QuicConsumedData consumed = generator_.ConsumeData( 365 QuicConsumedData consumed = generator_.ConsumeData(
356 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr); 366 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr);
357 EXPECT_EQ(0u, consumed.bytes_consumed); 367 EXPECT_EQ(0u, consumed.bytes_consumed);
358 EXPECT_FALSE(consumed.fin_consumed); 368 EXPECT_FALSE(consumed.fin_consumed);
359 EXPECT_FALSE(generator_.HasQueuedFrames()); 369 EXPECT_FALSE(generator_.HasQueuedFrames());
370 EXPECT_FALSE(generator_.HasRetransmittableFrames());
360 } 371 }
361 372
362 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { 373 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
363 delegate_.SetCanWriteAnything(); 374 delegate_.SetCanWriteAnything();
364 generator_.StartBatchOperations(); 375 generator_.StartBatchOperations();
365 376
366 QuicConsumedData consumed = generator_.ConsumeData( 377 QuicConsumedData consumed = generator_.ConsumeData(
367 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr); 378 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr);
368 EXPECT_EQ(3u, consumed.bytes_consumed); 379 EXPECT_EQ(3u, consumed.bytes_consumed);
369 EXPECT_TRUE(consumed.fin_consumed); 380 EXPECT_TRUE(consumed.fin_consumed);
370 EXPECT_TRUE(generator_.HasQueuedFrames()); 381 EXPECT_TRUE(generator_.HasQueuedFrames());
382 EXPECT_TRUE(generator_.HasRetransmittableFrames());
371 } 383 }
372 384
373 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 385 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
374 delegate_.SetCanWriteAnything(); 386 delegate_.SetCanWriteAnything();
375 387
376 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 388 EXPECT_CALL(delegate_, OnSerializedPacket(_))
377 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 389 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
378 QuicConsumedData consumed = generator_.ConsumeData( 390 QuicConsumedData consumed = generator_.ConsumeData(
379 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr); 391 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 2, FIN, nullptr);
380 EXPECT_EQ(3u, consumed.bytes_consumed); 392 EXPECT_EQ(3u, consumed.bytes_consumed);
381 EXPECT_TRUE(consumed.fin_consumed); 393 EXPECT_TRUE(consumed.fin_consumed);
382 EXPECT_FALSE(generator_.HasQueuedFrames()); 394 EXPECT_FALSE(generator_.HasQueuedFrames());
395 EXPECT_FALSE(generator_.HasRetransmittableFrames());
383 396
384 PacketContents contents; 397 PacketContents contents;
385 contents.num_stream_frames = 1; 398 contents.num_stream_frames = 1;
386 CheckPacketContains(contents, 0); 399 CheckPacketContains(contents, 0);
387 } 400 }
388 401
389 // Test the behavior of ConsumeData when the data consumed is for the crypto 402 // Test the behavior of ConsumeData when the data consumed is for the crypto
390 // handshake stream. Ensure that the packet is always sent and padded even if 403 // handshake stream. Ensure that the packet is always sent and padded even if
391 // the generator operates in batch mode. 404 // the generator operates in batch mode.
392 TEST_F(QuicPacketGeneratorTest, ConsumeData_Handshake) { 405 TEST_F(QuicPacketGeneratorTest, ConsumeData_Handshake) {
393 delegate_.SetCanWriteAnything(); 406 delegate_.SetCanWriteAnything();
394 generator_.StartBatchOperations(); 407 generator_.StartBatchOperations();
395 408
396 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 409 EXPECT_CALL(delegate_, OnSerializedPacket(_))
397 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 410 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
398 QuicConsumedData consumed = generator_.ConsumeData( 411 QuicConsumedData consumed = generator_.ConsumeData(
399 kCryptoStreamId, MakeIOVectorFromStringPiece("foo"), 0, NO_FIN, nullptr); 412 kCryptoStreamId, MakeIOVectorFromStringPiece("foo"), 0, NO_FIN, nullptr);
400 EXPECT_EQ(3u, consumed.bytes_consumed); 413 EXPECT_EQ(3u, consumed.bytes_consumed);
401 EXPECT_FALSE(generator_.HasQueuedFrames()); 414 EXPECT_FALSE(generator_.HasQueuedFrames());
415 EXPECT_FALSE(generator_.HasRetransmittableFrames());
402 416
403 PacketContents contents; 417 PacketContents contents;
404 contents.num_stream_frames = 1; 418 contents.num_stream_frames = 1;
405 contents.num_padding_frames = 1; 419 contents.num_padding_frames = 1;
406 CheckPacketContains(contents, 0); 420 CheckPacketContains(contents, 0);
407 421
408 ASSERT_EQ(1u, packets_.size()); 422 ASSERT_EQ(1u, packets_.size());
409 ASSERT_EQ(kDefaultMaxPacketSize, generator_.GetCurrentMaxPacketLength()); 423 ASSERT_EQ(kDefaultMaxPacketSize, generator_.GetCurrentMaxPacketLength());
410 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length); 424 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length);
411 } 425 }
(...skipping 10 matching lines...) Expand all
422 delegate_.SetCanWriteAnything(); 436 delegate_.SetCanWriteAnything();
423 generator_.StartBatchOperations(); 437 generator_.StartBatchOperations();
424 438
425 generator_.ConsumeData(kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 439 generator_.ConsumeData(kHeadersStreamId, MakeIOVectorFromStringPiece("foo"),
426 2, FIN, nullptr); 440 2, FIN, nullptr);
427 QuicConsumedData consumed = generator_.ConsumeData( 441 QuicConsumedData consumed = generator_.ConsumeData(
428 3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN, nullptr); 442 3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN, nullptr);
429 EXPECT_EQ(4u, consumed.bytes_consumed); 443 EXPECT_EQ(4u, consumed.bytes_consumed);
430 EXPECT_FALSE(consumed.fin_consumed); 444 EXPECT_FALSE(consumed.fin_consumed);
431 EXPECT_TRUE(generator_.HasQueuedFrames()); 445 EXPECT_TRUE(generator_.HasQueuedFrames());
446 EXPECT_TRUE(generator_.HasRetransmittableFrames());
432 } 447 }
433 448
434 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { 449 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
435 delegate_.SetCanWriteAnything(); 450 delegate_.SetCanWriteAnything();
436 generator_.StartBatchOperations(); 451 generator_.StartBatchOperations();
437 452
438 generator_.ConsumeData(kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 453 generator_.ConsumeData(kHeadersStreamId, MakeIOVectorFromStringPiece("foo"),
439 2, FIN, nullptr); 454 2, FIN, nullptr);
440 QuicConsumedData consumed = generator_.ConsumeData( 455 QuicConsumedData consumed = generator_.ConsumeData(
441 3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN, nullptr); 456 3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN, nullptr);
442 EXPECT_EQ(4u, consumed.bytes_consumed); 457 EXPECT_EQ(4u, consumed.bytes_consumed);
443 EXPECT_FALSE(consumed.fin_consumed); 458 EXPECT_FALSE(consumed.fin_consumed);
444 EXPECT_TRUE(generator_.HasQueuedFrames()); 459 EXPECT_TRUE(generator_.HasQueuedFrames());
460 EXPECT_TRUE(generator_.HasRetransmittableFrames());
445 461
446 // Now both frames will be flushed out. 462 // Now both frames will be flushed out.
447 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 463 EXPECT_CALL(delegate_, OnSerializedPacket(_))
448 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 464 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
449 generator_.FinishBatchOperations(); 465 generator_.FinishBatchOperations();
450 EXPECT_FALSE(generator_.HasQueuedFrames()); 466 EXPECT_FALSE(generator_.HasQueuedFrames());
467 EXPECT_FALSE(generator_.HasRetransmittableFrames());
451 468
452 PacketContents contents; 469 PacketContents contents;
453 contents.num_stream_frames = 2; 470 contents.num_stream_frames = 2;
454 CheckPacketContains(contents, 0); 471 CheckPacketContains(contents, 0);
455 } 472 }
456 473
457 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 474 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
458 // Set the packet size be enough for two stream frames with 0 stream offset, 475 // Set the packet size be enough for two stream frames with 0 stream offset,
459 // but not enough for a stream frame of 0 offset and one with non-zero offset. 476 // but not enough for a stream frame of 0 offset and one with non-zero offset.
460 size_t length = 477 size_t length =
(...skipping 16 matching lines...) Expand all
477 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 494 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
478 } 495 }
479 generator_.StartBatchOperations(); 496 generator_.StartBatchOperations();
480 // Queue enough data to prevent a stream frame with a non-zero offset from 497 // Queue enough data to prevent a stream frame with a non-zero offset from
481 // fitting. 498 // fitting.
482 QuicConsumedData consumed = generator_.ConsumeData( 499 QuicConsumedData consumed = generator_.ConsumeData(
483 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 0, NO_FIN, nullptr); 500 kHeadersStreamId, MakeIOVectorFromStringPiece("foo"), 0, NO_FIN, nullptr);
484 EXPECT_EQ(3u, consumed.bytes_consumed); 501 EXPECT_EQ(3u, consumed.bytes_consumed);
485 EXPECT_FALSE(consumed.fin_consumed); 502 EXPECT_FALSE(consumed.fin_consumed);
486 EXPECT_TRUE(generator_.HasQueuedFrames()); 503 EXPECT_TRUE(generator_.HasQueuedFrames());
504 EXPECT_TRUE(generator_.HasRetransmittableFrames());
487 505
488 // This frame will not fit with the existing frame, causing the queued frame 506 // This frame will not fit with the existing frame, causing the queued frame
489 // to be serialized, and it will be added to a new open packet. 507 // to be serialized, and it will be added to a new open packet.
490 consumed = generator_.ConsumeData( 508 consumed = generator_.ConsumeData(
491 kHeadersStreamId, MakeIOVectorFromStringPiece("bar"), 3, FIN, nullptr); 509 kHeadersStreamId, MakeIOVectorFromStringPiece("bar"), 3, FIN, nullptr);
492 EXPECT_EQ(3u, consumed.bytes_consumed); 510 EXPECT_EQ(3u, consumed.bytes_consumed);
493 EXPECT_TRUE(consumed.fin_consumed); 511 EXPECT_TRUE(consumed.fin_consumed);
494 EXPECT_TRUE(generator_.HasQueuedFrames()); 512 EXPECT_TRUE(generator_.HasQueuedFrames());
513 EXPECT_TRUE(generator_.HasRetransmittableFrames());
495 514
496 creator_->Flush(); 515 creator_->Flush();
497 EXPECT_FALSE(generator_.HasQueuedFrames()); 516 EXPECT_FALSE(generator_.HasQueuedFrames());
517 EXPECT_FALSE(generator_.HasRetransmittableFrames());
498 518
499 PacketContents contents; 519 PacketContents contents;
500 contents.num_stream_frames = 1; 520 contents.num_stream_frames = 1;
501 CheckPacketContains(contents, 0); 521 CheckPacketContains(contents, 0);
502 CheckPacketContains(contents, 1); 522 CheckPacketContains(contents, 1);
503 } 523 }
504 524
505 TEST_F(QuicPacketGeneratorTest, ConsumeDataFastPath) { 525 TEST_F(QuicPacketGeneratorTest, ConsumeDataFastPath) {
506 delegate_.SetCanWriteAnything(); 526 delegate_.SetCanWriteAnything();
507 527
508 // Create a 10000 byte IOVector. 528 // Create a 10000 byte IOVector.
509 QuicIOVector iov(CreateData(10000)); 529 QuicIOVector iov(CreateData(10000));
510 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 530 EXPECT_CALL(delegate_, OnSerializedPacket(_))
511 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 531 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
512 QuicConsumedData consumed = 532 QuicConsumedData consumed =
513 generator_.ConsumeDataFastPath(kHeadersStreamId, iov, 0, true, nullptr); 533 generator_.ConsumeDataFastPath(kHeadersStreamId, iov, 0, true, nullptr);
514 EXPECT_EQ(10000u, consumed.bytes_consumed); 534 EXPECT_EQ(10000u, consumed.bytes_consumed);
515 EXPECT_TRUE(consumed.fin_consumed); 535 EXPECT_TRUE(consumed.fin_consumed);
516 EXPECT_FALSE(generator_.HasQueuedFrames()); 536 EXPECT_FALSE(generator_.HasQueuedFrames());
537 EXPECT_FALSE(generator_.HasRetransmittableFrames());
517 538
518 PacketContents contents; 539 PacketContents contents;
519 contents.num_stream_frames = 1; 540 contents.num_stream_frames = 1;
520 CheckPacketContains(contents, 0); 541 CheckPacketContains(contents, 0);
521 } 542 }
522 543
523 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 544 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
524 delegate_.SetCanNotWrite(); 545 delegate_.SetCanNotWrite();
525 546
526 generator_.SetShouldSendAck(false); 547 generator_.SetShouldSendAck(false);
527 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 548 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
528 EXPECT_TRUE(generator_.HasQueuedFrames()); 549 EXPECT_TRUE(generator_.HasQueuedFrames());
550 EXPECT_TRUE(generator_.HasRetransmittableFrames());
529 551
530 delegate_.SetCanWriteAnything(); 552 delegate_.SetCanWriteAnything();
531 553
532 generator_.StartBatchOperations(); 554 generator_.StartBatchOperations();
533 555
534 // When the first write operation is invoked, the ack frame will be returned. 556 // When the first write operation is invoked, the ack frame will be returned.
535 EXPECT_CALL(delegate_, GetUpdatedAckFrame()) 557 EXPECT_CALL(delegate_, GetUpdatedAckFrame())
536 .WillOnce(Return(QuicFrame(&ack_frame_))); 558 .WillOnce(Return(QuicFrame(&ack_frame_)));
537 559
538 // Send some data and a control frame 560 // Send some data and a control frame
539 generator_.ConsumeData(3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN, 561 generator_.ConsumeData(3, MakeIOVectorFromStringPiece("quux"), 7, NO_FIN,
540 nullptr); 562 nullptr);
541 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 563 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
542 564
543 // All five frames will be flushed out in a single packet. 565 // All five frames will be flushed out in a single packet.
544 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 566 EXPECT_CALL(delegate_, OnSerializedPacket(_))
545 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 567 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
546 generator_.FinishBatchOperations(); 568 generator_.FinishBatchOperations();
547 EXPECT_FALSE(generator_.HasQueuedFrames()); 569 EXPECT_FALSE(generator_.HasQueuedFrames());
570 EXPECT_FALSE(generator_.HasRetransmittableFrames());
548 571
549 PacketContents contents; 572 PacketContents contents;
550 contents.num_ack_frames = 1; 573 contents.num_ack_frames = 1;
551 contents.num_goaway_frames = 1; 574 contents.num_goaway_frames = 1;
552 contents.num_rst_stream_frames = 1; 575 contents.num_rst_stream_frames = 1;
553 contents.num_stream_frames = 1; 576 contents.num_stream_frames = 1;
554 CheckPacketContains(contents, 0); 577 CheckPacketContains(contents, 0);
555 } 578 }
556 579
557 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { 580 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) {
558 delegate_.SetCanNotWrite(); 581 delegate_.SetCanNotWrite();
559 582
560 generator_.SetShouldSendAck(false); 583 generator_.SetShouldSendAck(false);
561 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 584 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
562 EXPECT_TRUE(generator_.HasQueuedFrames()); 585 EXPECT_TRUE(generator_.HasQueuedFrames());
586 EXPECT_TRUE(generator_.HasRetransmittableFrames());
563 587
564 delegate_.SetCanWriteAnything(); 588 delegate_.SetCanWriteAnything();
565 589
566 generator_.StartBatchOperations(); 590 generator_.StartBatchOperations();
567 591
568 // When the first write operation is invoked, the ack frame will be returned. 592 // When the first write operation is invoked, the ack frame will be returned.
569 EXPECT_CALL(delegate_, GetUpdatedAckFrame()) 593 EXPECT_CALL(delegate_, GetUpdatedAckFrame())
570 .WillOnce(Return(QuicFrame(&ack_frame_))); 594 .WillOnce(Return(QuicFrame(&ack_frame_)));
571 595
572 { 596 {
573 InSequence dummy; 597 InSequence dummy;
574 // All five frames will be flushed out in a single packet 598 // All five frames will be flushed out in a single packet
575 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 599 EXPECT_CALL(delegate_, OnSerializedPacket(_))
576 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 600 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
577 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 601 EXPECT_CALL(delegate_, OnSerializedPacket(_))
578 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 602 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
579 } 603 }
580 604
581 // Send enough data to exceed one packet 605 // Send enough data to exceed one packet
582 size_t data_len = kDefaultMaxPacketSize + 100; 606 size_t data_len = kDefaultMaxPacketSize + 100;
583 QuicConsumedData consumed = 607 QuicConsumedData consumed =
584 generator_.ConsumeData(3, CreateData(data_len), 0, FIN, nullptr); 608 generator_.ConsumeData(3, CreateData(data_len), 0, FIN, nullptr);
585 EXPECT_EQ(data_len, consumed.bytes_consumed); 609 EXPECT_EQ(data_len, consumed.bytes_consumed);
586 EXPECT_TRUE(consumed.fin_consumed); 610 EXPECT_TRUE(consumed.fin_consumed);
587 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 611 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
588 612
589 generator_.FinishBatchOperations(); 613 generator_.FinishBatchOperations();
590 EXPECT_FALSE(generator_.HasQueuedFrames()); 614 EXPECT_FALSE(generator_.HasQueuedFrames());
615 EXPECT_FALSE(generator_.HasRetransmittableFrames());
591 616
592 // The first packet should have the queued data and part of the stream data. 617 // The first packet should have the queued data and part of the stream data.
593 PacketContents contents; 618 PacketContents contents;
594 contents.num_ack_frames = 1; 619 contents.num_ack_frames = 1;
595 contents.num_rst_stream_frames = 1; 620 contents.num_rst_stream_frames = 1;
596 contents.num_stream_frames = 1; 621 contents.num_stream_frames = 1;
597 CheckPacketContains(contents, 0); 622 CheckPacketContains(contents, 0);
598 623
599 // The second should have the remainder of the stream data. 624 // The second should have the remainder of the stream data.
600 PacketContents contents2; 625 PacketContents contents2;
(...skipping 26 matching lines...) Expand all
627 652
628 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 653 EXPECT_CALL(delegate_, OnSerializedPacket(_))
629 .Times(3) 654 .Times(3)
630 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 655 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
631 QuicConsumedData consumed = 656 QuicConsumedData consumed =
632 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len), 657 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
633 /*offset=*/2, FIN, nullptr); 658 /*offset=*/2, FIN, nullptr);
634 EXPECT_EQ(data_len, consumed.bytes_consumed); 659 EXPECT_EQ(data_len, consumed.bytes_consumed);
635 EXPECT_TRUE(consumed.fin_consumed); 660 EXPECT_TRUE(consumed.fin_consumed);
636 EXPECT_FALSE(generator_.HasQueuedFrames()); 661 EXPECT_FALSE(generator_.HasQueuedFrames());
662 EXPECT_FALSE(generator_.HasRetransmittableFrames());
637 663
638 // We expect three packets, and first two of them have to be of packet_len 664 // We expect three packets, and first two of them have to be of packet_len
639 // size. We check multiple packets (instead of just one) because we want to 665 // size. We check multiple packets (instead of just one) because we want to
640 // ensure that |max_packet_length_| does not get changed incorrectly by the 666 // ensure that |max_packet_length_| does not get changed incorrectly by the
641 // generator after first packet is serialized. 667 // generator after first packet is serialized.
642 ASSERT_EQ(3u, packets_.size()); 668 ASSERT_EQ(3u, packets_.size());
643 EXPECT_EQ(packet_len, packets_[0].encrypted_length); 669 EXPECT_EQ(packet_len, packets_[0].encrypted_length);
644 EXPECT_EQ(packet_len, packets_[1].encrypted_length); 670 EXPECT_EQ(packet_len, packets_[1].encrypted_length);
645 CheckAllPacketsHaveSingleStreamFrame(); 671 CheckAllPacketsHaveSingleStreamFrame();
646 } 672 }
(...skipping 14 matching lines...) Expand all
661 .Times(3) 687 .Times(3)
662 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 688 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
663 689
664 // Send two packets before packet size change. 690 // Send two packets before packet size change.
665 QuicConsumedData consumed = 691 QuicConsumedData consumed =
666 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len), 692 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
667 /*offset=*/2, NO_FIN, nullptr); 693 /*offset=*/2, NO_FIN, nullptr);
668 EXPECT_EQ(data_len, consumed.bytes_consumed); 694 EXPECT_EQ(data_len, consumed.bytes_consumed);
669 EXPECT_FALSE(consumed.fin_consumed); 695 EXPECT_FALSE(consumed.fin_consumed);
670 EXPECT_FALSE(generator_.HasQueuedFrames()); 696 EXPECT_FALSE(generator_.HasQueuedFrames());
697 EXPECT_FALSE(generator_.HasRetransmittableFrames());
671 698
672 // Make sure we already have two packets. 699 // Make sure we already have two packets.
673 ASSERT_EQ(2u, packets_.size()); 700 ASSERT_EQ(2u, packets_.size());
674 701
675 // Increase packet size. 702 // Increase packet size.
676 generator_.SetMaxPacketLength(packet_len); 703 generator_.SetMaxPacketLength(packet_len);
677 EXPECT_EQ(packet_len, generator_.GetCurrentMaxPacketLength()); 704 EXPECT_EQ(packet_len, generator_.GetCurrentMaxPacketLength());
678 705
679 // Send a packet after packet size change. 706 // Send a packet after packet size change.
680 consumed = generator_.ConsumeData(kHeadersStreamId, CreateData(data_len), 707 consumed = generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
681 2 + data_len, FIN, nullptr); 708 2 + data_len, FIN, nullptr);
682 EXPECT_EQ(data_len, consumed.bytes_consumed); 709 EXPECT_EQ(data_len, consumed.bytes_consumed);
683 EXPECT_TRUE(consumed.fin_consumed); 710 EXPECT_TRUE(consumed.fin_consumed);
684 EXPECT_FALSE(generator_.HasQueuedFrames()); 711 EXPECT_FALSE(generator_.HasQueuedFrames());
712 EXPECT_FALSE(generator_.HasRetransmittableFrames());
685 713
686 // We expect first data chunk to get fragmented, but the second one to fit 714 // We expect first data chunk to get fragmented, but the second one to fit
687 // into a single packet. 715 // into a single packet.
688 ASSERT_EQ(3u, packets_.size()); 716 ASSERT_EQ(3u, packets_.size());
689 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length); 717 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length);
690 EXPECT_LE(kDefaultMaxPacketSize, packets_[2].encrypted_length); 718 EXPECT_LE(kDefaultMaxPacketSize, packets_[2].encrypted_length);
691 CheckAllPacketsHaveSingleStreamFrame(); 719 CheckAllPacketsHaveSingleStreamFrame();
692 } 720 }
693 721
694 // Test whether SetMaxPacketLength() works correctly when we force the change of 722 // Test whether SetMaxPacketLength() works correctly when we force the change of
695 // the packet size in the middle of the batched packet. 723 // the packet size in the middle of the batched packet.
696 TEST_F(QuicPacketGeneratorTest, SetMaxPacketLength_MidpacketFlush) { 724 TEST_F(QuicPacketGeneratorTest, SetMaxPacketLength_MidpacketFlush) {
697 delegate_.SetCanWriteAnything(); 725 delegate_.SetCanWriteAnything();
698 generator_.StartBatchOperations(); 726 generator_.StartBatchOperations();
699 727
700 size_t first_write_len = kDefaultMaxPacketSize / 2; 728 size_t first_write_len = kDefaultMaxPacketSize / 2;
701 size_t packet_len = kDefaultMaxPacketSize + 100; 729 size_t packet_len = kDefaultMaxPacketSize + 100;
702 size_t second_write_len = packet_len + 1; 730 size_t second_write_len = packet_len + 1;
703 ASSERT_LE(packet_len, kMaxPacketSize); 731 ASSERT_LE(packet_len, kMaxPacketSize);
704 732
705 // First send half of the packet worth of data. We are in the batch mode, so 733 // First send half of the packet worth of data. We are in the batch mode, so
706 // should not cause packet serialization. 734 // should not cause packet serialization.
707 QuicConsumedData consumed = 735 QuicConsumedData consumed =
708 generator_.ConsumeData(kHeadersStreamId, CreateData(first_write_len), 736 generator_.ConsumeData(kHeadersStreamId, CreateData(first_write_len),
709 /*offset=*/2, NO_FIN, nullptr); 737 /*offset=*/2, NO_FIN, nullptr);
710 EXPECT_EQ(first_write_len, consumed.bytes_consumed); 738 EXPECT_EQ(first_write_len, consumed.bytes_consumed);
711 EXPECT_FALSE(consumed.fin_consumed); 739 EXPECT_FALSE(consumed.fin_consumed);
712 EXPECT_TRUE(generator_.HasQueuedFrames()); 740 EXPECT_TRUE(generator_.HasQueuedFrames());
741 EXPECT_TRUE(generator_.HasRetransmittableFrames());
713 742
714 // Make sure we have no packets so far. 743 // Make sure we have no packets so far.
715 ASSERT_EQ(0u, packets_.size()); 744 ASSERT_EQ(0u, packets_.size());
716 745
717 // Expect a packet to be flushed. 746 // Expect a packet to be flushed.
718 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 747 EXPECT_CALL(delegate_, OnSerializedPacket(_))
719 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 748 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
720 749
721 // Increase packet size after flushing all frames. 750 // Increase packet size after flushing all frames.
722 // Ensure it's immediately enacted. 751 // Ensure it's immediately enacted.
723 generator_.FlushAllQueuedFrames(); 752 generator_.FlushAllQueuedFrames();
724 generator_.SetMaxPacketLength(packet_len); 753 generator_.SetMaxPacketLength(packet_len);
725 EXPECT_EQ(packet_len, generator_.GetCurrentMaxPacketLength()); 754 EXPECT_EQ(packet_len, generator_.GetCurrentMaxPacketLength());
726 EXPECT_FALSE(generator_.HasQueuedFrames()); 755 EXPECT_FALSE(generator_.HasQueuedFrames());
756 EXPECT_FALSE(generator_.HasRetransmittableFrames());
727 757
728 // We expect to see exactly one packet serialized after that, because we send 758 // We expect to see exactly one packet serialized after that, because we send
729 // a value somewhat exceeding new max packet size, and the tail data does not 759 // a value somewhat exceeding new max packet size, and the tail data does not
730 // get serialized because we are still in the batch mode. 760 // get serialized because we are still in the batch mode.
731 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 761 EXPECT_CALL(delegate_, OnSerializedPacket(_))
732 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 762 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
733 763
734 // Send a more than a packet worth of data to the same stream. This should 764 // Send a more than a packet worth of data to the same stream. This should
735 // trigger serialization of one packet, and queue another one. 765 // trigger serialization of one packet, and queue another one.
736 consumed = 766 consumed =
737 generator_.ConsumeData(kHeadersStreamId, CreateData(second_write_len), 767 generator_.ConsumeData(kHeadersStreamId, CreateData(second_write_len),
738 /*offset=*/2 + first_write_len, FIN, nullptr); 768 /*offset=*/2 + first_write_len, FIN, nullptr);
739 EXPECT_EQ(second_write_len, consumed.bytes_consumed); 769 EXPECT_EQ(second_write_len, consumed.bytes_consumed);
740 EXPECT_TRUE(consumed.fin_consumed); 770 EXPECT_TRUE(consumed.fin_consumed);
741 EXPECT_TRUE(generator_.HasQueuedFrames()); 771 EXPECT_TRUE(generator_.HasQueuedFrames());
772 EXPECT_TRUE(generator_.HasRetransmittableFrames());
742 773
743 // We expect the first packet to be underfilled, and the second packet be up 774 // We expect the first packet to be underfilled, and the second packet be up
744 // to the new max packet size. 775 // to the new max packet size.
745 ASSERT_EQ(2u, packets_.size()); 776 ASSERT_EQ(2u, packets_.size());
746 EXPECT_GT(kDefaultMaxPacketSize, packets_[0].encrypted_length); 777 EXPECT_GT(kDefaultMaxPacketSize, packets_[0].encrypted_length);
747 EXPECT_EQ(packet_len, packets_[1].encrypted_length); 778 EXPECT_EQ(packet_len, packets_[1].encrypted_length);
748 779
749 CheckAllPacketsHaveSingleStreamFrame(); 780 CheckAllPacketsHaveSingleStreamFrame();
750 } 781 }
751 782
752 // Test sending an MTU probe, without any surrounding data. 783 // Test sending an MTU probe, without any surrounding data.
753 TEST_F(QuicPacketGeneratorTest, GenerateMtuDiscoveryPacket_Simple) { 784 TEST_F(QuicPacketGeneratorTest, GenerateMtuDiscoveryPacket_Simple) {
754 delegate_.SetCanWriteAnything(); 785 delegate_.SetCanWriteAnything();
755 786
756 const size_t target_mtu = kDefaultMaxPacketSize + 100; 787 const size_t target_mtu = kDefaultMaxPacketSize + 100;
757 static_assert(target_mtu < kMaxPacketSize, 788 static_assert(target_mtu < kMaxPacketSize,
758 "The MTU probe used by the test exceeds maximum packet size"); 789 "The MTU probe used by the test exceeds maximum packet size");
759 790
760 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 791 EXPECT_CALL(delegate_, OnSerializedPacket(_))
761 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 792 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
762 793
763 generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr); 794 generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr);
764 795
765 EXPECT_FALSE(generator_.HasQueuedFrames()); 796 EXPECT_FALSE(generator_.HasQueuedFrames());
797 EXPECT_FALSE(generator_.HasRetransmittableFrames());
766 ASSERT_EQ(1u, packets_.size()); 798 ASSERT_EQ(1u, packets_.size());
767 EXPECT_EQ(target_mtu, packets_[0].encrypted_length); 799 EXPECT_EQ(target_mtu, packets_[0].encrypted_length);
768 800
769 PacketContents contents; 801 PacketContents contents;
770 contents.num_mtu_discovery_frames = 1; 802 contents.num_mtu_discovery_frames = 1;
771 contents.num_padding_frames = 1; 803 contents.num_padding_frames = 1;
772 CheckPacketContains(contents, 0); 804 CheckPacketContains(contents, 0);
773 } 805 }
774 806
775 // Test sending an MTU probe. Surround it with data, to ensure that it resets 807 // Test sending an MTU probe. Surround it with data, to ensure that it resets
(...skipping 14 matching lines...) Expand all
790 .Times(5) 822 .Times(5)
791 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 823 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
792 824
793 // Send data before the MTU probe. 825 // Send data before the MTU probe.
794 QuicConsumedData consumed = 826 QuicConsumedData consumed =
795 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len), 827 generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
796 /*offset=*/2, NO_FIN, nullptr); 828 /*offset=*/2, NO_FIN, nullptr);
797 EXPECT_EQ(data_len, consumed.bytes_consumed); 829 EXPECT_EQ(data_len, consumed.bytes_consumed);
798 EXPECT_FALSE(consumed.fin_consumed); 830 EXPECT_FALSE(consumed.fin_consumed);
799 EXPECT_FALSE(generator_.HasQueuedFrames()); 831 EXPECT_FALSE(generator_.HasQueuedFrames());
832 EXPECT_FALSE(generator_.HasRetransmittableFrames());
800 833
801 // Send the MTU probe. 834 // Send the MTU probe.
802 generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr); 835 generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr);
803 EXPECT_FALSE(generator_.HasQueuedFrames()); 836 EXPECT_FALSE(generator_.HasQueuedFrames());
837 EXPECT_FALSE(generator_.HasRetransmittableFrames());
804 838
805 // Send data after the MTU probe. 839 // Send data after the MTU probe.
806 consumed = generator_.ConsumeData(kHeadersStreamId, CreateData(data_len), 840 consumed = generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
807 /*offset=*/2 + data_len, FIN, nullptr); 841 /*offset=*/2 + data_len, FIN, nullptr);
808 EXPECT_EQ(data_len, consumed.bytes_consumed); 842 EXPECT_EQ(data_len, consumed.bytes_consumed);
809 EXPECT_TRUE(consumed.fin_consumed); 843 EXPECT_TRUE(consumed.fin_consumed);
810 EXPECT_FALSE(generator_.HasQueuedFrames()); 844 EXPECT_FALSE(generator_.HasQueuedFrames());
845 EXPECT_FALSE(generator_.HasRetransmittableFrames());
811 846
812 ASSERT_EQ(5u, packets_.size()); 847 ASSERT_EQ(5u, packets_.size());
813 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length); 848 EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length);
814 EXPECT_EQ(target_mtu, packets_[2].encrypted_length); 849 EXPECT_EQ(target_mtu, packets_[2].encrypted_length);
815 EXPECT_EQ(kDefaultMaxPacketSize, packets_[3].encrypted_length); 850 EXPECT_EQ(kDefaultMaxPacketSize, packets_[3].encrypted_length);
816 851
817 PacketContents probe_contents; 852 PacketContents probe_contents;
818 probe_contents.num_mtu_discovery_frames = 1; 853 probe_contents.num_mtu_discovery_frames = 1;
819 probe_contents.num_padding_frames = 1; 854 probe_contents.num_padding_frames = 1;
820 855
(...skipping 15 matching lines...) Expand all
836 generator_.SetShouldSendAck(true); 871 generator_.SetShouldSendAck(true);
837 delegate_.SetCanWriteAnything(); 872 delegate_.SetCanWriteAnything();
838 generator_.StartBatchOperations(); 873 generator_.StartBatchOperations();
839 874
840 // Set up frames to write into the creator when control frames are written. 875 // Set up frames to write into the creator when control frames are written.
841 EXPECT_CALL(delegate_, GetUpdatedAckFrame()) 876 EXPECT_CALL(delegate_, GetUpdatedAckFrame())
842 .WillOnce(Return(QuicFrame(&ack_frame_))); 877 .WillOnce(Return(QuicFrame(&ack_frame_)));
843 EXPECT_CALL(delegate_, PopulateStopWaitingFrame(_)); 878 EXPECT_CALL(delegate_, PopulateStopWaitingFrame(_));
844 // Generator should have queued control frames, and creator should be empty. 879 // Generator should have queued control frames, and creator should be empty.
845 EXPECT_TRUE(generator_.HasQueuedFrames()); 880 EXPECT_TRUE(generator_.HasQueuedFrames());
881 EXPECT_FALSE(generator_.HasRetransmittableFrames());
846 EXPECT_FALSE(creator_->HasPendingFrames()); 882 EXPECT_FALSE(creator_->HasPendingFrames());
847 883
848 // This will not serialize any packets, because of the invalid frame. 884 // This will not serialize any packets, because of the invalid frame.
849 EXPECT_CALL(delegate_, 885 EXPECT_CALL(delegate_,
850 OnUnrecoverableError(QUIC_FAILED_TO_SERIALIZE_PACKET, _, 886 OnUnrecoverableError(QUIC_FAILED_TO_SERIALIZE_PACKET, _,
851 ConnectionCloseSource::FROM_SELF)); 887 ConnectionCloseSource::FROM_SELF));
852 EXPECT_QUIC_BUG(generator_.FinishBatchOperations(), 888 EXPECT_QUIC_BUG(generator_.FinishBatchOperations(),
853 "packet_number_length 1 is too small " 889 "packet_number_length 1 is too small "
854 "for least_unacked_delta: 1001"); 890 "for least_unacked_delta: 1001");
855 } 891 }
856 892
857 // Regression test for b/31486443. 893 // Regression test for b/31486443.
858 TEST_F(QuicPacketGeneratorTest, ConnectionCloseFrameLargerThanPacketSize) { 894 TEST_F(QuicPacketGeneratorTest, ConnectionCloseFrameLargerThanPacketSize) {
859 delegate_.SetCanWriteAnything(); 895 delegate_.SetCanWriteAnything();
860 QuicConnectionCloseFrame* frame = new QuicConnectionCloseFrame(); 896 QuicConnectionCloseFrame* frame = new QuicConnectionCloseFrame();
861 frame->error_code = QUIC_PACKET_WRITE_ERROR; 897 frame->error_code = QUIC_PACKET_WRITE_ERROR;
862 char buf[2000] = {}; 898 char buf[2000] = {};
863 QuicStringPiece error_details(buf, 2000); 899 QuicStringPiece error_details(buf, 2000);
864 frame->error_details = error_details.as_string(); 900 frame->error_details = error_details.as_string();
865 EXPECT_CALL(delegate_, 901 EXPECT_CALL(delegate_,
866 OnUnrecoverableError(QUIC_FAILED_TO_SERIALIZE_PACKET, 902 OnUnrecoverableError(QUIC_FAILED_TO_SERIALIZE_PACKET,
867 "Single frame cannot fit into a packet", _)); 903 "Single frame cannot fit into a packet", _));
868 EXPECT_QUIC_BUG(generator_.AddControlFrame(QuicFrame(frame)), ""); 904 EXPECT_QUIC_BUG(generator_.AddControlFrame(QuicFrame(frame)), "");
869 EXPECT_TRUE(generator_.HasQueuedFrames()); 905 EXPECT_TRUE(generator_.HasQueuedFrames());
906 EXPECT_TRUE(generator_.HasRetransmittableFrames());
870 } 907 }
871 908
872 TEST_F(QuicPacketGeneratorTest, RandomPaddingAfterFinSingleStreamSinglePacket) { 909 TEST_F(QuicPacketGeneratorTest, RandomPaddingAfterFinSingleStreamSinglePacket) {
873 const QuicByteCount kStreamFramePayloadSize = 100u; 910 const QuicByteCount kStreamFramePayloadSize = 100u;
874 char buf[kStreamFramePayloadSize] = {}; 911 char buf[kStreamFramePayloadSize] = {};
875 const QuicStreamId kDataStreamId = 5; 912 const QuicStreamId kDataStreamId = 5;
876 // Set the packet size be enough for one stream frame with 0 stream offset and 913 // Set the packet size be enough for one stream frame with 0 stream offset and
877 // max size of random padding. 914 // max size of random padding.
878 size_t length = NullEncrypter(Perspective::IS_CLIENT).GetCiphertextSize(0) + 915 size_t length = NullEncrypter(Perspective::IS_CLIENT).GetCiphertextSize(0) +
879 GetPacketHeaderSize( 916 GetPacketHeaderSize(
880 framer_.version(), creator_->connection_id_length(), 917 framer_.version(), creator_->connection_id_length(),
881 kIncludeVersion, !kIncludeDiversificationNonce, 918 kIncludeVersion, !kIncludeDiversificationNonce,
882 QuicPacketCreatorPeer::GetPacketNumberLength(creator_)) + 919 QuicPacketCreatorPeer::GetPacketNumberLength(creator_)) +
883 QuicFramer::GetMinStreamFrameSize( 920 QuicFramer::GetMinStreamFrameSize(
884 kDataStreamId, 0, /*last_frame_in_packet=*/false) + 921 kDataStreamId, 0, /*last_frame_in_packet=*/false) +
885 kStreamFramePayloadSize + kMaxNumRandomPaddingBytes; 922 kStreamFramePayloadSize + kMaxNumRandomPaddingBytes;
886 generator_.SetMaxPacketLength(length); 923 generator_.SetMaxPacketLength(length);
887 delegate_.SetCanWriteAnything(); 924 delegate_.SetCanWriteAnything();
888 generator_.StartBatchOperations(); 925 generator_.StartBatchOperations();
889 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 926 EXPECT_CALL(delegate_, OnSerializedPacket(_))
890 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 927 .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
891 QuicConsumedData consumed = 928 QuicConsumedData consumed =
892 generator_.ConsumeData(kDataStreamId, 929 generator_.ConsumeData(kDataStreamId,
893 MakeIOVectorFromStringPiece( 930 MakeIOVectorFromStringPiece(
894 QuicStringPiece(buf, kStreamFramePayloadSize)), 931 QuicStringPiece(buf, kStreamFramePayloadSize)),
895 0, FIN_AND_PADDING, nullptr); 932 0, FIN_AND_PADDING, nullptr);
896 generator_.FinishBatchOperations(); 933 generator_.FinishBatchOperations();
897 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed); 934 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
898 EXPECT_FALSE(generator_.HasQueuedFrames()); 935 EXPECT_FALSE(generator_.HasQueuedFrames());
936 EXPECT_FALSE(generator_.HasRetransmittableFrames());
899 937
900 EXPECT_EQ(1u, packets_.size()); 938 EXPECT_EQ(1u, packets_.size());
901 PacketContents contents; 939 PacketContents contents;
902 // The packet has both stream and padding frames. 940 // The packet has both stream and padding frames.
903 contents.num_padding_frames = 1; 941 contents.num_padding_frames = 1;
904 contents.num_stream_frames = 1; 942 contents.num_stream_frames = 1;
905 CheckPacketContains(contents, 0); 943 CheckPacketContains(contents, 0);
906 } 944 }
907 945
908 TEST_F(QuicPacketGeneratorTest, 946 TEST_F(QuicPacketGeneratorTest,
(...skipping 17 matching lines...) Expand all
926 EXPECT_CALL(delegate_, OnSerializedPacket(_)) 964 EXPECT_CALL(delegate_, OnSerializedPacket(_))
927 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket)); 965 .WillRepeatedly(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
928 QuicConsumedData consumed = 966 QuicConsumedData consumed =
929 generator_.ConsumeData(kDataStreamId, 967 generator_.ConsumeData(kDataStreamId,
930 MakeIOVectorFromStringPiece( 968 MakeIOVectorFromStringPiece(
931 QuicStringPiece(buf, kStreamFramePayloadSize)), 969 QuicStringPiece(buf, kStreamFramePayloadSize)),
932 0, FIN_AND_PADDING, nullptr); 970 0, FIN_AND_PADDING, nullptr);
933 generator_.FinishBatchOperations(); 971 generator_.FinishBatchOperations();
934 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed); 972 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
935 EXPECT_FALSE(generator_.HasQueuedFrames()); 973 EXPECT_FALSE(generator_.HasQueuedFrames());
974 EXPECT_FALSE(generator_.HasRetransmittableFrames());
936 975
937 EXPECT_LE(1u, packets_.size()); 976 EXPECT_LE(1u, packets_.size());
938 PacketContents contents; 977 PacketContents contents;
939 // The first packet has both stream and padding frames. 978 // The first packet has both stream and padding frames.
940 contents.num_stream_frames = 1; 979 contents.num_stream_frames = 1;
941 contents.num_padding_frames = 1; 980 contents.num_padding_frames = 1;
942 CheckPacketContains(contents, 0); 981 CheckPacketContains(contents, 0);
943 982
944 for (size_t i = 1; i < packets_.size(); ++i) { 983 for (size_t i = 1; i < packets_.size(); ++i) {
945 // Following packets only have paddings. 984 // Following packets only have paddings.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 QuicStringPiece(buf, kStreamFramePayloadSize)), 1018 QuicStringPiece(buf, kStreamFramePayloadSize)),
980 0, FIN_AND_PADDING, nullptr); 1019 0, FIN_AND_PADDING, nullptr);
981 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed); 1020 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
982 consumed = generator_.ConsumeData(kDataStreamId2, 1021 consumed = generator_.ConsumeData(kDataStreamId2,
983 MakeIOVectorFromStringPiece(QuicStringPiece( 1022 MakeIOVectorFromStringPiece(QuicStringPiece(
984 buf, kStreamFramePayloadSize)), 1023 buf, kStreamFramePayloadSize)),
985 0, FIN_AND_PADDING, nullptr); 1024 0, FIN_AND_PADDING, nullptr);
986 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed); 1025 EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
987 generator_.FinishBatchOperations(); 1026 generator_.FinishBatchOperations();
988 EXPECT_FALSE(generator_.HasQueuedFrames()); 1027 EXPECT_FALSE(generator_.HasQueuedFrames());
1028 EXPECT_FALSE(generator_.HasRetransmittableFrames());
989 1029
990 EXPECT_LE(2u, packets_.size()); 1030 EXPECT_LE(2u, packets_.size());
991 PacketContents contents; 1031 PacketContents contents;
992 // The first packet has two stream frames. 1032 // The first packet has two stream frames.
993 contents.num_stream_frames = 2; 1033 contents.num_stream_frames = 2;
994 CheckPacketContains(contents, 0); 1034 CheckPacketContains(contents, 0);
995 1035
996 // The second packet has one stream frame and padding frames. 1036 // The second packet has one stream frame and padding frames.
997 contents.num_stream_frames = 1; 1037 contents.num_stream_frames = 1;
998 contents.num_padding_frames = 1; 1038 contents.num_padding_frames = 1;
999 CheckPacketContains(contents, 1); 1039 CheckPacketContains(contents, 1);
1000 1040
1001 for (size_t i = 2; i < packets_.size(); ++i) { 1041 for (size_t i = 2; i < packets_.size(); ++i) {
1002 // Following packets only have paddings. 1042 // Following packets only have paddings.
1003 contents.num_stream_frames = 0; 1043 contents.num_stream_frames = 0;
1004 contents.num_padding_frames = 1; 1044 contents.num_padding_frames = 1;
1005 CheckPacketContains(contents, i); 1045 CheckPacketContains(contents, i);
1006 } 1046 }
1007 } 1047 }
1008 1048
1009 } // namespace test 1049 } // namespace test
1010 } // namespace net 1050 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_packet_generator.cc ('k') | net/quic/core/quic_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698