| 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 |