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

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

Issue 12806002: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor comment fix Created 7 years, 9 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"
11 #include "net/quic/crypto/quic_random.h" 11 #include "net/quic/crypto/quic_random.h"
12 #include "net/quic/quic_utils.h" 12 #include "net/quic/quic_utils.h"
13 #include "net/quic/test_tools/quic_packet_creator_peer.h"
13 #include "net/quic/test_tools/quic_test_utils.h" 14 #include "net/quic/test_tools/quic_test_utils.h"
14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
15 16
16 using base::StringPiece; 17 using base::StringPiece;
17 using std::string; 18 using std::string;
18 using std::vector; 19 using std::vector;
20 using testing::DoAll;
19 using testing::InSequence; 21 using testing::InSequence;
22 using testing::Return;
23 using testing::SaveArg;
20 using testing::_; 24 using testing::_;
21 25
22 namespace net { 26 namespace net {
23 namespace test { 27 namespace test {
24 namespace { 28 namespace {
25 29
26 class QuicPacketCreatorTest : public ::testing::Test { 30 class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> {
27 protected: 31 protected:
28 QuicPacketCreatorTest() 32 QuicPacketCreatorTest()
29 : framer_(kQuicVersion1, 33 : server_framer_(kQuicVersion1,
30 QuicDecrypter::Create(kNULL), 34 QuicDecrypter::Create(kNULL),
31 QuicEncrypter::Create(kNULL)), 35 QuicEncrypter::Create(kNULL),
36 true),
37 client_framer_(kQuicVersion1,
38 QuicDecrypter::Create(kNULL),
39 QuicEncrypter::Create(kNULL),
40 false),
32 id_(1), 41 id_(1),
33 sequence_number_(0), 42 sequence_number_(0),
34 guid_(2), 43 guid_(2),
35 data_("foo"), 44 data_("foo"),
36 creator_(guid_, &framer_, QuicRandom::GetInstance()) { 45 creator_(guid_, &client_framer_, QuicRandom::GetInstance(), false) {
37 framer_.set_visitor(&framer_visitor_); 46 client_framer_.set_visitor(&framer_visitor_);
47 server_framer_.set_visitor(&framer_visitor_);
38 } 48 }
39 ~QuicPacketCreatorTest() { 49 ~QuicPacketCreatorTest() {
40 } 50 }
41 51
42 void ProcessPacket(QuicPacket* packet) { 52 void ProcessPacket(QuicPacket* packet) {
43 scoped_ptr<QuicEncryptedPacket> encrypted( 53 scoped_ptr<QuicEncryptedPacket> encrypted(
44 framer_.EncryptPacket(sequence_number_, *packet)); 54 server_framer_.EncryptPacket(sequence_number_, *packet));
45 framer_.ProcessPacket(*encrypted); 55 server_framer_.ProcessPacket(*encrypted);
46 } 56 }
47 57
48 void CheckStreamFrame(const QuicFrame& frame, QuicStreamId stream_id, 58 void CheckStreamFrame(const QuicFrame& frame, QuicStreamId stream_id,
49 const string& data, QuicStreamOffset offset, bool fin) { 59 const string& data, QuicStreamOffset offset, bool fin) {
50 EXPECT_EQ(STREAM_FRAME, frame.type); 60 EXPECT_EQ(STREAM_FRAME, frame.type);
51 ASSERT_TRUE(frame.stream_frame); 61 ASSERT_TRUE(frame.stream_frame);
52 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); 62 EXPECT_EQ(stream_id, frame.stream_frame->stream_id);
53 EXPECT_EQ(data, frame.stream_frame->data); 63 EXPECT_EQ(data, frame.stream_frame->data);
54 EXPECT_EQ(offset, frame.stream_frame->offset); 64 EXPECT_EQ(offset, frame.stream_frame->offset);
55 EXPECT_EQ(fin, frame.stream_frame->fin); 65 EXPECT_EQ(fin, frame.stream_frame->fin);
56 } 66 }
57 67
58 QuicFrames frames_; 68 QuicFrames frames_;
59 QuicFramer framer_; 69 QuicFramer server_framer_;
70 QuicFramer client_framer_;
60 testing::StrictMock<MockFramerVisitor> framer_visitor_; 71 testing::StrictMock<MockFramerVisitor> framer_visitor_;
61 QuicStreamId id_; 72 QuicStreamId id_;
62 QuicPacketSequenceNumber sequence_number_; 73 QuicPacketSequenceNumber sequence_number_;
63 QuicGuid guid_; 74 QuicGuid guid_;
64 string data_; 75 string data_;
65 QuicPacketCreator creator_; 76 QuicPacketCreator creator_;
66 }; 77 };
67 78
68 TEST_F(QuicPacketCreatorTest, SerializeFrame) {
69 frames_.push_back(QuicFrame(new QuicStreamFrame(
70 0u, false, 0u, StringPiece(""))));
71 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
72 delete frames_[0].stream_frame;
73
74 {
75 InSequence s;
76 EXPECT_CALL(framer_visitor_, OnPacket());
77 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
78 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
79 EXPECT_CALL(framer_visitor_, OnPacketComplete());
80 }
81 ProcessPacket(serialized.packet);
82 delete serialized.packet;
83 }
84
85 TEST_F(QuicPacketCreatorTest, SerializeFrames) { 79 TEST_F(QuicPacketCreatorTest, SerializeFrames) {
86 frames_.push_back(QuicFrame(new QuicAckFrame(0u, 0u))); 80 frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u)));
87 frames_.push_back(QuicFrame(new QuicStreamFrame( 81 frames_.push_back(QuicFrame(new QuicStreamFrame(
88 0u, false, 0u, StringPiece("")))); 82 0u, false, 0u, StringPiece(""))));
89 frames_.push_back(QuicFrame(new QuicStreamFrame( 83 frames_.push_back(QuicFrame(new QuicStreamFrame(
90 0u, true, 0u, StringPiece("")))); 84 0u, true, 0u, StringPiece(""))));
91 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); 85 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
92 delete frames_[0].ack_frame; 86 delete frames_[0].ack_frame;
93 delete frames_[1].stream_frame; 87 delete frames_[1].stream_frame;
94 delete frames_[2].stream_frame; 88 delete frames_[2].stream_frame;
95 89
96 { 90 {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 EXPECT_CALL(framer_visitor_, OnFecData(_)); 134 EXPECT_CALL(framer_visitor_, OnFecData(_));
141 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 135 EXPECT_CALL(framer_visitor_, OnPacketComplete());
142 } 136 }
143 ProcessPacket(serialized.packet); 137 ProcessPacket(serialized.packet);
144 delete serialized.packet; 138 delete serialized.packet;
145 } 139 }
146 140
147 TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) { 141 TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) {
148 QuicConnectionCloseFrame frame; 142 QuicConnectionCloseFrame frame;
149 frame.error_code = QUIC_NO_ERROR; 143 frame.error_code = QUIC_NO_ERROR;
150 frame.ack_frame = QuicAckFrame(0u, 0u); 144 frame.ack_frame = QuicAckFrame(0u, QuicTime::Zero(), 0u);
151 145
152 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); 146 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame);
153 ASSERT_EQ(1u, serialized.sequence_number); 147 ASSERT_EQ(1u, serialized.sequence_number);
154 ASSERT_EQ(1u, creator_.sequence_number()); 148 ASSERT_EQ(1u, creator_.sequence_number());
155 149
156 InSequence s; 150 InSequence s;
157 EXPECT_CALL(framer_visitor_, OnPacket()); 151 EXPECT_CALL(framer_visitor_, OnPacket());
158 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 152 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
159 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 153 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
160 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); 154 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_));
(...skipping 20 matching lines...) Expand all
181 } 175 }
182 176
183 TEST_F(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { 177 TEST_F(QuicPacketCreatorTest, CreateStreamFrameFinOnly) {
184 QuicFrame frame; 178 QuicFrame frame;
185 size_t consumed = creator_.CreateStreamFrame(1u, "", 0u, true, &frame); 179 size_t consumed = creator_.CreateStreamFrame(1u, "", 0u, true, &frame);
186 EXPECT_EQ(0u, consumed); 180 EXPECT_EQ(0u, consumed);
187 CheckStreamFrame(frame, 1u, "", 0u, true); 181 CheckStreamFrame(frame, 1u, "", 0u, true);
188 delete frame.stream_frame; 182 delete frame.stream_frame;
189 } 183 }
190 184
191 TEST_F(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { 185 TEST_F(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) {
186 QuicVersionTagList versions;
187 versions.push_back(kQuicVersion1);
188 scoped_ptr<QuicEncryptedPacket> encrypted(
189 creator_.SerializeVersionNegotiationPacket(versions));
190
191 {
192 InSequence s;
193 EXPECT_CALL(framer_visitor_, OnPacket());
194 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_));
195 }
196 client_framer_.ProcessPacket(*encrypted.get());
197 }
198
199 INSTANTIATE_TEST_CASE_P(ToggleVersionSerialization,
200 QuicPacketCreatorTest,
201 ::testing::Values(false, true));
202
203 TEST_P(QuicPacketCreatorTest, SerializeFrame) {
204 if (!GetParam()) {
205 creator_.StopSendingVersion();
206 }
207 frames_.push_back(QuicFrame(new QuicStreamFrame(
208 0u, false, 0u, StringPiece(""))));
209 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
210 delete frames_[0].stream_frame;
211
212 QuicPacketHeader header;
213 {
214 InSequence s;
215 EXPECT_CALL(framer_visitor_, OnPacket());
216 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce(
217 DoAll(SaveArg<0>(&header), Return(true)));
218 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
219 EXPECT_CALL(framer_visitor_, OnPacketComplete());
220 }
221 ProcessPacket(serialized.packet);
222 EXPECT_EQ(GetParam(), header.public_header.version_flag);
223 delete serialized.packet;
224 }
225
226 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) {
227 if (!GetParam()) {
228 creator_.StopSendingVersion();
229 }
192 // A string larger than fits into a frame. 230 // A string larger than fits into a frame.
193 size_t ciphertext_size = NullEncrypter().GetCiphertextSize(1); 231 creator_.options()->max_packet_length = GetPacketLengthForOneStream(
194 creator_.options()->max_packet_length = ciphertext_size + 232 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 1);
195 QuicPacketCreator::StreamFramePacketOverhead(1, !kIncludeVersion);
196 QuicFrame frame; 233 QuicFrame frame;
197 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, true, &frame); 234 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, true, &frame);
198 EXPECT_EQ(1u, consumed); 235 EXPECT_EQ(1u, consumed);
199 CheckStreamFrame(frame, 1u, "t", 0u, false); 236 CheckStreamFrame(frame, 1u, "t", 0u, false);
200 delete frame.stream_frame; 237 delete frame.stream_frame;
201 } 238 }
202 239
203 TEST_F(QuicPacketCreatorTest, AddFrameAndSerialize) { 240 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) {
241 if (!GetParam()) {
242 creator_.StopSendingVersion();
243 }
204 const size_t max_plaintext_size = 244 const size_t max_plaintext_size =
205 framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 245 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length);
206 EXPECT_FALSE(creator_.HasPendingFrames()); 246 EXPECT_FALSE(creator_.HasPendingFrames());
207 EXPECT_EQ(max_plaintext_size - GetPacketHeaderSize(!kIncludeVersion), 247 EXPECT_EQ(max_plaintext_size -
248 GetPacketHeaderSize(
249 QuicPacketCreatorPeer::SendVersionInPacket(&creator_)),
208 creator_.BytesFree()); 250 creator_.BytesFree());
209 251
210 // Add a variety of frame types and then a padding frame. 252 // Add a variety of frame types and then a padding frame.
211 QuicAckFrame ack_frame; 253 QuicAckFrame ack_frame;
212 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 254 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
213 EXPECT_TRUE(creator_.HasPendingFrames()); 255 EXPECT_TRUE(creator_.HasPendingFrames());
214 256
215 QuicCongestionFeedbackFrame congestion_feedback; 257 QuicCongestionFeedbackFrame congestion_feedback;
216 congestion_feedback.type = kFixRate; 258 congestion_feedback.type = kFixRate;
217 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback))); 259 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback)));
(...skipping 18 matching lines...) Expand all
236 ASSERT_TRUE(serialized.packet); 278 ASSERT_TRUE(serialized.packet);
237 delete serialized.packet; 279 delete serialized.packet;
238 ASSERT_TRUE(serialized.retransmittable_frames); 280 ASSERT_TRUE(serialized.retransmittable_frames);
239 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; 281 RetransmittableFrames* retransmittable = serialized.retransmittable_frames;
240 ASSERT_EQ(1u, retransmittable->frames().size()); 282 ASSERT_EQ(1u, retransmittable->frames().size());
241 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); 283 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type);
242 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); 284 ASSERT_TRUE(retransmittable->frames()[0].stream_frame);
243 delete serialized.retransmittable_frames; 285 delete serialized.retransmittable_frames;
244 286
245 EXPECT_FALSE(creator_.HasPendingFrames()); 287 EXPECT_FALSE(creator_.HasPendingFrames());
246 EXPECT_EQ(max_plaintext_size - GetPacketHeaderSize(!kIncludeVersion), 288 EXPECT_EQ(max_plaintext_size -
289 GetPacketHeaderSize(
290 QuicPacketCreatorPeer::SendVersionInPacket(&creator_)),
247 creator_.BytesFree()); 291 creator_.BytesFree());
248 } 292 }
249 293
250 } // namespace 294 } // namespace
251 } // namespace test 295 } // namespace test
252 } // namespace net 296 } // 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