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

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

Issue 335533002: API changes to Write path Session on down for FEC protection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/quic_protocol.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/quic_packet_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "net/quic/crypto/crypto_protocol.h" 9 #include "net/quic/crypto/crypto_protocol.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
11 #include "net/quic/crypto/quic_decrypter.h" 11 #include "net/quic/crypto/quic_decrypter.h"
12 #include "net/quic/crypto/quic_encrypter.h" 12 #include "net/quic/crypto/quic_encrypter.h"
13 #include "net/quic/quic_utils.h" 13 #include "net/quic/quic_utils.h"
14 #include "net/quic/test_tools/quic_packet_creator_peer.h" 14 #include "net/quic/test_tools/quic_packet_creator_peer.h"
15 #include "net/quic/test_tools/quic_packet_generator_peer.h"
16 #include "net/quic/test_tools/quic_test_utils.h" 15 #include "net/quic/test_tools/quic_test_utils.h"
17 #include "net/quic/test_tools/simple_quic_framer.h" 16 #include "net/quic/test_tools/simple_quic_framer.h"
18 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
20 19
21 using base::StringPiece; 20 using base::StringPiece;
22 using std::string; 21 using std::string;
23 using testing::InSequence; 22 using testing::InSequence;
24 using testing::Return; 23 using testing::Return;
25 using testing::SaveArg; 24 using testing::SaveArg;
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 EXPECT_FALSE(generator_.HasQueuedFrames()); 368 EXPECT_FALSE(generator_.HasQueuedFrames());
370 369
371 PacketContents contents; 370 PacketContents contents;
372 contents.num_rst_stream_frames = 1; 371 contents.num_rst_stream_frames = 1;
373 CheckPacketContains(contents, packet_); 372 CheckPacketContains(contents, packet_);
374 } 373 }
375 374
376 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 375 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
377 delegate_.SetCanNotWrite(); 376 delegate_.SetCanNotWrite();
378 377
379 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 378 QuicConsumedData consumed = generator_.ConsumeData(
380 true, NULL); 379 1, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL);
381 EXPECT_EQ(0u, consumed.bytes_consumed); 380 EXPECT_EQ(0u, consumed.bytes_consumed);
382 EXPECT_FALSE(consumed.fin_consumed); 381 EXPECT_FALSE(consumed.fin_consumed);
383 EXPECT_FALSE(generator_.HasQueuedFrames()); 382 EXPECT_FALSE(generator_.HasQueuedFrames());
384 } 383 }
385 384
386 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { 385 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
387 delegate_.SetCanWriteAnything(); 386 delegate_.SetCanWriteAnything();
388 generator_.StartBatchOperations(); 387 generator_.StartBatchOperations();
389 388
390 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 389 QuicConsumedData consumed = generator_.ConsumeData(
391 true, NULL); 390 1, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL);
392 EXPECT_EQ(3u, consumed.bytes_consumed); 391 EXPECT_EQ(3u, consumed.bytes_consumed);
393 EXPECT_TRUE(consumed.fin_consumed); 392 EXPECT_TRUE(consumed.fin_consumed);
394 EXPECT_TRUE(generator_.HasQueuedFrames()); 393 EXPECT_TRUE(generator_.HasQueuedFrames());
395 } 394 }
396 395
397 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 396 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
398 delegate_.SetCanWriteAnything(); 397 delegate_.SetCanWriteAnything();
399 398
400 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 399 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
401 DoAll(SaveArg<0>(&packet_), Return(true))); 400 DoAll(SaveArg<0>(&packet_), Return(true)));
402 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, 401 QuicConsumedData consumed = generator_.ConsumeData(
403 true, NULL); 402 1, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL);
404 EXPECT_EQ(3u, consumed.bytes_consumed); 403 EXPECT_EQ(3u, consumed.bytes_consumed);
405 EXPECT_TRUE(consumed.fin_consumed); 404 EXPECT_TRUE(consumed.fin_consumed);
406 EXPECT_FALSE(generator_.HasQueuedFrames()); 405 EXPECT_FALSE(generator_.HasQueuedFrames());
407 406
408 PacketContents contents; 407 PacketContents contents;
409 contents.num_stream_frames = 1; 408 contents.num_stream_frames = 1;
410 CheckPacketContains(contents, packet_); 409 CheckPacketContains(contents, packet_);
411 } 410 }
412 411
413 TEST_F(QuicPacketGeneratorTest, 412 TEST_F(QuicPacketGeneratorTest,
414 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { 413 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) {
415 delegate_.SetCanWriteAnything(); 414 delegate_.SetCanWriteAnything();
416 generator_.StartBatchOperations(); 415 generator_.StartBatchOperations();
417 416
418 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); 417 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT,
419 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, 418 NULL);
420 false, NULL); 419 QuicConsumedData consumed = generator_.ConsumeData(
420 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL);
421 EXPECT_EQ(4u, consumed.bytes_consumed); 421 EXPECT_EQ(4u, consumed.bytes_consumed);
422 EXPECT_FALSE(consumed.fin_consumed); 422 EXPECT_FALSE(consumed.fin_consumed);
423 EXPECT_TRUE(generator_.HasQueuedFrames()); 423 EXPECT_TRUE(generator_.HasQueuedFrames());
424 } 424 }
425 425
426 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { 426 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
427 delegate_.SetCanWriteAnything(); 427 delegate_.SetCanWriteAnything();
428 generator_.StartBatchOperations(); 428 generator_.StartBatchOperations();
429 429
430 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); 430 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT,
431 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, 431 NULL);
432 false, NULL); 432 QuicConsumedData consumed = generator_.ConsumeData(
433 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL);
433 EXPECT_EQ(4u, consumed.bytes_consumed); 434 EXPECT_EQ(4u, consumed.bytes_consumed);
434 EXPECT_FALSE(consumed.fin_consumed); 435 EXPECT_FALSE(consumed.fin_consumed);
435 EXPECT_TRUE(generator_.HasQueuedFrames()); 436 EXPECT_TRUE(generator_.HasQueuedFrames());
436 437
437 // Now both frames will be flushed out. 438 // Now both frames will be flushed out.
438 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 439 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
439 DoAll(SaveArg<0>(&packet_), Return(true))); 440 DoAll(SaveArg<0>(&packet_), Return(true)));
440 generator_.FinishBatchOperations(); 441 generator_.FinishBatchOperations();
441 EXPECT_FALSE(generator_.HasQueuedFrames()); 442 EXPECT_FALSE(generator_.HasQueuedFrames());
442 443
443 PacketContents contents; 444 PacketContents contents;
444 contents.num_stream_frames = 2; 445 contents.num_stream_frames = 2;
445 CheckPacketContains(contents, packet_); 446 CheckPacketContains(contents, packet_);
446 } 447 }
447 448
448 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { 449 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) {
449 delegate_.SetCanWriteAnything(); 450 delegate_.SetCanWriteAnything();
450 451
451 // Send FEC every two packets. 452 // Send FEC every two packets.
452 creator_.set_max_packets_per_fec_group(2); 453 creator_.set_max_packets_per_fec_group(2);
453 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
454 454
455 { 455 {
456 InSequence dummy; 456 InSequence dummy;
457 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 457 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
458 DoAll(SaveArg<0>(&packet_), Return(true))); 458 DoAll(SaveArg<0>(&packet_), Return(true)));
459 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 459 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
460 DoAll(SaveArg<0>(&packet2_), Return(true))); 460 DoAll(SaveArg<0>(&packet2_), Return(true)));
461 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 461 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
462 DoAll(SaveArg<0>(&packet3_), Return(true))); 462 DoAll(SaveArg<0>(&packet3_), Return(true)));
463 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 463 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
464 DoAll(SaveArg<0>(&packet4_), Return(true))); 464 DoAll(SaveArg<0>(&packet4_), Return(true)));
465 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 465 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
466 DoAll(SaveArg<0>(&packet5_), Return(true))); 466 DoAll(SaveArg<0>(&packet5_), Return(true)));
467 } 467 }
468 468
469 // Send enough data to create 3 packets: two full and one partial. 469 // Send enough data to create 3 packets: two full and one partial. Send
470 // with MUST_FEC_PROTECT flag.
470 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 471 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
471 QuicConsumedData consumed = 472 QuicConsumedData consumed =
472 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 473 generator_.ConsumeData(3, CreateData(data_len), 0, true,
474 MUST_FEC_PROTECT, NULL);
473 EXPECT_EQ(data_len, consumed.bytes_consumed); 475 EXPECT_EQ(data_len, consumed.bytes_consumed);
474 EXPECT_TRUE(consumed.fin_consumed); 476 EXPECT_TRUE(consumed.fin_consumed);
475 EXPECT_FALSE(generator_.HasQueuedFrames()); 477 EXPECT_FALSE(generator_.HasQueuedFrames());
476 478
477 CheckPacketHasSingleStreamFrame(packet_); 479 CheckPacketHasSingleStreamFrame(packet_);
478 CheckPacketHasSingleStreamFrame(packet2_); 480 CheckPacketHasSingleStreamFrame(packet2_);
479 CheckPacketIsFec(packet3_, 1); 481 CheckPacketIsFec(packet3_, 1);
480 482
481 CheckPacketHasSingleStreamFrame(packet4_); 483 CheckPacketHasSingleStreamFrame(packet4_);
482 CheckPacketIsFec(packet5_, 4); 484 CheckPacketIsFec(packet5_, 4);
483 } 485 }
484 486
485 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { 487 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) {
486 delegate_.SetCanWriteAnything(); 488 delegate_.SetCanWriteAnything();
487 489
488 // Send FEC every six packets. 490 // Enable FEC.
489 creator_.set_max_packets_per_fec_group(6); 491 creator_.set_max_packets_per_fec_group(6);
490 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
491 { 492 {
492 InSequence dummy; 493 InSequence dummy;
493 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 494 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
494 DoAll(SaveArg<0>(&packet_), Return(true))); 495 DoAll(SaveArg<0>(&packet_), Return(true)));
495 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 496 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
496 DoAll(SaveArg<0>(&packet2_), Return(true))); 497 DoAll(SaveArg<0>(&packet2_), Return(true)));
497 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 498 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
498 DoAll(SaveArg<0>(&packet3_), Return(true))); 499 DoAll(SaveArg<0>(&packet3_), Return(true)));
499 } 500 }
500 501
501 // Send enough data to create 2 packets: one full and one partial. 502 // Send enough data to create 2 packets: one full and one partial. Send
503 // with MUST_FEC_PROTECT flag.
502 size_t data_len = 1 * kDefaultMaxPacketSize + 100; 504 size_t data_len = 1 * kDefaultMaxPacketSize + 100;
503 QuicConsumedData consumed = 505 QuicConsumedData consumed =
504 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 506 generator_.ConsumeData(3, CreateData(data_len), 0, true,
507 MUST_FEC_PROTECT, NULL);
505 EXPECT_EQ(data_len, consumed.bytes_consumed); 508 EXPECT_EQ(data_len, consumed.bytes_consumed);
506 EXPECT_TRUE(consumed.fin_consumed); 509 EXPECT_TRUE(consumed.fin_consumed);
507 EXPECT_FALSE(generator_.HasQueuedFrames()); 510 EXPECT_FALSE(generator_.HasQueuedFrames());
508 511
509 CheckPacketHasSingleStreamFrame(packet_); 512 CheckPacketHasSingleStreamFrame(packet_);
510 CheckPacketHasSingleStreamFrame(packet2_); 513 CheckPacketHasSingleStreamFrame(packet2_);
511 CheckPacketIsFec(packet3_, 1); 514 CheckPacketIsFec(packet3_, 1);
512 } 515 }
513 516
514 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 517 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
(...skipping 16 matching lines...) Expand all
531 { 534 {
532 InSequence dummy; 535 InSequence dummy;
533 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 536 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
534 DoAll(SaveArg<0>(&packet_), Return(true))); 537 DoAll(SaveArg<0>(&packet_), Return(true)));
535 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 538 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
536 DoAll(SaveArg<0>(&packet2_), Return(true))); 539 DoAll(SaveArg<0>(&packet2_), Return(true)));
537 } 540 }
538 generator_.StartBatchOperations(); 541 generator_.StartBatchOperations();
539 // Queue enough data to prevent a stream frame with a non-zero offset from 542 // Queue enough data to prevent a stream frame with a non-zero offset from
540 // fitting. 543 // fitting.
541 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 0, 544 QuicConsumedData consumed = generator_.ConsumeData(
542 false, NULL); 545 1, MakeIOVector("foo"), 0, false, MAY_FEC_PROTECT, NULL);
543 EXPECT_EQ(3u, consumed.bytes_consumed); 546 EXPECT_EQ(3u, consumed.bytes_consumed);
544 EXPECT_FALSE(consumed.fin_consumed); 547 EXPECT_FALSE(consumed.fin_consumed);
545 EXPECT_TRUE(generator_.HasQueuedFrames()); 548 EXPECT_TRUE(generator_.HasQueuedFrames());
546 549
547 // This frame will not fit with the existing frame, causing the queued frame 550 // This frame will not fit with the existing frame, causing the queued frame
548 // to be serialized, and it will not fit with another frame like it, so it is 551 // to be serialized, and it will not fit with another frame like it, so it is
549 // serialized by itself. 552 // serialized by itself.
550 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true, NULL); 553 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true,
554 MAY_FEC_PROTECT, NULL);
551 EXPECT_EQ(3u, consumed.bytes_consumed); 555 EXPECT_EQ(3u, consumed.bytes_consumed);
552 EXPECT_TRUE(consumed.fin_consumed); 556 EXPECT_TRUE(consumed.fin_consumed);
553 EXPECT_FALSE(generator_.HasQueuedFrames()); 557 EXPECT_FALSE(generator_.HasQueuedFrames());
554 558
555 PacketContents contents; 559 PacketContents contents;
556 contents.num_stream_frames = 1; 560 contents.num_stream_frames = 1;
557 CheckPacketContains(contents, packet_); 561 CheckPacketContains(contents, packet_);
558 CheckPacketContains(contents, packet2_); 562 CheckPacketContains(contents, packet2_);
559 } 563 }
560 564
561 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) { 565 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
562 delegate_.SetCanWriteAnything(); 566 delegate_.SetCanWriteAnything();
563 // Enable FEC. 567 // Enable FEC.
564 creator_.set_max_packets_per_fec_group(2); 568 creator_.set_max_packets_per_fec_group(2);
565 EXPECT_FALSE(creator_.IsFecProtected()); 569 EXPECT_FALSE(creator_.IsFecProtected());
566 570
567 // Send one unprotected data packet. 571 // Send one unprotected data packet.
568 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 572 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
569 DoAll(SaveArg<0>(&packet_), Return(true))); 573 DoAll(SaveArg<0>(&packet_), Return(true)));
570 QuicConsumedData consumed = 574 QuicConsumedData consumed =
571 generator_.ConsumeData(5, CreateData(1u), 0, true, NULL); 575 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT,
576 NULL);
572 EXPECT_EQ(1u, consumed.bytes_consumed); 577 EXPECT_EQ(1u, consumed.bytes_consumed);
573 EXPECT_FALSE(generator_.HasQueuedFrames()); 578 EXPECT_FALSE(generator_.HasQueuedFrames());
574 EXPECT_FALSE(creator_.IsFecProtected()); 579 EXPECT_FALSE(creator_.IsFecProtected());
575 // Verify that one data packet was sent. 580 // Verify that one data packet was sent.
576 PacketContents contents; 581 PacketContents contents;
577 contents.num_stream_frames = 1; 582 contents.num_stream_frames = 1;
578 CheckPacketContains(contents, packet_); 583 CheckPacketContains(contents, packet_);
579 584
580 // Turn on FEC protection.
581 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
582 EXPECT_TRUE(creator_.IsFecProtected());
583 { 585 {
584 InSequence dummy; 586 InSequence dummy;
585 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 587 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
586 DoAll(SaveArg<0>(&packet2_), Return(true))); 588 DoAll(SaveArg<0>(&packet2_), Return(true)));
587 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 589 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
588 DoAll(SaveArg<0>(&packet3_), Return(true))); 590 DoAll(SaveArg<0>(&packet3_), Return(true)));
589 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 591 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
590 DoAll(SaveArg<0>(&packet4_), Return(true))); 592 DoAll(SaveArg<0>(&packet4_), Return(true)));
591 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 593 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
592 DoAll(SaveArg<0>(&packet5_), Return(true))); 594 DoAll(SaveArg<0>(&packet5_), Return(true)));
593 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 595 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
594 DoAll(SaveArg<0>(&packet6_), Return(true))); 596 DoAll(SaveArg<0>(&packet6_), Return(true)));
595 } 597 }
596 // Send enough data to create 3 packets. 598 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag.
597 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 599 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
598 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true, NULL); 600 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
601 MUST_FEC_PROTECT, NULL);
599 EXPECT_EQ(data_len, consumed.bytes_consumed); 602 EXPECT_EQ(data_len, consumed.bytes_consumed);
600 EXPECT_FALSE(generator_.HasQueuedFrames()); 603 EXPECT_FALSE(generator_.HasQueuedFrames());
601 EXPECT_TRUE(creator_.IsFecProtected());
602 604
603 // Verify that two FEC packets were sent. 605 // Verify that two FEC packets were sent.
604 CheckPacketHasSingleStreamFrame(packet2_); 606 CheckPacketHasSingleStreamFrame(packet2_);
605 CheckPacketHasSingleStreamFrame(packet3_); 607 CheckPacketHasSingleStreamFrame(packet3_);
606 CheckPacketIsFec(packet4_, /*fec_group=*/2u); 608 CheckPacketIsFec(packet4_, /*fec_group=*/2u);
607 CheckPacketHasSingleStreamFrame(packet5_); 609 CheckPacketHasSingleStreamFrame(packet5_);
608 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream. 610 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream.
609 611
610 // Turn off FEC protection and send one unprotected data packet. 612 // Send one unprotected data packet.
611 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, false);
612 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 613 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
613 DoAll(SaveArg<0>(&packet7_), Return(true))); 614 DoAll(SaveArg<0>(&packet7_), Return(true)));
614 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, NULL); 615 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
616 MAY_FEC_PROTECT, NULL);
615 EXPECT_EQ(1u, consumed.bytes_consumed); 617 EXPECT_EQ(1u, consumed.bytes_consumed);
616 EXPECT_FALSE(generator_.HasQueuedFrames()); 618 EXPECT_FALSE(generator_.HasQueuedFrames());
617 EXPECT_FALSE(creator_.IsFecProtected()); 619 EXPECT_FALSE(creator_.IsFecProtected());
618 // Verify that one unprotected data packet was sent. 620 // Verify that one unprotected data packet was sent.
619 CheckPacketContains(contents, packet7_); 621 CheckPacketContains(contents, packet7_);
620 } 622 }
621 623
622 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) { 624 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) {
623 delegate_.SetCanWriteAnything(); 625 delegate_.SetCanWriteAnything();
624 // Enable FEC. 626 // Enable FEC.
625 creator_.set_max_packets_per_fec_group(2); 627 creator_.set_max_packets_per_fec_group(2);
626 628
627 generator_.StartBatchOperations(); 629 generator_.StartBatchOperations();
628 // Queue enough data to prevent a stream frame with a non-zero offset from 630 // Queue enough data to prevent a stream frame with a non-zero offset from
629 // fitting. 631 // fitting.
630 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, 632 QuicConsumedData consumed = generator_.ConsumeData(
631 true, NULL); 633 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL);
632 EXPECT_EQ(1u, consumed.bytes_consumed); 634 EXPECT_EQ(1u, consumed.bytes_consumed);
633 EXPECT_TRUE(creator_.HasPendingFrames()); 635 EXPECT_TRUE(creator_.HasPendingFrames());
634 636
635 // Turn on FEC protection. Should cause queued frames to be flushed. 637 // Queue protected data for sending. Should cause queued frames to be flushed.
636 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 638 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
637 DoAll(SaveArg<0>(&packet_), Return(true))); 639 DoAll(SaveArg<0>(&packet_), Return(true)));
638 EXPECT_FALSE(creator_.IsFecProtected()); 640 EXPECT_FALSE(creator_.IsFecProtected());
639 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_); 641 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
640 CheckPacketHasSingleStreamFrame(packet_); 642 MUST_FEC_PROTECT, NULL);
643 EXPECT_EQ(1u, consumed.bytes_consumed);
644 PacketContents contents;
645 contents.num_stream_frames = 1;
646 // Transmitted packet was not FEC protected.
647 CheckPacketContains(contents, packet_);
641 EXPECT_TRUE(creator_.IsFecProtected()); 648 EXPECT_TRUE(creator_.IsFecProtected());
649 EXPECT_TRUE(creator_.HasPendingFrames());
642 } 650 }
643 651
644 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) { 652 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) {
645 // Enable FEC. 653 // Enable FEC.
646 creator_.set_max_packets_per_fec_group(2); 654 creator_.set_max_packets_per_fec_group(2);
647 655
648 // Queue control frames in generator. 656 // Queue control frames in generator.
649 delegate_.SetCanNotWrite(); 657 delegate_.SetCanNotWrite();
650 generator_.SetShouldSendAck(true, true); 658 generator_.SetShouldSendAck(true, true);
651 delegate_.SetCanWriteAnything(); 659 delegate_.SetCanWriteAnything();
660 generator_.StartBatchOperations();
652 661
653 // Set up frames to write into the creator when control frames are written. 662 // Set up frames to write into the creator when control frames are written.
654 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 663 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
655 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 664 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
656 Return(CreateFeedbackFrame())); 665 Return(CreateFeedbackFrame()));
657 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( 666 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce(
658 Return(CreateStopWaitingFrame())); 667 Return(CreateStopWaitingFrame()));
659 668
660 // Generator should have queued control frames, and creator should be empty. 669 // Generator should have queued control frames, and creator should be empty.
661 EXPECT_TRUE(generator_.HasQueuedFrames()); 670 EXPECT_TRUE(generator_.HasQueuedFrames());
662 EXPECT_FALSE(creator_.HasPendingFrames()); 671 EXPECT_FALSE(creator_.HasPendingFrames());
663 EXPECT_FALSE(creator_.IsFecProtected()); 672 EXPECT_FALSE(creator_.IsFecProtected());
664 673
665 // Turn on FEC protection. Should cause queued control frames to be flushed. 674 // Queue protected data for sending. Should cause queued frames to be flushed.
666 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 675 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
667 DoAll(SaveArg<0>(&packet_), Return(true))); 676 DoAll(SaveArg<0>(&packet_), Return(true)));
668 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_); 677 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
678 MUST_FEC_PROTECT, NULL);
679 EXPECT_EQ(1u, consumed.bytes_consumed);
669 PacketContents contents; 680 PacketContents contents;
670 contents.num_ack_frames = 1; 681 contents.num_ack_frames = 1;
671 contents.num_feedback_frames = 1; 682 contents.num_feedback_frames = 1;
672 contents.num_stop_waiting_frames = 1; 683 contents.num_stop_waiting_frames = 1;
673 CheckPacketContains(contents, packet_); 684 CheckPacketContains(contents, packet_);
674 685
675 // FEC protection should be on in creator. 686 // FEC protection should be on in creator.
676 EXPECT_TRUE(creator_.IsFecProtected()); 687 EXPECT_TRUE(creator_.IsFecProtected());
677 } 688 }
678 689
679 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) { 690 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) {
680 delegate_.SetCanWriteAnything(); 691 delegate_.SetCanWriteAnything();
681 692
682 // Enable and start FEC protection. 693 // Enable FEC.
683 creator_.set_max_packets_per_fec_group(2); 694 creator_.set_max_packets_per_fec_group(2);
684 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_); 695 EXPECT_FALSE(creator_.IsFecProtected());
685 EXPECT_TRUE(creator_.IsFecProtected());
686 696
687 // Queue stream frame to be protected in creator. 697 // Queue stream frame to be protected in creator.
688 generator_.StartBatchOperations(); 698 generator_.StartBatchOperations();
689 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 699 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
690 NULL); 700 MUST_FEC_PROTECT, NULL);
691 EXPECT_EQ(1u, consumed.bytes_consumed); 701 EXPECT_EQ(1u, consumed.bytes_consumed);
692 // Turn FEC protection off in generator.
693 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
694 // Creator has a pending protected frame. 702 // Creator has a pending protected frame.
695 EXPECT_TRUE(creator_.HasPendingFrames()); 703 EXPECT_TRUE(creator_.HasPendingFrames());
696 EXPECT_TRUE(creator_.IsFecProtected()); 704 EXPECT_TRUE(creator_.IsFecProtected());
697 705
698 // Add enough data to exceed size of current packet, so that current packet 706 // Add enough unprotected data to exceed size of current packet, so that
699 // is sent. Both frames will be sent out in a single packet. 707 // current packet is sent. Both frames will be sent out in a single packet.
700 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 708 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
701 DoAll(SaveArg<0>(&packet_), Return(true))); 709 DoAll(SaveArg<0>(&packet_), Return(true)));
702 size_t data_len = kDefaultMaxPacketSize; 710 size_t data_len = kDefaultMaxPacketSize;
703 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL); 711 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
712 MAY_FEC_PROTECT, NULL);
704 EXPECT_EQ(data_len, consumed.bytes_consumed); 713 EXPECT_EQ(data_len, consumed.bytes_consumed);
705 PacketContents contents; 714 PacketContents contents;
706 contents.num_stream_frames = 2u; 715 contents.num_stream_frames = 2u;
707 contents.fec_group = 1u; 716 contents.fec_group = 1u;
708 CheckPacketContains(contents, packet_); 717 CheckPacketContains(contents, packet_);
709 // FEC protection should still be on in creator. 718 // FEC protection should still be on in creator.
710 EXPECT_TRUE(creator_.IsFecProtected()); 719 EXPECT_TRUE(creator_.IsFecProtected());
711 } 720 }
712 721
713 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) { 722 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
714 delegate_.SetCanWriteAnything(); 723 delegate_.SetCanWriteAnything();
715 724
716 // Enable and start FEC protection. 725 // Enable FEC.
717 creator_.set_max_packets_per_fec_group(2); 726 creator_.set_max_packets_per_fec_group(2);
718 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_); 727 EXPECT_FALSE(creator_.IsFecProtected());
719 EXPECT_TRUE(creator_.IsFecProtected());
720 728
721 generator_.StartBatchOperations(); 729 generator_.StartBatchOperations();
722 // Send first packet, FEC protected. 730 // Send first packet, FEC protected.
723 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 731 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
724 DoAll(SaveArg<0>(&packet_), Return(true))); 732 DoAll(SaveArg<0>(&packet_), Return(true)));
725 // Write enough data to cause a packet to be emitted. 733 // Write enough data to cause a packet to be emitted.
726 size_t data_len = kDefaultMaxPacketSize; 734 size_t data_len = kDefaultMaxPacketSize;
727 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(data_len), 735 QuicConsumedData consumed = generator_.ConsumeData(
728 0, true, NULL); 736 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL);
729 EXPECT_EQ(data_len, consumed.bytes_consumed); 737 EXPECT_EQ(data_len, consumed.bytes_consumed);
730 PacketContents contents; 738 PacketContents contents;
731 contents.num_stream_frames = 1u; 739 contents.num_stream_frames = 1u;
732 contents.fec_group = 1u; 740 contents.fec_group = 1u;
733 CheckPacketContains(contents, packet_); 741 CheckPacketContains(contents, packet_);
734 742
735 // Turn FEC protection off in generator. 743 // FEC should still be on in creator.
736 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
737 // FEC group is still open in creator.
738 EXPECT_TRUE(creator_.IsFecProtected()); 744 EXPECT_TRUE(creator_.IsFecProtected());
739 745
740 // Send second packet, which is protected because it happens to fall within an 746 // Send enough unprotected data to cause second packet to be sent, which gets
741 // open FEC group. Data packet will be followed by FEC packet. 747 // protected because it happens to fall within an open FEC group. Data packet
748 // will be followed by FEC packet.
742 { 749 {
743 InSequence dummy; 750 InSequence dummy;
744 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 751 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
745 DoAll(SaveArg<0>(&packet2_), Return(true))); 752 DoAll(SaveArg<0>(&packet2_), Return(true)));
746 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 753 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
747 DoAll(SaveArg<0>(&packet3_), Return(true))); 754 DoAll(SaveArg<0>(&packet3_), Return(true)));
748 } 755 }
749 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL); 756 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
757 MAY_FEC_PROTECT, NULL);
750 EXPECT_EQ(data_len, consumed.bytes_consumed); 758 EXPECT_EQ(data_len, consumed.bytes_consumed);
751 contents.num_stream_frames = 2u; 759 contents.num_stream_frames = 2u;
752 CheckPacketContains(contents, packet2_); 760 CheckPacketContains(contents, packet2_);
753 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 761 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
754 762
755 // FEC protection should be off in creator. 763 // FEC protection should be off in creator.
756 EXPECT_FALSE(creator_.IsFecProtected()); 764 EXPECT_FALSE(creator_.IsFecProtected());
757 } 765 }
758 766
759 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) { 767 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
760 delegate_.SetCanWriteAnything(); 768 delegate_.SetCanWriteAnything();
761 generator_.StartBatchOperations(); 769 generator_.StartBatchOperations();
762 770
763 // Enable and start FEC protection. 771 // Enable FEC.
764 creator_.set_max_packets_per_fec_group(2); 772 creator_.set_max_packets_per_fec_group(2);
765 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_); 773 EXPECT_FALSE(creator_.IsFecProtected());
766 EXPECT_TRUE(creator_.IsFecProtected());
767 774
768 // Queue one byte of FEC protected data and turn FEC off in generator. 775 // Queue one byte of FEC protected data.
769 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 776 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
770 NULL); 777 MUST_FEC_PROTECT, NULL);
771 QuicPacketGeneratorPeer::MaybeStopFecProtection(&generator_, /*force=*/false);
772 EXPECT_TRUE(creator_.HasPendingFrames()); 778 EXPECT_TRUE(creator_.HasPendingFrames());
773 779
774 // Add more data causing first packet to be sent, FEC protected. 780 // Add more unprotected data causing first packet to be sent, FEC protected.
775 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 781 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
776 DoAll(SaveArg<0>(&packet_), Return(true))); 782 DoAll(SaveArg<0>(&packet_), Return(true)));
777 // Write enough data to cause a packet to be emitted.
778 size_t data_len = kDefaultMaxPacketSize; 783 size_t data_len = kDefaultMaxPacketSize;
779 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL); 784 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
785 MAY_FEC_PROTECT, NULL);
780 EXPECT_EQ(data_len, consumed.bytes_consumed); 786 EXPECT_EQ(data_len, consumed.bytes_consumed);
781 PacketContents contents; 787 PacketContents contents;
782 contents.num_stream_frames = 2u; 788 contents.num_stream_frames = 2u;
783 contents.fec_group = 1u; 789 contents.fec_group = 1u;
784 CheckPacketContains(contents, packet_); 790 CheckPacketContains(contents, packet_);
785 791
786 // FEC group is still open in creator. 792 // FEC group is still open in creator.
787 EXPECT_TRUE(creator_.IsFecProtected()); 793 EXPECT_TRUE(creator_.IsFecProtected());
788 // Turn FEC on again in generator, for the next data.
789 QuicPacketGeneratorPeer::MaybeStartFecProtection(&generator_);
790
791 // Add data that should be protected, large enough to cause second packet to 794 // Add data that should be protected, large enough to cause second packet to
792 // be sent. Data packet should be followed by FEC packet. 795 // be sent. Data packet should be followed by FEC packet.
793 { 796 {
794 InSequence dummy; 797 InSequence dummy;
795 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 798 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
796 DoAll(SaveArg<0>(&packet2_), Return(true))); 799 DoAll(SaveArg<0>(&packet2_), Return(true)));
797 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 800 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
798 DoAll(SaveArg<0>(&packet3_), Return(true))); 801 DoAll(SaveArg<0>(&packet3_), Return(true)));
799 } 802 }
800 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, NULL); 803 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
804 MUST_FEC_PROTECT, NULL);
801 EXPECT_EQ(data_len, consumed.bytes_consumed); 805 EXPECT_EQ(data_len, consumed.bytes_consumed);
802 CheckPacketContains(contents, packet2_); 806 CheckPacketContains(contents, packet2_);
803 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 807 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
804 808
805 // FEC protection should be on in creator. 809 // FEC protection should remain on in creator.
806 EXPECT_TRUE(creator_.IsFecProtected()); 810 EXPECT_TRUE(creator_.IsFecProtected());
807 } 811 }
808 812
809 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 813 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
810 delegate_.SetCanNotWrite(); 814 delegate_.SetCanNotWrite();
811 815
812 generator_.SetShouldSendAck(true, false); 816 generator_.SetShouldSendAck(true, false);
813 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 817 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
814 EXPECT_TRUE(generator_.HasQueuedFrames()); 818 EXPECT_TRUE(generator_.HasQueuedFrames());
815 819
816 delegate_.SetCanWriteAnything(); 820 delegate_.SetCanWriteAnything();
817 821
818 generator_.StartBatchOperations(); 822 generator_.StartBatchOperations();
819 823
820 // When the first write operation is invoked, the ack and feedback 824 // When the first write operation is invoked, the ack and feedback
821 // frames will be returned. 825 // frames will be returned.
822 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 826 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
823 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 827 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
824 Return(CreateFeedbackFrame())); 828 Return(CreateFeedbackFrame()));
825 829
826 // Send some data and a control frame 830 // Send some data and a control frame
827 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); 831 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false,
832 MAY_FEC_PROTECT, NULL);
828 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 833 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
829 834
830 // All five frames will be flushed out in a single packet. 835 // All five frames will be flushed out in a single packet.
831 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 836 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
832 DoAll(SaveArg<0>(&packet_), Return(true))); 837 DoAll(SaveArg<0>(&packet_), Return(true)));
833 generator_.FinishBatchOperations(); 838 generator_.FinishBatchOperations();
834 EXPECT_FALSE(generator_.HasQueuedFrames()); 839 EXPECT_FALSE(generator_.HasQueuedFrames());
835 840
836 PacketContents contents; 841 PacketContents contents;
837 contents.num_ack_frames = 1; 842 contents.num_ack_frames = 1;
(...skipping 26 matching lines...) Expand all
864 // All five frames will be flushed out in a single packet 869 // All five frames will be flushed out in a single packet
865 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 870 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
866 DoAll(SaveArg<0>(&packet_), Return(true))); 871 DoAll(SaveArg<0>(&packet_), Return(true)));
867 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 872 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
868 DoAll(SaveArg<0>(&packet2_), Return(true))); 873 DoAll(SaveArg<0>(&packet2_), Return(true)));
869 } 874 }
870 875
871 // Send enough data to exceed one packet 876 // Send enough data to exceed one packet
872 size_t data_len = kDefaultMaxPacketSize + 100; 877 size_t data_len = kDefaultMaxPacketSize + 100;
873 QuicConsumedData consumed = 878 QuicConsumedData consumed =
874 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); 879 generator_.ConsumeData(3, CreateData(data_len), 0, true,
880 MAY_FEC_PROTECT, NULL);
875 EXPECT_EQ(data_len, consumed.bytes_consumed); 881 EXPECT_EQ(data_len, consumed.bytes_consumed);
876 EXPECT_TRUE(consumed.fin_consumed); 882 EXPECT_TRUE(consumed.fin_consumed);
877 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 883 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
878 884
879 generator_.FinishBatchOperations(); 885 generator_.FinishBatchOperations();
880 EXPECT_FALSE(generator_.HasQueuedFrames()); 886 EXPECT_FALSE(generator_.HasQueuedFrames());
881 887
882 // The first packet should have the queued data and part of the stream data. 888 // The first packet should have the queued data and part of the stream data.
883 PacketContents contents; 889 PacketContents contents;
884 contents.num_ack_frames = 1; 890 contents.num_ack_frames = 1;
885 contents.num_feedback_frames = 1; 891 contents.num_feedback_frames = 1;
886 contents.num_rst_stream_frames = 1; 892 contents.num_rst_stream_frames = 1;
887 contents.num_stream_frames = 1; 893 contents.num_stream_frames = 1;
888 CheckPacketContains(contents, packet_); 894 CheckPacketContains(contents, packet_);
889 895
890 // The second should have the remainder of the stream data. 896 // The second should have the remainder of the stream data.
891 PacketContents contents2; 897 PacketContents contents2;
892 contents2.num_goaway_frames = 1; 898 contents2.num_goaway_frames = 1;
893 contents2.num_stream_frames = 1; 899 contents2.num_stream_frames = 1;
894 CheckPacketContains(contents2, packet2_); 900 CheckPacketContains(contents2, packet2_);
895 } 901 }
896 902
897 } // namespace test 903 } // namespace test
898 } // namespace net 904 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698