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/macros.h" | 9 #include "base/macros.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 frame.stream_frame->frame_length)); | 175 frame.stream_frame->frame_length)); |
176 EXPECT_EQ(offset, frame.stream_frame->offset); | 176 EXPECT_EQ(offset, frame.stream_frame->offset); |
177 EXPECT_EQ(fin, frame.stream_frame->fin); | 177 EXPECT_EQ(fin, frame.stream_frame->fin); |
178 } | 178 } |
179 | 179 |
180 // Returns the number of bytes consumed by the header of packet, including | 180 // Returns the number of bytes consumed by the header of packet, including |
181 // the version. | 181 // the version. |
182 size_t GetPacketHeaderOverhead() { | 182 size_t GetPacketHeaderOverhead() { |
183 return GetPacketHeaderSize( | 183 return GetPacketHeaderSize( |
184 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, | 184 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, |
185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), | 185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
186 NOT_IN_FEC_GROUP); | |
187 } | 186 } |
188 | 187 |
189 // Returns the number of bytes of overhead that will be added to a packet | 188 // Returns the number of bytes of overhead that will be added to a packet |
190 // of maximum length. | 189 // of maximum length. |
191 size_t GetEncryptionOverhead() { | 190 size_t GetEncryptionOverhead() { |
192 return creator_.max_packet_length() - | 191 return creator_.max_packet_length() - |
193 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 192 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
194 } | 193 } |
195 | 194 |
196 // Returns the number of bytes consumed by the non-data fields of a stream | 195 // Returns the number of bytes consumed by the non-data fields of a stream |
197 // frame, assuming it is the last frame in the packet | 196 // frame, assuming it is the last frame in the packet |
198 size_t GetStreamFrameOverhead() { | 197 size_t GetStreamFrameOverhead() { |
199 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset, | 198 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset, |
200 true, NOT_IN_FEC_GROUP); | 199 true); |
201 } | 200 } |
202 | 201 |
203 QuicIOVector MakeIOVector(StringPiece s) { | 202 QuicIOVector MakeIOVector(StringPiece s) { |
204 return ::net::MakeIOVector(s, &iov_); | 203 return ::net::MakeIOVector(s, &iov_); |
205 } | 204 } |
206 | 205 |
207 PendingRetransmission CreateRetransmission( | 206 PendingRetransmission CreateRetransmission( |
208 const QuicFrames& retransmittable_frames, | 207 const QuicFrames& retransmittable_frames, |
209 bool has_crypto_handshake, | 208 bool has_crypto_handshake, |
210 bool needs_padding, | 209 bool needs_padding, |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 if (!GetParam().version_serialization) { | 810 if (!GetParam().version_serialization) { |
812 creator_.StopSendingVersion(); | 811 creator_.StopSendingVersion(); |
813 } | 812 } |
814 // A string larger than fits into a frame. | 813 // A string larger than fits into a frame. |
815 size_t payload_length; | 814 size_t payload_length; |
816 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( | 815 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( |
817 client_framer_.version(), | 816 client_framer_.version(), |
818 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 817 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
819 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 818 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
820 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, | 819 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, |
821 NOT_IN_FEC_GROUP, &payload_length)); | 820 &payload_length)); |
822 QuicFrame frame; | 821 QuicFrame frame; |
823 const string too_long_payload(payload_length * 2, 'a'); | 822 const string too_long_payload(payload_length * 2, 'a'); |
824 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 823 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
825 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 824 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
826 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 825 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
827 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 826 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
828 ASSERT_TRUE(frame.stream_frame); | 827 ASSERT_TRUE(frame.stream_frame); |
829 size_t consumed = frame.stream_frame->frame_length; | 828 size_t consumed = frame.stream_frame->frame_length; |
830 EXPECT_EQ(payload_length, consumed); | 829 EXPECT_EQ(payload_length, consumed); |
831 const string payload(payload_length, 'a'); | 830 const string payload(payload_length, 'a'); |
832 CheckStreamFrame(frame, 1u, payload, 0u, false); | 831 CheckStreamFrame(frame, 1u, payload, 0u, false); |
833 creator_.Flush(); | 832 creator_.Flush(); |
834 DeleteSerializedPacket(); | 833 DeleteSerializedPacket(); |
835 } | 834 } |
836 | 835 |
837 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { | 836 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
838 if (!GetParam().version_serialization) { | 837 if (!GetParam().version_serialization) { |
839 creator_.StopSendingVersion(); | 838 creator_.StopSendingVersion(); |
840 } | 839 } |
841 const size_t max_plaintext_size = | 840 const size_t max_plaintext_size = |
842 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 841 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
843 EXPECT_FALSE(creator_.HasPendingFrames()); | 842 EXPECT_FALSE(creator_.HasPendingFrames()); |
844 EXPECT_EQ(max_plaintext_size - | 843 EXPECT_EQ(max_plaintext_size - |
845 GetPacketHeaderSize( | 844 GetPacketHeaderSize( |
846 creator_.connection_id_length(), | 845 creator_.connection_id_length(), |
847 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 846 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
848 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 847 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
849 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 848 PACKET_1BYTE_PACKET_NUMBER), |
850 creator_.BytesFree()); | 849 creator_.BytesFree()); |
851 | 850 |
852 // Add a variety of frame types and then a padding frame. | 851 // Add a variety of frame types and then a padding frame. |
853 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 852 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
854 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 853 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
855 EXPECT_TRUE(creator_.HasPendingFrames()); | 854 EXPECT_TRUE(creator_.HasPendingFrames()); |
856 | 855 |
857 QuicFrame frame; | 856 QuicFrame frame; |
858 QuicIOVector io_vector(MakeIOVector("test")); | 857 QuicIOVector io_vector(MakeIOVector("test")); |
859 ASSERT_TRUE( | 858 ASSERT_TRUE( |
(...skipping 20 matching lines...) Expand all Loading... |
880 ASSERT_EQ(1u, retransmittable.size()); | 879 ASSERT_EQ(1u, retransmittable.size()); |
881 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); | 880 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); |
882 ASSERT_TRUE(retransmittable[0].stream_frame); | 881 ASSERT_TRUE(retransmittable[0].stream_frame); |
883 DeleteSerializedPacket(); | 882 DeleteSerializedPacket(); |
884 | 883 |
885 EXPECT_FALSE(creator_.HasPendingFrames()); | 884 EXPECT_FALSE(creator_.HasPendingFrames()); |
886 EXPECT_EQ(max_plaintext_size - | 885 EXPECT_EQ(max_plaintext_size - |
887 GetPacketHeaderSize( | 886 GetPacketHeaderSize( |
888 creator_.connection_id_length(), | 887 creator_.connection_id_length(), |
889 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 888 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
890 /*include_path_id=*/false, PACKET_1BYTE_PACKET_NUMBER, | 889 /*include_path_id=*/false, PACKET_1BYTE_PACKET_NUMBER), |
891 NOT_IN_FEC_GROUP), | |
892 creator_.BytesFree()); | 890 creator_.BytesFree()); |
893 } | 891 } |
894 | 892 |
895 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { | 893 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { |
896 if (!GetParam().version_serialization) { | 894 if (!GetParam().version_serialization) { |
897 creator_.StopSendingVersion(); | 895 creator_.StopSendingVersion(); |
898 } | 896 } |
899 creator_.SetMaxPacketLength(kMaxPacketSize); | 897 creator_.SetMaxPacketLength(kMaxPacketSize); |
900 | 898 |
901 // Serialized length of ack frame with 2000 nack ranges should be limited by | 899 // Serialized length of ack frame with 2000 nack ranges should be limited by |
902 // the number of nack ranges that can be fit in an ack frame. | 900 // the number of nack ranges that can be fit in an ack frame. |
903 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 901 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
904 size_t frame_len = client_framer_.GetSerializedFrameLength( | 902 size_t frame_len = client_framer_.GetSerializedFrameLength( |
905 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, | 903 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
906 PACKET_1BYTE_PACKET_NUMBER); | 904 PACKET_1BYTE_PACKET_NUMBER); |
907 EXPECT_GT(creator_.BytesFree(), frame_len); | 905 EXPECT_GT(creator_.BytesFree(), frame_len); |
908 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 906 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
909 | 907 |
910 // Add ack frame to creator. | 908 // Add ack frame to creator. |
911 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 909 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
912 EXPECT_TRUE(creator_.HasPendingFrames()); | 910 EXPECT_TRUE(creator_.HasPendingFrames()); |
913 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 911 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
914 EXPECT_LT(0u, creator_.BytesFree()); | 912 EXPECT_LT(0u, creator_.BytesFree()); |
915 | 913 |
(...skipping 27 matching lines...) Expand all Loading... |
943 creator_.SetMaxPacketLength(500u); | 941 creator_.SetMaxPacketLength(500u); |
944 | 942 |
945 const size_t max_plaintext_size = | 943 const size_t max_plaintext_size = |
946 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 944 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
947 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); | 945 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); |
948 | 946 |
949 // Serialized length of ack frame with 2000 nack ranges should be limited by | 947 // Serialized length of ack frame with 2000 nack ranges should be limited by |
950 // the packet size. | 948 // the packet size. |
951 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 949 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
952 size_t frame_len = client_framer_.GetSerializedFrameLength( | 950 size_t frame_len = client_framer_.GetSerializedFrameLength( |
953 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, | 951 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
954 PACKET_1BYTE_PACKET_NUMBER); | 952 PACKET_1BYTE_PACKET_NUMBER); |
955 EXPECT_EQ(creator_.BytesFree(), frame_len); | 953 EXPECT_EQ(creator_.BytesFree(), frame_len); |
956 | 954 |
957 // Add ack frame to creator. | 955 // Add ack frame to creator. |
958 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 956 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
959 EXPECT_TRUE(creator_.HasPendingFrames()); | 957 EXPECT_TRUE(creator_.HasPendingFrames()); |
960 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), | 958 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), |
961 creator_.PacketSize()); | 959 creator_.PacketSize()); |
962 EXPECT_EQ(0u, creator_.BytesFree()); | 960 EXPECT_EQ(0u, creator_.BytesFree()); |
963 | 961 |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _)); | 1139 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _)); |
1142 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1140 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
1143 StringPiece()); | 1141 StringPiece()); |
1144 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1142 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
1145 "Cannot send stream data without encryption."); | 1143 "Cannot send stream data without encryption."); |
1146 } | 1144 } |
1147 | 1145 |
1148 } // namespace | 1146 } // namespace |
1149 } // namespace test | 1147 } // namespace test |
1150 } // namespace net | 1148 } // namespace net |
OLD | NEW |