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

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

Issue 1464153002: Add ConsumeData method to QuicPacketCreator, ConsumeData wraps both CreateStreamFrame and AddFrame.… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@107699435
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_generator.cc » ('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_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 491 EXPECT_CALL(framer_visitor_, OnPacketComplete());
492 } 492 }
493 ProcessPacket(serialized.packet); 493 ProcessPacket(serialized.packet);
494 delete serialized.packet; 494 delete serialized.packet;
495 } 495 }
496 496
497 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { 497 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) {
498 QuicFrame frame; 498 QuicFrame frame;
499 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); 499 QuicIOVector io_vector(MakeIOVector("fake handshake message data"));
500 UniqueStreamBuffer stream_buffer; 500 UniqueStreamBuffer stream_buffer;
501 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0u, 0u, false, &frame, 501 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
502 &stream_buffer); 502 io_vector, 0u, 0u, false, &frame,
503 &stream_buffer);
503 RetransmittableFrames frames(ENCRYPTION_NONE); 504 RetransmittableFrames frames(ENCRYPTION_NONE);
504 frames.AddFrame(frame); 505 frames.AddFrame(frame);
505 frames.set_needs_padding(true); 506 frames.set_needs_padding(true);
506 char buffer[kMaxPacketSize]; 507 char buffer[kMaxPacketSize];
507 SerializedPacket serialized = creator_.ReserializeAllFrames( 508 SerializedPacket serialized = creator_.ReserializeAllFrames(
508 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, 509 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer,
509 kMaxPacketSize); 510 kMaxPacketSize);
510 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); 511 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length());
511 delete serialized.packet; 512 delete serialized.packet;
512 } 513 }
513 514
514 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { 515 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) {
515 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 516 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
516 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 517 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
517 size_t capacity = kDefaultMaxPacketSize - overhead; 518 size_t capacity = kDefaultMaxPacketSize - overhead;
518 for (int delta = -5; delta <= 0; ++delta) { 519 for (int delta = -5; delta <= 0; ++delta) {
519 string data(capacity + delta, 'A'); 520 string data(capacity + delta, 'A');
520 size_t bytes_free = 0 - delta; 521 size_t bytes_free = 0 - delta;
521 522
522 QuicFrame frame; 523 QuicFrame frame;
523 QuicIOVector io_vector(MakeIOVector(data)); 524 QuicIOVector io_vector(MakeIOVector(data));
524 UniqueStreamBuffer stream_buffer; 525 UniqueStreamBuffer stream_buffer;
525 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0, kOffset, false, 526 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
526 &frame, &stream_buffer); 527 io_vector, 0, kOffset, false,
528 &frame, &stream_buffer);
527 RetransmittableFrames frames(ENCRYPTION_NONE); 529 RetransmittableFrames frames(ENCRYPTION_NONE);
528 frames.AddFrame(frame); 530 frames.AddFrame(frame);
529 frames.set_needs_padding(true); 531 frames.set_needs_padding(true);
530 char buffer[kMaxPacketSize]; 532 char buffer[kMaxPacketSize];
531 SerializedPacket serialized = creator_.ReserializeAllFrames( 533 SerializedPacket serialized = creator_.ReserializeAllFrames(
532 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), 534 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_),
533 buffer, kMaxPacketSize); 535 buffer, kMaxPacketSize);
534 536
535 // If there is not enough space in the packet to fit a padding frame 537 // If there is not enough space in the packet to fit a padding frame
536 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 538 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 creator_.StopFecProtectingPackets(); 624 creator_.StopFecProtectingPackets();
623 EXPECT_FALSE(creator_.IsFecProtected()); 625 EXPECT_FALSE(creator_.IsFecProtected());
624 creator_.StartFecProtectingPackets(); 626 creator_.StartFecProtectingPackets();
625 EXPECT_TRUE(creator_.IsFecProtected()); 627 EXPECT_TRUE(creator_.IsFecProtected());
626 } 628 }
627 629
628 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { 630 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) {
629 // Add a stream frame to the creator. 631 // Add a stream frame to the creator.
630 QuicFrame frame; 632 QuicFrame frame;
631 QuicIOVector io_vector(MakeIOVector("test")); 633 QuicIOVector io_vector(MakeIOVector("test"));
632 UniqueStreamBuffer stream_buffer; 634 ASSERT_TRUE(
633 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 635 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
634 &frame, &stream_buffer); 636 ASSERT_TRUE(frame.stream_frame);
637 size_t consumed = frame.stream_frame->data.length();
635 EXPECT_EQ(4u, consumed); 638 EXPECT_EQ(4u, consumed);
636 ASSERT_TRUE(frame.stream_frame);
637 EXPECT_TRUE(creator_.AddSavedFrame(frame));
638 EXPECT_TRUE(creator_.HasPendingFrames()); 639 EXPECT_TRUE(creator_.HasPendingFrames());
639 640
640 // Enable FEC protection, and send FEC packet every 6 packets. 641 // Enable FEC protection, and send FEC packet every 6 packets.
641 creator_.set_max_packets_per_fec_group(6); 642 creator_.set_max_packets_per_fec_group(6);
642 EXPECT_TRUE(creator_.IsFecEnabled()); 643 EXPECT_TRUE(creator_.IsFecEnabled());
643 EXPECT_DFATAL(creator_.StartFecProtectingPackets(), 644 EXPECT_DFATAL(creator_.StartFecProtectingPackets(),
644 "Cannot start FEC protection with pending frames."); 645 "Cannot start FEC protection with pending frames.");
645 EXPECT_FALSE(creator_.IsFecProtected()); 646 EXPECT_FALSE(creator_.IsFecProtected());
646 647
647 // Serialize packet for transmission. 648 // Serialize packet for transmission.
648 char buffer[kMaxPacketSize]; 649 char buffer[kMaxPacketSize];
649 SerializedPacket serialized = 650 SerializedPacket serialized =
650 creator_.SerializePacket(buffer, kMaxPacketSize); 651 creator_.SerializePacket(buffer, kMaxPacketSize);
651 delete serialized.packet; 652 delete serialized.packet;
652 delete serialized.retransmittable_frames; 653 delete serialized.retransmittable_frames;
653 EXPECT_FALSE(creator_.HasPendingFrames()); 654 EXPECT_FALSE(creator_.HasPendingFrames());
654 655
655 // Since all pending frames have been serialized, turning FEC on should work. 656 // Since all pending frames have been serialized, turning FEC on should work.
656 creator_.StartFecProtectingPackets(); 657 creator_.StartFecProtectingPackets();
657 EXPECT_TRUE(creator_.IsFecProtected()); 658 EXPECT_TRUE(creator_.IsFecProtected());
658 } 659 }
659 660
660 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { 661 TEST_P(QuicPacketCreatorTest, ConsumeData) {
661 QuicFrame frame; 662 QuicFrame frame;
662 QuicIOVector io_vector(MakeIOVector("test")); 663 QuicIOVector io_vector(MakeIOVector("test"));
663 UniqueStreamBuffer stream_buffer; 664 ASSERT_TRUE(
664 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 665 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
665 &frame, &stream_buffer); 666 ASSERT_TRUE(frame.stream_frame);
667 size_t consumed = frame.stream_frame->data.length();
666 EXPECT_EQ(4u, consumed); 668 EXPECT_EQ(4u, consumed);
667 CheckStreamFrame(frame, 1u, "test", 0u, false); 669 CheckStreamFrame(frame, 1u, "test", 0u, false);
668 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); 670 EXPECT_TRUE(creator_.HasPendingFrames());
669 cleanup_frames.AddFrame(frame);
670 } 671 }
671 672
672 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { 673 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) {
673 QuicFrame frame; 674 QuicFrame frame;
674 QuicIOVector io_vector(MakeIOVector("test")); 675 QuicIOVector io_vector(MakeIOVector("test"));
675 UniqueStreamBuffer stream_buffer; 676 ASSERT_TRUE(
676 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 10u, true, 677 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame));
677 &frame, &stream_buffer); 678 ASSERT_TRUE(frame.stream_frame);
679 size_t consumed = frame.stream_frame->data.length();
678 EXPECT_EQ(4u, consumed); 680 EXPECT_EQ(4u, consumed);
679 CheckStreamFrame(frame, 1u, "test", 10u, true); 681 CheckStreamFrame(frame, 1u, "test", 10u, true);
680 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); 682 EXPECT_TRUE(creator_.HasPendingFrames());
681 cleanup_frames.AddFrame(frame);
682 } 683 }
683 684
684 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { 685 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) {
685 QuicFrame frame; 686 QuicFrame frame;
686 QuicIOVector io_vector(nullptr, 0, 0); 687 QuicIOVector io_vector(nullptr, 0, 0);
687 UniqueStreamBuffer stream_buffer; 688 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
688 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, 689 ASSERT_TRUE(frame.stream_frame);
689 &frame, &stream_buffer); 690 size_t consumed = frame.stream_frame->data.length();
690 EXPECT_EQ(0u, consumed); 691 EXPECT_EQ(0u, consumed);
691 CheckStreamFrame(frame, 1u, string(), 0u, true); 692 CheckStreamFrame(frame, 1u, string(), 0u, true);
692 delete frame.stream_frame; 693 EXPECT_TRUE(creator_.HasPendingFrames());
693 } 694 }
694 695
695 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { 696 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
696 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 697 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
697 + GetEncryptionOverhead(); 698 + GetEncryptionOverhead();
698 for (size_t i = overhead; i < overhead + 100; ++i) { 699 for (size_t i = overhead; i < overhead + 100; ++i) {
699 creator_.SetMaxPacketLength(i); 700 creator_.SetMaxPacketLength(i);
700 const bool should_have_room = i > overhead + GetStreamFrameOverhead( 701 const bool should_have_room = i > overhead + GetStreamFrameOverhead(
701 NOT_IN_FEC_GROUP); 702 NOT_IN_FEC_GROUP);
702 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( 703 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame(
703 kClientDataStreamId1, kOffset)); 704 kClientDataStreamId1, kOffset));
704 if (should_have_room) { 705 if (should_have_room) {
705 QuicFrame frame; 706 QuicFrame frame;
706 QuicIOVector io_vector(MakeIOVector("testdata")); 707 QuicIOVector io_vector(MakeIOVector("testdata"));
707 UniqueStreamBuffer stream_buffer; 708 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
708 size_t bytes_consumed = 709 kOffset, false, false, &frame));
709 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, 710 ASSERT_TRUE(frame.stream_frame);
710 kOffset, false, &frame, &stream_buffer); 711 size_t bytes_consumed = frame.stream_frame->data.length();
711 EXPECT_LT(0u, bytes_consumed); 712 EXPECT_LT(0u, bytes_consumed);
712 ASSERT_TRUE(creator_.AddSavedFrame(frame));
713 char buffer[kMaxPacketSize]; 713 char buffer[kMaxPacketSize];
714 SerializedPacket serialized_packet = 714 SerializedPacket serialized_packet =
715 creator_.SerializePacket(buffer, kMaxPacketSize); 715 creator_.SerializePacket(buffer, kMaxPacketSize);
716 ASSERT_TRUE(serialized_packet.packet); 716 ASSERT_TRUE(serialized_packet.packet);
717 delete serialized_packet.packet; 717 delete serialized_packet.packet;
718 delete serialized_packet.retransmittable_frames; 718 delete serialized_packet.retransmittable_frames;
719 } 719 }
720 } 720 }
721 } 721 }
722 722
723 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { 723 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) {
724 // Compute the total overhead for a single frame in packet. 724 // Compute the total overhead for a single frame in packet.
725 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 725 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
726 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 726 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
727 size_t capacity = kDefaultMaxPacketSize - overhead; 727 size_t capacity = kDefaultMaxPacketSize - overhead;
728 // Now, test various sizes around this size. 728 // Now, test various sizes around this size.
729 for (int delta = -5; delta <= 5; ++delta) { 729 for (int delta = -5; delta <= 5; ++delta) {
730 string data(capacity + delta, 'A'); 730 string data(capacity + delta, 'A');
731 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 731 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
732 QuicFrame frame; 732 QuicFrame frame;
733 QuicIOVector io_vector(MakeIOVector(data)); 733 QuicIOVector io_vector(MakeIOVector(data));
734 UniqueStreamBuffer stream_buffer; 734 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
735 size_t bytes_consumed = 735 kOffset, false, false, &frame));
736 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 736 ASSERT_TRUE(frame.stream_frame);
737 false, &frame, &stream_buffer); 737 size_t bytes_consumed = frame.stream_frame->data.length();
738 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 738 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
739 739
740 ASSERT_TRUE(creator_.AddSavedFrame(frame));
741 // BytesFree() returns bytes available for the next frame, which will 740 // BytesFree() returns bytes available for the next frame, which will
742 // be two bytes smaller since the stream frame would need to be grown. 741 // be two bytes smaller since the stream frame would need to be grown.
743 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); 742 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame());
744 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; 743 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2;
745 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 744 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
746 char buffer[kMaxPacketSize]; 745 char buffer[kMaxPacketSize];
747 SerializedPacket serialized_packet = 746 SerializedPacket serialized_packet =
748 creator_.SerializePacket(buffer, kMaxPacketSize); 747 creator_.SerializePacket(buffer, kMaxPacketSize);
749 ASSERT_TRUE(serialized_packet.packet); 748 ASSERT_TRUE(serialized_packet.packet);
750 delete serialized_packet.packet; 749 delete serialized_packet.packet;
751 delete serialized_packet.retransmittable_frames; 750 delete serialized_packet.retransmittable_frames;
752 } 751 }
753 } 752 }
754 753
755 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { 754 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) {
756 // Enable FEC protection, and send FEC packet every 6 packets. 755 // Enable FEC protection, and send FEC packet every 6 packets.
757 EXPECT_TRUE(SwitchFecProtectionOn(6)); 756 EXPECT_TRUE(SwitchFecProtectionOn(6));
758 // Compute the total overhead for a single frame in packet. 757 // Compute the total overhead for a single frame in packet.
759 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) 758 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP)
760 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); 759 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP);
761 size_t capacity = kDefaultMaxPacketSize - overhead; 760 size_t capacity = kDefaultMaxPacketSize - overhead;
762 // Now, test various sizes around this size. 761 // Now, test various sizes around this size.
763 for (int delta = -5; delta <= 5; ++delta) { 762 for (int delta = -5; delta <= 5; ++delta) {
764 string data(capacity + delta, 'A'); 763 string data(capacity + delta, 'A');
765 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 764 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
766 QuicFrame frame; 765 QuicFrame frame;
767 QuicIOVector io_vector(MakeIOVector(data)); 766 QuicIOVector io_vector(MakeIOVector(data));
768 UniqueStreamBuffer stream_buffer; 767 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
769 size_t bytes_consumed = 768 kOffset, false, false, &frame));
770 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 769 ASSERT_TRUE(frame.stream_frame);
771 false, &frame, &stream_buffer); 770 size_t bytes_consumed = frame.stream_frame->data.length();;
772 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 771 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
773 772
774 ASSERT_TRUE(creator_.AddSavedFrame(frame));
775 // BytesFree() returns bytes available for the next frame. Since stream 773 // BytesFree() returns bytes available for the next frame. Since stream
776 // frame does not grow for FEC protected packets, this should be the same 774 // frame does not grow for FEC protected packets, this should be the same
777 // as bytes_free (bound by 0). 775 // as bytes_free (bound by 0).
778 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); 776 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame());
779 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; 777 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0;
780 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 778 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
781 char buffer[kMaxPacketSize]; 779 char buffer[kMaxPacketSize];
782 SerializedPacket serialized_packet = 780 SerializedPacket serialized_packet =
783 creator_.SerializePacket(buffer, kMaxPacketSize); 781 creator_.SerializePacket(buffer, kMaxPacketSize);
784 ASSERT_TRUE(serialized_packet.packet); 782 ASSERT_TRUE(serialized_packet.packet);
785 delete serialized_packet.packet; 783 delete serialized_packet.packet;
786 delete serialized_packet.retransmittable_frames; 784 delete serialized_packet.retransmittable_frames;
787 } 785 }
788 } 786 }
789 787
790 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { 788 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
791 // Compute the total overhead for a single frame in packet. 789 // Compute the total overhead for a single frame in packet.
792 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 790 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
793 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 791 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
794 ASSERT_GT(kMaxPacketSize, overhead); 792 ASSERT_GT(kMaxPacketSize, overhead);
795 size_t capacity = kDefaultMaxPacketSize - overhead; 793 size_t capacity = kDefaultMaxPacketSize - overhead;
796 // Now, test various sizes around this size. 794 // Now, test various sizes around this size.
797 for (int delta = -5; delta <= 5; ++delta) { 795 for (int delta = -5; delta <= 5; ++delta) {
798 string data(capacity + delta, 'A'); 796 string data(capacity + delta, 'A');
799 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 797 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
800 798
801 QuicFrame frame; 799 QuicFrame frame;
802 QuicIOVector io_vector(MakeIOVector(data)); 800 QuicIOVector io_vector(MakeIOVector(data));
803 UniqueStreamBuffer stream_buffer; 801 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset,
804 size_t bytes_consumed = creator_.CreateStreamFrame( 802 false, true, &frame));
805 kCryptoStreamId, io_vector, 0u, kOffset, false, &frame, &stream_buffer); 803 ASSERT_TRUE(frame.stream_frame);
804 size_t bytes_consumed = frame.stream_frame->data.length();
806 EXPECT_LT(0u, bytes_consumed); 805 EXPECT_LT(0u, bytes_consumed);
807 ASSERT_TRUE(creator_.AddPaddedSavedFrame(frame, nullptr));
808 char buffer[kMaxPacketSize]; 806 char buffer[kMaxPacketSize];
809 SerializedPacket serialized_packet = 807 SerializedPacket serialized_packet =
810 creator_.SerializePacket(buffer, kMaxPacketSize); 808 creator_.SerializePacket(buffer, kMaxPacketSize);
811 ASSERT_TRUE(serialized_packet.packet); 809 ASSERT_TRUE(serialized_packet.packet);
812 // If there is not enough space in the packet to fit a padding frame 810 // If there is not enough space in the packet to fit a padding frame
813 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 811 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
814 // will not be padded. 812 // will not be padded.
815 if (bytes_free < 3) { 813 if (bytes_free < 3) {
816 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, 814 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free,
817 serialized_packet.packet->length()); 815 serialized_packet.packet->length());
(...skipping 11 matching lines...) Expand all
829 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 827 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
830 ASSERT_GT(kDefaultMaxPacketSize, overhead); 828 ASSERT_GT(kDefaultMaxPacketSize, overhead);
831 size_t capacity = kDefaultMaxPacketSize - overhead; 829 size_t capacity = kDefaultMaxPacketSize - overhead;
832 // Now, test various sizes around this size. 830 // Now, test various sizes around this size.
833 for (int delta = -5; delta <= 5; ++delta) { 831 for (int delta = -5; delta <= 5; ++delta) {
834 string data(capacity + delta, 'A'); 832 string data(capacity + delta, 'A');
835 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 833 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
836 834
837 QuicFrame frame; 835 QuicFrame frame;
838 QuicIOVector io_vector(MakeIOVector(data)); 836 QuicIOVector io_vector(MakeIOVector(data));
839 UniqueStreamBuffer stream_buffer; 837 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
840 size_t bytes_consumed = 838 kOffset, false, false, &frame));
841 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 839 ASSERT_TRUE(frame.stream_frame);
842 false, &frame, &stream_buffer); 840 size_t bytes_consumed = frame.stream_frame->data.length();
843 EXPECT_LT(0u, bytes_consumed); 841 EXPECT_LT(0u, bytes_consumed);
844 ASSERT_TRUE(creator_.AddSavedFrame(frame));
845 char buffer[kMaxPacketSize]; 842 char buffer[kMaxPacketSize];
846 SerializedPacket serialized_packet = 843 SerializedPacket serialized_packet =
847 creator_.SerializePacket(buffer, kMaxPacketSize); 844 creator_.SerializePacket(buffer, kMaxPacketSize);
848 ASSERT_TRUE(serialized_packet.packet); 845 ASSERT_TRUE(serialized_packet.packet);
849 if (bytes_free > 0) { 846 if (bytes_free > 0) {
850 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, 847 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free,
851 serialized_packet.packet->length()); 848 serialized_packet.packet->length());
852 } else { 849 } else {
853 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); 850 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length());
854 } 851 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 DoAll(SaveArg<0>(&header), Return(true))); 948 DoAll(SaveArg<0>(&header), Return(true)));
952 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 949 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
953 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 950 EXPECT_CALL(framer_visitor_, OnPacketComplete());
954 } 951 }
955 ProcessPacket(serialized.packet); 952 ProcessPacket(serialized.packet);
956 EXPECT_EQ(GetParam().version_serialization, 953 EXPECT_EQ(GetParam().version_serialization,
957 header.public_header.version_flag); 954 header.public_header.version_flag);
958 delete serialized.packet; 955 delete serialized.packet;
959 } 956 }
960 957
961 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { 958 TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) {
962 if (!GetParam().version_serialization) { 959 if (!GetParam().version_serialization) {
963 creator_.StopSendingVersion(); 960 creator_.StopSendingVersion();
964 } 961 }
965 // A string larger than fits into a frame. 962 // A string larger than fits into a frame.
966 size_t payload_length; 963 size_t payload_length;
967 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( 964 creator_.SetMaxPacketLength(GetPacketLengthForOneStream(
968 client_framer_.version(), 965 client_framer_.version(),
969 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 966 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
970 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, 967 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER,
971 NOT_IN_FEC_GROUP, &payload_length)); 968 NOT_IN_FEC_GROUP, &payload_length));
972 QuicFrame frame; 969 QuicFrame frame;
973 const string too_long_payload(payload_length * 2, 'a'); 970 const string too_long_payload(payload_length * 2, 'a');
974 QuicIOVector io_vector(MakeIOVector(too_long_payload)); 971 QuicIOVector io_vector(MakeIOVector(too_long_payload));
975 UniqueStreamBuffer stream_buffer; 972 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
976 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, 973 ASSERT_TRUE(frame.stream_frame);
977 &frame, &stream_buffer); 974 size_t consumed = frame.stream_frame->data.length();
978 EXPECT_EQ(payload_length, consumed); 975 EXPECT_EQ(payload_length, consumed);
979 const string payload(payload_length, 'a'); 976 const string payload(payload_length, 'a');
980 CheckStreamFrame(frame, 1u, payload, 0u, false); 977 CheckStreamFrame(frame, 1u, payload, 0u, false);
981 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE);
982 cleanup_frames.AddFrame(frame);
983 } 978 }
984 979
985 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { 980 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) {
986 if (!GetParam().version_serialization) { 981 if (!GetParam().version_serialization) {
987 creator_.StopSendingVersion(); 982 creator_.StopSendingVersion();
988 } 983 }
989 const size_t max_plaintext_size = 984 const size_t max_plaintext_size =
990 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); 985 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
991 EXPECT_FALSE(creator_.HasPendingFrames()); 986 EXPECT_FALSE(creator_.HasPendingFrames());
992 EXPECT_EQ(max_plaintext_size - 987 EXPECT_EQ(max_plaintext_size -
993 GetPacketHeaderSize( 988 GetPacketHeaderSize(
994 creator_.connection_id_length(), 989 creator_.connection_id_length(),
995 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 990 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
996 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 991 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP),
997 creator_.BytesFree()); 992 creator_.BytesFree());
998 993
999 // Add a variety of frame types and then a padding frame. 994 // Add a variety of frame types and then a padding frame.
1000 QuicAckFrame ack_frame(MakeAckFrame(0u)); 995 QuicAckFrame ack_frame(MakeAckFrame(0u));
1001 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 996 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1002 EXPECT_TRUE(creator_.HasPendingFrames()); 997 EXPECT_TRUE(creator_.HasPendingFrames());
1003 998
1004 QuicFrame frame; 999 QuicFrame frame;
1005 QuicIOVector io_vector(MakeIOVector("test")); 1000 QuicIOVector io_vector(MakeIOVector("test"));
1006 UniqueStreamBuffer stream_buffer; 1001 ASSERT_TRUE(
1007 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 1002 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
1008 &frame, &stream_buffer); 1003 ASSERT_TRUE(frame.stream_frame);
1004 size_t consumed = frame.stream_frame->data.length();
1009 EXPECT_EQ(4u, consumed); 1005 EXPECT_EQ(4u, consumed);
1010 ASSERT_TRUE(frame.stream_frame);
1011 EXPECT_TRUE(creator_.AddSavedFrame(frame));
1012 EXPECT_TRUE(creator_.HasPendingFrames()); 1006 EXPECT_TRUE(creator_.HasPendingFrames());
1013 1007
1014 QuicPaddingFrame padding_frame; 1008 QuicPaddingFrame padding_frame;
1015 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); 1009 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame)));
1016 EXPECT_TRUE(creator_.HasPendingFrames()); 1010 EXPECT_TRUE(creator_.HasPendingFrames());
1017 EXPECT_EQ(0u, creator_.BytesFree()); 1011 EXPECT_EQ(0u, creator_.BytesFree());
1018 1012
1019 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1013 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1020 1014
1021 // Ensure the packet is successfully created. 1015 // Ensure the packet is successfully created.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 EXPECT_GT(creator_.BytesFree(), frame_len); 1049 EXPECT_GT(creator_.BytesFree(), frame_len);
1056 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); 1050 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
1057 1051
1058 // Add ack frame to creator. 1052 // Add ack frame to creator.
1059 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1053 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1060 EXPECT_TRUE(creator_.HasPendingFrames()); 1054 EXPECT_TRUE(creator_.HasPendingFrames());
1061 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); 1055 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
1062 EXPECT_LT(0u, creator_.BytesFree()); 1056 EXPECT_LT(0u, creator_.BytesFree());
1063 1057
1064 // Make sure that an additional stream frame can be added to the packet. 1058 // Make sure that an additional stream frame can be added to the packet.
1065 QuicFrame stream_frame; 1059 QuicFrame frame;
1066 QuicIOVector io_vector(MakeIOVector("test")); 1060 QuicIOVector io_vector(MakeIOVector("test"));
1067 UniqueStreamBuffer stream_buffer; 1061 ASSERT_TRUE(
1068 size_t consumed = creator_.CreateStreamFrame(2u, io_vector, 0u, 0u, false, 1062 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame));
1069 &stream_frame, &stream_buffer); 1063 ASSERT_TRUE(frame.stream_frame);
1064 size_t consumed = frame.stream_frame->data.length();
1070 EXPECT_EQ(4u, consumed); 1065 EXPECT_EQ(4u, consumed);
1071 ASSERT_TRUE(stream_frame.stream_frame);
1072 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame));
1073 EXPECT_TRUE(creator_.HasPendingFrames()); 1066 EXPECT_TRUE(creator_.HasPendingFrames());
1074 1067
1075 // Ensure the packet is successfully created, and the packet size estimate 1068 // Ensure the packet is successfully created, and the packet size estimate
1076 // matches the serialized packet length. 1069 // matches the serialized packet length.
1077 EXPECT_CALL(entropy_calculator_, 1070 EXPECT_CALL(entropy_calculator_,
1078 EntropyHash(_)).WillOnce(testing::Return(0)); 1071 EntropyHash(_)).WillOnce(testing::Return(0));
1079 size_t est_packet_size = creator_.PacketSize(); 1072 size_t est_packet_size = creator_.PacketSize();
1080 char buffer[kMaxPacketSize]; 1073 char buffer[kMaxPacketSize];
1081 SerializedPacket serialized = 1074 SerializedPacket serialized =
1082 creator_.SerializePacket(buffer, kMaxPacketSize); 1075 creator_.SerializePacket(buffer, kMaxPacketSize);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1196
1204 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); 1197 serialized = creator_.SerializeFec(buffer, kMaxPacketSize);
1205 ASSERT_EQ(3u, serialized.packet_number); 1198 ASSERT_EQ(3u, serialized.packet_number);
1206 delete serialized.packet; 1199 delete serialized.packet;
1207 } 1200 }
1208 1201
1209 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { 1202 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) {
1210 // Add a stream frame to the creator. 1203 // Add a stream frame to the creator.
1211 QuicFrame frame; 1204 QuicFrame frame;
1212 QuicIOVector io_vector(MakeIOVector("test")); 1205 QuicIOVector io_vector(MakeIOVector("test"));
1213 UniqueStreamBuffer stream_buffer; 1206 ASSERT_TRUE(
1214 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 1207 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
1215 &frame, &stream_buffer); 1208 ASSERT_TRUE(frame.stream_frame);
1209 size_t consumed = frame.stream_frame->data.length();
1216 EXPECT_EQ(4u, consumed); 1210 EXPECT_EQ(4u, consumed);
1217 ASSERT_TRUE(frame.stream_frame);
1218 EXPECT_TRUE(creator_.AddSavedFrame(frame));
1219 EXPECT_TRUE(creator_.HasPendingFrames()); 1211 EXPECT_TRUE(creator_.HasPendingFrames());
1220 EXPECT_DFATAL(creator_.ResetFecGroup(), 1212 EXPECT_DFATAL(creator_.ResetFecGroup(),
1221 "Cannot reset FEC group with pending frames."); 1213 "Cannot reset FEC group with pending frames.");
1222 1214
1223 // Serialize packet for transmission. 1215 // Serialize packet for transmission.
1224 char buffer[kMaxPacketSize]; 1216 char buffer[kMaxPacketSize];
1225 SerializedPacket serialized = 1217 SerializedPacket serialized =
1226 creator_.SerializePacket(buffer, kMaxPacketSize); 1218 creator_.SerializePacket(buffer, kMaxPacketSize);
1227 delete serialized.packet; 1219 delete serialized.packet;
1228 delete serialized.retransmittable_frames; 1220 delete serialized.retransmittable_frames;
1229 EXPECT_FALSE(creator_.HasPendingFrames()); 1221 EXPECT_FALSE(creator_.HasPendingFrames());
1230 1222
1231 // Close the FEC Group. 1223 // Close the FEC Group.
1232 creator_.ResetFecGroup(); 1224 creator_.ResetFecGroup();
1233 EXPECT_FALSE(creator_.IsFecGroupOpen()); 1225 EXPECT_FALSE(creator_.IsFecGroupOpen());
1234 } 1226 }
1235 1227
1236 } // namespace 1228 } // namespace
1237 } // namespace test 1229 } // namespace test
1238 } // namespace net 1230 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698