| OLD | NEW |
| 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 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 484 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 485 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 485 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 486 } | 486 } |
| 487 ProcessPacket(serialized.packet); | 487 ProcessPacket(serialized.packet); |
| 488 delete serialized.packet; | 488 delete serialized.packet; |
| 489 } | 489 } |
| 490 | 490 |
| 491 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { | 491 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { |
| 492 QuicFrame frame; | 492 QuicFrame frame; |
| 493 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); | 493 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); |
| 494 scoped_ptr<char[]> stream_buffer; | 494 UniqueStreamBuffer stream_buffer; |
| 495 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0u, 0u, false, &frame, | 495 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0u, 0u, false, &frame, |
| 496 &stream_buffer); | 496 &stream_buffer); |
| 497 RetransmittableFrames frames(ENCRYPTION_NONE); | 497 RetransmittableFrames frames(ENCRYPTION_NONE); |
| 498 frames.AddFrame(frame); | 498 frames.AddFrame(frame); |
| 499 frames.set_needs_padding(true); | 499 frames.set_needs_padding(true); |
| 500 char buffer[kMaxPacketSize]; | 500 char buffer[kMaxPacketSize]; |
| 501 SerializedPacket serialized = creator_.ReserializeAllFrames( | 501 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 502 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, | 502 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, |
| 503 kMaxPacketSize); | 503 kMaxPacketSize); |
| 504 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); | 504 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
| 505 delete serialized.packet; | 505 delete serialized.packet; |
| 506 } | 506 } |
| 507 | 507 |
| 508 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { | 508 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
| 509 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 509 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 510 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 510 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 511 size_t capacity = kDefaultMaxPacketSize - overhead; | 511 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 512 for (int delta = -5; delta <= 0; ++delta) { | 512 for (int delta = -5; delta <= 0; ++delta) { |
| 513 string data(capacity + delta, 'A'); | 513 string data(capacity + delta, 'A'); |
| 514 size_t bytes_free = 0 - delta; | 514 size_t bytes_free = 0 - delta; |
| 515 | 515 |
| 516 QuicFrame frame; | 516 QuicFrame frame; |
| 517 QuicIOVector io_vector(MakeIOVector(data)); | 517 QuicIOVector io_vector(MakeIOVector(data)); |
| 518 scoped_ptr<char[]> stream_buffer; | 518 UniqueStreamBuffer stream_buffer; |
| 519 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0, kOffset, false, | 519 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0, kOffset, false, |
| 520 &frame, &stream_buffer); | 520 &frame, &stream_buffer); |
| 521 RetransmittableFrames frames(ENCRYPTION_NONE); | 521 RetransmittableFrames frames(ENCRYPTION_NONE); |
| 522 frames.AddFrame(frame); | 522 frames.AddFrame(frame); |
| 523 frames.set_needs_padding(true); | 523 frames.set_needs_padding(true); |
| 524 char buffer[kMaxPacketSize]; | 524 char buffer[kMaxPacketSize]; |
| 525 SerializedPacket serialized = creator_.ReserializeAllFrames( | 525 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 526 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), | 526 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), |
| 527 buffer, kMaxPacketSize); | 527 buffer, kMaxPacketSize); |
| 528 | 528 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 creator_.StopFecProtectingPackets(); | 616 creator_.StopFecProtectingPackets(); |
| 617 EXPECT_FALSE(creator_.IsFecProtected()); | 617 EXPECT_FALSE(creator_.IsFecProtected()); |
| 618 creator_.StartFecProtectingPackets(); | 618 creator_.StartFecProtectingPackets(); |
| 619 EXPECT_TRUE(creator_.IsFecProtected()); | 619 EXPECT_TRUE(creator_.IsFecProtected()); |
| 620 } | 620 } |
| 621 | 621 |
| 622 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { | 622 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { |
| 623 // Add a stream frame to the creator. | 623 // Add a stream frame to the creator. |
| 624 QuicFrame frame; | 624 QuicFrame frame; |
| 625 QuicIOVector io_vector(MakeIOVector("test")); | 625 QuicIOVector io_vector(MakeIOVector("test")); |
| 626 scoped_ptr<char[]> stream_buffer; | 626 UniqueStreamBuffer stream_buffer; |
| 627 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 627 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, |
| 628 &frame, &stream_buffer); | 628 &frame, &stream_buffer); |
| 629 EXPECT_EQ(4u, consumed); | 629 EXPECT_EQ(4u, consumed); |
| 630 ASSERT_TRUE(frame.stream_frame); | 630 ASSERT_TRUE(frame.stream_frame); |
| 631 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | 631 EXPECT_TRUE(creator_.AddSavedFrame(frame)); |
| 632 EXPECT_TRUE(creator_.HasPendingFrames()); | 632 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 633 | 633 |
| 634 // Enable FEC protection, and send FEC packet every 6 packets. | 634 // Enable FEC protection, and send FEC packet every 6 packets. |
| 635 creator_.set_max_packets_per_fec_group(6); | 635 creator_.set_max_packets_per_fec_group(6); |
| 636 EXPECT_TRUE(creator_.IsFecEnabled()); | 636 EXPECT_TRUE(creator_.IsFecEnabled()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 647 EXPECT_FALSE(creator_.HasPendingFrames()); | 647 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 648 | 648 |
| 649 // Since all pending frames have been serialized, turning FEC on should work. | 649 // Since all pending frames have been serialized, turning FEC on should work. |
| 650 creator_.StartFecProtectingPackets(); | 650 creator_.StartFecProtectingPackets(); |
| 651 EXPECT_TRUE(creator_.IsFecProtected()); | 651 EXPECT_TRUE(creator_.IsFecProtected()); |
| 652 } | 652 } |
| 653 | 653 |
| 654 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { | 654 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { |
| 655 QuicFrame frame; | 655 QuicFrame frame; |
| 656 QuicIOVector io_vector(MakeIOVector("test")); | 656 QuicIOVector io_vector(MakeIOVector("test")); |
| 657 scoped_ptr<char[]> stream_buffer; | 657 UniqueStreamBuffer stream_buffer; |
| 658 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 658 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, |
| 659 &frame, &stream_buffer); | 659 &frame, &stream_buffer); |
| 660 EXPECT_EQ(4u, consumed); | 660 EXPECT_EQ(4u, consumed); |
| 661 CheckStreamFrame(frame, 1u, "test", 0u, false); | 661 CheckStreamFrame(frame, 1u, "test", 0u, false); |
| 662 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 662 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); |
| 663 cleanup_frames.AddFrame(frame); | 663 cleanup_frames.AddFrame(frame); |
| 664 } | 664 } |
| 665 | 665 |
| 666 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { | 666 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { |
| 667 QuicFrame frame; | 667 QuicFrame frame; |
| 668 QuicIOVector io_vector(MakeIOVector("test")); | 668 QuicIOVector io_vector(MakeIOVector("test")); |
| 669 scoped_ptr<char[]> stream_buffer; | 669 UniqueStreamBuffer stream_buffer; |
| 670 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 10u, true, | 670 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 10u, true, |
| 671 &frame, &stream_buffer); | 671 &frame, &stream_buffer); |
| 672 EXPECT_EQ(4u, consumed); | 672 EXPECT_EQ(4u, consumed); |
| 673 CheckStreamFrame(frame, 1u, "test", 10u, true); | 673 CheckStreamFrame(frame, 1u, "test", 10u, true); |
| 674 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 674 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); |
| 675 cleanup_frames.AddFrame(frame); | 675 cleanup_frames.AddFrame(frame); |
| 676 } | 676 } |
| 677 | 677 |
| 678 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { | 678 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { |
| 679 QuicFrame frame; | 679 QuicFrame frame; |
| 680 QuicIOVector io_vector(nullptr, 0, 0); | 680 QuicIOVector io_vector(nullptr, 0, 0); |
| 681 scoped_ptr<char[]> stream_buffer; | 681 UniqueStreamBuffer stream_buffer; |
| 682 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, | 682 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, |
| 683 &frame, &stream_buffer); | 683 &frame, &stream_buffer); |
| 684 EXPECT_EQ(0u, consumed); | 684 EXPECT_EQ(0u, consumed); |
| 685 CheckStreamFrame(frame, 1u, string(), 0u, true); | 685 CheckStreamFrame(frame, 1u, string(), 0u, true); |
| 686 delete frame.stream_frame; | 686 delete frame.stream_frame; |
| 687 } | 687 } |
| 688 | 688 |
| 689 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { | 689 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { |
| 690 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 690 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 691 + GetEncryptionOverhead(); | 691 + GetEncryptionOverhead(); |
| 692 for (size_t i = overhead; i < overhead + 100; ++i) { | 692 for (size_t i = overhead; i < overhead + 100; ++i) { |
| 693 creator_.SetMaxPacketLength(i); | 693 creator_.SetMaxPacketLength(i); |
| 694 const bool should_have_room = i > overhead + GetStreamFrameOverhead( | 694 const bool should_have_room = i > overhead + GetStreamFrameOverhead( |
| 695 NOT_IN_FEC_GROUP); | 695 NOT_IN_FEC_GROUP); |
| 696 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( | 696 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( |
| 697 kClientDataStreamId1, kOffset)); | 697 kClientDataStreamId1, kOffset)); |
| 698 if (should_have_room) { | 698 if (should_have_room) { |
| 699 QuicFrame frame; | 699 QuicFrame frame; |
| 700 QuicIOVector io_vector(MakeIOVector("testdata")); | 700 QuicIOVector io_vector(MakeIOVector("testdata")); |
| 701 scoped_ptr<char[]> stream_buffer; | 701 UniqueStreamBuffer stream_buffer; |
| 702 size_t bytes_consumed = | 702 size_t bytes_consumed = |
| 703 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, | 703 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, |
| 704 kOffset, false, &frame, &stream_buffer); | 704 kOffset, false, &frame, &stream_buffer); |
| 705 EXPECT_LT(0u, bytes_consumed); | 705 EXPECT_LT(0u, bytes_consumed); |
| 706 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 706 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 707 char buffer[kMaxPacketSize]; | 707 char buffer[kMaxPacketSize]; |
| 708 SerializedPacket serialized_packet = | 708 SerializedPacket serialized_packet = |
| 709 creator_.SerializePacket(buffer, kMaxPacketSize); | 709 creator_.SerializePacket(buffer, kMaxPacketSize); |
| 710 ASSERT_TRUE(serialized_packet.packet); | 710 ASSERT_TRUE(serialized_packet.packet); |
| 711 delete serialized_packet.packet; | 711 delete serialized_packet.packet; |
| 712 delete serialized_packet.retransmittable_frames; | 712 delete serialized_packet.retransmittable_frames; |
| 713 } | 713 } |
| 714 } | 714 } |
| 715 } | 715 } |
| 716 | 716 |
| 717 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { | 717 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { |
| 718 // Compute the total overhead for a single frame in packet. | 718 // Compute the total overhead for a single frame in packet. |
| 719 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 719 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 720 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 720 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 721 size_t capacity = kDefaultMaxPacketSize - overhead; | 721 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 722 // Now, test various sizes around this size. | 722 // Now, test various sizes around this size. |
| 723 for (int delta = -5; delta <= 5; ++delta) { | 723 for (int delta = -5; delta <= 5; ++delta) { |
| 724 string data(capacity + delta, 'A'); | 724 string data(capacity + delta, 'A'); |
| 725 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 725 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 726 QuicFrame frame; | 726 QuicFrame frame; |
| 727 QuicIOVector io_vector(MakeIOVector(data)); | 727 QuicIOVector io_vector(MakeIOVector(data)); |
| 728 scoped_ptr<char[]> stream_buffer; | 728 UniqueStreamBuffer stream_buffer; |
| 729 size_t bytes_consumed = | 729 size_t bytes_consumed = |
| 730 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 730 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, |
| 731 false, &frame, &stream_buffer); | 731 false, &frame, &stream_buffer); |
| 732 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 732 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 733 | 733 |
| 734 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 734 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 735 // BytesFree() returns bytes available for the next frame, which will | 735 // BytesFree() returns bytes available for the next frame, which will |
| 736 // be two bytes smaller since the stream frame would need to be grown. | 736 // be two bytes smaller since the stream frame would need to be grown. |
| 737 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); | 737 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); |
| 738 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; | 738 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 752 // Compute the total overhead for a single frame in packet. | 752 // Compute the total overhead for a single frame in packet. |
| 753 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) | 753 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) |
| 754 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); | 754 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); |
| 755 size_t capacity = kDefaultMaxPacketSize - overhead; | 755 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 756 // Now, test various sizes around this size. | 756 // Now, test various sizes around this size. |
| 757 for (int delta = -5; delta <= 5; ++delta) { | 757 for (int delta = -5; delta <= 5; ++delta) { |
| 758 string data(capacity + delta, 'A'); | 758 string data(capacity + delta, 'A'); |
| 759 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 759 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 760 QuicFrame frame; | 760 QuicFrame frame; |
| 761 QuicIOVector io_vector(MakeIOVector(data)); | 761 QuicIOVector io_vector(MakeIOVector(data)); |
| 762 scoped_ptr<char[]> stream_buffer; | 762 UniqueStreamBuffer stream_buffer; |
| 763 size_t bytes_consumed = | 763 size_t bytes_consumed = |
| 764 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 764 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, |
| 765 false, &frame, &stream_buffer); | 765 false, &frame, &stream_buffer); |
| 766 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 766 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 767 | 767 |
| 768 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 768 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 769 // BytesFree() returns bytes available for the next frame. Since stream | 769 // BytesFree() returns bytes available for the next frame. Since stream |
| 770 // frame does not grow for FEC protected packets, this should be the same | 770 // frame does not grow for FEC protected packets, this should be the same |
| 771 // as bytes_free (bound by 0). | 771 // as bytes_free (bound by 0). |
| 772 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); | 772 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 787 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 787 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 788 ASSERT_GT(kMaxPacketSize, overhead); | 788 ASSERT_GT(kMaxPacketSize, overhead); |
| 789 size_t capacity = kDefaultMaxPacketSize - overhead; | 789 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 790 // Now, test various sizes around this size. | 790 // Now, test various sizes around this size. |
| 791 for (int delta = -5; delta <= 5; ++delta) { | 791 for (int delta = -5; delta <= 5; ++delta) { |
| 792 string data(capacity + delta, 'A'); | 792 string data(capacity + delta, 'A'); |
| 793 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 793 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 794 | 794 |
| 795 QuicFrame frame; | 795 QuicFrame frame; |
| 796 QuicIOVector io_vector(MakeIOVector(data)); | 796 QuicIOVector io_vector(MakeIOVector(data)); |
| 797 scoped_ptr<char[]> stream_buffer; | 797 UniqueStreamBuffer stream_buffer; |
| 798 size_t bytes_consumed = creator_.CreateStreamFrame( | 798 size_t bytes_consumed = creator_.CreateStreamFrame( |
| 799 kCryptoStreamId, io_vector, 0u, kOffset, false, &frame, &stream_buffer); | 799 kCryptoStreamId, io_vector, 0u, kOffset, false, &frame, &stream_buffer); |
| 800 EXPECT_LT(0u, bytes_consumed); | 800 EXPECT_LT(0u, bytes_consumed); |
| 801 ASSERT_TRUE(creator_.AddPaddedSavedFrame(frame, nullptr)); | 801 ASSERT_TRUE(creator_.AddPaddedSavedFrame(frame, nullptr)); |
| 802 char buffer[kMaxPacketSize]; | 802 char buffer[kMaxPacketSize]; |
| 803 SerializedPacket serialized_packet = | 803 SerializedPacket serialized_packet = |
| 804 creator_.SerializePacket(buffer, kMaxPacketSize); | 804 creator_.SerializePacket(buffer, kMaxPacketSize); |
| 805 ASSERT_TRUE(serialized_packet.packet); | 805 ASSERT_TRUE(serialized_packet.packet); |
| 806 // If there is not enough space in the packet to fit a padding frame | 806 // If there is not enough space in the packet to fit a padding frame |
| 807 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 807 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| (...skipping 15 matching lines...) Expand all Loading... |
| 823 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 823 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 824 ASSERT_GT(kDefaultMaxPacketSize, overhead); | 824 ASSERT_GT(kDefaultMaxPacketSize, overhead); |
| 825 size_t capacity = kDefaultMaxPacketSize - overhead; | 825 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 826 // Now, test various sizes around this size. | 826 // Now, test various sizes around this size. |
| 827 for (int delta = -5; delta <= 5; ++delta) { | 827 for (int delta = -5; delta <= 5; ++delta) { |
| 828 string data(capacity + delta, 'A'); | 828 string data(capacity + delta, 'A'); |
| 829 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 829 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 830 | 830 |
| 831 QuicFrame frame; | 831 QuicFrame frame; |
| 832 QuicIOVector io_vector(MakeIOVector(data)); | 832 QuicIOVector io_vector(MakeIOVector(data)); |
| 833 scoped_ptr<char[]> stream_buffer; | 833 UniqueStreamBuffer stream_buffer; |
| 834 size_t bytes_consumed = | 834 size_t bytes_consumed = |
| 835 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 835 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, |
| 836 false, &frame, &stream_buffer); | 836 false, &frame, &stream_buffer); |
| 837 EXPECT_LT(0u, bytes_consumed); | 837 EXPECT_LT(0u, bytes_consumed); |
| 838 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 838 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 839 char buffer[kMaxPacketSize]; | 839 char buffer[kMaxPacketSize]; |
| 840 SerializedPacket serialized_packet = | 840 SerializedPacket serialized_packet = |
| 841 creator_.SerializePacket(buffer, kMaxPacketSize); | 841 creator_.SerializePacket(buffer, kMaxPacketSize); |
| 842 ASSERT_TRUE(serialized_packet.packet); | 842 ASSERT_TRUE(serialized_packet.packet); |
| 843 if (bytes_free > 0) { | 843 if (bytes_free > 0) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 959 // A string larger than fits into a frame. | 959 // A string larger than fits into a frame. |
| 960 size_t payload_length; | 960 size_t payload_length; |
| 961 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( | 961 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( |
| 962 client_framer_.version(), | 962 client_framer_.version(), |
| 963 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 963 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 964 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, | 964 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, |
| 965 NOT_IN_FEC_GROUP, &payload_length)); | 965 NOT_IN_FEC_GROUP, &payload_length)); |
| 966 QuicFrame frame; | 966 QuicFrame frame; |
| 967 const string too_long_payload(payload_length * 2, 'a'); | 967 const string too_long_payload(payload_length * 2, 'a'); |
| 968 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 968 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 969 scoped_ptr<char[]> stream_buffer; | 969 UniqueStreamBuffer stream_buffer; |
| 970 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, | 970 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, |
| 971 &frame, &stream_buffer); | 971 &frame, &stream_buffer); |
| 972 EXPECT_EQ(payload_length, consumed); | 972 EXPECT_EQ(payload_length, consumed); |
| 973 const string payload(payload_length, 'a'); | 973 const string payload(payload_length, 'a'); |
| 974 CheckStreamFrame(frame, 1u, payload, 0u, false); | 974 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 975 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 975 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); |
| 976 cleanup_frames.AddFrame(frame); | 976 cleanup_frames.AddFrame(frame); |
| 977 } | 977 } |
| 978 | 978 |
| 979 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { | 979 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 990 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 990 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), |
| 991 creator_.BytesFree()); | 991 creator_.BytesFree()); |
| 992 | 992 |
| 993 // Add a variety of frame types and then a padding frame. | 993 // Add a variety of frame types and then a padding frame. |
| 994 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 994 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 995 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 995 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 996 EXPECT_TRUE(creator_.HasPendingFrames()); | 996 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 997 | 997 |
| 998 QuicFrame frame; | 998 QuicFrame frame; |
| 999 QuicIOVector io_vector(MakeIOVector("test")); | 999 QuicIOVector io_vector(MakeIOVector("test")); |
| 1000 scoped_ptr<char[]> stream_buffer; | 1000 UniqueStreamBuffer stream_buffer; |
| 1001 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 1001 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, |
| 1002 &frame, &stream_buffer); | 1002 &frame, &stream_buffer); |
| 1003 EXPECT_EQ(4u, consumed); | 1003 EXPECT_EQ(4u, consumed); |
| 1004 ASSERT_TRUE(frame.stream_frame); | 1004 ASSERT_TRUE(frame.stream_frame); |
| 1005 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | 1005 EXPECT_TRUE(creator_.AddSavedFrame(frame)); |
| 1006 EXPECT_TRUE(creator_.HasPendingFrames()); | 1006 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1007 | 1007 |
| 1008 QuicPaddingFrame padding_frame; | 1008 QuicPaddingFrame padding_frame; |
| 1009 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&padding_frame))); | 1009 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&padding_frame))); |
| 1010 EXPECT_TRUE(creator_.HasPendingFrames()); | 1010 EXPECT_TRUE(creator_.HasPendingFrames()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 | 1051 |
| 1052 // Add ack frame to creator. | 1052 // Add ack frame to creator. |
| 1053 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1053 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 1054 EXPECT_TRUE(creator_.HasPendingFrames()); | 1054 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1055 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 1055 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 1056 EXPECT_LT(0u, creator_.BytesFree()); | 1056 EXPECT_LT(0u, creator_.BytesFree()); |
| 1057 | 1057 |
| 1058 // 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. |
| 1059 QuicFrame stream_frame; | 1059 QuicFrame stream_frame; |
| 1060 QuicIOVector io_vector(MakeIOVector("test")); | 1060 QuicIOVector io_vector(MakeIOVector("test")); |
| 1061 scoped_ptr<char[]> stream_buffer; | 1061 UniqueStreamBuffer stream_buffer; |
| 1062 size_t consumed = creator_.CreateStreamFrame(2u, io_vector, 0u, 0u, false, | 1062 size_t consumed = creator_.CreateStreamFrame(2u, io_vector, 0u, 0u, false, |
| 1063 &stream_frame, &stream_buffer); | 1063 &stream_frame, &stream_buffer); |
| 1064 EXPECT_EQ(4u, consumed); | 1064 EXPECT_EQ(4u, consumed); |
| 1065 ASSERT_TRUE(stream_frame.stream_frame); | 1065 ASSERT_TRUE(stream_frame.stream_frame); |
| 1066 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame)); | 1066 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame)); |
| 1067 EXPECT_TRUE(creator_.HasPendingFrames()); | 1067 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1068 | 1068 |
| 1069 // Ensure the packet is successfully created, and the packet size estimate | 1069 // Ensure the packet is successfully created, and the packet size estimate |
| 1070 // matches the serialized packet length. | 1070 // matches the serialized packet length. |
| 1071 EXPECT_CALL(entropy_calculator_, | 1071 EXPECT_CALL(entropy_calculator_, |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 | 1197 |
| 1198 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); | 1198 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); |
| 1199 ASSERT_EQ(3u, serialized.packet_number); | 1199 ASSERT_EQ(3u, serialized.packet_number); |
| 1200 delete serialized.packet; | 1200 delete serialized.packet; |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { | 1203 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { |
| 1204 // Add a stream frame to the creator. | 1204 // Add a stream frame to the creator. |
| 1205 QuicFrame frame; | 1205 QuicFrame frame; |
| 1206 QuicIOVector io_vector(MakeIOVector("test")); | 1206 QuicIOVector io_vector(MakeIOVector("test")); |
| 1207 scoped_ptr<char[]> stream_buffer; | 1207 UniqueStreamBuffer stream_buffer; |
| 1208 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 1208 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, |
| 1209 &frame, &stream_buffer); | 1209 &frame, &stream_buffer); |
| 1210 EXPECT_EQ(4u, consumed); | 1210 EXPECT_EQ(4u, consumed); |
| 1211 ASSERT_TRUE(frame.stream_frame); | 1211 ASSERT_TRUE(frame.stream_frame); |
| 1212 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | 1212 EXPECT_TRUE(creator_.AddSavedFrame(frame)); |
| 1213 EXPECT_TRUE(creator_.HasPendingFrames()); | 1213 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1214 EXPECT_DFATAL(creator_.ResetFecGroup(), | 1214 EXPECT_DFATAL(creator_.ResetFecGroup(), |
| 1215 "Cannot reset FEC group with pending frames."); | 1215 "Cannot reset FEC group with pending frames."); |
| 1216 | 1216 |
| 1217 // Serialize packet for transmission. | 1217 // Serialize packet for transmission. |
| 1218 char buffer[kMaxPacketSize]; | 1218 char buffer[kMaxPacketSize]; |
| 1219 SerializedPacket serialized = | 1219 SerializedPacket serialized = |
| 1220 creator_.SerializePacket(buffer, kMaxPacketSize); | 1220 creator_.SerializePacket(buffer, kMaxPacketSize); |
| 1221 delete serialized.packet; | 1221 delete serialized.packet; |
| 1222 delete serialized.retransmittable_frames; | 1222 delete serialized.retransmittable_frames; |
| 1223 EXPECT_FALSE(creator_.HasPendingFrames()); | 1223 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1224 | 1224 |
| 1225 // Close the FEC Group. | 1225 // Close the FEC Group. |
| 1226 creator_.ResetFecGroup(); | 1226 creator_.ResetFecGroup(); |
| 1227 EXPECT_FALSE(creator_.IsFecGroupOpen()); | 1227 EXPECT_FALSE(creator_.IsFecGroupOpen()); |
| 1228 } | 1228 } |
| 1229 | 1229 |
| 1230 } // namespace | 1230 } // namespace |
| 1231 } // namespace test | 1231 } // namespace test |
| 1232 } // namespace net | 1232 } // namespace net |
| OLD | NEW |