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 |