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

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

Issue 312553003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/crypto/null_encrypter.h" 8 #include "net/quic/crypto/null_encrypter.h"
9 #include "net/quic/crypto/quic_decrypter.h" 9 #include "net/quic/crypto/quic_decrypter.h"
10 #include "net/quic/crypto/quic_encrypter.h" 10 #include "net/quic/crypto/quic_encrypter.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); 93 EXPECT_EQ(stream_id, frame.stream_frame->stream_id);
94 scoped_ptr<string> frame_data(frame.stream_frame->GetDataAsString()); 94 scoped_ptr<string> frame_data(frame.stream_frame->GetDataAsString());
95 EXPECT_EQ(data, *frame_data); 95 EXPECT_EQ(data, *frame_data);
96 EXPECT_EQ(offset, frame.stream_frame->offset); 96 EXPECT_EQ(offset, frame.stream_frame->offset);
97 EXPECT_EQ(fin, frame.stream_frame->fin); 97 EXPECT_EQ(fin, frame.stream_frame->fin);
98 } 98 }
99 99
100 // Returns the number of bytes consumed by the header of packet, including 100 // Returns the number of bytes consumed by the header of packet, including
101 // the version. 101 // the version.
102 size_t GetPacketHeaderOverhead(InFecGroup is_in_fec_group) { 102 size_t GetPacketHeaderOverhead(InFecGroup is_in_fec_group) {
103 return GetPacketHeaderSize(creator_.options()->send_connection_id_length, 103 return GetPacketHeaderSize(creator_.connection_id_length(),
104 kIncludeVersion, 104 kIncludeVersion,
105 creator_.options()->send_sequence_number_length, 105 creator_.next_sequence_number_length(),
106 is_in_fec_group); 106 is_in_fec_group);
107 } 107 }
108 108
109 // Returns the number of bytes of overhead that will be added to a packet 109 // Returns the number of bytes of overhead that will be added to a packet
110 // of maximum length. 110 // of maximum length.
111 size_t GetEncryptionOverhead() { 111 size_t GetEncryptionOverhead() {
112 return creator_.options()->max_packet_length - 112 return creator_.max_packet_length() - client_framer_.GetMaxPlaintextSize(
113 client_framer_.GetMaxPlaintextSize( 113 creator_.max_packet_length());
114 creator_.options()->max_packet_length);
115 } 114 }
116 115
117 // Returns the number of bytes consumed by the non-data fields of a stream 116 // Returns the number of bytes consumed by the non-data fields of a stream
118 // frame, assuming it is the last frame in the packet 117 // frame, assuming it is the last frame in the packet
119 size_t GetStreamFrameOverhead(InFecGroup is_in_fec_group) { 118 size_t GetStreamFrameOverhead(InFecGroup is_in_fec_group) {
120 return QuicFramer::GetMinStreamFrameSize(client_framer_.version(), 119 return QuicFramer::GetMinStreamFrameSize(client_framer_.version(),
121 kClientDataStreamId1, kOffset, 120 kClientDataStreamId1, kOffset,
122 true, is_in_fec_group); 121 true, is_in_fec_group);
123 } 122 }
124 static const QuicStreamOffset kOffset = 1u; 123 static const QuicStreamOffset kOffset = 1u;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 EXPECT_CALL(framer_visitor_, OnFecData(_)); 208 EXPECT_CALL(framer_visitor_, OnFecData(_));
210 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 209 EXPECT_CALL(framer_visitor_, OnPacketComplete());
211 } 210 }
212 ProcessPacket(serialized.packet); 211 ProcessPacket(serialized.packet);
213 delete serialized.packet; 212 delete serialized.packet;
214 } 213 }
215 214
216 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { 215 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) {
217 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); 216 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
218 creator_.AddSavedFrame(frames_[0]); 217 creator_.AddSavedFrame(frames_[0]);
219 creator_.options()->send_sequence_number_length = 218 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER);
220 PACKET_4BYTE_SEQUENCE_NUMBER;
221 SerializedPacket serialized = creator_.SerializePacket(); 219 SerializedPacket serialized = creator_.SerializePacket();
222 // The sequence number length will not change mid-packet. 220 // The sequence number length will not change mid-packet.
223 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); 221 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
224 222
225 { 223 {
226 InSequence s; 224 InSequence s;
227 EXPECT_CALL(framer_visitor_, OnPacket()); 225 EXPECT_CALL(framer_visitor_, OnPacket());
228 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 226 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
229 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 227 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
230 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 228 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 // should hold the change until after any currently queued frames are 261 // should hold the change until after any currently queued frames are
264 // serialized. 262 // serialized.
265 263
266 // Packet 1. 264 // Packet 1.
267 // Queue a frame in the creator. 265 // Queue a frame in the creator.
268 EXPECT_FALSE(creator_.HasPendingFrames()); 266 EXPECT_FALSE(creator_.HasPendingFrames());
269 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))); 267 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)));
270 creator_.AddSavedFrame(ack_frame); 268 creator_.AddSavedFrame(ack_frame);
271 269
272 // Now change sequence number length. 270 // Now change sequence number length.
273 creator_.options()->send_sequence_number_length = 271 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER);
274 PACKET_4BYTE_SEQUENCE_NUMBER;
275 272
276 // Add a STOP_WAITING frame since it contains a packet sequence number, 273 // Add a STOP_WAITING frame since it contains a packet sequence number,
277 // whose length should be 1. 274 // whose length should be 1.
278 QuicStopWaitingFrame stop_waiting_frame; 275 QuicStopWaitingFrame stop_waiting_frame;
279 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); 276 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame)));
280 EXPECT_TRUE(creator_.HasPendingFrames()); 277 EXPECT_TRUE(creator_.HasPendingFrames());
281 278
282 // Ensure the packet is successfully created. 279 // Ensure the packet is successfully created.
283 SerializedPacket serialized = creator_.SerializePacket(); 280 SerializedPacket serialized = creator_.SerializePacket();
284 ASSERT_TRUE(serialized.packet); 281 ASSERT_TRUE(serialized.packet);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 // Enable FEC protection, and send FEC packet every 6 packets. 341 // Enable FEC protection, and send FEC packet every 6 packets.
345 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(&creator_, 6)); 342 EXPECT_TRUE(QuicPacketCreatorPeer::SwitchFecProtectionOn(&creator_, 6));
346 // Should return false since we do not have enough packets in the FEC group to 343 // Should return false since we do not have enough packets in the FEC group to
347 // trigger an FEC packet. 344 // trigger an FEC packet.
348 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); 345 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
349 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); 346 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
350 347
351 // Generate Packet 1. 348 // Generate Packet 1.
352 creator_.AddSavedFrame(frames_[0]); 349 creator_.AddSavedFrame(frames_[0]);
353 // Change the sequence number length mid-FEC group and it should not change. 350 // Change the sequence number length mid-FEC group and it should not change.
354 creator_.options()->send_sequence_number_length = 351 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER);
355 PACKET_4BYTE_SEQUENCE_NUMBER;
356 SerializedPacket serialized = creator_.SerializePacket(); 352 SerializedPacket serialized = creator_.SerializePacket();
357 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); 353 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
358 354
359 { 355 {
360 InSequence s; 356 InSequence s;
361 EXPECT_CALL(framer_visitor_, OnPacket()); 357 EXPECT_CALL(framer_visitor_, OnPacket());
362 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 358 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
363 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 359 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
364 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 360 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
365 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 361 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 serialized = creator_.SerializeAllFrames(frames_); 413 serialized = creator_.SerializeAllFrames(frames_);
418 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); 414 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
419 delete frames_[0].ack_frame; 415 delete frames_[0].ack_frame;
420 delete serialized.packet; 416 delete serialized.packet;
421 } 417 }
422 418
423 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { 419 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) {
424 // If the original packet sequence number length, the current sequence number 420 // If the original packet sequence number length, the current sequence number
425 // length, and the configured send sequence number length are different, the 421 // length, and the configured send sequence number length are different, the
426 // retransmit must sent with the original length and the others do not change. 422 // retransmit must sent with the original length and the others do not change.
427 creator_.options()->send_sequence_number_length = 423 creator_.set_next_sequence_number_length(PACKET_4BYTE_SEQUENCE_NUMBER);
428 PACKET_4BYTE_SEQUENCE_NUMBER;
429 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_, 424 QuicPacketCreatorPeer::SetSequenceNumberLength(&creator_,
430 PACKET_2BYTE_SEQUENCE_NUMBER); 425 PACKET_2BYTE_SEQUENCE_NUMBER);
431 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); 426 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
432 SerializedPacket serialized = 427 SerializedPacket serialized =
433 creator_.ReserializeAllFrames(frames_, PACKET_1BYTE_SEQUENCE_NUMBER); 428 creator_.ReserializeAllFrames(frames_, PACKET_1BYTE_SEQUENCE_NUMBER);
434 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 429 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
435 creator_.options()->send_sequence_number_length); 430 creator_.next_sequence_number_length());
436 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 431 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
437 QuicPacketCreatorPeer::GetSequenceNumberLength(&creator_)); 432 QuicPacketCreatorPeer::GetSequenceNumberLength(&creator_));
438 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length); 433 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
439 delete frames_[0].stream_frame; 434 delete frames_[0].stream_frame;
440 435
441 { 436 {
442 InSequence s; 437 InSequence s;
443 EXPECT_CALL(framer_visitor_, OnPacket()); 438 EXPECT_CALL(framer_visitor_, OnPacket());
444 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 439 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
445 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 440 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 &frame); 570 &frame);
576 EXPECT_EQ(0u, consumed); 571 EXPECT_EQ(0u, consumed);
577 CheckStreamFrame(frame, 1u, string(), 0u, true); 572 CheckStreamFrame(frame, 1u, string(), 0u, true);
578 delete frame.stream_frame; 573 delete frame.stream_frame;
579 } 574 }
580 575
581 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { 576 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
582 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 577 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
583 + GetEncryptionOverhead(); 578 + GetEncryptionOverhead();
584 for (size_t i = overhead; i < overhead + 100; ++i) { 579 for (size_t i = overhead; i < overhead + 100; ++i) {
585 creator_.options()->max_packet_length = i; 580 creator_.set_max_packet_length(i);
586 const bool should_have_room = i > overhead + GetStreamFrameOverhead( 581 const bool should_have_room = i > overhead + GetStreamFrameOverhead(
587 NOT_IN_FEC_GROUP); 582 NOT_IN_FEC_GROUP);
588 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( 583 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame(
589 kClientDataStreamId1, kOffset)); 584 kClientDataStreamId1, kOffset));
590 if (should_have_room) { 585 if (should_have_room) {
591 QuicFrame frame; 586 QuicFrame frame;
592 size_t bytes_consumed = creator_.CreateStreamFrame( 587 size_t bytes_consumed = creator_.CreateStreamFrame(
593 kClientDataStreamId1, MakeIOVector("testdata"), kOffset, false, 588 kClientDataStreamId1, MakeIOVector("testdata"), kOffset, false,
594 &frame); 589 &frame);
595 EXPECT_LT(0u, bytes_consumed); 590 EXPECT_LT(0u, bytes_consumed);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 InSequence s; 728 InSequence s;
734 EXPECT_CALL(framer_visitor_, OnPacket()); 729 EXPECT_CALL(framer_visitor_, OnPacket());
735 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 730 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
736 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); 731 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_));
737 } 732 }
738 client_framer_.ProcessPacket(*encrypted); 733 client_framer_.ProcessPacket(*encrypted);
739 } 734 }
740 735
741 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { 736 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) {
742 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 737 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
743 creator_.options()->send_sequence_number_length); 738 creator_.next_sequence_number_length());
744 739
745 creator_.set_sequence_number(64); 740 creator_.set_sequence_number(64);
746 creator_.UpdateSequenceNumberLength(2, 10000); 741 creator_.UpdateSequenceNumberLength(2, 10000);
747 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 742 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
748 creator_.options()->send_sequence_number_length); 743 creator_.next_sequence_number_length());
749 744
750 creator_.set_sequence_number(64 * 256); 745 creator_.set_sequence_number(64 * 256);
751 creator_.UpdateSequenceNumberLength(2, 10000); 746 creator_.UpdateSequenceNumberLength(2, 10000);
752 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 747 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
753 creator_.options()->send_sequence_number_length); 748 creator_.next_sequence_number_length());
754 749
755 creator_.set_sequence_number(64 * 256 * 256); 750 creator_.set_sequence_number(64 * 256 * 256);
756 creator_.UpdateSequenceNumberLength(2, 10000); 751 creator_.UpdateSequenceNumberLength(2, 10000);
757 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 752 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
758 creator_.options()->send_sequence_number_length); 753 creator_.next_sequence_number_length());
759 754
760 creator_.set_sequence_number(GG_UINT64_C(64) * 256 * 256 * 256 * 256); 755 creator_.set_sequence_number(GG_UINT64_C(64) * 256 * 256 * 256 * 256);
761 creator_.UpdateSequenceNumberLength(2, 10000); 756 creator_.UpdateSequenceNumberLength(2, 10000);
762 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, 757 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
763 creator_.options()->send_sequence_number_length); 758 creator_.next_sequence_number_length());
764 } 759 }
765 760
766 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { 761 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) {
767 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 762 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
768 creator_.options()->send_sequence_number_length); 763 creator_.next_sequence_number_length());
769 764
770 creator_.UpdateSequenceNumberLength(1, 10000); 765 creator_.UpdateSequenceNumberLength(1, 10000);
771 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, 766 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
772 creator_.options()->send_sequence_number_length); 767 creator_.next_sequence_number_length());
773 768
774 creator_.UpdateSequenceNumberLength(1, 10000 * 256); 769 creator_.UpdateSequenceNumberLength(1, 10000 * 256);
775 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, 770 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
776 creator_.options()->send_sequence_number_length); 771 creator_.next_sequence_number_length());
777 772
778 creator_.UpdateSequenceNumberLength(1, 10000 * 256 * 256); 773 creator_.UpdateSequenceNumberLength(1, 10000 * 256 * 256);
779 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, 774 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
780 creator_.options()->send_sequence_number_length); 775 creator_.next_sequence_number_length());
781 776
782 creator_.UpdateSequenceNumberLength( 777 creator_.UpdateSequenceNumberLength(
783 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256); 778 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256);
784 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, 779 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
785 creator_.options()->send_sequence_number_length); 780 creator_.next_sequence_number_length());
786 } 781 }
787 782
788 TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) { 783 TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) {
789 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only 784 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only
790 // frame) then any QuicAckNotifier that is passed in still gets attached to 785 // frame) then any QuicAckNotifier that is passed in still gets attached to
791 // the frame. 786 // the frame.
792 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); 787 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
793 QuicAckNotifier notifier(delegate.get()); 788 QuicAckNotifier notifier(delegate.get());
794 QuicFrame frame; 789 QuicFrame frame;
795 IOVector empty_iovector; 790 IOVector empty_iovector;
(...skipping 30 matching lines...) Expand all
826 header.public_header.version_flag); 821 header.public_header.version_flag);
827 delete serialized.packet; 822 delete serialized.packet;
828 } 823 }
829 824
830 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { 825 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) {
831 if (!GetParam().version_serialization) { 826 if (!GetParam().version_serialization) {
832 creator_.StopSendingVersion(); 827 creator_.StopSendingVersion();
833 } 828 }
834 // A string larger than fits into a frame. 829 // A string larger than fits into a frame.
835 size_t payload_length; 830 size_t payload_length;
836 creator_.options()->max_packet_length = GetPacketLengthForOneStream( 831 creator_.set_max_packet_length(GetPacketLengthForOneStream(
837 client_framer_.version(), 832 client_framer_.version(),
838 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 833 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
839 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP, &payload_length); 834 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP, &payload_length));
840 QuicFrame frame; 835 QuicFrame frame;
841 const string too_long_payload(payload_length * 2, 'a'); 836 const string too_long_payload(payload_length * 2, 'a');
842 size_t consumed = creator_.CreateStreamFrame( 837 size_t consumed = creator_.CreateStreamFrame(
843 1u, MakeIOVector(too_long_payload), 0u, true, &frame); 838 1u, MakeIOVector(too_long_payload), 0u, true, &frame);
844 EXPECT_EQ(payload_length, consumed); 839 EXPECT_EQ(payload_length, consumed);
845 const string payload(payload_length, 'a'); 840 const string payload(payload_length, 'a');
846 CheckStreamFrame(frame, 1u, payload, 0u, false); 841 CheckStreamFrame(frame, 1u, payload, 0u, false);
847 delete frame.stream_frame; 842 delete frame.stream_frame;
848 } 843 }
849 844
850 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { 845 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) {
851 if (!GetParam().version_serialization) { 846 if (!GetParam().version_serialization) {
852 creator_.StopSendingVersion(); 847 creator_.StopSendingVersion();
853 } 848 }
854 const size_t max_plaintext_size = 849 const size_t max_plaintext_size =
855 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 850 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
856 EXPECT_FALSE(creator_.HasPendingFrames()); 851 EXPECT_FALSE(creator_.HasPendingFrames());
857 EXPECT_EQ(max_plaintext_size - 852 EXPECT_EQ(max_plaintext_size -
858 GetPacketHeaderSize( 853 GetPacketHeaderSize(
859 creator_.options()->send_connection_id_length, 854 creator_.connection_id_length(),
860 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 855 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
861 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 856 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
862 creator_.BytesFree()); 857 creator_.BytesFree());
863 858
864 // Add a variety of frame types and then a padding frame. 859 // Add a variety of frame types and then a padding frame.
865 QuicAckFrame ack_frame(MakeAckFrame(0u, 0u)); 860 QuicAckFrame ack_frame(MakeAckFrame(0u, 0u));
866 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 861 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
867 EXPECT_TRUE(creator_.HasPendingFrames()); 862 EXPECT_TRUE(creator_.HasPendingFrames());
868 863
869 QuicCongestionFeedbackFrame congestion_feedback; 864 QuicCongestionFeedbackFrame congestion_feedback;
(...skipping 23 matching lines...) Expand all
893 ASSERT_TRUE(serialized.retransmittable_frames); 888 ASSERT_TRUE(serialized.retransmittable_frames);
894 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; 889 RetransmittableFrames* retransmittable = serialized.retransmittable_frames;
895 ASSERT_EQ(1u, retransmittable->frames().size()); 890 ASSERT_EQ(1u, retransmittable->frames().size());
896 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); 891 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type);
897 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); 892 ASSERT_TRUE(retransmittable->frames()[0].stream_frame);
898 delete serialized.retransmittable_frames; 893 delete serialized.retransmittable_frames;
899 894
900 EXPECT_FALSE(creator_.HasPendingFrames()); 895 EXPECT_FALSE(creator_.HasPendingFrames());
901 EXPECT_EQ(max_plaintext_size - 896 EXPECT_EQ(max_plaintext_size -
902 GetPacketHeaderSize( 897 GetPacketHeaderSize(
903 creator_.options()->send_connection_id_length, 898 creator_.connection_id_length(),
904 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 899 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
905 PACKET_1BYTE_SEQUENCE_NUMBER, 900 PACKET_1BYTE_SEQUENCE_NUMBER,
906 NOT_IN_FEC_GROUP), 901 NOT_IN_FEC_GROUP),
907 creator_.BytesFree()); 902 creator_.BytesFree());
908 } 903 }
909 904
910 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { 905 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) {
911 if (!GetParam().version_serialization) { 906 if (!GetParam().version_serialization) {
912 creator_.StopSendingVersion(); 907 creator_.StopSendingVersion();
913 } 908 }
914 creator_.options()->max_packet_length = kMaxPacketSize; 909 creator_.set_max_packet_length(kMaxPacketSize);
915 const size_t max_plaintext_size = 910 const size_t max_plaintext_size =
916 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 911 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
917 912
918 // Serialized length of ack frame with 2000 nack ranges should be limited by 913 // Serialized length of ack frame with 2000 nack ranges should be limited by
919 // the number of nack ranges that can be fit in an ack frame. 914 // the number of nack ranges that can be fit in an ack frame.
920 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); 915 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
921 size_t frame_len = client_framer_.GetSerializedFrameLength( 916 size_t frame_len = client_framer_.GetSerializedFrameLength(
922 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, 917 QuicFrame(&ack_frame), creator_.BytesFree(), true, true,
923 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); 918 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER);
924 EXPECT_GT(creator_.BytesFree(), frame_len); 919 EXPECT_GT(creator_.BytesFree(), frame_len);
925 EXPECT_GT(max_plaintext_size, creator_.PacketSize()); 920 EXPECT_GT(max_plaintext_size, creator_.PacketSize());
926 921
(...skipping 21 matching lines...) Expand all
948 ASSERT_TRUE(serialized.packet); 943 ASSERT_TRUE(serialized.packet);
949 EXPECT_EQ(est_packet_size, serialized.packet->length()); 944 EXPECT_EQ(est_packet_size, serialized.packet->length());
950 delete serialized.retransmittable_frames; 945 delete serialized.retransmittable_frames;
951 delete serialized.packet; 946 delete serialized.packet;
952 } 947 }
953 948
954 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { 949 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) {
955 if (!GetParam().version_serialization) { 950 if (!GetParam().version_serialization) {
956 creator_.StopSendingVersion(); 951 creator_.StopSendingVersion();
957 } 952 }
958 creator_.options()->max_packet_length = 500u; 953 creator_.set_max_packet_length(500u);
954
959 const size_t max_plaintext_size = 955 const size_t max_plaintext_size =
960 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 956 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
961 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); 957 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree());
962 958
963 // Serialized length of ack frame with 2000 nack ranges should be limited by 959 // Serialized length of ack frame with 2000 nack ranges should be limited by
964 // the packet size. 960 // the packet size.
965 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); 961 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
966 size_t frame_len = client_framer_.GetSerializedFrameLength( 962 size_t frame_len = client_framer_.GetSerializedFrameLength(
967 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, 963 QuicFrame(&ack_frame), creator_.BytesFree(), true, true,
968 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER); 964 NOT_IN_FEC_GROUP, PACKET_1BYTE_SEQUENCE_NUMBER);
969 EXPECT_EQ(creator_.BytesFree(), frame_len); 965 EXPECT_EQ(creator_.BytesFree(), frame_len);
970 966
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 // After 64 calls, BoolSource will refresh the bucket - make sure it does. 1001 // After 64 calls, BoolSource will refresh the bucket - make sure it does.
1006 mock_random_.ChangeValue(); 1002 mock_random_.ChangeValue();
1007 } 1003 }
1008 1004
1009 delete frames_[0].stream_frame; 1005 delete frames_[0].stream_frame;
1010 } 1006 }
1011 1007
1012 } // namespace 1008 } // namespace
1013 } // namespace test 1009 } // namespace test
1014 } // namespace net 1010 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698