| 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 15 matching lines...) Expand all Loading... |
| 26 namespace net { | 26 namespace net { |
| 27 namespace test { | 27 namespace test { |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> { | 30 class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> { |
| 31 protected: | 31 protected: |
| 32 QuicPacketCreatorTest() | 32 QuicPacketCreatorTest() |
| 33 : server_framer_(QuicSupportedVersions(), QuicTime::Zero(), true), | 33 : server_framer_(QuicSupportedVersions(), QuicTime::Zero(), true), |
| 34 client_framer_(QuicSupportedVersions(), QuicTime::Zero(), false), | 34 client_framer_(QuicSupportedVersions(), QuicTime::Zero(), false), |
| 35 sequence_number_(0), | 35 sequence_number_(0), |
| 36 guid_(2), | 36 connection_id_(2), |
| 37 data_("foo"), | 37 data_("foo"), |
| 38 creator_(guid_, &client_framer_, &mock_random_, false) { | 38 creator_(connection_id_, &client_framer_, &mock_random_, false) { |
| 39 client_framer_.set_visitor(&framer_visitor_); | 39 client_framer_.set_visitor(&framer_visitor_); |
| 40 server_framer_.set_visitor(&framer_visitor_); | 40 server_framer_.set_visitor(&framer_visitor_); |
| 41 } | 41 } |
| 42 ~QuicPacketCreatorTest() { | 42 ~QuicPacketCreatorTest() { |
| 43 } | 43 } |
| 44 | 44 |
| 45 void ProcessPacket(QuicPacket* packet) { | 45 void ProcessPacket(QuicPacket* packet) { |
| 46 scoped_ptr<QuicEncryptedPacket> encrypted( | 46 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 47 server_framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number_, | 47 server_framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number_, |
| 48 *packet)); | 48 *packet)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 59 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); | 59 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); |
| 60 scoped_ptr<string> frame_data(frame.stream_frame->GetDataAsString()); | 60 scoped_ptr<string> frame_data(frame.stream_frame->GetDataAsString()); |
| 61 EXPECT_EQ(data, *frame_data); | 61 EXPECT_EQ(data, *frame_data); |
| 62 EXPECT_EQ(offset, frame.stream_frame->offset); | 62 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 63 EXPECT_EQ(fin, frame.stream_frame->fin); | 63 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 64 } | 64 } |
| 65 | 65 |
| 66 // Returns the number of bytes consumed by the header of packet, including | 66 // Returns the number of bytes consumed by the header of packet, including |
| 67 // the version, that is not in an FEC group. | 67 // the version, that is not in an FEC group. |
| 68 size_t GetPacketHeaderOverhead() { | 68 size_t GetPacketHeaderOverhead() { |
| 69 return GetPacketHeaderSize(creator_.options()->send_guid_length, | 69 return GetPacketHeaderSize(creator_.options()->send_connection_id_length, |
| 70 kIncludeVersion, | 70 kIncludeVersion, |
| 71 creator_.options()->send_sequence_number_length, | 71 creator_.options()->send_sequence_number_length, |
| 72 NOT_IN_FEC_GROUP); | 72 NOT_IN_FEC_GROUP); |
| 73 } | 73 } |
| 74 | 74 |
| 75 // Returns the number of bytes of overhead that will be added to a packet | 75 // Returns the number of bytes of overhead that will be added to a packet |
| 76 // of maximum length. | 76 // of maximum length. |
| 77 size_t GetEncryptionOverhead() { | 77 size_t GetEncryptionOverhead() { |
| 78 return creator_.options()->max_packet_length - | 78 return creator_.options()->max_packet_length - |
| 79 client_framer_.GetMaxPlaintextSize( | 79 client_framer_.GetMaxPlaintextSize( |
| 80 creator_.options()->max_packet_length); | 80 creator_.options()->max_packet_length); |
| 81 } | 81 } |
| 82 | 82 |
| 83 // Returns the number of bytes consumed by the non-data fields of a stream | 83 // Returns the number of bytes consumed by the non-data fields of a stream |
| 84 // frame, assuming it is the last frame in the packet | 84 // frame, assuming it is the last frame in the packet |
| 85 size_t GetStreamFrameOverhead() { | 85 size_t GetStreamFrameOverhead() { |
| 86 return QuicFramer::GetMinStreamFrameSize( | 86 return QuicFramer::GetMinStreamFrameSize( |
| 87 client_framer_.version(), kStreamId, kOffset, true); | 87 client_framer_.version(), kStreamId, kOffset, true); |
| 88 } | 88 } |
| 89 | 89 |
| 90 static const QuicStreamId kStreamId = 1u; | 90 static const QuicStreamId kStreamId = 1u; |
| 91 static const QuicStreamOffset kOffset = 1u; | 91 static const QuicStreamOffset kOffset = 1u; |
| 92 | 92 |
| 93 QuicFrames frames_; | 93 QuicFrames frames_; |
| 94 QuicFramer server_framer_; | 94 QuicFramer server_framer_; |
| 95 QuicFramer client_framer_; | 95 QuicFramer client_framer_; |
| 96 testing::StrictMock<MockFramerVisitor> framer_visitor_; | 96 testing::StrictMock<MockFramerVisitor> framer_visitor_; |
| 97 QuicPacketSequenceNumber sequence_number_; | 97 QuicPacketSequenceNumber sequence_number_; |
| 98 QuicGuid guid_; | 98 QuicConnectionId connection_id_; |
| 99 string data_; | 99 string data_; |
| 100 MockRandom mock_random_; | 100 MockRandom mock_random_; |
| 101 QuicPacketCreator creator_; | 101 QuicPacketCreator creator_; |
| 102 }; | 102 }; |
| 103 | 103 |
| 104 TEST_F(QuicPacketCreatorTest, SerializeFrames) { | 104 TEST_F(QuicPacketCreatorTest, SerializeFrames) { |
| 105 frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u))); | 105 frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u))); |
| 106 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 106 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
| 107 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); | 107 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); |
| 108 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); | 108 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 | 574 |
| 575 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { | 575 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { |
| 576 if (!GetParam()) { | 576 if (!GetParam()) { |
| 577 creator_.StopSendingVersion(); | 577 creator_.StopSendingVersion(); |
| 578 } | 578 } |
| 579 const size_t max_plaintext_size = | 579 const size_t max_plaintext_size = |
| 580 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); | 580 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); |
| 581 EXPECT_FALSE(creator_.HasPendingFrames()); | 581 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 582 EXPECT_EQ(max_plaintext_size - | 582 EXPECT_EQ(max_plaintext_size - |
| 583 GetPacketHeaderSize( | 583 GetPacketHeaderSize( |
| 584 creator_.options()->send_guid_length, | 584 creator_.options()->send_connection_id_length, |
| 585 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 585 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 586 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 586 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 587 creator_.BytesFree()); | 587 creator_.BytesFree()); |
| 588 | 588 |
| 589 // Add a variety of frame types and then a padding frame. | 589 // Add a variety of frame types and then a padding frame. |
| 590 QuicAckFrame ack_frame(0u, QuicTime::Zero(), 0u); | 590 QuicAckFrame ack_frame(0u, QuicTime::Zero(), 0u); |
| 591 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 591 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 592 EXPECT_TRUE(creator_.HasPendingFrames()); | 592 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 593 | 593 |
| 594 QuicCongestionFeedbackFrame congestion_feedback; | 594 QuicCongestionFeedbackFrame congestion_feedback; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 618 ASSERT_TRUE(serialized.retransmittable_frames); | 618 ASSERT_TRUE(serialized.retransmittable_frames); |
| 619 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; | 619 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; |
| 620 ASSERT_EQ(1u, retransmittable->frames().size()); | 620 ASSERT_EQ(1u, retransmittable->frames().size()); |
| 621 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); | 621 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); |
| 622 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); | 622 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); |
| 623 delete serialized.retransmittable_frames; | 623 delete serialized.retransmittable_frames; |
| 624 | 624 |
| 625 EXPECT_FALSE(creator_.HasPendingFrames()); | 625 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 626 EXPECT_EQ(max_plaintext_size - | 626 EXPECT_EQ(max_plaintext_size - |
| 627 GetPacketHeaderSize( | 627 GetPacketHeaderSize( |
| 628 creator_.options()->send_guid_length, | 628 creator_.options()->send_connection_id_length, |
| 629 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 629 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 630 PACKET_1BYTE_SEQUENCE_NUMBER, | 630 PACKET_1BYTE_SEQUENCE_NUMBER, |
| 631 NOT_IN_FEC_GROUP), | 631 NOT_IN_FEC_GROUP), |
| 632 creator_.BytesFree()); | 632 creator_.BytesFree()); |
| 633 } | 633 } |
| 634 | 634 |
| 635 TEST_F(QuicPacketCreatorTest, EntropyFlag) { | 635 TEST_F(QuicPacketCreatorTest, EntropyFlag) { |
| 636 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); | 636 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); |
| 637 | 637 |
| 638 for (int i = 0; i < 2; ++i) { | 638 for (int i = 0; i < 2; ++i) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 651 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 651 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
| 652 mock_random_.ChangeValue(); | 652 mock_random_.ChangeValue(); |
| 653 } | 653 } |
| 654 | 654 |
| 655 delete frames_[0].stream_frame; | 655 delete frames_[0].stream_frame; |
| 656 } | 656 } |
| 657 | 657 |
| 658 } // namespace | 658 } // namespace |
| 659 } // namespace test | 659 } // namespace test |
| 660 } // namespace net | 660 } // namespace net |
| OLD | NEW |