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 "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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |