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

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

Issue 1470713003: Landing Recent QUIC changes until and including Mon Nov 16 14:15:48 2015 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding NET_EXPORT_PRIVATE to DelegateInterface. Created 5 years 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
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 <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
11 #include "net/quic/crypto/quic_decrypter.h" 11 #include "net/quic/crypto/quic_decrypter.h"
12 #include "net/quic/crypto/quic_encrypter.h" 12 #include "net/quic/crypto/quic_encrypter.h"
13 #include "net/quic/quic_flags.h" 13 #include "net/quic/quic_flags.h"
14 #include "net/quic/quic_utils.h" 14 #include "net/quic/quic_utils.h"
15 #include "net/quic/test_tools/mock_random.h" 15 #include "net/quic/test_tools/mock_random.h"
16 #include "net/quic/test_tools/quic_framer_peer.h" 16 #include "net/quic/test_tools/quic_framer_peer.h"
17 #include "net/quic/test_tools/quic_packet_creator_peer.h" 17 #include "net/quic/test_tools/quic_packet_creator_peer.h"
18 #include "net/quic/test_tools/quic_test_utils.h" 18 #include "net/quic/test_tools/quic_test_utils.h"
19 #include "net/test/gtest_util.h" 19 #include "net/test/gtest_util.h"
20 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
21 21
22 using base::StringPiece; 22 using base::StringPiece;
23 using std::ostream; 23 using std::ostream;
24 using std::string; 24 using std::string;
25 using std::vector; 25 using std::vector;
26 using testing::DoAll; 26 using testing::DoAll;
27 using testing::InSequence; 27 using testing::InSequence;
28 using testing::Return; 28 using testing::Return;
29 using testing::SaveArg; 29 using testing::SaveArg;
30 using testing::StrictMock;
30 using testing::_; 31 using testing::_;
31 32
32 namespace net { 33 namespace net {
33 namespace test { 34 namespace test {
34 namespace { 35 namespace {
35 36
36 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}. 37 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}.
37 struct TestParams { 38 struct TestParams {
38 TestParams(QuicVersion version, 39 TestParams(QuicVersion version,
39 bool version_serialization, 40 bool version_serialization,
(...skipping 30 matching lines...) Expand all
70 params.push_back(TestParams(all_supported_versions[0], true, 71 params.push_back(TestParams(all_supported_versions[0], true,
71 PACKET_0BYTE_CONNECTION_ID, false)); 72 PACKET_0BYTE_CONNECTION_ID, false));
72 params.push_back(TestParams(all_supported_versions[0], true, 73 params.push_back(TestParams(all_supported_versions[0], true,
73 PACKET_1BYTE_CONNECTION_ID, false)); 74 PACKET_1BYTE_CONNECTION_ID, false));
74 params.push_back(TestParams(all_supported_versions[0], true, 75 params.push_back(TestParams(all_supported_versions[0], true,
75 PACKET_4BYTE_CONNECTION_ID, false)); 76 PACKET_4BYTE_CONNECTION_ID, false));
76 params.push_back(TestParams(all_supported_versions[0], true, max, true)); 77 params.push_back(TestParams(all_supported_versions[0], true, max, true));
77 return params; 78 return params;
78 } 79 }
79 80
81 class MockDelegate : public QuicPacketCreator::DelegateInterface {
82 public:
83 MockDelegate() {}
84 ~MockDelegate() override {}
85
86 MOCK_METHOD1(OnSerializedPacket, void(SerializedPacket* packet));
87
88 private:
89 DISALLOW_COPY_AND_ASSIGN(MockDelegate);
90 };
91
80 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { 92 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> {
93 public:
94 void ClearSerializedPacket(SerializedPacket* serialized_packet) {
95 if (serialized_packet == nullptr) {
96 return;
97 }
98
99 delete serialized_packet->retransmittable_frames;
100 delete serialized_packet->packet;
101 }
102
103 void SaveSerializedPacket(SerializedPacket* serialized_packet) {
104 if (serialized_packet == nullptr) {
105 return;
106 }
107
108 serialized_packet_ = *serialized_packet;
109 serialized_packet_.packet = serialized_packet->packet->Clone();
110 delete serialized_packet->packet;
111 }
112
81 protected: 113 protected:
82 QuicPacketCreatorTest() 114 QuicPacketCreatorTest()
83 : server_framer_(SupportedVersions(GetParam().version), 115 : server_framer_(SupportedVersions(GetParam().version),
84 QuicTime::Zero(), 116 QuicTime::Zero(),
85 Perspective::IS_SERVER), 117 Perspective::IS_SERVER),
86 client_framer_(SupportedVersions(GetParam().version), 118 client_framer_(SupportedVersions(GetParam().version),
87 QuicTime::Zero(), 119 QuicTime::Zero(),
88 Perspective::IS_CLIENT), 120 Perspective::IS_CLIENT),
89 connection_id_(2), 121 connection_id_(2),
90 data_("foo"), 122 data_("foo"),
91 creator_(connection_id_, &client_framer_, &mock_random_) { 123 creator_(connection_id_, &client_framer_, &mock_random_, &delegate_),
124 serialized_packet_(creator_.NoPacket()) {
92 creator_.set_connection_id_length(GetParam().connection_id_length); 125 creator_.set_connection_id_length(GetParam().connection_id_length);
93 client_framer_.set_visitor(&framer_visitor_); 126 client_framer_.set_visitor(&framer_visitor_);
94 client_framer_.set_received_entropy_calculator(&entropy_calculator_); 127 client_framer_.set_received_entropy_calculator(&entropy_calculator_);
95 server_framer_.set_visitor(&framer_visitor_); 128 server_framer_.set_visitor(&framer_visitor_);
96 FLAGS_quic_packet_creator_prefetch = GetParam().copy_use_prefetch; 129 FLAGS_quic_packet_creator_prefetch = GetParam().copy_use_prefetch;
97 } 130 }
98 131
99 ~QuicPacketCreatorTest() override {} 132 ~QuicPacketCreatorTest() override {}
100 133
101 void ProcessPacket(QuicEncryptedPacket* encrypted) { 134 void ProcessPacket(QuicEncryptedPacket* encrypted) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 180
148 QuicIOVector MakeIOVector(StringPiece s) { 181 QuicIOVector MakeIOVector(StringPiece s) {
149 return ::net::MakeIOVector(s, &iov_); 182 return ::net::MakeIOVector(s, &iov_);
150 } 183 }
151 184
152 static const QuicStreamOffset kOffset = 1u; 185 static const QuicStreamOffset kOffset = 1u;
153 186
154 QuicFrames frames_; 187 QuicFrames frames_;
155 QuicFramer server_framer_; 188 QuicFramer server_framer_;
156 QuicFramer client_framer_; 189 QuicFramer client_framer_;
157 testing::StrictMock<MockFramerVisitor> framer_visitor_; 190 StrictMock<MockFramerVisitor> framer_visitor_;
191 StrictMock<MockDelegate> delegate_;
158 QuicConnectionId connection_id_; 192 QuicConnectionId connection_id_;
159 string data_; 193 string data_;
160 struct iovec iov_; 194 struct iovec iov_;
161 MockRandom mock_random_; 195 MockRandom mock_random_;
162 QuicPacketCreator creator_; 196 QuicPacketCreator creator_;
163 MockEntropyCalculator entropy_calculator_; 197 MockEntropyCalculator entropy_calculator_;
198 SerializedPacket serialized_packet_;
164 }; 199 };
165 200
166 // Run all packet creator tests with all supported versions of QUIC, and with 201 // Run all packet creator tests with all supported versions of QUIC, and with
167 // and without version in the packet header, as well as doing a run for each 202 // and without version in the packet header, as well as doing a run for each
168 // length of truncated connection id. 203 // length of truncated connection id.
169 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, 204 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests,
170 QuicPacketCreatorTest, 205 QuicPacketCreatorTest,
171 ::testing::ValuesIn(GetTestParams())); 206 ::testing::ValuesIn(GetTestParams()));
172 207
173 TEST_P(QuicPacketCreatorTest, SerializeFrames) { 208 TEST_P(QuicPacketCreatorTest, SerializeFrames) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 282 }
248 ProcessPacket(serialized.packet); 283 ProcessPacket(serialized.packet);
249 delete serialized.packet; 284 delete serialized.packet;
250 } 285 }
251 286
252 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { 287 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) {
253 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); 288 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u))));
254 creator_.AddSavedFrame(frames_[0]); 289 creator_.AddSavedFrame(frames_[0]);
255 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, 290 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
256 PACKET_4BYTE_PACKET_NUMBER); 291 PACKET_4BYTE_PACKET_NUMBER);
257 char buffer[kMaxPacketSize]; 292
258 SerializedPacket serialized = 293 EXPECT_CALL(delegate_, OnSerializedPacket(_))
259 creator_.SerializePacket(buffer, kMaxPacketSize); 294 .WillRepeatedly(
295 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
296 creator_.Flush();
260 // The packet number length will not change mid-packet. 297 // The packet number length will not change mid-packet.
261 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); 298 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
299 serialized_packet_.packet_number_length);
262 300
263 { 301 {
264 InSequence s; 302 InSequence s;
265 EXPECT_CALL(framer_visitor_, OnPacket()); 303 EXPECT_CALL(framer_visitor_, OnPacket());
266 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 304 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
267 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 305 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
268 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 306 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
269 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 307 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
270 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 308 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
271 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 309 EXPECT_CALL(framer_visitor_, OnPacketComplete());
272 } 310 }
273 ProcessPacket(serialized.packet); 311 ProcessPacket(serialized_packet_.packet);
274 delete serialized.packet; 312 ClearSerializedPacket(&serialized_packet_);
275 313
276 creator_.AddSavedFrame(frames_[0]); 314 creator_.AddSavedFrame(frames_[0]);
277 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); 315 creator_.Flush();
278 // Now the actual packet number length should have changed. 316 // Now the actual packet number length should have changed.
279 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); 317 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
318 serialized_packet_.packet_number_length);
280 delete frames_[0].ack_frame; 319 delete frames_[0].ack_frame;
281 320
282 { 321 {
283 InSequence s; 322 InSequence s;
284 EXPECT_CALL(framer_visitor_, OnPacket()); 323 EXPECT_CALL(framer_visitor_, OnPacket());
285 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 324 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
286 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 325 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
287 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 326 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
288 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 327 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
289 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 328 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
290 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 329 EXPECT_CALL(framer_visitor_, OnPacketComplete());
291 } 330 }
292 ProcessPacket(serialized.packet); 331 ProcessPacket(serialized_packet_.packet);
293 delete serialized.packet; 332 ClearSerializedPacket(&serialized_packet_);
294 } 333 }
295 334
296 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { 335 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) {
297 // Changing the packet number length with queued frames in the creator 336 // Changing the packet number length with queued frames in the creator
298 // should hold the change until after any currently queued frames are 337 // should hold the change until after any currently queued frames are
299 // serialized. 338 // serialized.
300 339
301 // Packet 1. 340 // Packet 1.
302 // Queue a frame in the creator. 341 // Queue a frame in the creator.
303 EXPECT_FALSE(creator_.HasPendingFrames()); 342 EXPECT_FALSE(creator_.HasPendingFrames());
304 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); 343 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u)));
305 creator_.AddSavedFrame(ack_frame); 344 creator_.AddSavedFrame(ack_frame);
306 345
307 // Now change packet number length. 346 // Now change packet number length.
308 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, 347 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
309 PACKET_4BYTE_PACKET_NUMBER); 348 PACKET_4BYTE_PACKET_NUMBER);
310 349
311 // Add a STOP_WAITING frame since it contains a packet number, 350 // Add a STOP_WAITING frame since it contains a packet number,
312 // whose length should be 1. 351 // whose length should be 1.
313 QuicStopWaitingFrame stop_waiting_frame; 352 QuicStopWaitingFrame stop_waiting_frame;
314 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); 353 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame)));
315 EXPECT_TRUE(creator_.HasPendingFrames()); 354 EXPECT_TRUE(creator_.HasPendingFrames());
316 355
317 // Ensure the packet is successfully created. 356 // Ensure the packet is successfully created.
318 char buffer[kMaxPacketSize]; 357 EXPECT_CALL(delegate_, OnSerializedPacket(_))
319 SerializedPacket serialized = 358 .WillRepeatedly(
320 creator_.SerializePacket(buffer, kMaxPacketSize); 359 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
321 ASSERT_TRUE(serialized.packet); 360 creator_.Flush();
322 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); 361 ASSERT_TRUE(serialized_packet_.packet);
362 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
363 serialized_packet_.packet_number_length);
323 364
324 // Verify that header in transmitted packet has 1 byte sequence length. 365 // Verify that header in transmitted packet has 1 byte sequence length.
325 QuicPacketHeader header; 366 QuicPacketHeader header;
326 { 367 {
327 InSequence s; 368 InSequence s;
328 EXPECT_CALL(framer_visitor_, OnPacket()); 369 EXPECT_CALL(framer_visitor_, OnPacket());
329 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 370 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
330 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 371 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
331 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 372 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
332 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( 373 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce(
333 DoAll(SaveArg<0>(&header), Return(true))); 374 DoAll(SaveArg<0>(&header), Return(true)));
334 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 375 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
335 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); 376 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_));
336 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 377 EXPECT_CALL(framer_visitor_, OnPacketComplete());
337 } 378 }
338 ProcessPacket(serialized.packet); 379 ProcessPacket(serialized_packet_.packet);
339 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 380 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
340 header.public_header.packet_number_length); 381 header.public_header.packet_number_length);
341 delete serialized.packet; 382 ClearSerializedPacket(&serialized_packet_);
342 383
343 // Packet 2. 384 // Packet 2.
344 EXPECT_FALSE(creator_.HasPendingFrames()); 385 EXPECT_FALSE(creator_.HasPendingFrames());
345 // Generate Packet 2 with one frame -- packet number length should now 386 // Generate Packet 2 with one frame -- packet number length should now
346 // change to 4 bytes. 387 // change to 4 bytes.
347 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); 388 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame)));
348 EXPECT_TRUE(creator_.HasPendingFrames()); 389 EXPECT_TRUE(creator_.HasPendingFrames());
349 390
350 // Ensure the packet is successfully created. 391 // Ensure the packet is successfully created.
351 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); 392 creator_.Flush();
352 ASSERT_TRUE(serialized.packet); 393 ASSERT_TRUE(serialized_packet_.packet);
353 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); 394 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
395 serialized_packet_.packet_number_length);
354 396
355 // Verify that header in transmitted packet has 4 byte sequence length. 397 // Verify that header in transmitted packet has 4 byte sequence length.
356 { 398 {
357 InSequence s; 399 InSequence s;
358 EXPECT_CALL(framer_visitor_, OnPacket()); 400 EXPECT_CALL(framer_visitor_, OnPacket());
359 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 401 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
360 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 402 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
361 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 403 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
362 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( 404 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce(
363 DoAll(SaveArg<0>(&header), Return(true))); 405 DoAll(SaveArg<0>(&header), Return(true)));
364 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); 406 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_));
365 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 407 EXPECT_CALL(framer_visitor_, OnPacketComplete());
366 } 408 }
367 ProcessPacket(serialized.packet); 409 ProcessPacket(serialized_packet_.packet);
368 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, 410 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
369 header.public_header.packet_number_length); 411 header.public_header.packet_number_length);
370 412
371 delete serialized.packet; 413 ClearSerializedPacket(&serialized_packet_);
372 delete ack_frame.ack_frame; 414 delete ack_frame.ack_frame;
373 } 415 }
374 416
375 TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) { 417 TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
376 // Test goal is to test the following sequence (P1 => generate Packet 1): 418 // Test goal is to test the following sequence (P1 => generate Packet 1):
377 // P1 <change seq num length> P2 FEC, 419 // P1 <change seq num length> P2 FEC,
378 // and we expect that packet number length should not change until the end 420 // and we expect that packet number length should not change until the end
379 // of the open FEC group. 421 // of the open FEC group.
380 422
381 // Enable FEC protection, and send FEC packet every 6 packets. 423 // Enable FEC protection, and send FEC packet every 6 packets.
382 EXPECT_TRUE(SwitchFecProtectionOn(6)); 424 EXPECT_TRUE(SwitchFecProtectionOn(6));
383 // Should return false since we do not have enough packets in the FEC group to 425 // Should return false since we do not have enough packets in the FEC group to
384 // trigger an FEC packet. 426 // trigger an FEC packet.
385 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); 427 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
386 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); 428 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u))));
387 429
388 // Generate Packet 1. 430 // Generate Packet 1.
389 creator_.AddSavedFrame(frames_[0]); 431 creator_.AddSavedFrame(frames_[0]);
390 // Change the packet number length mid-FEC group and it should not change. 432 // Change the packet number length mid-FEC group and it should not change.
391 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, 433 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
392 PACKET_4BYTE_PACKET_NUMBER); 434 PACKET_4BYTE_PACKET_NUMBER);
393 char buffer[kMaxPacketSize]; 435 EXPECT_CALL(delegate_, OnSerializedPacket(_))
394 SerializedPacket serialized = 436 .WillRepeatedly(
395 creator_.SerializePacket(buffer, kMaxPacketSize); 437 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
396 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); 438 creator_.Flush();
439 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
440 serialized_packet_.packet_number_length);
397 441
398 { 442 {
399 InSequence s; 443 InSequence s;
400 EXPECT_CALL(framer_visitor_, OnPacket()); 444 EXPECT_CALL(framer_visitor_, OnPacket());
401 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 445 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
402 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 446 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
403 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 447 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
404 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 448 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
405 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); 449 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
406 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 450 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
407 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 451 EXPECT_CALL(framer_visitor_, OnPacketComplete());
408 } 452 }
409 ProcessPacket(serialized.packet); 453 ProcessPacket(serialized_packet_.packet);
410 delete serialized.packet; 454 ClearSerializedPacket(&serialized_packet_);
411 455
412 // Generate Packet 2. 456 // Generate Packet 2.
413 creator_.AddSavedFrame(frames_[0]); 457 creator_.AddSavedFrame(frames_[0]);
414 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); 458 creator_.Flush();
415 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); 459 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
460 serialized_packet_.packet_number_length);
416 461
417 { 462 {
418 InSequence s; 463 InSequence s;
419 EXPECT_CALL(framer_visitor_, OnPacket()); 464 EXPECT_CALL(framer_visitor_, OnPacket());
420 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 465 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
421 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 466 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
422 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 467 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
423 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 468 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
424 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); 469 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
425 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 470 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
426 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 471 EXPECT_CALL(framer_visitor_, OnPacketComplete());
427 } 472 }
428 ProcessPacket(serialized.packet); 473 ProcessPacket(serialized_packet_.packet);
429 delete serialized.packet; 474 ClearSerializedPacket(&serialized_packet_);
430 475
431 // Should return false since we do not have enough packets in the FEC group to 476 // Should return false since we do not have enough packets in the FEC group to
432 // trigger an FEC packet. 477 // trigger an FEC packet.
433 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); 478 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
434 // Should return true since there are packets in the FEC group. 479 // Should return true since there are packets in the FEC group.
435 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true)); 480 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true));
436 481
437 // Force generation of FEC packet. 482 // Force generation of FEC packet.
438 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); 483 char buffer[kMaxPacketSize];
484 SerializedPacket serialized = creator_.SerializeFec(buffer, kMaxPacketSize);
439 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); 485 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length);
440 ASSERT_EQ(3u, serialized.packet_number); 486 ASSERT_EQ(3u, serialized.packet_number);
441 487
442 { 488 {
443 InSequence s; 489 InSequence s;
444 EXPECT_CALL(framer_visitor_, OnPacket()); 490 EXPECT_CALL(framer_visitor_, OnPacket());
445 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 491 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
446 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 492 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
447 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 493 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
448 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 494 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
449 EXPECT_CALL(framer_visitor_, OnFecData(_)); 495 EXPECT_CALL(framer_visitor_, OnFecData(_));
450 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 496 EXPECT_CALL(framer_visitor_, OnPacketComplete());
451 } 497 }
452 ProcessPacket(serialized.packet); 498 ProcessPacket(serialized.packet);
453 delete serialized.packet; 499 ClearSerializedPacket(&serialized);
454 500
455 // Ensure the next FEC group starts using the new packet number length. 501 // Ensure the next FEC group starts using the new packet number length.
456 serialized = creator_.SerializeAllFrames(frames_, buffer, kMaxPacketSize); 502 serialized = creator_.SerializeAllFrames(frames_, buffer, kMaxPacketSize);
457 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); 503 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length);
458 delete frames_[0].ack_frame; 504 delete frames_[0].ack_frame;
459 delete serialized.packet; 505 ClearSerializedPacket(&serialized);
460 } 506 }
461 507
462 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { 508 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) {
463 // If the original packet number length, the current packet number 509 // If the original packet number length, the current packet number
464 // length, and the configured send packet number length are different, the 510 // length, and the configured send packet number length are different, the
465 // retransmit must sent with the original length and the others do not change. 511 // retransmit must sent with the original length and the others do not change.
466 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, 512 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_,
467 PACKET_4BYTE_PACKET_NUMBER); 513 PACKET_4BYTE_PACKET_NUMBER);
468 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, 514 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_,
469 PACKET_2BYTE_PACKET_NUMBER); 515 PACKET_2BYTE_PACKET_NUMBER);
(...skipping 21 matching lines...) Expand all
491 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 537 EXPECT_CALL(framer_visitor_, OnPacketComplete());
492 } 538 }
493 ProcessPacket(serialized.packet); 539 ProcessPacket(serialized.packet);
494 delete serialized.packet; 540 delete serialized.packet;
495 } 541 }
496 542
497 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { 543 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) {
498 QuicFrame frame; 544 QuicFrame frame;
499 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); 545 QuicIOVector io_vector(MakeIOVector("fake handshake message data"));
500 UniqueStreamBuffer stream_buffer; 546 UniqueStreamBuffer stream_buffer;
501 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0u, 0u, false, &frame, 547 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
502 &stream_buffer); 548 io_vector, 0u, 0u, false, &frame,
549 &stream_buffer);
503 RetransmittableFrames frames(ENCRYPTION_NONE); 550 RetransmittableFrames frames(ENCRYPTION_NONE);
504 frames.AddFrame(frame); 551 frames.AddFrame(frame);
505 frames.set_needs_padding(true); 552 frames.set_needs_padding(true);
506 char buffer[kMaxPacketSize]; 553 char buffer[kMaxPacketSize];
507 SerializedPacket serialized = creator_.ReserializeAllFrames( 554 SerializedPacket serialized = creator_.ReserializeAllFrames(
508 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, 555 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer,
509 kMaxPacketSize); 556 kMaxPacketSize);
510 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); 557 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length());
511 delete serialized.packet; 558 delete serialized.packet;
512 } 559 }
513 560
514 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { 561 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) {
515 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 562 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
516 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 563 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
517 size_t capacity = kDefaultMaxPacketSize - overhead; 564 size_t capacity = kDefaultMaxPacketSize - overhead;
518 for (int delta = -5; delta <= 0; ++delta) { 565 for (int delta = -5; delta <= 0; ++delta) {
519 string data(capacity + delta, 'A'); 566 string data(capacity + delta, 'A');
520 size_t bytes_free = 0 - delta; 567 size_t bytes_free = 0 - delta;
521 568
522 QuicFrame frame; 569 QuicFrame frame;
523 QuicIOVector io_vector(MakeIOVector(data)); 570 QuicIOVector io_vector(MakeIOVector(data));
524 UniqueStreamBuffer stream_buffer; 571 UniqueStreamBuffer stream_buffer;
525 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0, kOffset, false, 572 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId,
526 &frame, &stream_buffer); 573 io_vector, 0, kOffset, false,
574 &frame, &stream_buffer);
527 RetransmittableFrames frames(ENCRYPTION_NONE); 575 RetransmittableFrames frames(ENCRYPTION_NONE);
528 frames.AddFrame(frame); 576 frames.AddFrame(frame);
529 frames.set_needs_padding(true); 577 frames.set_needs_padding(true);
530 char buffer[kMaxPacketSize]; 578 char buffer[kMaxPacketSize];
531 SerializedPacket serialized = creator_.ReserializeAllFrames( 579 SerializedPacket serialized = creator_.ReserializeAllFrames(
532 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), 580 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_),
533 buffer, kMaxPacketSize); 581 buffer, kMaxPacketSize);
534 582
535 // If there is not enough space in the packet to fit a padding frame 583 // If there is not enough space in the packet to fit a padding frame
536 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 584 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 creator_.StopFecProtectingPackets(); 670 creator_.StopFecProtectingPackets();
623 EXPECT_FALSE(creator_.IsFecProtected()); 671 EXPECT_FALSE(creator_.IsFecProtected());
624 creator_.StartFecProtectingPackets(); 672 creator_.StartFecProtectingPackets();
625 EXPECT_TRUE(creator_.IsFecProtected()); 673 EXPECT_TRUE(creator_.IsFecProtected());
626 } 674 }
627 675
628 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { 676 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) {
629 // Add a stream frame to the creator. 677 // Add a stream frame to the creator.
630 QuicFrame frame; 678 QuicFrame frame;
631 QuicIOVector io_vector(MakeIOVector("test")); 679 QuicIOVector io_vector(MakeIOVector("test"));
632 UniqueStreamBuffer stream_buffer; 680 ASSERT_TRUE(
633 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 681 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
634 &frame, &stream_buffer); 682 ASSERT_TRUE(frame.stream_frame);
683 size_t consumed = frame.stream_frame->data.length();
635 EXPECT_EQ(4u, consumed); 684 EXPECT_EQ(4u, consumed);
636 ASSERT_TRUE(frame.stream_frame);
637 EXPECT_TRUE(creator_.AddSavedFrame(frame));
638 EXPECT_TRUE(creator_.HasPendingFrames()); 685 EXPECT_TRUE(creator_.HasPendingFrames());
639 686
640 // Enable FEC protection, and send FEC packet every 6 packets. 687 // Enable FEC protection, and send FEC packet every 6 packets.
641 creator_.set_max_packets_per_fec_group(6); 688 creator_.set_max_packets_per_fec_group(6);
642 EXPECT_TRUE(creator_.IsFecEnabled()); 689 EXPECT_TRUE(creator_.IsFecEnabled());
643 EXPECT_DFATAL(creator_.StartFecProtectingPackets(), 690 EXPECT_DFATAL(creator_.StartFecProtectingPackets(),
644 "Cannot start FEC protection with pending frames."); 691 "Cannot start FEC protection with pending frames.");
645 EXPECT_FALSE(creator_.IsFecProtected()); 692 EXPECT_FALSE(creator_.IsFecProtected());
646 693
647 // Serialize packet for transmission. 694 // Serialize packet for transmission.
648 char buffer[kMaxPacketSize]; 695 EXPECT_CALL(delegate_, OnSerializedPacket(_))
649 SerializedPacket serialized = 696 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
650 creator_.SerializePacket(buffer, kMaxPacketSize); 697 creator_.Flush();
651 delete serialized.packet;
652 delete serialized.retransmittable_frames;
653 EXPECT_FALSE(creator_.HasPendingFrames()); 698 EXPECT_FALSE(creator_.HasPendingFrames());
654 699
655 // Since all pending frames have been serialized, turning FEC on should work. 700 // Since all pending frames have been serialized, turning FEC on should work.
656 creator_.StartFecProtectingPackets(); 701 creator_.StartFecProtectingPackets();
657 EXPECT_TRUE(creator_.IsFecProtected()); 702 EXPECT_TRUE(creator_.IsFecProtected());
658 } 703 }
659 704
660 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { 705 TEST_P(QuicPacketCreatorTest, ConsumeData) {
661 QuicFrame frame; 706 QuicFrame frame;
662 QuicIOVector io_vector(MakeIOVector("test")); 707 QuicIOVector io_vector(MakeIOVector("test"));
663 UniqueStreamBuffer stream_buffer; 708 ASSERT_TRUE(
664 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 709 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
665 &frame, &stream_buffer); 710 ASSERT_TRUE(frame.stream_frame);
711 size_t consumed = frame.stream_frame->data.length();
666 EXPECT_EQ(4u, consumed); 712 EXPECT_EQ(4u, consumed);
667 CheckStreamFrame(frame, 1u, "test", 0u, false); 713 CheckStreamFrame(frame, 1u, "test", 0u, false);
668 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); 714 EXPECT_TRUE(creator_.HasPendingFrames());
669 cleanup_frames.AddFrame(frame);
670 } 715 }
671 716
672 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { 717 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) {
673 QuicFrame frame; 718 QuicFrame frame;
674 QuicIOVector io_vector(MakeIOVector("test")); 719 QuicIOVector io_vector(MakeIOVector("test"));
675 UniqueStreamBuffer stream_buffer; 720 ASSERT_TRUE(
676 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 10u, true, 721 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame));
677 &frame, &stream_buffer); 722 ASSERT_TRUE(frame.stream_frame);
723 size_t consumed = frame.stream_frame->data.length();
678 EXPECT_EQ(4u, consumed); 724 EXPECT_EQ(4u, consumed);
679 CheckStreamFrame(frame, 1u, "test", 10u, true); 725 CheckStreamFrame(frame, 1u, "test", 10u, true);
680 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); 726 EXPECT_TRUE(creator_.HasPendingFrames());
681 cleanup_frames.AddFrame(frame);
682 } 727 }
683 728
684 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { 729 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) {
685 QuicFrame frame; 730 QuicFrame frame;
686 QuicIOVector io_vector(nullptr, 0, 0); 731 QuicIOVector io_vector(nullptr, 0, 0);
687 UniqueStreamBuffer stream_buffer; 732 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
688 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, 733 ASSERT_TRUE(frame.stream_frame);
689 &frame, &stream_buffer); 734 size_t consumed = frame.stream_frame->data.length();
690 EXPECT_EQ(0u, consumed); 735 EXPECT_EQ(0u, consumed);
691 CheckStreamFrame(frame, 1u, string(), 0u, true); 736 CheckStreamFrame(frame, 1u, string(), 0u, true);
692 delete frame.stream_frame; 737 EXPECT_TRUE(creator_.HasPendingFrames());
693 } 738 }
694 739
695 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { 740 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
696 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 741 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
697 + GetEncryptionOverhead(); 742 + GetEncryptionOverhead();
698 for (size_t i = overhead; i < overhead + 100; ++i) { 743 for (size_t i = overhead; i < overhead + 100; ++i) {
699 creator_.SetMaxPacketLength(i); 744 creator_.SetMaxPacketLength(i);
700 const bool should_have_room = i > overhead + GetStreamFrameOverhead( 745 const bool should_have_room = i > overhead + GetStreamFrameOverhead(
701 NOT_IN_FEC_GROUP); 746 NOT_IN_FEC_GROUP);
702 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( 747 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame(
703 kClientDataStreamId1, kOffset)); 748 kClientDataStreamId1, kOffset));
704 if (should_have_room) { 749 if (should_have_room) {
705 QuicFrame frame; 750 QuicFrame frame;
706 QuicIOVector io_vector(MakeIOVector("testdata")); 751 QuicIOVector io_vector(MakeIOVector("testdata"));
707 UniqueStreamBuffer stream_buffer; 752 EXPECT_CALL(delegate_, OnSerializedPacket(_))
708 size_t bytes_consumed = 753 .WillRepeatedly(
709 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, 754 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
710 kOffset, false, &frame, &stream_buffer); 755 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
756 kOffset, false, false, &frame));
757 ASSERT_TRUE(frame.stream_frame);
758 size_t bytes_consumed = frame.stream_frame->data.length();
711 EXPECT_LT(0u, bytes_consumed); 759 EXPECT_LT(0u, bytes_consumed);
712 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 760 creator_.Flush();
713 char buffer[kMaxPacketSize];
714 SerializedPacket serialized_packet =
715 creator_.SerializePacket(buffer, kMaxPacketSize);
716 ASSERT_TRUE(serialized_packet.packet);
717 delete serialized_packet.packet;
718 delete serialized_packet.retransmittable_frames;
719 } 761 }
720 } 762 }
721 } 763 }
722 764
723 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { 765 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) {
724 // Compute the total overhead for a single frame in packet. 766 // Compute the total overhead for a single frame in packet.
725 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 767 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) +
726 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 768 GetEncryptionOverhead() +
769 GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
727 size_t capacity = kDefaultMaxPacketSize - overhead; 770 size_t capacity = kDefaultMaxPacketSize - overhead;
728 // Now, test various sizes around this size. 771 // Now, test various sizes around this size.
729 for (int delta = -5; delta <= 5; ++delta) { 772 for (int delta = -5; delta <= 5; ++delta) {
730 string data(capacity + delta, 'A'); 773 string data(capacity + delta, 'A');
731 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 774 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
732 QuicFrame frame; 775 QuicFrame frame;
733 QuicIOVector io_vector(MakeIOVector(data)); 776 QuicIOVector io_vector(MakeIOVector(data));
734 UniqueStreamBuffer stream_buffer; 777 UniqueStreamBuffer stream_buffer;
735 size_t bytes_consumed = 778 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame(
736 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 779 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame,
737 false, &frame, &stream_buffer); 780 &stream_buffer);
738 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 781 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
739 782
740 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 783 ASSERT_TRUE(creator_.AddSavedFrame(frame));
741 // BytesFree() returns bytes available for the next frame, which will 784 // BytesFree() returns bytes available for the next frame, which will
742 // be two bytes smaller since the stream frame would need to be grown. 785 // be two bytes smaller since the stream frame would need to be grown.
743 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); 786 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame());
744 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; 787 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2;
745 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 788 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
746 char buffer[kMaxPacketSize]; 789 EXPECT_CALL(delegate_, OnSerializedPacket(_))
747 SerializedPacket serialized_packet = 790 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
748 creator_.SerializePacket(buffer, kMaxPacketSize); 791 creator_.Flush();
749 ASSERT_TRUE(serialized_packet.packet); 792 ASSERT_TRUE(serialized_packet_.packet);
750 delete serialized_packet.packet; 793 ClearSerializedPacket(&serialized_packet_);
751 delete serialized_packet.retransmittable_frames;
752 } 794 }
753 } 795 }
754 796
755 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { 797 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) {
756 // Enable FEC protection, and send FEC packet every 6 packets. 798 // Enable FEC protection, and send FEC packet every 6 packets.
757 EXPECT_TRUE(SwitchFecProtectionOn(6)); 799 EXPECT_TRUE(SwitchFecProtectionOn(6));
758 // Compute the total overhead for a single frame in packet. 800 // Compute the total overhead for a single frame in packet.
759 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) 801 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) +
760 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); 802 GetEncryptionOverhead() +
803 GetStreamFrameOverhead(IN_FEC_GROUP);
761 size_t capacity = kDefaultMaxPacketSize - overhead; 804 size_t capacity = kDefaultMaxPacketSize - overhead;
762 // Now, test various sizes around this size. 805 // Now, test various sizes around this size.
763 for (int delta = -5; delta <= 5; ++delta) { 806 for (int delta = -5; delta <= 5; ++delta) {
764 string data(capacity + delta, 'A'); 807 string data(capacity + delta, 'A');
765 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 808 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
766 QuicFrame frame; 809 QuicFrame frame;
767 QuicIOVector io_vector(MakeIOVector(data)); 810 QuicIOVector io_vector(MakeIOVector(data));
768 UniqueStreamBuffer stream_buffer; 811 UniqueStreamBuffer stream_buffer;
769 size_t bytes_consumed = 812 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame(
770 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 813 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame,
771 false, &frame, &stream_buffer); 814 &stream_buffer);
772 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 815 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
773 816
774 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 817 ASSERT_TRUE(creator_.AddSavedFrame(frame));
775 // BytesFree() returns bytes available for the next frame. Since stream 818 // BytesFree() returns bytes available for the next frame. Since stream
776 // frame does not grow for FEC protected packets, this should be the same 819 // frame does not grow for FEC protected packets, this should be the same
777 // as bytes_free (bound by 0). 820 // as bytes_free (bound by 0).
778 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); 821 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame());
779 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; 822 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0;
780 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 823 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
781 char buffer[kMaxPacketSize]; 824 EXPECT_CALL(delegate_, OnSerializedPacket(_))
782 SerializedPacket serialized_packet = 825 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
783 creator_.SerializePacket(buffer, kMaxPacketSize); 826 creator_.Flush();
784 ASSERT_TRUE(serialized_packet.packet); 827 ASSERT_TRUE(serialized_packet_.packet);
785 delete serialized_packet.packet; 828 ClearSerializedPacket(&serialized_packet_);
786 delete serialized_packet.retransmittable_frames;
787 } 829 }
788 } 830 }
789 831
790 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { 832 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
791 // Compute the total overhead for a single frame in packet. 833 // Compute the total overhead for a single frame in packet.
792 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 834 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
793 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 835 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
794 ASSERT_GT(kMaxPacketSize, overhead); 836 ASSERT_GT(kMaxPacketSize, overhead);
795 size_t capacity = kDefaultMaxPacketSize - overhead; 837 size_t capacity = kDefaultMaxPacketSize - overhead;
796 // Now, test various sizes around this size. 838 // Now, test various sizes around this size.
797 for (int delta = -5; delta <= 5; ++delta) { 839 for (int delta = -5; delta <= 5; ++delta) {
798 string data(capacity + delta, 'A'); 840 string data(capacity + delta, 'A');
799 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 841 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
800 842
801 QuicFrame frame; 843 QuicFrame frame;
802 QuicIOVector io_vector(MakeIOVector(data)); 844 QuicIOVector io_vector(MakeIOVector(data));
803 UniqueStreamBuffer stream_buffer; 845 EXPECT_CALL(delegate_, OnSerializedPacket(_))
804 size_t bytes_consumed = creator_.CreateStreamFrame( 846 .WillRepeatedly(
805 kCryptoStreamId, io_vector, 0u, kOffset, false, &frame, &stream_buffer); 847 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
848 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset,
849 false, true, &frame));
850 ASSERT_TRUE(frame.stream_frame);
851 size_t bytes_consumed = frame.stream_frame->data.length();
806 EXPECT_LT(0u, bytes_consumed); 852 EXPECT_LT(0u, bytes_consumed);
807 ASSERT_TRUE(creator_.AddPaddedSavedFrame(frame, nullptr)); 853 creator_.Flush();
808 char buffer[kMaxPacketSize]; 854 ASSERT_TRUE(serialized_packet_.packet);
809 SerializedPacket serialized_packet =
810 creator_.SerializePacket(buffer, kMaxPacketSize);
811 ASSERT_TRUE(serialized_packet.packet);
812 // If there is not enough space in the packet to fit a padding frame 855 // If there is not enough space in the packet to fit a padding frame
813 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 856 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
814 // will not be padded. 857 // will not be padded.
815 if (bytes_free < 3) { 858 if (bytes_free < 3) {
816 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, 859 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free,
817 serialized_packet.packet->length()); 860 serialized_packet_.packet->length());
818 } else { 861 } else {
819 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); 862 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.packet->length());
820 } 863 }
821 delete serialized_packet.packet; 864 ClearSerializedPacket(&serialized_packet_);
822 delete serialized_packet.retransmittable_frames;
823 } 865 }
824 } 866 }
825 867
826 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { 868 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) {
827 // Compute the total overhead for a single frame in packet. 869 // Compute the total overhead for a single frame in packet.
828 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 870 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
829 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 871 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
830 ASSERT_GT(kDefaultMaxPacketSize, overhead); 872 ASSERT_GT(kDefaultMaxPacketSize, overhead);
831 size_t capacity = kDefaultMaxPacketSize - overhead; 873 size_t capacity = kDefaultMaxPacketSize - overhead;
832 // Now, test various sizes around this size. 874 // Now, test various sizes around this size.
833 for (int delta = -5; delta <= 5; ++delta) { 875 for (int delta = -5; delta <= 5; ++delta) {
834 string data(capacity + delta, 'A'); 876 string data(capacity + delta, 'A');
835 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 877 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
836 878
837 QuicFrame frame; 879 QuicFrame frame;
838 QuicIOVector io_vector(MakeIOVector(data)); 880 QuicIOVector io_vector(MakeIOVector(data));
839 UniqueStreamBuffer stream_buffer; 881 EXPECT_CALL(delegate_, OnSerializedPacket(_))
840 size_t bytes_consumed = 882 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
841 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, 883 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u,
842 false, &frame, &stream_buffer); 884 kOffset, false, false, &frame));
885 ASSERT_TRUE(frame.stream_frame);
886 size_t bytes_consumed = frame.stream_frame->data.length();
843 EXPECT_LT(0u, bytes_consumed); 887 EXPECT_LT(0u, bytes_consumed);
844 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 888 creator_.Flush();
845 char buffer[kMaxPacketSize]; 889 ASSERT_TRUE(serialized_packet_.packet);
846 SerializedPacket serialized_packet =
847 creator_.SerializePacket(buffer, kMaxPacketSize);
848 ASSERT_TRUE(serialized_packet.packet);
849 if (bytes_free > 0) { 890 if (bytes_free > 0) {
850 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, 891 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free,
851 serialized_packet.packet->length()); 892 serialized_packet_.packet->length());
852 } else { 893 } else {
853 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); 894 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.packet->length());
854 } 895 }
855 delete serialized_packet.packet; 896 ClearSerializedPacket(&serialized_packet_);
856 delete serialized_packet.retransmittable_frames;
857 } 897 }
858 } 898 }
859 899
860 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { 900 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) {
861 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_SERVER); 901 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_SERVER);
862 QuicVersionVector versions; 902 QuicVersionVector versions;
863 versions.push_back(test::QuicVersionMax()); 903 versions.push_back(test::QuicVersionMax());
864 scoped_ptr<QuicEncryptedPacket> encrypted( 904 scoped_ptr<QuicEncryptedPacket> encrypted(
865 creator_.SerializeVersionNegotiationPacket(versions)); 905 creator_.SerializeVersionNegotiationPacket(versions));
866 906
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 DoAll(SaveArg<0>(&header), Return(true))); 991 DoAll(SaveArg<0>(&header), Return(true)));
952 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 992 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
953 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 993 EXPECT_CALL(framer_visitor_, OnPacketComplete());
954 } 994 }
955 ProcessPacket(serialized.packet); 995 ProcessPacket(serialized.packet);
956 EXPECT_EQ(GetParam().version_serialization, 996 EXPECT_EQ(GetParam().version_serialization,
957 header.public_header.version_flag); 997 header.public_header.version_flag);
958 delete serialized.packet; 998 delete serialized.packet;
959 } 999 }
960 1000
961 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { 1001 TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) {
962 if (!GetParam().version_serialization) { 1002 if (!GetParam().version_serialization) {
963 creator_.StopSendingVersion(); 1003 creator_.StopSendingVersion();
964 } 1004 }
965 // A string larger than fits into a frame. 1005 // A string larger than fits into a frame.
966 size_t payload_length; 1006 size_t payload_length;
967 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( 1007 creator_.SetMaxPacketLength(GetPacketLengthForOneStream(
968 client_framer_.version(), 1008 client_framer_.version(),
969 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 1009 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
970 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, 1010 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER,
971 NOT_IN_FEC_GROUP, &payload_length)); 1011 NOT_IN_FEC_GROUP, &payload_length));
972 QuicFrame frame; 1012 QuicFrame frame;
973 const string too_long_payload(payload_length * 2, 'a'); 1013 const string too_long_payload(payload_length * 2, 'a');
974 QuicIOVector io_vector(MakeIOVector(too_long_payload)); 1014 QuicIOVector io_vector(MakeIOVector(too_long_payload));
975 UniqueStreamBuffer stream_buffer; 1015 EXPECT_CALL(delegate_, OnSerializedPacket(_))
976 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, 1016 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
977 &frame, &stream_buffer); 1017 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame));
1018 ASSERT_TRUE(frame.stream_frame);
1019 size_t consumed = frame.stream_frame->data.length();
978 EXPECT_EQ(payload_length, consumed); 1020 EXPECT_EQ(payload_length, consumed);
979 const string payload(payload_length, 'a'); 1021 const string payload(payload_length, 'a');
980 CheckStreamFrame(frame, 1u, payload, 0u, false); 1022 CheckStreamFrame(frame, 1u, payload, 0u, false);
981 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); 1023 creator_.Flush();
982 cleanup_frames.AddFrame(frame); 1024 ClearSerializedPacket(&serialized_packet_);
983 } 1025 }
984 1026
985 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { 1027 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) {
986 if (!GetParam().version_serialization) { 1028 if (!GetParam().version_serialization) {
987 creator_.StopSendingVersion(); 1029 creator_.StopSendingVersion();
988 } 1030 }
989 const size_t max_plaintext_size = 1031 const size_t max_plaintext_size =
990 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); 1032 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
991 EXPECT_FALSE(creator_.HasPendingFrames()); 1033 EXPECT_FALSE(creator_.HasPendingFrames());
992 EXPECT_EQ(max_plaintext_size - 1034 EXPECT_EQ(max_plaintext_size -
993 GetPacketHeaderSize( 1035 GetPacketHeaderSize(
994 creator_.connection_id_length(), 1036 creator_.connection_id_length(),
995 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 1037 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
996 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 1038 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP),
997 creator_.BytesFree()); 1039 creator_.BytesFree());
998 1040
999 // Add a variety of frame types and then a padding frame. 1041 // Add a variety of frame types and then a padding frame.
1000 QuicAckFrame ack_frame(MakeAckFrame(0u)); 1042 QuicAckFrame ack_frame(MakeAckFrame(0u));
1001 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1043 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1002 EXPECT_TRUE(creator_.HasPendingFrames()); 1044 EXPECT_TRUE(creator_.HasPendingFrames());
1003 1045
1004 QuicFrame frame; 1046 QuicFrame frame;
1005 QuicIOVector io_vector(MakeIOVector("test")); 1047 QuicIOVector io_vector(MakeIOVector("test"));
1006 UniqueStreamBuffer stream_buffer; 1048 ASSERT_TRUE(
1007 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 1049 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
1008 &frame, &stream_buffer); 1050 ASSERT_TRUE(frame.stream_frame);
1051 size_t consumed = frame.stream_frame->data.length();
1009 EXPECT_EQ(4u, consumed); 1052 EXPECT_EQ(4u, consumed);
1010 ASSERT_TRUE(frame.stream_frame);
1011 EXPECT_TRUE(creator_.AddSavedFrame(frame));
1012 EXPECT_TRUE(creator_.HasPendingFrames()); 1053 EXPECT_TRUE(creator_.HasPendingFrames());
1013 1054
1014 QuicPaddingFrame padding_frame; 1055 QuicPaddingFrame padding_frame;
1015 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); 1056 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame)));
1016 EXPECT_TRUE(creator_.HasPendingFrames()); 1057 EXPECT_TRUE(creator_.HasPendingFrames());
1017 EXPECT_EQ(0u, creator_.BytesFree()); 1058 EXPECT_EQ(0u, creator_.BytesFree());
1018 1059
1060 // Packet is full. Creator will flush.
1061 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1062 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1019 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1063 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1020 1064
1021 // Ensure the packet is successfully created. 1065 // Ensure the packet is successfully created.
1022 char buffer[kMaxPacketSize]; 1066 ASSERT_TRUE(serialized_packet_.packet);
1023 SerializedPacket serialized = 1067 ASSERT_TRUE(serialized_packet_.retransmittable_frames);
1024 creator_.SerializePacket(buffer, kMaxPacketSize); 1068 RetransmittableFrames* retransmittable =
1025 ASSERT_TRUE(serialized.packet); 1069 serialized_packet_.retransmittable_frames;
1026 delete serialized.packet;
1027 ASSERT_TRUE(serialized.retransmittable_frames);
1028 RetransmittableFrames* retransmittable = serialized.retransmittable_frames;
1029 ASSERT_EQ(1u, retransmittable->frames().size()); 1070 ASSERT_EQ(1u, retransmittable->frames().size());
1030 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); 1071 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type);
1031 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); 1072 ASSERT_TRUE(retransmittable->frames()[0].stream_frame);
1032 delete serialized.retransmittable_frames; 1073 ClearSerializedPacket(&serialized_packet_);
1033 1074
1034 EXPECT_FALSE(creator_.HasPendingFrames()); 1075 EXPECT_FALSE(creator_.HasPendingFrames());
1035 EXPECT_EQ(max_plaintext_size - 1076 EXPECT_EQ(max_plaintext_size -
1036 GetPacketHeaderSize( 1077 GetPacketHeaderSize(
1037 creator_.connection_id_length(), 1078 creator_.connection_id_length(),
1038 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 1079 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
1039 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 1080 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP),
1040 creator_.BytesFree()); 1081 creator_.BytesFree());
1041 } 1082 }
1042 1083
(...skipping 12 matching lines...) Expand all
1055 EXPECT_GT(creator_.BytesFree(), frame_len); 1096 EXPECT_GT(creator_.BytesFree(), frame_len);
1056 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); 1097 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
1057 1098
1058 // Add ack frame to creator. 1099 // Add ack frame to creator.
1059 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1100 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1060 EXPECT_TRUE(creator_.HasPendingFrames()); 1101 EXPECT_TRUE(creator_.HasPendingFrames());
1061 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); 1102 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize());
1062 EXPECT_LT(0u, creator_.BytesFree()); 1103 EXPECT_LT(0u, creator_.BytesFree());
1063 1104
1064 // Make sure that an additional stream frame can be added to the packet. 1105 // Make sure that an additional stream frame can be added to the packet.
1065 QuicFrame stream_frame; 1106 QuicFrame frame;
1066 QuicIOVector io_vector(MakeIOVector("test")); 1107 QuicIOVector io_vector(MakeIOVector("test"));
1067 UniqueStreamBuffer stream_buffer; 1108 ASSERT_TRUE(
1068 size_t consumed = creator_.CreateStreamFrame(2u, io_vector, 0u, 0u, false, 1109 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame));
1069 &stream_frame, &stream_buffer); 1110 ASSERT_TRUE(frame.stream_frame);
1111 size_t consumed = frame.stream_frame->data.length();
1070 EXPECT_EQ(4u, consumed); 1112 EXPECT_EQ(4u, consumed);
1071 ASSERT_TRUE(stream_frame.stream_frame);
1072 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame));
1073 EXPECT_TRUE(creator_.HasPendingFrames()); 1113 EXPECT_TRUE(creator_.HasPendingFrames());
1074 1114
1075 // Ensure the packet is successfully created, and the packet size estimate 1115 // Ensure the packet is successfully created, and the packet size estimate
1076 // matches the serialized packet length. 1116 // matches the serialized packet length.
1077 EXPECT_CALL(entropy_calculator_, 1117 EXPECT_CALL(entropy_calculator_, EntropyHash(_)).WillOnce(testing::Return(0));
1078 EntropyHash(_)).WillOnce(testing::Return(0)); 1118 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1119 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1079 size_t est_packet_size = creator_.PacketSize(); 1120 size_t est_packet_size = creator_.PacketSize();
1080 char buffer[kMaxPacketSize]; 1121 creator_.Flush();
1081 SerializedPacket serialized = 1122 ASSERT_TRUE(serialized_packet_.packet);
1082 creator_.SerializePacket(buffer, kMaxPacketSize); 1123 EXPECT_EQ(est_packet_size, client_framer_.GetMaxPlaintextSize(
1083 ASSERT_TRUE(serialized.packet); 1124 serialized_packet_.packet->length()));
1084 EXPECT_EQ(est_packet_size, 1125 ClearSerializedPacket(&serialized_packet_);
1085 client_framer_.GetMaxPlaintextSize(serialized.packet->length()));
1086 delete serialized.retransmittable_frames;
1087 delete serialized.packet;
1088 } 1126 }
1089 1127
1090 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { 1128 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) {
1091 if (!GetParam().version_serialization) { 1129 if (!GetParam().version_serialization) {
1092 creator_.StopSendingVersion(); 1130 creator_.StopSendingVersion();
1093 } 1131 }
1094 creator_.SetMaxPacketLength(500u); 1132 creator_.SetMaxPacketLength(500u);
1095 1133
1096 const size_t max_plaintext_size = 1134 const size_t max_plaintext_size =
1097 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); 1135 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
1098 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); 1136 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree());
1099 1137
1100 // Serialized length of ack frame with 2000 nack ranges should be limited by 1138 // Serialized length of ack frame with 2000 nack ranges should be limited by
1101 // the packet size. 1139 // the packet size.
1102 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); 1140 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u);
1103 size_t frame_len = client_framer_.GetSerializedFrameLength( 1141 size_t frame_len = client_framer_.GetSerializedFrameLength(
1104 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, 1142 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP,
1105 PACKET_1BYTE_PACKET_NUMBER); 1143 PACKET_1BYTE_PACKET_NUMBER);
1106 EXPECT_EQ(creator_.BytesFree(), frame_len); 1144 EXPECT_EQ(creator_.BytesFree(), frame_len);
1107 1145
1108 // Add ack frame to creator. 1146 // Add ack frame to creator.
1109 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 1147 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
1110 EXPECT_TRUE(creator_.HasPendingFrames()); 1148 EXPECT_TRUE(creator_.HasPendingFrames());
1111 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), 1149 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()),
1112 creator_.PacketSize()); 1150 creator_.PacketSize());
1113 EXPECT_EQ(0u, creator_.BytesFree()); 1151 EXPECT_EQ(0u, creator_.BytesFree());
1114 1152
1115 // Ensure the packet is successfully created, and the packet size estimate 1153 // Ensure the packet is successfully created, and the packet size estimate
1116 // may not match the serialized packet length. 1154 // may not match the serialized packet length.
1117 EXPECT_CALL(entropy_calculator_, 1155 EXPECT_CALL(entropy_calculator_, EntropyHash(_)).WillOnce(Return(0));
1118 EntropyHash(_)).WillOnce(Return(0));
1119 size_t est_packet_size = creator_.PacketSize(); 1156 size_t est_packet_size = creator_.PacketSize();
1120 char buffer[kMaxPacketSize]; 1157 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1121 SerializedPacket serialized = 1158 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1122 creator_.SerializePacket(buffer, kMaxPacketSize); 1159 creator_.Flush();
1123 ASSERT_TRUE(serialized.packet); 1160 ASSERT_TRUE(serialized_packet_.packet);
1124 EXPECT_GE(est_packet_size, 1161 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize(
1125 client_framer_.GetMaxPlaintextSize(serialized.packet->length())); 1162 serialized_packet_.packet->length()));
1126 delete serialized.packet; 1163 ClearSerializedPacket(&serialized_packet_);
1127 } 1164 }
1128 1165
1129 1166
1130 TEST_P(QuicPacketCreatorTest, EntropyFlag) { 1167 TEST_P(QuicPacketCreatorTest, EntropyFlag) {
1131 frames_.push_back( 1168 frames_.push_back(
1132 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); 1169 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece())));
1133 1170
1134 char buffer[kMaxPacketSize]; 1171 char buffer[kMaxPacketSize];
1135 for (int i = 0; i < 2; ++i) { 1172 for (int i = 0; i < 2; ++i) {
1136 for (int j = 0; j < 64; ++j) { 1173 for (int j = 0; j < 64; ++j) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1240
1204 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); 1241 serialized = creator_.SerializeFec(buffer, kMaxPacketSize);
1205 ASSERT_EQ(3u, serialized.packet_number); 1242 ASSERT_EQ(3u, serialized.packet_number);
1206 delete serialized.packet; 1243 delete serialized.packet;
1207 } 1244 }
1208 1245
1209 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { 1246 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) {
1210 // Add a stream frame to the creator. 1247 // Add a stream frame to the creator.
1211 QuicFrame frame; 1248 QuicFrame frame;
1212 QuicIOVector io_vector(MakeIOVector("test")); 1249 QuicIOVector io_vector(MakeIOVector("test"));
1213 UniqueStreamBuffer stream_buffer; 1250 ASSERT_TRUE(
1214 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, 1251 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame));
1215 &frame, &stream_buffer); 1252 ASSERT_TRUE(frame.stream_frame);
1253 size_t consumed = frame.stream_frame->data.length();
1216 EXPECT_EQ(4u, consumed); 1254 EXPECT_EQ(4u, consumed);
1217 ASSERT_TRUE(frame.stream_frame);
1218 EXPECT_TRUE(creator_.AddSavedFrame(frame));
1219 EXPECT_TRUE(creator_.HasPendingFrames()); 1255 EXPECT_TRUE(creator_.HasPendingFrames());
1220 EXPECT_DFATAL(creator_.ResetFecGroup(), 1256 EXPECT_DFATAL(creator_.ResetFecGroup(),
1221 "Cannot reset FEC group with pending frames."); 1257 "Cannot reset FEC group with pending frames.");
1222 1258
1223 // Serialize packet for transmission. 1259 EXPECT_CALL(delegate_, OnSerializedPacket(_))
1224 char buffer[kMaxPacketSize]; 1260 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket));
1225 SerializedPacket serialized = 1261 creator_.Flush();
1226 creator_.SerializePacket(buffer, kMaxPacketSize);
1227 delete serialized.packet;
1228 delete serialized.retransmittable_frames;
1229 EXPECT_FALSE(creator_.HasPendingFrames()); 1262 EXPECT_FALSE(creator_.HasPendingFrames());
1230 1263
1231 // Close the FEC Group. 1264 // Close the FEC Group.
1232 creator_.ResetFecGroup(); 1265 creator_.ResetFecGroup();
1233 EXPECT_FALSE(creator_.IsFecGroupOpen()); 1266 EXPECT_FALSE(creator_.IsFecGroupOpen());
1234 } 1267 }
1235 1268
1236 } // namespace 1269 } // namespace
1237 } // namespace test 1270 } // namespace test
1238 } // namespace net 1271 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698