| 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 <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } | 163 } |
| 164 | 164 |
| 165 void CheckStreamFrame(const QuicFrame& frame, | 165 void CheckStreamFrame(const QuicFrame& frame, |
| 166 QuicStreamId stream_id, | 166 QuicStreamId stream_id, |
| 167 const string& data, | 167 const string& data, |
| 168 QuicStreamOffset offset, | 168 QuicStreamOffset offset, |
| 169 bool fin) { | 169 bool fin) { |
| 170 EXPECT_EQ(STREAM_FRAME, frame.type); | 170 EXPECT_EQ(STREAM_FRAME, frame.type); |
| 171 ASSERT_TRUE(frame.stream_frame); | 171 ASSERT_TRUE(frame.stream_frame); |
| 172 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); | 172 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); |
| 173 EXPECT_EQ(data, StringPiece(frame.stream_frame->frame_buffer, | 173 EXPECT_EQ(data, StringPiece(frame.stream_frame->data_buffer, |
| 174 frame.stream_frame->frame_length)); | 174 frame.stream_frame->data_length)); |
| 175 EXPECT_EQ(offset, frame.stream_frame->offset); | 175 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 176 EXPECT_EQ(fin, frame.stream_frame->fin); | 176 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 177 } | 177 } |
| 178 | 178 |
| 179 // Returns the number of bytes consumed by the header of packet, including | 179 // Returns the number of bytes consumed by the header of packet, including |
| 180 // the version. | 180 // the version. |
| 181 size_t GetPacketHeaderOverhead(QuicVersion version) { | 181 size_t GetPacketHeaderOverhead(QuicVersion version) { |
| 182 return GetPacketHeaderSize( | 182 return GetPacketHeaderSize( |
| 183 version, creator_.connection_id_length(), kIncludeVersion, | 183 version, creator_.connection_id_length(), kIncludeVersion, |
| 184 !kIncludePathId, !kIncludeDiversificationNonce, | 184 !kIncludePathId, !kIncludeDiversificationNonce, |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 | 599 |
| 600 ProcessPacket(serialized); | 600 ProcessPacket(serialized); |
| 601 } | 601 } |
| 602 | 602 |
| 603 TEST_P(QuicPacketCreatorTest, ConsumeData) { | 603 TEST_P(QuicPacketCreatorTest, ConsumeData) { |
| 604 QuicFrame frame; | 604 QuicFrame frame; |
| 605 QuicIOVector io_vector(MakeIOVector("test")); | 605 QuicIOVector io_vector(MakeIOVector("test")); |
| 606 ASSERT_TRUE( | 606 ASSERT_TRUE( |
| 607 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 607 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 608 ASSERT_TRUE(frame.stream_frame); | 608 ASSERT_TRUE(frame.stream_frame); |
| 609 size_t consumed = frame.stream_frame->frame_length; | 609 size_t consumed = frame.stream_frame->data_length; |
| 610 EXPECT_EQ(4u, consumed); | 610 EXPECT_EQ(4u, consumed); |
| 611 CheckStreamFrame(frame, 1u, "test", 0u, false); | 611 CheckStreamFrame(frame, 1u, "test", 0u, false); |
| 612 EXPECT_TRUE(creator_.HasPendingFrames()); | 612 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 613 } | 613 } |
| 614 | 614 |
| 615 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) { | 615 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) { |
| 616 QuicFrame frame; | 616 QuicFrame frame; |
| 617 QuicIOVector io_vector(MakeIOVector("test")); | 617 QuicIOVector io_vector(MakeIOVector("test")); |
| 618 ASSERT_TRUE( | 618 ASSERT_TRUE( |
| 619 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame)); | 619 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame)); |
| 620 ASSERT_TRUE(frame.stream_frame); | 620 ASSERT_TRUE(frame.stream_frame); |
| 621 size_t consumed = frame.stream_frame->frame_length; | 621 size_t consumed = frame.stream_frame->data_length; |
| 622 EXPECT_EQ(4u, consumed); | 622 EXPECT_EQ(4u, consumed); |
| 623 CheckStreamFrame(frame, 1u, "test", 10u, true); | 623 CheckStreamFrame(frame, 1u, "test", 10u, true); |
| 624 EXPECT_TRUE(creator_.HasPendingFrames()); | 624 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 625 } | 625 } |
| 626 | 626 |
| 627 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) { | 627 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) { |
| 628 QuicFrame frame; | 628 QuicFrame frame; |
| 629 QuicIOVector io_vector(nullptr, 0, 0); | 629 QuicIOVector io_vector(nullptr, 0, 0); |
| 630 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 630 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 631 ASSERT_TRUE(frame.stream_frame); | 631 ASSERT_TRUE(frame.stream_frame); |
| 632 size_t consumed = frame.stream_frame->frame_length; | 632 size_t consumed = frame.stream_frame->data_length; |
| 633 EXPECT_EQ(0u, consumed); | 633 EXPECT_EQ(0u, consumed); |
| 634 CheckStreamFrame(frame, 1u, string(), 0u, true); | 634 CheckStreamFrame(frame, 1u, string(), 0u, true); |
| 635 EXPECT_TRUE(creator_.HasPendingFrames()); | 635 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 636 } | 636 } |
| 637 | 637 |
| 638 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { | 638 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { |
| 639 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 639 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 640 GetEncryptionOverhead(); | 640 GetEncryptionOverhead(); |
| 641 for (size_t i = overhead; i < overhead + 100; ++i) { | 641 for (size_t i = overhead; i < overhead + 100; ++i) { |
| 642 creator_.SetMaxPacketLength(i); | 642 creator_.SetMaxPacketLength(i); |
| 643 const bool should_have_room = i > overhead + GetStreamFrameOverhead(); | 643 const bool should_have_room = i > overhead + GetStreamFrameOverhead(); |
| 644 ASSERT_EQ(should_have_room, | 644 ASSERT_EQ(should_have_room, |
| 645 creator_.HasRoomForStreamFrame(kClientDataStreamId1, kOffset)); | 645 creator_.HasRoomForStreamFrame(kClientDataStreamId1, kOffset)); |
| 646 if (should_have_room) { | 646 if (should_have_room) { |
| 647 QuicFrame frame; | 647 QuicFrame frame; |
| 648 QuicIOVector io_vector(MakeIOVector("testdata")); | 648 QuicIOVector io_vector(MakeIOVector("testdata")); |
| 649 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 649 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 650 .WillRepeatedly( | 650 .WillRepeatedly( |
| 651 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); | 651 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 652 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, | 652 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, |
| 653 kOffset, false, false, &frame)); | 653 kOffset, false, false, &frame)); |
| 654 ASSERT_TRUE(frame.stream_frame); | 654 ASSERT_TRUE(frame.stream_frame); |
| 655 size_t bytes_consumed = frame.stream_frame->frame_length; | 655 size_t bytes_consumed = frame.stream_frame->data_length; |
| 656 EXPECT_LT(0u, bytes_consumed); | 656 EXPECT_LT(0u, bytes_consumed); |
| 657 creator_.Flush(); | 657 creator_.Flush(); |
| 658 } | 658 } |
| 659 } | 659 } |
| 660 } | 660 } |
| 661 | 661 |
| 662 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { | 662 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { |
| 663 // Compute the total overhead for a single frame in packet. | 663 // Compute the total overhead for a single frame in packet. |
| 664 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 664 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 665 GetEncryptionOverhead() + GetStreamFrameOverhead(); | 665 GetEncryptionOverhead() + GetStreamFrameOverhead(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 699 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 700 | 700 |
| 701 QuicFrame frame; | 701 QuicFrame frame; |
| 702 QuicIOVector io_vector(MakeIOVector(data)); | 702 QuicIOVector io_vector(MakeIOVector(data)); |
| 703 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 703 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 704 .WillRepeatedly( | 704 .WillRepeatedly( |
| 705 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 705 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 706 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset, | 706 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset, |
| 707 false, true, &frame)); | 707 false, true, &frame)); |
| 708 ASSERT_TRUE(frame.stream_frame); | 708 ASSERT_TRUE(frame.stream_frame); |
| 709 size_t bytes_consumed = frame.stream_frame->frame_length; | 709 size_t bytes_consumed = frame.stream_frame->data_length; |
| 710 EXPECT_LT(0u, bytes_consumed); | 710 EXPECT_LT(0u, bytes_consumed); |
| 711 creator_.Flush(); | 711 creator_.Flush(); |
| 712 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | 712 ASSERT_TRUE(serialized_packet_.encrypted_buffer); |
| 713 // If there is not enough space in the packet to fit a padding frame | 713 // If there is not enough space in the packet to fit a padding frame |
| 714 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 714 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| 715 // will not be padded. | 715 // will not be padded. |
| 716 if (bytes_free < 3) { | 716 if (bytes_free < 3) { |
| 717 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 717 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 718 serialized_packet_.encrypted_length); | 718 serialized_packet_.encrypted_length); |
| 719 } else { | 719 } else { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 734 string data(capacity + delta, 'A'); | 734 string data(capacity + delta, 'A'); |
| 735 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 735 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 736 | 736 |
| 737 QuicFrame frame; | 737 QuicFrame frame; |
| 738 QuicIOVector io_vector(MakeIOVector(data)); | 738 QuicIOVector io_vector(MakeIOVector(data)); |
| 739 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 739 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 740 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 740 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 741 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, | 741 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, |
| 742 kOffset, false, false, &frame)); | 742 kOffset, false, false, &frame)); |
| 743 ASSERT_TRUE(frame.stream_frame); | 743 ASSERT_TRUE(frame.stream_frame); |
| 744 size_t bytes_consumed = frame.stream_frame->frame_length; | 744 size_t bytes_consumed = frame.stream_frame->data_length; |
| 745 EXPECT_LT(0u, bytes_consumed); | 745 EXPECT_LT(0u, bytes_consumed); |
| 746 creator_.Flush(); | 746 creator_.Flush(); |
| 747 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | 747 ASSERT_TRUE(serialized_packet_.encrypted_buffer); |
| 748 if (bytes_free > 0) { | 748 if (bytes_free > 0) { |
| 749 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 749 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 750 serialized_packet_.encrypted_length); | 750 serialized_packet_.encrypted_length); |
| 751 } else { | 751 } else { |
| 752 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); | 752 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); |
| 753 } | 753 } |
| 754 DeleteSerializedPacket(); | 754 DeleteSerializedPacket(); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 859 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 860 !kIncludeDiversificationNonce, creator_.connection_id_length(), | 860 !kIncludeDiversificationNonce, creator_.connection_id_length(), |
| 861 PACKET_1BYTE_PACKET_NUMBER, &payload_length)); | 861 PACKET_1BYTE_PACKET_NUMBER, &payload_length)); |
| 862 QuicFrame frame; | 862 QuicFrame frame; |
| 863 const string too_long_payload(payload_length * 2, 'a'); | 863 const string too_long_payload(payload_length * 2, 'a'); |
| 864 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 864 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 865 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 865 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 866 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 866 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 867 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 867 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 868 ASSERT_TRUE(frame.stream_frame); | 868 ASSERT_TRUE(frame.stream_frame); |
| 869 size_t consumed = frame.stream_frame->frame_length; | 869 size_t consumed = frame.stream_frame->data_length; |
| 870 EXPECT_EQ(payload_length, consumed); | 870 EXPECT_EQ(payload_length, consumed); |
| 871 const string payload(payload_length, 'a'); | 871 const string payload(payload_length, 'a'); |
| 872 CheckStreamFrame(frame, 1u, payload, 0u, false); | 872 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 873 creator_.Flush(); | 873 creator_.Flush(); |
| 874 DeleteSerializedPacket(); | 874 DeleteSerializedPacket(); |
| 875 } | 875 } |
| 876 | 876 |
| 877 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { | 877 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
| 878 if (!GetParam().version_serialization) { | 878 if (!GetParam().version_serialization) { |
| 879 creator_.StopSendingVersion(); | 879 creator_.StopSendingVersion(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 892 // Add a variety of frame types and then a padding frame. | 892 // Add a variety of frame types and then a padding frame. |
| 893 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 893 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 894 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 894 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 895 EXPECT_TRUE(creator_.HasPendingFrames()); | 895 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 896 | 896 |
| 897 QuicFrame frame; | 897 QuicFrame frame; |
| 898 QuicIOVector io_vector(MakeIOVector("test")); | 898 QuicIOVector io_vector(MakeIOVector("test")); |
| 899 ASSERT_TRUE( | 899 ASSERT_TRUE( |
| 900 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 900 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 901 ASSERT_TRUE(frame.stream_frame); | 901 ASSERT_TRUE(frame.stream_frame); |
| 902 size_t consumed = frame.stream_frame->frame_length; | 902 size_t consumed = frame.stream_frame->data_length; |
| 903 EXPECT_EQ(4u, consumed); | 903 EXPECT_EQ(4u, consumed); |
| 904 EXPECT_TRUE(creator_.HasPendingFrames()); | 904 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 905 | 905 |
| 906 QuicPaddingFrame padding_frame; | 906 QuicPaddingFrame padding_frame; |
| 907 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); | 907 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); |
| 908 EXPECT_TRUE(creator_.HasPendingFrames()); | 908 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 909 EXPECT_EQ(0u, creator_.BytesFree()); | 909 EXPECT_EQ(0u, creator_.BytesFree()); |
| 910 | 910 |
| 911 // Packet is full. Creator will flush. | 911 // Packet is full. Creator will flush. |
| 912 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 912 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 EXPECT_TRUE(creator_.HasPendingFrames()); | 952 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 953 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 953 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 954 EXPECT_LT(0u, creator_.BytesFree()); | 954 EXPECT_LT(0u, creator_.BytesFree()); |
| 955 | 955 |
| 956 // Make sure that an additional stream frame can be added to the packet. | 956 // Make sure that an additional stream frame can be added to the packet. |
| 957 QuicFrame frame; | 957 QuicFrame frame; |
| 958 QuicIOVector io_vector(MakeIOVector("test")); | 958 QuicIOVector io_vector(MakeIOVector("test")); |
| 959 ASSERT_TRUE( | 959 ASSERT_TRUE( |
| 960 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame)); | 960 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame)); |
| 961 ASSERT_TRUE(frame.stream_frame); | 961 ASSERT_TRUE(frame.stream_frame); |
| 962 size_t consumed = frame.stream_frame->frame_length; | 962 size_t consumed = frame.stream_frame->data_length; |
| 963 EXPECT_EQ(4u, consumed); | 963 EXPECT_EQ(4u, consumed); |
| 964 EXPECT_TRUE(creator_.HasPendingFrames()); | 964 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 965 | 965 |
| 966 // Ensure the packet is successfully created, and the packet size estimate | 966 // Ensure the packet is successfully created, and the packet size estimate |
| 967 // matches the serialized packet length. | 967 // matches the serialized packet length. |
| 968 if (GetParam().version <= QUIC_VERSION_33) { | 968 if (GetParam().version <= QUIC_VERSION_33) { |
| 969 EXPECT_CALL(entropy_calculator_, EntropyHash(_)) | 969 EXPECT_CALL(entropy_calculator_, EntropyHash(_)) |
| 970 .WillOnce(testing::Return(0)); | 970 .WillOnce(testing::Return(0)); |
| 971 } | 971 } |
| 972 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 972 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1047 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1048 EXPECT_EQ(0u, creator_.packet_number()); | 1048 EXPECT_EQ(0u, creator_.packet_number()); |
| 1049 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1049 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1050 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1050 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1051 // Add a stream frame to the creator. | 1051 // Add a stream frame to the creator. |
| 1052 QuicFrame frame; | 1052 QuicFrame frame; |
| 1053 QuicIOVector io_vector(MakeIOVector("test")); | 1053 QuicIOVector io_vector(MakeIOVector("test")); |
| 1054 ASSERT_TRUE( | 1054 ASSERT_TRUE( |
| 1055 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1055 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1056 ASSERT_TRUE(frame.stream_frame); | 1056 ASSERT_TRUE(frame.stream_frame); |
| 1057 size_t consumed = frame.stream_frame->frame_length; | 1057 size_t consumed = frame.stream_frame->data_length; |
| 1058 EXPECT_EQ(4u, consumed); | 1058 EXPECT_EQ(4u, consumed); |
| 1059 EXPECT_TRUE(creator_.HasPendingFrames()); | 1059 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1060 EXPECT_EQ(0u, creator_.packet_number()); | 1060 EXPECT_EQ(0u, creator_.packet_number()); |
| 1061 | 1061 |
| 1062 // Change current path. | 1062 // Change current path. |
| 1063 QuicPathId kPathId1 = 1; | 1063 QuicPathId kPathId1 = 1; |
| 1064 EXPECT_DFATAL(creator_.SetCurrentPath(kPathId1, 1, 0), | 1064 EXPECT_DFATAL(creator_.SetCurrentPath(kPathId1, 1, 0), |
| 1065 "Unable to change paths when a packet is under construction"); | 1065 "Unable to change paths when a packet is under construction"); |
| 1066 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1066 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1067 .Times(1) | 1067 .Times(1) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1079 // Change current path back. | 1079 // Change current path back. |
| 1080 creator_.SetCurrentPath(kDefaultPathId, 2, 1); | 1080 creator_.SetCurrentPath(kDefaultPathId, 2, 1); |
| 1081 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1081 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1082 EXPECT_EQ(1u, creator_.packet_number()); | 1082 EXPECT_EQ(1u, creator_.packet_number()); |
| 1083 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1083 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1084 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1084 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1085 // Add a stream frame to the creator. | 1085 // Add a stream frame to the creator. |
| 1086 ASSERT_TRUE( | 1086 ASSERT_TRUE( |
| 1087 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1087 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1088 ASSERT_TRUE(frame.stream_frame); | 1088 ASSERT_TRUE(frame.stream_frame); |
| 1089 consumed = frame.stream_frame->frame_length; | 1089 consumed = frame.stream_frame->data_length; |
| 1090 EXPECT_EQ(4u, consumed); | 1090 EXPECT_EQ(4u, consumed); |
| 1091 EXPECT_TRUE(creator_.HasPendingFrames()); | 1091 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1092 | 1092 |
| 1093 // Does not change current path. | 1093 // Does not change current path. |
| 1094 creator_.SetCurrentPath(kDefaultPathId, 2, 0); | 1094 creator_.SetCurrentPath(kDefaultPathId, 2, 0); |
| 1095 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1095 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1096 EXPECT_TRUE(creator_.HasPendingFrames()); | 1096 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1097 EXPECT_EQ(1u, creator_.packet_number()); | 1097 EXPECT_EQ(1u, creator_.packet_number()); |
| 1098 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1098 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1099 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1099 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { | 1138 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { |
| 1139 // Current path is the default path. | 1139 // Current path is the default path. |
| 1140 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1140 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1141 EXPECT_EQ(0u, creator_.packet_number()); | 1141 EXPECT_EQ(0u, creator_.packet_number()); |
| 1142 // Add a stream frame to the creator and flush the packet. | 1142 // Add a stream frame to the creator and flush the packet. |
| 1143 QuicFrame frame; | 1143 QuicFrame frame; |
| 1144 QuicIOVector io_vector(MakeIOVector("test")); | 1144 QuicIOVector io_vector(MakeIOVector("test")); |
| 1145 ASSERT_TRUE( | 1145 ASSERT_TRUE( |
| 1146 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1146 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1147 ASSERT_TRUE(frame.stream_frame); | 1147 ASSERT_TRUE(frame.stream_frame); |
| 1148 size_t consumed = frame.stream_frame->frame_length; | 1148 size_t consumed = frame.stream_frame->data_length; |
| 1149 EXPECT_EQ(4u, consumed); | 1149 EXPECT_EQ(4u, consumed); |
| 1150 EXPECT_TRUE(creator_.HasPendingFrames()); | 1150 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1151 EXPECT_EQ(0u, creator_.packet_number()); | 1151 EXPECT_EQ(0u, creator_.packet_number()); |
| 1152 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1152 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1153 .WillRepeatedly( | 1153 .WillRepeatedly( |
| 1154 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 1154 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1155 creator_.Flush(); | 1155 creator_.Flush(); |
| 1156 EXPECT_FALSE(creator_.HasPendingFrames()); | 1156 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1157 EXPECT_EQ(1u, creator_.packet_number()); | 1157 EXPECT_EQ(1u, creator_.packet_number()); |
| 1158 // Verify serialized data packet's path id. | 1158 // Verify serialized data packet's path id. |
| 1159 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); | 1159 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); |
| 1160 DeleteSerializedPacket(); | 1160 DeleteSerializedPacket(); |
| 1161 | 1161 |
| 1162 // Change to path 1. | 1162 // Change to path 1. |
| 1163 QuicPathId kPathId1 = 1; | 1163 QuicPathId kPathId1 = 1; |
| 1164 creator_.SetCurrentPath(kPathId1, 1, 0); | 1164 creator_.SetCurrentPath(kPathId1, 1, 0); |
| 1165 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1165 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1166 EXPECT_FALSE(creator_.HasPendingFrames()); | 1166 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1167 EXPECT_EQ(0u, creator_.packet_number()); | 1167 EXPECT_EQ(0u, creator_.packet_number()); |
| 1168 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1168 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1169 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1169 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1170 | 1170 |
| 1171 // Add a stream frame to the creator and flush the packet. | 1171 // Add a stream frame to the creator and flush the packet. |
| 1172 ASSERT_TRUE( | 1172 ASSERT_TRUE( |
| 1173 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1173 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1174 ASSERT_TRUE(frame.stream_frame); | 1174 ASSERT_TRUE(frame.stream_frame); |
| 1175 consumed = frame.stream_frame->frame_length; | 1175 consumed = frame.stream_frame->data_length; |
| 1176 EXPECT_EQ(4u, consumed); | 1176 EXPECT_EQ(4u, consumed); |
| 1177 EXPECT_TRUE(creator_.HasPendingFrames()); | 1177 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1178 creator_.Flush(); | 1178 creator_.Flush(); |
| 1179 // Verify serialized data packet's path id. | 1179 // Verify serialized data packet's path id. |
| 1180 EXPECT_EQ(kPathId1, serialized_packet_.path_id); | 1180 EXPECT_EQ(kPathId1, serialized_packet_.path_id); |
| 1181 DeleteSerializedPacket(); | 1181 DeleteSerializedPacket(); |
| 1182 } | 1182 } |
| 1183 | 1183 |
| 1184 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { | 1184 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { |
| 1185 FLAGS_quic_never_write_unencrypted_data = true; | 1185 FLAGS_quic_never_write_unencrypted_data = true; |
| 1186 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); | 1186 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); |
| 1187 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1187 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
| 1188 StringPiece()); | 1188 StringPiece()); |
| 1189 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1189 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
| 1190 "Cannot send stream data without encryption."); | 1190 "Cannot send stream data without encryption."); |
| 1191 } | 1191 } |
| 1192 | 1192 |
| 1193 } // namespace | 1193 } // namespace |
| 1194 } // namespace test | 1194 } // namespace test |
| 1195 } // namespace net | 1195 } // namespace net |
| OLD | NEW |