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

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

Issue 612323013: QUIC - (no behavior change) s/NULL/nullptr/g in .../quic/... (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/quic_protocol.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_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "net/quic/crypto/crypto_protocol.h" 9 #include "net/quic/crypto/crypto_protocol.h"
10 #include "net/quic/crypto/null_encrypter.h" 10 #include "net/quic/crypto/null_encrypter.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 }; 101 };
102 102
103 } // namespace 103 } // namespace
104 104
105 class QuicPacketGeneratorTest : public ::testing::Test { 105 class QuicPacketGeneratorTest : public ::testing::Test {
106 protected: 106 protected:
107 QuicPacketGeneratorTest() 107 QuicPacketGeneratorTest()
108 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), 108 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
109 generator_(42, &framer_, &random_, &delegate_), 109 generator_(42, &framer_, &random_, &delegate_),
110 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)), 110 creator_(QuicPacketGeneratorPeer::GetPacketCreator(&generator_)),
111 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 111 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
112 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 112 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
113 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 113 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
114 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 114 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
115 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 115 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
116 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), 116 packet6_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr),
117 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) { 117 packet7_(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr) {}
118 }
119 118
120 virtual ~QuicPacketGeneratorTest() OVERRIDE { 119 virtual ~QuicPacketGeneratorTest() OVERRIDE {
121 delete packet_.packet; 120 delete packet_.packet;
122 delete packet_.retransmittable_frames; 121 delete packet_.retransmittable_frames;
123 delete packet2_.packet; 122 delete packet2_.packet;
124 delete packet2_.retransmittable_frames; 123 delete packet2_.retransmittable_frames;
125 delete packet3_.packet; 124 delete packet3_.packet;
126 delete packet3_.retransmittable_frames; 125 delete packet3_.retransmittable_frames;
127 delete packet4_.packet; 126 delete packet4_.packet;
128 delete packet4_.retransmittable_frames; 127 delete packet4_.retransmittable_frames;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 162
164 void CheckPacketContains(const PacketContents& contents, 163 void CheckPacketContains(const PacketContents& contents,
165 const SerializedPacket& packet) { 164 const SerializedPacket& packet) {
166 size_t num_retransmittable_frames = contents.num_connection_close_frames + 165 size_t num_retransmittable_frames = contents.num_connection_close_frames +
167 contents.num_goaway_frames + contents.num_rst_stream_frames + 166 contents.num_goaway_frames + contents.num_rst_stream_frames +
168 contents.num_stream_frames; 167 contents.num_stream_frames;
169 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + 168 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames +
170 contents.num_stop_waiting_frames + num_retransmittable_frames; 169 contents.num_stop_waiting_frames + num_retransmittable_frames;
171 170
172 if (num_retransmittable_frames == 0) { 171 if (num_retransmittable_frames == 0) {
173 ASSERT_TRUE(packet.retransmittable_frames == NULL); 172 ASSERT_TRUE(packet.retransmittable_frames == nullptr);
174 } else { 173 } else {
175 ASSERT_TRUE(packet.retransmittable_frames != NULL); 174 ASSERT_TRUE(packet.retransmittable_frames != nullptr);
176 EXPECT_EQ(num_retransmittable_frames, 175 EXPECT_EQ(num_retransmittable_frames,
177 packet.retransmittable_frames->frames().size()); 176 packet.retransmittable_frames->frames().size());
178 } 177 }
179 178
180 ASSERT_TRUE(packet.packet != NULL); 179 ASSERT_TRUE(packet.packet != nullptr);
181 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); 180 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet));
182 EXPECT_EQ(num_frames, simple_framer_.num_frames()); 181 EXPECT_EQ(num_frames, simple_framer_.num_frames());
183 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size()); 182 EXPECT_EQ(contents.num_ack_frames, simple_framer_.ack_frames().size());
184 EXPECT_EQ(contents.num_connection_close_frames, 183 EXPECT_EQ(contents.num_connection_close_frames,
185 simple_framer_.connection_close_frames().size()); 184 simple_framer_.connection_close_frames().size());
186 EXPECT_EQ(contents.num_feedback_frames, 185 EXPECT_EQ(contents.num_feedback_frames,
187 simple_framer_.feedback_frames().size()); 186 simple_framer_.feedback_frames().size());
188 EXPECT_EQ(contents.num_goaway_frames, 187 EXPECT_EQ(contents.num_goaway_frames,
189 simple_framer_.goaway_frames().size()); 188 simple_framer_.goaway_frames().size());
190 EXPECT_EQ(contents.num_rst_stream_frames, 189 EXPECT_EQ(contents.num_rst_stream_frames,
191 simple_framer_.rst_stream_frames().size()); 190 simple_framer_.rst_stream_frames().size());
192 EXPECT_EQ(contents.num_stream_frames, 191 EXPECT_EQ(contents.num_stream_frames,
193 simple_framer_.stream_frames().size()); 192 simple_framer_.stream_frames().size());
194 EXPECT_EQ(contents.num_stop_waiting_frames, 193 EXPECT_EQ(contents.num_stop_waiting_frames,
195 simple_framer_.stop_waiting_frames().size()); 194 simple_framer_.stop_waiting_frames().size());
196 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group); 195 EXPECT_EQ(contents.fec_group, simple_framer_.header().fec_group);
197 } 196 }
198 197
199 void CheckPacketHasSingleStreamFrame(const SerializedPacket& packet) { 198 void CheckPacketHasSingleStreamFrame(const SerializedPacket& packet) {
200 ASSERT_TRUE(packet.retransmittable_frames != NULL); 199 ASSERT_TRUE(packet.retransmittable_frames != nullptr);
201 EXPECT_EQ(1u, packet.retransmittable_frames->frames().size()); 200 EXPECT_EQ(1u, packet.retransmittable_frames->frames().size());
202 ASSERT_TRUE(packet.packet != NULL); 201 ASSERT_TRUE(packet.packet != nullptr);
203 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); 202 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet));
204 EXPECT_EQ(1u, simple_framer_.num_frames()); 203 EXPECT_EQ(1u, simple_framer_.num_frames());
205 EXPECT_EQ(1u, simple_framer_.stream_frames().size()); 204 EXPECT_EQ(1u, simple_framer_.stream_frames().size());
206 } 205 }
207 206
208 void CheckPacketIsFec(const SerializedPacket& packet, 207 void CheckPacketIsFec(const SerializedPacket& packet,
209 QuicPacketSequenceNumber fec_group) { 208 QuicPacketSequenceNumber fec_group) {
210 ASSERT_TRUE(packet.retransmittable_frames == NULL); 209 ASSERT_TRUE(packet.retransmittable_frames == nullptr);
211 ASSERT_TRUE(packet.packet != NULL); 210 ASSERT_TRUE(packet.packet != nullptr);
212 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet)); 211 ASSERT_TRUE(simple_framer_.ProcessPacket(*packet.packet));
213 EXPECT_TRUE(simple_framer_.header().fec_flag); 212 EXPECT_TRUE(simple_framer_.header().fec_flag);
214 EXPECT_EQ(fec_group, simple_framer_.fec_data().fec_group); 213 EXPECT_EQ(fec_group, simple_framer_.fec_data().fec_group);
215 } 214 }
216 215
217 IOVector CreateData(size_t len) { 216 IOVector CreateData(size_t len) {
218 data_array_.reset(new char[len]); 217 data_array_.reset(new char[len]);
219 memset(data_array_.get(), '?', len); 218 memset(data_array_.get(), '?', len);
220 IOVector data; 219 IOVector data;
221 data.Append(data_array_.get(), len); 220 data.Append(data_array_.get(), len);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 365
367 PacketContents contents; 366 PacketContents contents;
368 contents.num_rst_stream_frames = 1; 367 contents.num_rst_stream_frames = 1;
369 CheckPacketContains(contents, packet_); 368 CheckPacketContains(contents, packet_);
370 } 369 }
371 370
372 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { 371 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) {
373 delegate_.SetCanNotWrite(); 372 delegate_.SetCanNotWrite();
374 373
375 QuicConsumedData consumed = generator_.ConsumeData( 374 QuicConsumedData consumed = generator_.ConsumeData(
376 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL); 375 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, nullptr);
377 EXPECT_EQ(0u, consumed.bytes_consumed); 376 EXPECT_EQ(0u, consumed.bytes_consumed);
378 EXPECT_FALSE(consumed.fin_consumed); 377 EXPECT_FALSE(consumed.fin_consumed);
379 EXPECT_FALSE(generator_.HasQueuedFrames()); 378 EXPECT_FALSE(generator_.HasQueuedFrames());
380 } 379 }
381 380
382 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { 381 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
383 delegate_.SetCanWriteAnything(); 382 delegate_.SetCanWriteAnything();
384 generator_.StartBatchOperations(); 383 generator_.StartBatchOperations();
385 384
386 QuicConsumedData consumed = generator_.ConsumeData( 385 QuicConsumedData consumed = generator_.ConsumeData(
387 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL); 386 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, nullptr);
388 EXPECT_EQ(3u, consumed.bytes_consumed); 387 EXPECT_EQ(3u, consumed.bytes_consumed);
389 EXPECT_TRUE(consumed.fin_consumed); 388 EXPECT_TRUE(consumed.fin_consumed);
390 EXPECT_TRUE(generator_.HasQueuedFrames()); 389 EXPECT_TRUE(generator_.HasQueuedFrames());
391 } 390 }
392 391
393 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { 392 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
394 delegate_.SetCanWriteAnything(); 393 delegate_.SetCanWriteAnything();
395 394
396 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 395 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
397 QuicConsumedData consumed = generator_.ConsumeData( 396 QuicConsumedData consumed = generator_.ConsumeData(
398 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, NULL); 397 kHeadersStreamId, MakeIOVector("foo"), 2, true, MAY_FEC_PROTECT, nullptr);
399 EXPECT_EQ(3u, consumed.bytes_consumed); 398 EXPECT_EQ(3u, consumed.bytes_consumed);
400 EXPECT_TRUE(consumed.fin_consumed); 399 EXPECT_TRUE(consumed.fin_consumed);
401 EXPECT_FALSE(generator_.HasQueuedFrames()); 400 EXPECT_FALSE(generator_.HasQueuedFrames());
402 401
403 PacketContents contents; 402 PacketContents contents;
404 contents.num_stream_frames = 1; 403 contents.num_stream_frames = 1;
405 CheckPacketContains(contents, packet_); 404 CheckPacketContains(contents, packet_);
406 } 405 }
407 406
408 TEST_F(QuicPacketGeneratorTest, 407 TEST_F(QuicPacketGeneratorTest,
409 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { 408 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) {
410 delegate_.SetCanWriteAnything(); 409 delegate_.SetCanWriteAnything();
411 generator_.StartBatchOperations(); 410 generator_.StartBatchOperations();
412 411
413 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true, 412 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true,
414 MAY_FEC_PROTECT, NULL); 413 MAY_FEC_PROTECT, nullptr);
415 QuicConsumedData consumed = generator_.ConsumeData( 414 QuicConsumedData consumed = generator_.ConsumeData(
416 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL); 415 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, nullptr);
417 EXPECT_EQ(4u, consumed.bytes_consumed); 416 EXPECT_EQ(4u, consumed.bytes_consumed);
418 EXPECT_FALSE(consumed.fin_consumed); 417 EXPECT_FALSE(consumed.fin_consumed);
419 EXPECT_TRUE(generator_.HasQueuedFrames()); 418 EXPECT_TRUE(generator_.HasQueuedFrames());
420 } 419 }
421 420
422 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { 421 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
423 delegate_.SetCanWriteAnything(); 422 delegate_.SetCanWriteAnything();
424 generator_.StartBatchOperations(); 423 generator_.StartBatchOperations();
425 424
426 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true, 425 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 2, true,
427 MAY_FEC_PROTECT, NULL); 426 MAY_FEC_PROTECT, nullptr);
428 QuicConsumedData consumed = generator_.ConsumeData( 427 QuicConsumedData consumed = generator_.ConsumeData(
429 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, NULL); 428 3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT, nullptr);
430 EXPECT_EQ(4u, consumed.bytes_consumed); 429 EXPECT_EQ(4u, consumed.bytes_consumed);
431 EXPECT_FALSE(consumed.fin_consumed); 430 EXPECT_FALSE(consumed.fin_consumed);
432 EXPECT_TRUE(generator_.HasQueuedFrames()); 431 EXPECT_TRUE(generator_.HasQueuedFrames());
433 432
434 // Now both frames will be flushed out. 433 // Now both frames will be flushed out.
435 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 434 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
436 generator_.FinishBatchOperations(); 435 generator_.FinishBatchOperations();
437 EXPECT_FALSE(generator_.HasQueuedFrames()); 436 EXPECT_FALSE(generator_.HasQueuedFrames());
438 437
439 PacketContents contents; 438 PacketContents contents;
(...skipping 17 matching lines...) Expand all
457 SaveArg<0>(&packet3_)); 456 SaveArg<0>(&packet3_));
458 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 457 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
459 SaveArg<0>(&packet4_)); 458 SaveArg<0>(&packet4_));
460 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 459 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
461 SaveArg<0>(&packet5_)); 460 SaveArg<0>(&packet5_));
462 } 461 }
463 462
464 // Send enough data to create 3 packets: two full and one partial. Send 463 // Send enough data to create 3 packets: two full and one partial. Send
465 // with MUST_FEC_PROTECT flag. 464 // with MUST_FEC_PROTECT flag.
466 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 465 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
467 QuicConsumedData consumed = 466 QuicConsumedData consumed = generator_.ConsumeData(
468 generator_.ConsumeData(3, CreateData(data_len), 0, true, 467 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
469 MUST_FEC_PROTECT, NULL);
470 EXPECT_EQ(data_len, consumed.bytes_consumed); 468 EXPECT_EQ(data_len, consumed.bytes_consumed);
471 EXPECT_TRUE(consumed.fin_consumed); 469 EXPECT_TRUE(consumed.fin_consumed);
472 EXPECT_FALSE(generator_.HasQueuedFrames()); 470 EXPECT_FALSE(generator_.HasQueuedFrames());
473 471
474 CheckPacketHasSingleStreamFrame(packet_); 472 CheckPacketHasSingleStreamFrame(packet_);
475 CheckPacketHasSingleStreamFrame(packet2_); 473 CheckPacketHasSingleStreamFrame(packet2_);
476 CheckPacketIsFec(packet3_, 1); 474 CheckPacketIsFec(packet3_, 1);
477 475
478 CheckPacketHasSingleStreamFrame(packet4_); 476 CheckPacketHasSingleStreamFrame(packet4_);
479 CheckPacketIsFec(packet5_, 4); 477 CheckPacketIsFec(packet5_, 4);
(...skipping 10 matching lines...) Expand all
490 SaveArg<0>(&packet_)); 488 SaveArg<0>(&packet_));
491 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 489 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
492 SaveArg<0>(&packet2_)); 490 SaveArg<0>(&packet2_));
493 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 491 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
494 SaveArg<0>(&packet3_)); 492 SaveArg<0>(&packet3_));
495 } 493 }
496 494
497 // Send enough data to create 2 packets: one full and one partial. Send 495 // Send enough data to create 2 packets: one full and one partial. Send
498 // with MUST_FEC_PROTECT flag. 496 // with MUST_FEC_PROTECT flag.
499 size_t data_len = 1 * kDefaultMaxPacketSize + 100; 497 size_t data_len = 1 * kDefaultMaxPacketSize + 100;
500 QuicConsumedData consumed = 498 QuicConsumedData consumed = generator_.ConsumeData(
501 generator_.ConsumeData(3, CreateData(data_len), 0, true, 499 3, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
502 MUST_FEC_PROTECT, NULL);
503 EXPECT_EQ(data_len, consumed.bytes_consumed); 500 EXPECT_EQ(data_len, consumed.bytes_consumed);
504 EXPECT_TRUE(consumed.fin_consumed); 501 EXPECT_TRUE(consumed.fin_consumed);
505 EXPECT_FALSE(generator_.HasQueuedFrames()); 502 EXPECT_FALSE(generator_.HasQueuedFrames());
506 503
507 CheckPacketHasSingleStreamFrame(packet_); 504 CheckPacketHasSingleStreamFrame(packet_);
508 CheckPacketHasSingleStreamFrame(packet2_); 505 CheckPacketHasSingleStreamFrame(packet2_);
509 CheckPacketIsFec(packet3_, 1); 506 CheckPacketIsFec(packet3_, 1);
510 } 507 }
511 508
512 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { 509 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) {
(...skipping 14 matching lines...) Expand all
527 { 524 {
528 InSequence dummy; 525 InSequence dummy;
529 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 526 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
530 SaveArg<0>(&packet_)); 527 SaveArg<0>(&packet_));
531 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 528 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
532 SaveArg<0>(&packet2_)); 529 SaveArg<0>(&packet2_));
533 } 530 }
534 generator_.StartBatchOperations(); 531 generator_.StartBatchOperations();
535 // Queue enough data to prevent a stream frame with a non-zero offset from 532 // Queue enough data to prevent a stream frame with a non-zero offset from
536 // fitting. 533 // fitting.
537 QuicConsumedData consumed = generator_.ConsumeData( 534 QuicConsumedData consumed =
538 kHeadersStreamId, MakeIOVector("foo"), 0, false, MAY_FEC_PROTECT, NULL); 535 generator_.ConsumeData(kHeadersStreamId, MakeIOVector("foo"), 0, false,
536 MAY_FEC_PROTECT, nullptr);
539 EXPECT_EQ(3u, consumed.bytes_consumed); 537 EXPECT_EQ(3u, consumed.bytes_consumed);
540 EXPECT_FALSE(consumed.fin_consumed); 538 EXPECT_FALSE(consumed.fin_consumed);
541 EXPECT_TRUE(generator_.HasQueuedFrames()); 539 EXPECT_TRUE(generator_.HasQueuedFrames());
542 540
543 // This frame will not fit with the existing frame, causing the queued frame 541 // This frame will not fit with the existing frame, causing the queued frame
544 // to be serialized, and it will not fit with another frame like it, so it is 542 // to be serialized, and it will not fit with another frame like it, so it is
545 // serialized by itself. 543 // serialized by itself.
546 consumed = generator_.ConsumeData(kHeadersStreamId, MakeIOVector("bar"), 3, 544 consumed = generator_.ConsumeData(kHeadersStreamId, MakeIOVector("bar"), 3,
547 true, MAY_FEC_PROTECT, NULL); 545 true, MAY_FEC_PROTECT, nullptr);
548 EXPECT_EQ(3u, consumed.bytes_consumed); 546 EXPECT_EQ(3u, consumed.bytes_consumed);
549 EXPECT_TRUE(consumed.fin_consumed); 547 EXPECT_TRUE(consumed.fin_consumed);
550 EXPECT_FALSE(generator_.HasQueuedFrames()); 548 EXPECT_FALSE(generator_.HasQueuedFrames());
551 549
552 PacketContents contents; 550 PacketContents contents;
553 contents.num_stream_frames = 1; 551 contents.num_stream_frames = 1;
554 CheckPacketContains(contents, packet_); 552 CheckPacketContains(contents, packet_);
555 CheckPacketContains(contents, packet2_); 553 CheckPacketContains(contents, packet2_);
556 } 554 }
557 555
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 InSequence dummy; 587 InSequence dummy;
590 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 588 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
591 SaveArg<0>(&packet_)); 589 SaveArg<0>(&packet_));
592 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 590 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
593 SaveArg<0>(&packet2_)); 591 SaveArg<0>(&packet2_));
594 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 592 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
595 SaveArg<0>(&packet3_)); 593 SaveArg<0>(&packet3_));
596 } 594 }
597 size_t data_len = 3 * kDefaultMaxPacketSize + 1; 595 size_t data_len = 3 * kDefaultMaxPacketSize + 1;
598 QuicConsumedData consumed = generator_.ConsumeData( 596 QuicConsumedData consumed = generator_.ConsumeData(
599 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL); 597 7, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
600 EXPECT_EQ(data_len, consumed.bytes_consumed); 598 EXPECT_EQ(data_len, consumed.bytes_consumed);
601 EXPECT_TRUE(creator_->IsFecGroupOpen()); 599 EXPECT_TRUE(creator_->IsFecGroupOpen());
602 600
603 // Change FEC groupsize. 601 // Change FEC groupsize.
604 generator_.OnCongestionWindowChange(2 * kDefaultTCPMSS); 602 generator_.OnCongestionWindowChange(2 * kDefaultTCPMSS);
605 EXPECT_EQ(2u, creator_->max_packets_per_fec_group()); 603 EXPECT_EQ(2u, creator_->max_packets_per_fec_group());
606 604
607 // Send enough data to trigger one unprotected data packet, 605 // Send enough data to trigger one unprotected data packet,
608 // causing the FEC packet to also be sent. 606 // causing the FEC packet to also be sent.
609 { 607 {
610 InSequence dummy; 608 InSequence dummy;
611 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 609 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
612 SaveArg<0>(&packet4_)); 610 SaveArg<0>(&packet4_));
613 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 611 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
614 SaveArg<0>(&packet5_)); 612 SaveArg<0>(&packet5_));
615 } 613 }
616 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0, 614 consumed = generator_.ConsumeData(7, CreateData(kDefaultMaxPacketSize), 0,
617 true, MAY_FEC_PROTECT, NULL); 615 true, MAY_FEC_PROTECT, nullptr);
618 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed); 616 EXPECT_EQ(kDefaultMaxPacketSize, consumed.bytes_consumed);
619 // Verify that one FEC packet was sent. 617 // Verify that one FEC packet was sent.
620 CheckPacketIsFec(packet5_, /*fec_group=*/1u); 618 CheckPacketIsFec(packet5_, /*fec_group=*/1u);
621 EXPECT_FALSE(creator_->IsFecGroupOpen()); 619 EXPECT_FALSE(creator_->IsFecGroupOpen());
622 EXPECT_FALSE(creator_->IsFecProtected()); 620 EXPECT_FALSE(creator_->IsFecProtected());
623 } 621 }
624 622
625 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) { 623 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOff) {
626 delegate_.SetCanWriteAnything(); 624 delegate_.SetCanWriteAnything();
627 creator_->set_max_packets_per_fec_group(2); 625 creator_->set_max_packets_per_fec_group(2);
628 EXPECT_FALSE(creator_->IsFecProtected()); 626 EXPECT_FALSE(creator_->IsFecProtected());
629 627
630 // Send one unprotected data packet. 628 // Send one unprotected data packet.
631 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 629 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
632 SaveArg<0>(&packet_)); 630 SaveArg<0>(&packet_));
633 QuicConsumedData consumed = 631 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
634 generator_.ConsumeData(5, CreateData(1u), 0, true, MAY_FEC_PROTECT, 632 MAY_FEC_PROTECT, nullptr);
635 NULL);
636 EXPECT_EQ(1u, consumed.bytes_consumed); 633 EXPECT_EQ(1u, consumed.bytes_consumed);
637 EXPECT_FALSE(generator_.HasQueuedFrames()); 634 EXPECT_FALSE(generator_.HasQueuedFrames());
638 EXPECT_FALSE(creator_->IsFecProtected()); 635 EXPECT_FALSE(creator_->IsFecProtected());
639 // Verify that one data packet was sent. 636 // Verify that one data packet was sent.
640 PacketContents contents; 637 PacketContents contents;
641 contents.num_stream_frames = 1; 638 contents.num_stream_frames = 1;
642 CheckPacketContains(contents, packet_); 639 CheckPacketContains(contents, packet_);
643 640
644 { 641 {
645 InSequence dummy; 642 InSequence dummy;
646 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 643 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
647 SaveArg<0>(&packet2_)); 644 SaveArg<0>(&packet2_));
648 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 645 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
649 SaveArg<0>(&packet3_)); 646 SaveArg<0>(&packet3_));
650 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 647 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
651 SaveArg<0>(&packet4_)); 648 SaveArg<0>(&packet4_));
652 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 649 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
653 SaveArg<0>(&packet5_)); 650 SaveArg<0>(&packet5_));
654 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 651 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
655 SaveArg<0>(&packet6_)); 652 SaveArg<0>(&packet6_));
656 } 653 }
657 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag. 654 // Send enough data to create 3 packets with MUST_FEC_PROTECT flag.
658 size_t data_len = 2 * kDefaultMaxPacketSize + 100; 655 size_t data_len = 2 * kDefaultMaxPacketSize + 100;
659 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true, 656 consumed = generator_.ConsumeData(7, CreateData(data_len), 0, true,
660 MUST_FEC_PROTECT, NULL); 657 MUST_FEC_PROTECT, nullptr);
661 EXPECT_EQ(data_len, consumed.bytes_consumed); 658 EXPECT_EQ(data_len, consumed.bytes_consumed);
662 EXPECT_FALSE(generator_.HasQueuedFrames()); 659 EXPECT_FALSE(generator_.HasQueuedFrames());
663 660
664 // Verify that two FEC packets were sent. 661 // Verify that two FEC packets were sent.
665 CheckPacketHasSingleStreamFrame(packet2_); 662 CheckPacketHasSingleStreamFrame(packet2_);
666 CheckPacketHasSingleStreamFrame(packet3_); 663 CheckPacketHasSingleStreamFrame(packet3_);
667 CheckPacketIsFec(packet4_, /*fec_group=*/2u); 664 CheckPacketIsFec(packet4_, /*fec_group=*/2u);
668 CheckPacketHasSingleStreamFrame(packet5_); 665 CheckPacketHasSingleStreamFrame(packet5_);
669 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream. 666 CheckPacketIsFec(packet6_, /*fec_group=*/5u); // Sent at the end of stream.
670 667
671 // Send one unprotected data packet. 668 // Send one unprotected data packet.
672 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 669 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
673 SaveArg<0>(&packet7_)); 670 SaveArg<0>(&packet7_));
674 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 671 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, MAY_FEC_PROTECT,
675 MAY_FEC_PROTECT, NULL); 672 nullptr);
676 EXPECT_EQ(1u, consumed.bytes_consumed); 673 EXPECT_EQ(1u, consumed.bytes_consumed);
677 EXPECT_FALSE(generator_.HasQueuedFrames()); 674 EXPECT_FALSE(generator_.HasQueuedFrames());
678 EXPECT_FALSE(creator_->IsFecProtected()); 675 EXPECT_FALSE(creator_->IsFecProtected());
679 // Verify that one unprotected data packet was sent. 676 // Verify that one unprotected data packet was sent.
680 CheckPacketContains(contents, packet7_); 677 CheckPacketContains(contents, packet7_);
681 } 678 }
682 679
683 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) { 680 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFrameInCreator) {
684 delegate_.SetCanWriteAnything(); 681 delegate_.SetCanWriteAnything();
685 // Enable FEC. 682 // Enable FEC.
686 creator_->set_max_packets_per_fec_group(2); 683 creator_->set_max_packets_per_fec_group(2);
687 684
688 generator_.StartBatchOperations(); 685 generator_.StartBatchOperations();
689 // Queue enough data to prevent a stream frame with a non-zero offset from 686 // Queue enough data to prevent a stream frame with a non-zero offset from
690 // fitting. 687 // fitting.
691 QuicConsumedData consumed = generator_.ConsumeData( 688 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
692 7, CreateData(1u), 0, true, MAY_FEC_PROTECT, NULL); 689 MAY_FEC_PROTECT, nullptr);
693 EXPECT_EQ(1u, consumed.bytes_consumed); 690 EXPECT_EQ(1u, consumed.bytes_consumed);
694 EXPECT_TRUE(creator_->HasPendingFrames()); 691 EXPECT_TRUE(creator_->HasPendingFrames());
695 692
696 // Queue protected data for sending. Should cause queued frames to be flushed. 693 // Queue protected data for sending. Should cause queued frames to be flushed.
697 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 694 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
698 SaveArg<0>(&packet_)); 695 SaveArg<0>(&packet_));
699 EXPECT_FALSE(creator_->IsFecProtected()); 696 EXPECT_FALSE(creator_->IsFecProtected());
700 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 697 consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
701 MUST_FEC_PROTECT, NULL); 698 MUST_FEC_PROTECT, nullptr);
702 EXPECT_EQ(1u, consumed.bytes_consumed); 699 EXPECT_EQ(1u, consumed.bytes_consumed);
703 PacketContents contents; 700 PacketContents contents;
704 contents.num_stream_frames = 1; 701 contents.num_stream_frames = 1;
705 // Transmitted packet was not FEC protected. 702 // Transmitted packet was not FEC protected.
706 CheckPacketContains(contents, packet_); 703 CheckPacketContains(contents, packet_);
707 EXPECT_TRUE(creator_->IsFecProtected()); 704 EXPECT_TRUE(creator_->IsFecProtected());
708 EXPECT_TRUE(creator_->HasPendingFrames()); 705 EXPECT_TRUE(creator_->HasPendingFrames());
709 } 706 }
710 707
711 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) { 708 TEST_F(QuicPacketGeneratorTest, SwitchFecOnWithPendingFramesInGenerator) {
(...skipping 15 matching lines...) Expand all
727 724
728 // Generator should have queued control frames, and creator should be empty. 725 // Generator should have queued control frames, and creator should be empty.
729 EXPECT_TRUE(generator_.HasQueuedFrames()); 726 EXPECT_TRUE(generator_.HasQueuedFrames());
730 EXPECT_FALSE(creator_->HasPendingFrames()); 727 EXPECT_FALSE(creator_->HasPendingFrames());
731 EXPECT_FALSE(creator_->IsFecProtected()); 728 EXPECT_FALSE(creator_->IsFecProtected());
732 729
733 // Queue protected data for sending. Should cause queued frames to be flushed. 730 // Queue protected data for sending. Should cause queued frames to be flushed.
734 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 731 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
735 SaveArg<0>(&packet_)); 732 SaveArg<0>(&packet_));
736 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true, 733 QuicConsumedData consumed = generator_.ConsumeData(7, CreateData(1u), 0, true,
737 MUST_FEC_PROTECT, NULL); 734 MUST_FEC_PROTECT, nullptr);
738 EXPECT_EQ(1u, consumed.bytes_consumed); 735 EXPECT_EQ(1u, consumed.bytes_consumed);
739 PacketContents contents; 736 PacketContents contents;
740 contents.num_ack_frames = 1; 737 contents.num_ack_frames = 1;
741 contents.num_feedback_frames = 1; 738 contents.num_feedback_frames = 1;
742 contents.num_stop_waiting_frames = 1; 739 contents.num_stop_waiting_frames = 1;
743 CheckPacketContains(contents, packet_); 740 CheckPacketContains(contents, packet_);
744 741
745 // FEC protection should be on in creator. 742 // FEC protection should be on in creator.
746 EXPECT_TRUE(creator_->IsFecProtected()); 743 EXPECT_TRUE(creator_->IsFecProtected());
747 } 744 }
748 745
749 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) { 746 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentFramesProtected) {
750 delegate_.SetCanWriteAnything(); 747 delegate_.SetCanWriteAnything();
751 748
752 // Enable FEC. 749 // Enable FEC.
753 creator_->set_max_packets_per_fec_group(2); 750 creator_->set_max_packets_per_fec_group(2);
754 EXPECT_FALSE(creator_->IsFecProtected()); 751 EXPECT_FALSE(creator_->IsFecProtected());
755 752
756 // Queue stream frame to be protected in creator. 753 // Queue stream frame to be protected in creator.
757 generator_.StartBatchOperations(); 754 generator_.StartBatchOperations();
758 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 755 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
759 MUST_FEC_PROTECT, NULL); 756 MUST_FEC_PROTECT, nullptr);
760 EXPECT_EQ(1u, consumed.bytes_consumed); 757 EXPECT_EQ(1u, consumed.bytes_consumed);
761 // Creator has a pending protected frame. 758 // Creator has a pending protected frame.
762 EXPECT_TRUE(creator_->HasPendingFrames()); 759 EXPECT_TRUE(creator_->HasPendingFrames());
763 EXPECT_TRUE(creator_->IsFecProtected()); 760 EXPECT_TRUE(creator_->IsFecProtected());
764 761
765 // Add enough unprotected data to exceed size of current packet, so that 762 // Add enough unprotected data to exceed size of current packet, so that
766 // current packet is sent. Both frames will be sent out in a single packet. 763 // current packet is sent. Both frames will be sent out in a single packet.
767 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 764 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
768 size_t data_len = kDefaultMaxPacketSize; 765 size_t data_len = kDefaultMaxPacketSize;
769 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 766 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
770 MAY_FEC_PROTECT, NULL); 767 MAY_FEC_PROTECT, nullptr);
771 EXPECT_EQ(data_len, consumed.bytes_consumed); 768 EXPECT_EQ(data_len, consumed.bytes_consumed);
772 PacketContents contents; 769 PacketContents contents;
773 contents.num_stream_frames = 2u; 770 contents.num_stream_frames = 2u;
774 contents.fec_group = 1u; 771 contents.fec_group = 1u;
775 CheckPacketContains(contents, packet_); 772 CheckPacketContains(contents, packet_);
776 // FEC protection should still be on in creator. 773 // FEC protection should still be on in creator.
777 EXPECT_TRUE(creator_->IsFecProtected()); 774 EXPECT_TRUE(creator_->IsFecProtected());
778 } 775 }
779 776
780 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) { 777 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffWithSubsequentPacketsProtected) {
781 delegate_.SetCanWriteAnything(); 778 delegate_.SetCanWriteAnything();
782 779
783 // Enable FEC. 780 // Enable FEC.
784 creator_->set_max_packets_per_fec_group(2); 781 creator_->set_max_packets_per_fec_group(2);
785 EXPECT_FALSE(creator_->IsFecProtected()); 782 EXPECT_FALSE(creator_->IsFecProtected());
786 783
787 generator_.StartBatchOperations(); 784 generator_.StartBatchOperations();
788 // Send first packet, FEC protected. 785 // Send first packet, FEC protected.
789 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 786 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
790 // Write enough data to cause a packet to be emitted. 787 // Write enough data to cause a packet to be emitted.
791 size_t data_len = kDefaultMaxPacketSize; 788 size_t data_len = kDefaultMaxPacketSize;
792 QuicConsumedData consumed = generator_.ConsumeData( 789 QuicConsumedData consumed = generator_.ConsumeData(
793 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, NULL); 790 5, CreateData(data_len), 0, true, MUST_FEC_PROTECT, nullptr);
794 EXPECT_EQ(data_len, consumed.bytes_consumed); 791 EXPECT_EQ(data_len, consumed.bytes_consumed);
795 PacketContents contents; 792 PacketContents contents;
796 contents.num_stream_frames = 1u; 793 contents.num_stream_frames = 1u;
797 contents.fec_group = 1u; 794 contents.fec_group = 1u;
798 CheckPacketContains(contents, packet_); 795 CheckPacketContains(contents, packet_);
799 796
800 // FEC should still be on in creator. 797 // FEC should still be on in creator.
801 EXPECT_TRUE(creator_->IsFecProtected()); 798 EXPECT_TRUE(creator_->IsFecProtected());
802 799
803 // Send enough unprotected data to cause second packet to be sent, which gets 800 // Send enough unprotected data to cause second packet to be sent, which gets
804 // protected because it happens to fall within an open FEC group. Data packet 801 // protected because it happens to fall within an open FEC group. Data packet
805 // will be followed by FEC packet. 802 // will be followed by FEC packet.
806 { 803 {
807 InSequence dummy; 804 InSequence dummy;
808 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 805 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
809 SaveArg<0>(&packet2_)); 806 SaveArg<0>(&packet2_));
810 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 807 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
811 SaveArg<0>(&packet3_)); 808 SaveArg<0>(&packet3_));
812 } 809 }
813 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 810 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
814 MAY_FEC_PROTECT, NULL); 811 MAY_FEC_PROTECT, nullptr);
815 EXPECT_EQ(data_len, consumed.bytes_consumed); 812 EXPECT_EQ(data_len, consumed.bytes_consumed);
816 contents.num_stream_frames = 2u; 813 contents.num_stream_frames = 2u;
817 CheckPacketContains(contents, packet2_); 814 CheckPacketContains(contents, packet2_);
818 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 815 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
819 816
820 // FEC protection should be off in creator. 817 // FEC protection should be off in creator.
821 EXPECT_FALSE(creator_->IsFecProtected()); 818 EXPECT_FALSE(creator_->IsFecProtected());
822 } 819 }
823 820
824 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) { 821 TEST_F(QuicPacketGeneratorTest, SwitchFecOnOffThenOnWithCreatorProtectionOn) {
825 delegate_.SetCanWriteAnything(); 822 delegate_.SetCanWriteAnything();
826 generator_.StartBatchOperations(); 823 generator_.StartBatchOperations();
827 824
828 // Enable FEC. 825 // Enable FEC.
829 creator_->set_max_packets_per_fec_group(2); 826 creator_->set_max_packets_per_fec_group(2);
830 EXPECT_FALSE(creator_->IsFecProtected()); 827 EXPECT_FALSE(creator_->IsFecProtected());
831 828
832 // Queue one byte of FEC protected data. 829 // Queue one byte of FEC protected data.
833 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true, 830 QuicConsumedData consumed = generator_.ConsumeData(5, CreateData(1u), 0, true,
834 MUST_FEC_PROTECT, NULL); 831 MUST_FEC_PROTECT, nullptr);
835 EXPECT_TRUE(creator_->HasPendingFrames()); 832 EXPECT_TRUE(creator_->HasPendingFrames());
836 833
837 // Add more unprotected data causing first packet to be sent, FEC protected. 834 // Add more unprotected data causing first packet to be sent, FEC protected.
838 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 835 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
839 SaveArg<0>(&packet_)); 836 SaveArg<0>(&packet_));
840 size_t data_len = kDefaultMaxPacketSize; 837 size_t data_len = kDefaultMaxPacketSize;
841 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 838 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
842 MAY_FEC_PROTECT, NULL); 839 MAY_FEC_PROTECT, nullptr);
843 EXPECT_EQ(data_len, consumed.bytes_consumed); 840 EXPECT_EQ(data_len, consumed.bytes_consumed);
844 PacketContents contents; 841 PacketContents contents;
845 contents.num_stream_frames = 2u; 842 contents.num_stream_frames = 2u;
846 contents.fec_group = 1u; 843 contents.fec_group = 1u;
847 CheckPacketContains(contents, packet_); 844 CheckPacketContains(contents, packet_);
848 845
849 // FEC group is still open in creator. 846 // FEC group is still open in creator.
850 EXPECT_TRUE(creator_->IsFecProtected()); 847 EXPECT_TRUE(creator_->IsFecProtected());
851 848
852 // Add data that should be protected, large enough to cause second packet to 849 // Add data that should be protected, large enough to cause second packet to
853 // be sent. Data packet should be followed by FEC packet. 850 // be sent. Data packet should be followed by FEC packet.
854 { 851 {
855 InSequence dummy; 852 InSequence dummy;
856 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 853 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
857 SaveArg<0>(&packet2_)); 854 SaveArg<0>(&packet2_));
858 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 855 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
859 SaveArg<0>(&packet3_)); 856 SaveArg<0>(&packet3_));
860 } 857 }
861 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true, 858 consumed = generator_.ConsumeData(5, CreateData(data_len), 0, true,
862 MUST_FEC_PROTECT, NULL); 859 MUST_FEC_PROTECT, nullptr);
863 EXPECT_EQ(data_len, consumed.bytes_consumed); 860 EXPECT_EQ(data_len, consumed.bytes_consumed);
864 CheckPacketContains(contents, packet2_); 861 CheckPacketContains(contents, packet2_);
865 CheckPacketIsFec(packet3_, /*fec_group=*/1u); 862 CheckPacketIsFec(packet3_, /*fec_group=*/1u);
866 863
867 // FEC protection should remain on in creator. 864 // FEC protection should remain on in creator.
868 EXPECT_TRUE(creator_->IsFecProtected()); 865 EXPECT_TRUE(creator_->IsFecProtected());
869 } 866 }
870 867
871 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { 868 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) {
872 delegate_.SetCanNotWrite(); 869 delegate_.SetCanNotWrite();
873 870
874 generator_.SetShouldSendAck(true, false); 871 generator_.SetShouldSendAck(true, false);
875 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); 872 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
876 EXPECT_TRUE(generator_.HasQueuedFrames()); 873 EXPECT_TRUE(generator_.HasQueuedFrames());
877 874
878 delegate_.SetCanWriteAnything(); 875 delegate_.SetCanWriteAnything();
879 876
880 generator_.StartBatchOperations(); 877 generator_.StartBatchOperations();
881 878
882 // When the first write operation is invoked, the ack and feedback 879 // When the first write operation is invoked, the ack and feedback
883 // frames will be returned. 880 // frames will be returned.
884 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); 881 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame()));
885 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( 882 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce(
886 Return(CreateFeedbackFrame())); 883 Return(CreateFeedbackFrame()));
887 884
888 // Send some data and a control frame 885 // Send some data and a control frame
889 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, 886 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, MAY_FEC_PROTECT,
890 MAY_FEC_PROTECT, NULL); 887 nullptr);
891 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 888 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
892 889
893 // All five frames will be flushed out in a single packet. 890 // All five frames will be flushed out in a single packet.
894 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_)); 891 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(SaveArg<0>(&packet_));
895 generator_.FinishBatchOperations(); 892 generator_.FinishBatchOperations();
896 EXPECT_FALSE(generator_.HasQueuedFrames()); 893 EXPECT_FALSE(generator_.HasQueuedFrames());
897 894
898 PacketContents contents; 895 PacketContents contents;
899 contents.num_ack_frames = 1; 896 contents.num_ack_frames = 1;
900 contents.num_goaway_frames = 1; 897 contents.num_goaway_frames = 1;
(...skipping 24 matching lines...) Expand all
925 InSequence dummy; 922 InSequence dummy;
926 // All five frames will be flushed out in a single packet 923 // All five frames will be flushed out in a single packet
927 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 924 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
928 SaveArg<0>(&packet_)); 925 SaveArg<0>(&packet_));
929 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( 926 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce(
930 SaveArg<0>(&packet2_)); 927 SaveArg<0>(&packet2_));
931 } 928 }
932 929
933 // Send enough data to exceed one packet 930 // Send enough data to exceed one packet
934 size_t data_len = kDefaultMaxPacketSize + 100; 931 size_t data_len = kDefaultMaxPacketSize + 100;
935 QuicConsumedData consumed = 932 QuicConsumedData consumed = generator_.ConsumeData(
936 generator_.ConsumeData(3, CreateData(data_len), 0, true, 933 3, CreateData(data_len), 0, true, MAY_FEC_PROTECT, nullptr);
937 MAY_FEC_PROTECT, NULL);
938 EXPECT_EQ(data_len, consumed.bytes_consumed); 934 EXPECT_EQ(data_len, consumed.bytes_consumed);
939 EXPECT_TRUE(consumed.fin_consumed); 935 EXPECT_TRUE(consumed.fin_consumed);
940 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); 936 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame()));
941 937
942 generator_.FinishBatchOperations(); 938 generator_.FinishBatchOperations();
943 EXPECT_FALSE(generator_.HasQueuedFrames()); 939 EXPECT_FALSE(generator_.HasQueuedFrames());
944 940
945 // The first packet should have the queued data and part of the stream data. 941 // The first packet should have the queued data and part of the stream data.
946 PacketContents contents; 942 PacketContents contents;
947 contents.num_ack_frames = 1; 943 contents.num_ack_frames = 1;
948 contents.num_feedback_frames = 1; 944 contents.num_feedback_frames = 1;
949 contents.num_rst_stream_frames = 1; 945 contents.num_rst_stream_frames = 1;
950 contents.num_stream_frames = 1; 946 contents.num_stream_frames = 1;
951 CheckPacketContains(contents, packet_); 947 CheckPacketContains(contents, packet_);
952 948
953 // The second should have the remainder of the stream data. 949 // The second should have the remainder of the stream data.
954 PacketContents contents2; 950 PacketContents contents2;
955 contents2.num_goaway_frames = 1; 951 contents2.num_goaway_frames = 1;
956 contents2.num_stream_frames = 1; 952 contents2.num_stream_frames = 1;
957 CheckPacketContains(contents2, packet2_); 953 CheckPacketContains(contents2, packet2_);
958 } 954 }
959 955
960 } // namespace test 956 } // namespace test
961 } // namespace net 957 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698