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

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

Issue 19858003: * Removed QuicTag kQuicVersion1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compiler errors Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
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 <algorithm> 5 #include <algorithm>
6 #include <map> 6 #include <map>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 214
215 virtual void OnVersionNegotiationPacket( 215 virtual void OnVersionNegotiationPacket(
216 const QuicVersionNegotiationPacket& packet) OVERRIDE { 216 const QuicVersionNegotiationPacket& packet) OVERRIDE {
217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet));
218 } 218 }
219 219
220 virtual void OnRevivedPacket() OVERRIDE { 220 virtual void OnRevivedPacket() OVERRIDE {
221 revived_packets_++; 221 revived_packets_++;
222 } 222 }
223 223
224 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { 224 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE {
225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version;
226 version_mismatch_++; 226 version_mismatch_++;
227 return true; 227 return true;
228 } 228 }
229 229
230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE {
231 packet_count_++; 231 packet_count_++;
232 header_.reset(new QuicPacketHeader(header)); 232 header_.reset(new QuicPacketHeader(header));
233 return accept_packet_; 233 return accept_packet_;
234 } 234 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 vector<QuicStreamFrame*> stream_frames_; 298 vector<QuicStreamFrame*> stream_frames_;
299 vector<QuicAckFrame*> ack_frames_; 299 vector<QuicAckFrame*> ack_frames_;
300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; 300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_;
301 vector<QuicFecData*> fec_data_; 301 vector<QuicFecData*> fec_data_;
302 string fec_protected_payload_; 302 string fec_protected_payload_;
303 QuicRstStreamFrame rst_stream_frame_; 303 QuicRstStreamFrame rst_stream_frame_;
304 QuicConnectionCloseFrame connection_close_frame_; 304 QuicConnectionCloseFrame connection_close_frame_;
305 QuicGoAwayFrame goaway_frame_; 305 QuicGoAwayFrame goaway_frame_;
306 }; 306 };
307 307
308 class QuicFramerTest : public ::testing::Test { 308 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
309 public: 309 public:
310 QuicFramerTest() 310 QuicFramerTest()
311 : encrypter_(new test::TestEncrypter()), 311 : encrypter_(new test::TestEncrypter()),
312 decrypter_(new test::TestDecrypter()), 312 decrypter_(new test::TestDecrypter()),
313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), 313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))),
314 framer_(kQuicVersion1, start_, true) { 314 framer_(QuicVersionMax(), start_, true) {
315 framer_.SetDecrypter(decrypter_); 315 framer_.SetDecrypter(decrypter_);
316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); 316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_);
317 framer_.set_visitor(&visitor_); 317 framer_.set_visitor(&visitor_);
318 framer_.set_entropy_calculator(&entropy_calculator_); 318 framer_.set_entropy_calculator(&entropy_calculator_);
319
320 QuicVersion version = GetParam();
321 framer_.set_version(version);
319 } 322 }
320 323
321 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, 324 bool CheckEncryption(QuicPacketSequenceNumber sequence_number,
322 QuicPacket* packet) { 325 QuicPacket* packet) {
323 if (sequence_number != encrypter_->sequence_number_) { 326 if (sequence_number != encrypter_->sequence_number_) {
324 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " 327 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected "
325 << sequence_number << " actual: " 328 << sequence_number << " actual: "
326 << encrypter_->sequence_number_; 329 << encrypter_->sequence_number_;
327 return false; 330 return false;
328 } 331 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 } 411 }
409 412
410 test::TestEncrypter* encrypter_; 413 test::TestEncrypter* encrypter_;
411 test::TestDecrypter* decrypter_; 414 test::TestDecrypter* decrypter_;
412 QuicTime start_; 415 QuicTime start_;
413 QuicFramer framer_; 416 QuicFramer framer_;
414 test::TestQuicVisitor visitor_; 417 test::TestQuicVisitor visitor_;
415 test::TestEntropyCalculator entropy_calculator_; 418 test::TestEntropyCalculator entropy_calculator_;
416 }; 419 };
417 420
418 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { 421 // Run all framer tests with QUIC version 6.
422 INSTANTIATE_TEST_CASE_P(QuicFramerTests,
423 QuicFramerTest,
424 ::testing::Values(QUIC_VERSION_6));
425
426 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) {
419 // A few quick manual sanity checks 427 // A few quick manual sanity checks
420 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); 428 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0));
421 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); 429 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask);
422 CheckCalculatePacketSequenceNumber(kEpoch, kMask); 430 CheckCalculatePacketSequenceNumber(kEpoch, kMask);
423 431
424 // Cases where the last number was close to the start of the range 432 // Cases where the last number was close to the start of the range
425 for (uint64 last = 0; last < 10; last++) { 433 for (uint64 last = 0; last < 10; last++) {
426 // Small numbers should not wrap (even if they're out of order). 434 // Small numbers should not wrap (even if they're out of order).
427 for (uint64 j = 0; j < 10; j++) { 435 for (uint64 j = 0; j < 10; j++) {
428 CheckCalculatePacketSequenceNumber(j, last); 436 CheckCalculatePacketSequenceNumber(j, last);
429 } 437 }
430 438
431 // Large numbers should not wrap either (because we're near 0 already). 439 // Large numbers should not wrap either (because we're near 0 already).
432 for (uint64 j = 0; j < 10; j++) { 440 for (uint64 j = 0; j < 10; j++) {
433 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); 441 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last);
434 } 442 }
435 } 443 }
436 } 444 }
437 445
438 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) { 446 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) {
439 // Cases where the last number was close to the end of the range 447 // Cases where the last number was close to the end of the range
440 for (uint64 i = 0; i < 10; i++) { 448 for (uint64 i = 0; i < 10; i++) {
441 QuicPacketSequenceNumber last = kEpoch - i; 449 QuicPacketSequenceNumber last = kEpoch - i;
442 450
443 // Small numbers should wrap. 451 // Small numbers should wrap.
444 for (uint64 j = 0; j < 10; j++) { 452 for (uint64 j = 0; j < 10; j++) {
445 CheckCalculatePacketSequenceNumber(kEpoch + j, last); 453 CheckCalculatePacketSequenceNumber(kEpoch + j, last);
446 } 454 }
447 455
448 // Large numbers should not (even if they're out of order). 456 // Large numbers should not (even if they're out of order).
449 for (uint64 j = 0; j < 10; j++) { 457 for (uint64 j = 0; j < 10; j++) {
450 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); 458 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last);
451 } 459 }
452 } 460 }
453 } 461 }
454 462
455 // Next check where we're in a non-zero epoch to verify we handle 463 // Next check where we're in a non-zero epoch to verify we handle
456 // reverse wrapping, too. 464 // reverse wrapping, too.
457 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) { 465 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) {
458 const uint64 prev_epoch = 1 * kEpoch; 466 const uint64 prev_epoch = 1 * kEpoch;
459 const uint64 cur_epoch = 2 * kEpoch; 467 const uint64 cur_epoch = 2 * kEpoch;
460 // Cases where the last number was close to the start of the range 468 // Cases where the last number was close to the start of the range
461 for (uint64 i = 0; i < 10; i++) { 469 for (uint64 i = 0; i < 10; i++) {
462 uint64 last = cur_epoch + i; 470 uint64 last = cur_epoch + i;
463 // Small number should not wrap (even if they're out of order). 471 // Small number should not wrap (even if they're out of order).
464 for (uint64 j = 0; j < 10; j++) { 472 for (uint64 j = 0; j < 10; j++) {
465 CheckCalculatePacketSequenceNumber(cur_epoch + j, last); 473 CheckCalculatePacketSequenceNumber(cur_epoch + j, last);
466 } 474 }
467 475
468 // But large numbers should reverse wrap. 476 // But large numbers should reverse wrap.
469 for (uint64 j = 0; j < 10; j++) { 477 for (uint64 j = 0; j < 10; j++) {
470 uint64 num = kEpoch - 1 - j; 478 uint64 num = kEpoch - 1 - j;
471 CheckCalculatePacketSequenceNumber(prev_epoch + num, last); 479 CheckCalculatePacketSequenceNumber(prev_epoch + num, last);
472 } 480 }
473 } 481 }
474 } 482 }
475 483
476 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) { 484 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) {
477 const uint64 cur_epoch = 2 * kEpoch; 485 const uint64 cur_epoch = 2 * kEpoch;
478 const uint64 next_epoch = 3 * kEpoch; 486 const uint64 next_epoch = 3 * kEpoch;
479 // Cases where the last number was close to the end of the range 487 // Cases where the last number was close to the end of the range
480 for (uint64 i = 0; i < 10; i++) { 488 for (uint64 i = 0; i < 10; i++) {
481 QuicPacketSequenceNumber last = next_epoch - 1 - i; 489 QuicPacketSequenceNumber last = next_epoch - 1 - i;
482 490
483 // Small numbers should wrap. 491 // Small numbers should wrap.
484 for (uint64 j = 0; j < 10; j++) { 492 for (uint64 j = 0; j < 10; j++) {
485 CheckCalculatePacketSequenceNumber(next_epoch + j, last); 493 CheckCalculatePacketSequenceNumber(next_epoch + j, last);
486 } 494 }
487 495
488 // but large numbers should not (even if they're out of order). 496 // but large numbers should not (even if they're out of order).
489 for (uint64 j = 0; j < 10; j++) { 497 for (uint64 j = 0; j < 10; j++) {
490 uint64 num = kEpoch - 1 - j; 498 uint64 num = kEpoch - 1 - j;
491 CheckCalculatePacketSequenceNumber(cur_epoch + num, last); 499 CheckCalculatePacketSequenceNumber(cur_epoch + num, last);
492 } 500 }
493 } 501 }
494 } 502 }
495 503
496 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { 504 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) {
497 const uint64 max_number = numeric_limits<uint64>::max(); 505 const uint64 max_number = numeric_limits<uint64>::max();
498 const uint64 max_epoch = max_number & ~kMask; 506 const uint64 max_epoch = max_number & ~kMask;
499 507
500 // Cases where the last number was close to the end of the range 508 // Cases where the last number was close to the end of the range
501 for (uint64 i = 0; i < 10; i++) { 509 for (uint64 i = 0; i < 10; i++) {
502 // Subtract 1, because the expected next sequence number is 1 more than the 510 // Subtract 1, because the expected next sequence number is 1 more than the
503 // last sequence number. 511 // last sequence number.
504 QuicPacketSequenceNumber last = max_number - i - 1; 512 QuicPacketSequenceNumber last = max_number - i - 1;
505 513
506 // Small numbers should not wrap, because they have nowhere to go. 514 // Small numbers should not wrap, because they have nowhere to go.
507 for (uint64 j = 0; j < 10; j++) { 515 for (uint64 j = 0; j < 10; j++) {
508 CheckCalculatePacketSequenceNumber(max_epoch + j, last); 516 CheckCalculatePacketSequenceNumber(max_epoch + j, last);
509 } 517 }
510 518
511 // Large numbers should not wrap either. 519 // Large numbers should not wrap either.
512 for (uint64 j = 0; j < 10; j++) { 520 for (uint64 j = 0; j < 10; j++) {
513 uint64 num = kEpoch - 1 - j; 521 uint64 num = kEpoch - 1 - j;
514 CheckCalculatePacketSequenceNumber(max_epoch + num, last); 522 CheckCalculatePacketSequenceNumber(max_epoch + num, last);
515 } 523 }
516 } 524 }
517 } 525 }
518 526
519 TEST_F(QuicFramerTest, EmptyPacket) { 527 TEST_P(QuicFramerTest, EmptyPacket) {
520 char packet[] = { 0x00 }; 528 char packet[] = { 0x00 };
521 QuicEncryptedPacket encrypted(packet, 0, false); 529 QuicEncryptedPacket encrypted(packet, 0, false);
522 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 530 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
523 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 531 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
524 } 532 }
525 533
526 TEST_F(QuicFramerTest, LargePacket) { 534 TEST_P(QuicFramerTest, LargePacket) {
527 unsigned char packet[kMaxPacketSize + 1] = { 535 unsigned char packet[kMaxPacketSize + 1] = {
528 // public flags (8 byte guid) 536 // public flags (8 byte guid)
529 0x3C, 537 0x3C,
530 // guid 538 // guid
531 0x10, 0x32, 0x54, 0x76, 539 0x10, 0x32, 0x54, 0x76,
532 0x98, 0xBA, 0xDC, 0xFE, 540 0x98, 0xBA, 0xDC, 0xFE,
533 // packet sequence number 541 // packet sequence number
534 0xBC, 0x9A, 0x78, 0x56, 542 0xBC, 0x9A, 0x78, 0x56,
535 0x34, 0x12, 543 0x34, 0x12,
536 // private flags 544 // private flags
(...skipping 11 matching lines...) Expand all
548 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 556 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
549 557
550 ASSERT_TRUE(visitor_.header_.get()); 558 ASSERT_TRUE(visitor_.header_.get());
551 // Make sure we've parsed the packet header, so we can send an error. 559 // Make sure we've parsed the packet header, so we can send an error.
552 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 560 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
553 visitor_.header_->public_header.guid); 561 visitor_.header_->public_header.guid);
554 // Make sure the correct error is propagated. 562 // Make sure the correct error is propagated.
555 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); 563 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error());
556 } 564 }
557 565
558 TEST_F(QuicFramerTest, PacketHeader) { 566 TEST_P(QuicFramerTest, PacketHeader) {
559 unsigned char packet[] = { 567 unsigned char packet[] = {
560 // public flags (8 byte guid) 568 // public flags (8 byte guid)
561 0x3C, 569 0x3C,
562 // guid 570 // guid
563 0x10, 0x32, 0x54, 0x76, 571 0x10, 0x32, 0x54, 0x76,
564 0x98, 0xBA, 0xDC, 0xFE, 572 0x98, 0xBA, 0xDC, 0xFE,
565 // packet sequence number 573 // packet sequence number
566 0xBC, 0x9A, 0x78, 0x56, 574 0xBC, 0x9A, 0x78, 0x56,
567 0x34, 0x12, 575 0x34, 0x12,
568 // private flags 576 // private flags
(...skipping 30 matching lines...) Expand all
599 expected_error = "Unable to read sequence number."; 607 expected_error = "Unable to read sequence number.";
600 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { 608 } else if (i < GetFecGroupOffset(!kIncludeVersion)) {
601 expected_error = "Unable to read private flags."; 609 expected_error = "Unable to read private flags.";
602 } else { 610 } else {
603 expected_error = "Unable to read first fec protected packet offset."; 611 expected_error = "Unable to read first fec protected packet offset.";
604 } 612 }
605 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 613 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
606 } 614 }
607 } 615 }
608 616
609 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { 617 TEST_P(QuicFramerTest, PacketHeaderWith4ByteGuid) {
610 QuicFramerPeer::SetLastSerializedGuid(&framer_, 618 QuicFramerPeer::SetLastSerializedGuid(&framer_,
611 GG_UINT64_C(0xFEDCBA9876543210)); 619 GG_UINT64_C(0xFEDCBA9876543210));
612 620
613 unsigned char packet[] = { 621 unsigned char packet[] = {
614 // public flags (4 byte guid) 622 // public flags (4 byte guid)
615 0x38, 623 0x38,
616 // guid 624 // guid
617 0x10, 0x32, 0x54, 0x76, 625 0x10, 0x32, 0x54, 0x76,
618 // packet sequence number 626 // packet sequence number
619 0xBC, 0x9A, 0x78, 0x56, 627 0xBC, 0x9A, 0x78, 0x56,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 expected_error = "Unable to read sequence number."; 662 expected_error = "Unable to read sequence number.";
655 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { 663 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) {
656 expected_error = "Unable to read private flags."; 664 expected_error = "Unable to read private flags.";
657 } else { 665 } else {
658 expected_error = "Unable to read first fec protected packet offset."; 666 expected_error = "Unable to read first fec protected packet offset.";
659 } 667 }
660 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 668 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
661 } 669 }
662 } 670 }
663 671
664 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { 672 TEST_P(QuicFramerTest, PacketHeader1ByteGuid) {
665 QuicFramerPeer::SetLastSerializedGuid(&framer_, 673 QuicFramerPeer::SetLastSerializedGuid(&framer_,
666 GG_UINT64_C(0xFEDCBA9876543210)); 674 GG_UINT64_C(0xFEDCBA9876543210));
667 675
668 unsigned char packet[] = { 676 unsigned char packet[] = {
669 // public flags (1 byte guid) 677 // public flags (1 byte guid)
670 0x34, 678 0x34,
671 // guid 679 // guid
672 0x10, 680 0x10,
673 // packet sequence number 681 // packet sequence number
674 0xBC, 0x9A, 0x78, 0x56, 682 0xBC, 0x9A, 0x78, 0x56,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 expected_error = "Unable to read sequence number."; 716 expected_error = "Unable to read sequence number.";
709 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { 717 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) {
710 expected_error = "Unable to read private flags."; 718 expected_error = "Unable to read private flags.";
711 } else { 719 } else {
712 expected_error = "Unable to read first fec protected packet offset."; 720 expected_error = "Unable to read first fec protected packet offset.";
713 } 721 }
714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 722 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
715 } 723 }
716 } 724 }
717 725
718 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { 726 TEST_P(QuicFramerTest, PacketHeaderWith0ByteGuid) {
719 QuicFramerPeer::SetLastSerializedGuid(&framer_, 727 QuicFramerPeer::SetLastSerializedGuid(&framer_,
720 GG_UINT64_C(0xFEDCBA9876543210)); 728 GG_UINT64_C(0xFEDCBA9876543210));
721 729
722 unsigned char packet[] = { 730 unsigned char packet[] = {
723 // public flags (0 byte guid) 731 // public flags (0 byte guid)
724 0x30, 732 0x30,
725 // guid 733 // guid
726 // packet sequence number 734 // packet sequence number
727 0xBC, 0x9A, 0x78, 0x56, 735 0xBC, 0x9A, 0x78, 0x56,
728 0x34, 0x12, 736 0x34, 0x12,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 expected_error = "Unable to read sequence number."; 769 expected_error = "Unable to read sequence number.";
762 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { 770 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) {
763 expected_error = "Unable to read private flags."; 771 expected_error = "Unable to read private flags.";
764 } else { 772 } else {
765 expected_error = "Unable to read first fec protected packet offset."; 773 expected_error = "Unable to read first fec protected packet offset.";
766 } 774 }
767 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 775 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
768 } 776 }
769 } 777 }
770 778
771 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { 779 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) {
780 // Set a specific version.
781 framer_.set_version(QUIC_VERSION_6);
782
772 unsigned char packet[] = { 783 unsigned char packet[] = {
773 // public flags (version) 784 // public flags (version)
774 0x3D, 785 0x3D,
775 // guid 786 // guid
776 0x10, 0x32, 0x54, 0x76, 787 0x10, 0x32, 0x54, 0x76,
777 0x98, 0xBA, 0xDC, 0xFE, 788 0x98, 0xBA, 0xDC, 0xFE,
778 // version tag 789 // version tag
779 'Q', '0', '0', '6', 790 'Q', '0', '0', '6',
780 // packet sequence number 791 // packet sequence number
781 0xBC, 0x9A, 0x78, 0x56, 792 0xBC, 0x9A, 0x78, 0x56,
782 0x34, 0x12, 793 0x34, 0x12,
783 // private flags 794 // private flags
784 0x00, 795 0x00,
785 }; 796 };
786 797
787 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 798 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
788 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 799 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
789 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 800 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
790 ASSERT_TRUE(visitor_.header_.get()); 801 ASSERT_TRUE(visitor_.header_.get());
791 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 802 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
792 visitor_.header_->public_header.guid); 803 visitor_.header_->public_header.guid);
793 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 804 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
794 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 805 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
795 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); 806 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_->public_header.versions[0]);
796 EXPECT_FALSE(visitor_.header_->fec_flag); 807 EXPECT_FALSE(visitor_.header_->fec_flag);
797 EXPECT_FALSE(visitor_.header_->entropy_flag); 808 EXPECT_FALSE(visitor_.header_->entropy_flag);
798 EXPECT_EQ(0, visitor_.header_->entropy_hash); 809 EXPECT_EQ(0, visitor_.header_->entropy_hash);
799 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 810 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
800 visitor_.header_->packet_sequence_number); 811 visitor_.header_->packet_sequence_number);
801 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 812 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
802 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 813 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
803 814
804 // Now test framing boundaries 815 // Now test framing boundaries
805 for (size_t i = 0; 816 for (size_t i = 0;
(...skipping 11 matching lines...) Expand all
817 expected_error = "Unable to read sequence number."; 828 expected_error = "Unable to read sequence number.";
818 } else if (i < GetFecGroupOffset(kIncludeVersion)) { 829 } else if (i < GetFecGroupOffset(kIncludeVersion)) {
819 expected_error = "Unable to read private flags."; 830 expected_error = "Unable to read private flags.";
820 } else { 831 } else {
821 expected_error = "Unable to read first fec protected packet offset."; 832 expected_error = "Unable to read first fec protected packet offset.";
822 } 833 }
823 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 834 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
824 } 835 }
825 } 836 }
826 837
827 TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { 838 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) {
828 QuicFramerPeer::SetLastSequenceNumber(&framer_, 839 QuicFramerPeer::SetLastSequenceNumber(&framer_,
829 GG_UINT64_C(0x123456789ABA)); 840 GG_UINT64_C(0x123456789ABA));
830 841
831 unsigned char packet[] = { 842 unsigned char packet[] = {
832 // public flags (8 byte guid and 4 byte sequence number) 843 // public flags (8 byte guid and 4 byte sequence number)
833 0x2C, 844 0x2C,
834 // guid 845 // guid
835 0x10, 0x32, 0x54, 0x76, 846 0x10, 0x32, 0x54, 0x76,
836 0x98, 0xBA, 0xDC, 0xFE, 847 0x98, 0xBA, 0xDC, 0xFE,
837 // packet sequence number 848 // packet sequence number
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 } else if (i < GetFecGroupOffset(!kIncludeVersion, 883 } else if (i < GetFecGroupOffset(!kIncludeVersion,
873 PACKET_4BYTE_SEQUENCE_NUMBER)) { 884 PACKET_4BYTE_SEQUENCE_NUMBER)) {
874 expected_error = "Unable to read private flags."; 885 expected_error = "Unable to read private flags.";
875 } else { 886 } else {
876 expected_error = "Unable to read first fec protected packet offset."; 887 expected_error = "Unable to read first fec protected packet offset.";
877 } 888 }
878 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 889 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
879 } 890 }
880 } 891 }
881 892
882 TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { 893 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) {
883 QuicFramerPeer::SetLastSequenceNumber(&framer_, 894 QuicFramerPeer::SetLastSequenceNumber(&framer_,
884 GG_UINT64_C(0x123456789ABA)); 895 GG_UINT64_C(0x123456789ABA));
885 896
886 unsigned char packet[] = { 897 unsigned char packet[] = {
887 // public flags (8 byte guid and 2 byte sequence number) 898 // public flags (8 byte guid and 2 byte sequence number)
888 0x1C, 899 0x1C,
889 // guid 900 // guid
890 0x10, 0x32, 0x54, 0x76, 901 0x10, 0x32, 0x54, 0x76,
891 0x98, 0xBA, 0xDC, 0xFE, 902 0x98, 0xBA, 0xDC, 0xFE,
892 // packet sequence number 903 // packet sequence number
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 } else if (i < GetFecGroupOffset(!kIncludeVersion, 938 } else if (i < GetFecGroupOffset(!kIncludeVersion,
928 PACKET_2BYTE_SEQUENCE_NUMBER)) { 939 PACKET_2BYTE_SEQUENCE_NUMBER)) {
929 expected_error = "Unable to read private flags."; 940 expected_error = "Unable to read private flags.";
930 } else { 941 } else {
931 expected_error = "Unable to read first fec protected packet offset."; 942 expected_error = "Unable to read first fec protected packet offset.";
932 } 943 }
933 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 944 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
934 } 945 }
935 } 946 }
936 947
937 TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { 948 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) {
938 QuicFramerPeer::SetLastSequenceNumber(&framer_, 949 QuicFramerPeer::SetLastSequenceNumber(&framer_,
939 GG_UINT64_C(0x123456789ABA)); 950 GG_UINT64_C(0x123456789ABA));
940 951
941 unsigned char packet[] = { 952 unsigned char packet[] = {
942 // public flags (8 byte guid and 1 byte sequence number) 953 // public flags (8 byte guid and 1 byte sequence number)
943 0x0C, 954 0x0C,
944 // guid 955 // guid
945 0x10, 0x32, 0x54, 0x76, 956 0x10, 0x32, 0x54, 0x76,
946 0x98, 0xBA, 0xDC, 0xFE, 957 0x98, 0xBA, 0xDC, 0xFE,
947 // packet sequence number 958 // packet sequence number
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 } else if (i < GetFecGroupOffset(!kIncludeVersion, 993 } else if (i < GetFecGroupOffset(!kIncludeVersion,
983 PACKET_1BYTE_SEQUENCE_NUMBER)) { 994 PACKET_1BYTE_SEQUENCE_NUMBER)) {
984 expected_error = "Unable to read private flags."; 995 expected_error = "Unable to read private flags.";
985 } else { 996 } else {
986 expected_error = "Unable to read first fec protected packet offset."; 997 expected_error = "Unable to read first fec protected packet offset.";
987 } 998 }
988 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 999 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
989 } 1000 }
990 } 1001 }
991 1002
992 TEST_F(QuicFramerTest, InvalidPublicFlag) { 1003 TEST_P(QuicFramerTest, InvalidPublicFlag) {
993 unsigned char packet[] = { 1004 unsigned char packet[] = {
994 // public flags 1005 // public flags, unknown flag at bit 6
995 0x40, 1006 0x40,
996 // guid 1007 // guid
997 0x10, 0x32, 0x54, 0x76, 1008 0x10, 0x32, 0x54, 0x76,
998 0x98, 0xBA, 0xDC, 0xFE, 1009 0x98, 0xBA, 0xDC, 0xFE,
999 // packet sequence number 1010 // packet sequence number
1000 0xBC, 0x9A, 0x78, 0x56, 1011 0xBC, 0x9A, 0x78, 0x56,
1001 0x34, 0x12, 1012 0x34, 0x12,
1002 // private flags 1013 // private flags
1003 0x00, 1014 0x00,
1004 1015
(...skipping 14 matching lines...) Expand all
1019 'h', 'e', 'l', 'l', 1030 'h', 'e', 'l', 'l',
1020 'o', ' ', 'w', 'o', 1031 'o', ' ', 'w', 'o',
1021 'r', 'l', 'd', '!', 1032 'r', 'l', 'd', '!',
1022 }; 1033 };
1023 CheckProcessingFails(packet, 1034 CheckProcessingFails(packet,
1024 arraysize(packet), 1035 arraysize(packet),
1025 "Illegal public flags value.", 1036 "Illegal public flags value.",
1026 QUIC_INVALID_PACKET_HEADER); 1037 QUIC_INVALID_PACKET_HEADER);
1027 }; 1038 };
1028 1039
1029 TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { 1040 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) {
1041 // Set a specific version.
1042 framer_.set_version(QUIC_VERSION_6);
1043
1030 unsigned char packet[] = { 1044 unsigned char packet[] = {
1031 // public flags (8 byte guid and version flag and an unknown flag) 1045 // public flags (8 byte guid and version flag and an unknown flag)
1032 0x4D, 1046 0x4D,
1033 // guid 1047 // guid
1034 0x10, 0x32, 0x54, 0x76, 1048 0x10, 0x32, 0x54, 0x76,
1035 0x98, 0xBA, 0xDC, 0xFE, 1049 0x98, 0xBA, 0xDC, 0xFE,
1036 // version tag 1050 // version tag
1037 'Q', '0', '0', '6', 1051 'Q', '0', '0', '6',
1038 // packet sequence number 1052 // packet sequence number
1039 0xBC, 0x9A, 0x78, 0x56, 1053 0xBC, 0x9A, 0x78, 0x56,
(...skipping 18 matching lines...) Expand all
1058 'h', 'e', 'l', 'l', 1072 'h', 'e', 'l', 'l',
1059 'o', ' ', 'w', 'o', 1073 'o', ' ', 'w', 'o',
1060 'r', 'l', 'd', '!', 1074 'r', 'l', 'd', '!',
1061 }; 1075 };
1062 CheckProcessingFails(packet, 1076 CheckProcessingFails(packet,
1063 arraysize(packet), 1077 arraysize(packet),
1064 "Illegal public flags value.", 1078 "Illegal public flags value.",
1065 QUIC_INVALID_PACKET_HEADER); 1079 QUIC_INVALID_PACKET_HEADER);
1066 }; 1080 };
1067 1081
1068 TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { 1082 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
1069 unsigned char packet[] = { 1083 unsigned char packet[] = {
1070 // public flags (8 byte guid, version flag and an unknown flag) 1084 // public flags (8 byte guid, version flag and an unknown flag)
1071 0x7D, 1085 0x7D,
1072 // guid 1086 // guid
1073 0x10, 0x32, 0x54, 0x76, 1087 0x10, 0x32, 0x54, 0x76,
1074 0x98, 0xBA, 0xDC, 0xFE, 1088 0x98, 0xBA, 0xDC, 0xFE,
1075 // version tag 1089 // version tag
1076 'Q', '0', '0', '0', 1090 'Q', '0', '0', '0',
1077 // packet sequence number 1091 // packet sequence number
1078 0xBC, 0x9A, 0x78, 0x56, 1092 0xBC, 0x9A, 0x78, 0x56,
1079 0x34, 0x12, 1093 0x34, 0x12,
1080 // private flags 1094 // private flags
1081 0x00, 1095 0x00,
1082 1096
1083 // frame type (padding frame) 1097 // frame type (padding frame)
1084 0x00, 1098 0x00,
1085 }; 1099 };
1086 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1087 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1101 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1088 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1102 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1089 ASSERT_TRUE(visitor_.header_.get()); 1103 ASSERT_TRUE(visitor_.header_.get());
1090 EXPECT_EQ(0, visitor_.frame_count_); 1104 EXPECT_EQ(0, visitor_.frame_count_);
1091 EXPECT_EQ(1, visitor_.version_mismatch_); 1105 EXPECT_EQ(1, visitor_.version_mismatch_);
1092 }; 1106 };
1093 1107
1094 TEST_F(QuicFramerTest, InvalidPrivateFlag) { 1108 TEST_P(QuicFramerTest, InvalidPrivateFlag) {
1095 unsigned char packet[] = { 1109 unsigned char packet[] = {
1096 // public flags (8 byte guid) 1110 // public flags (8 byte guid)
1097 0x3C, 1111 0x3C,
1098 // guid 1112 // guid
1099 0x10, 0x32, 0x54, 0x76, 1113 0x10, 0x32, 0x54, 0x76,
1100 0x98, 0xBA, 0xDC, 0xFE, 1114 0x98, 0xBA, 0xDC, 0xFE,
1101 // packet sequence number 1115 // packet sequence number
1102 0xBC, 0x9A, 0x78, 0x56, 1116 0xBC, 0x9A, 0x78, 0x56,
1103 0x34, 0x12, 1117 0x34, 0x12,
1104 // private flags 1118 // private flags
(...skipping 16 matching lines...) Expand all
1121 'h', 'e', 'l', 'l', 1135 'h', 'e', 'l', 'l',
1122 'o', ' ', 'w', 'o', 1136 'o', ' ', 'w', 'o',
1123 'r', 'l', 'd', '!', 1137 'r', 'l', 'd', '!',
1124 }; 1138 };
1125 CheckProcessingFails(packet, 1139 CheckProcessingFails(packet,
1126 arraysize(packet), 1140 arraysize(packet),
1127 "Illegal private flags value.", 1141 "Illegal private flags value.",
1128 QUIC_INVALID_PACKET_HEADER); 1142 QUIC_INVALID_PACKET_HEADER);
1129 }; 1143 };
1130 1144
1131 TEST_F(QuicFramerTest, PaddingFrame) { 1145 TEST_P(QuicFramerTest, PaddingFrame) {
1132 unsigned char packet[] = { 1146 unsigned char packet[] = {
1133 // public flags (8 byte guid) 1147 // public flags (8 byte guid)
1134 0x3C, 1148 0x3C,
1135 // guid 1149 // guid
1136 0x10, 0x32, 0x54, 0x76, 1150 0x10, 0x32, 0x54, 0x76,
1137 0x98, 0xBA, 0xDC, 0xFE, 1151 0x98, 0xBA, 0xDC, 0xFE,
1138 // packet sequence number 1152 // packet sequence number
1139 0xBC, 0x9A, 0x78, 0x56, 1153 0xBC, 0x9A, 0x78, 0x56,
1140 0x34, 0x12, 1154 0x34, 0x12,
1141 // private flags 1155 // private flags
(...skipping 22 matching lines...) Expand all
1164 ASSERT_EQ(0u, visitor_.stream_frames_.size()); 1178 ASSERT_EQ(0u, visitor_.stream_frames_.size());
1165 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1179 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1166 // A packet with no frames is not acceptable. 1180 // A packet with no frames is not acceptable.
1167 CheckProcessingFails( 1181 CheckProcessingFails(
1168 packet, 1182 packet,
1169 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1183 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1170 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1184 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1171 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); 1185 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA);
1172 } 1186 }
1173 1187
1174 TEST_F(QuicFramerTest, StreamFrame) { 1188 TEST_P(QuicFramerTest, StreamFrame) {
1175 unsigned char packet[] = { 1189 unsigned char packet[] = {
1176 // public flags (8 byte guid) 1190 // public flags (8 byte guid)
1177 0x3C, 1191 0x3C,
1178 // guid 1192 // guid
1179 0x10, 0x32, 0x54, 0x76, 1193 0x10, 0x32, 0x54, 0x76,
1180 0x98, 0xBA, 0xDC, 0xFE, 1194 0x98, 0xBA, 0xDC, 0xFE,
1181 // packet sequence number 1195 // packet sequence number
1182 0xBC, 0x9A, 0x78, 0x56, 1196 0xBC, 0x9A, 0x78, 0x56,
1183 0x34, 0x12, 1197 0x34, 0x12,
1184 // private flags 1198 // private flags
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 expected_error = "Unable to read frame data."; 1248 expected_error = "Unable to read frame data.";
1235 } 1249 }
1236 CheckProcessingFails( 1250 CheckProcessingFails(
1237 packet, 1251 packet,
1238 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1252 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1239 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1253 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1240 expected_error, QUIC_INVALID_FRAME_DATA); 1254 expected_error, QUIC_INVALID_FRAME_DATA);
1241 } 1255 }
1242 } 1256 }
1243 1257
1244 TEST_F(QuicFramerTest, StreamFrameWithVersion) { 1258 TEST_P(QuicFramerTest, StreamFrameWithVersion) {
1259 // Set a specific version.
1260 framer_.set_version(QUIC_VERSION_6);
1261
1245 unsigned char packet[] = { 1262 unsigned char packet[] = {
1246 // public flags (version, 8 byte guid) 1263 // public flags (version, 8 byte guid)
1247 0x3D, 1264 0x3D,
1248 // guid 1265 // guid
1249 0x10, 0x32, 0x54, 0x76, 1266 0x10, 0x32, 0x54, 0x76,
1250 0x98, 0xBA, 0xDC, 0xFE, 1267 0x98, 0xBA, 0xDC, 0xFE,
1251 // version tag 1268 // version tag
1252 'Q', '0', '0', '6', 1269 'Q', '0', '0', '6',
1253 // packet sequence number 1270 // packet sequence number
1254 0xBC, 0x9A, 0x78, 0x56, 1271 0xBC, 0x9A, 0x78, 0x56,
(...skipping 17 matching lines...) Expand all
1272 'o', ' ', 'w', 'o', 1289 'o', ' ', 'w', 'o',
1273 'r', 'l', 'd', '!', 1290 'r', 'l', 'd', '!',
1274 }; 1291 };
1275 1292
1276 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1293 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1277 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1294 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1278 1295
1279 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1296 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1280 ASSERT_TRUE(visitor_.header_.get()); 1297 ASSERT_TRUE(visitor_.header_.get());
1281 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); 1298 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag);
1282 EXPECT_EQ(kQuicVersion1, visitor_.header_.get()->public_header.versions[0]); 1299 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_.get()->public_header.versions[0]);
1283 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); 1300 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion));
1284 1301
1285 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1302 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1286 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1303 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1287 EXPECT_EQ(static_cast<uint64>(0x01020304), 1304 EXPECT_EQ(static_cast<uint64>(0x01020304),
1288 visitor_.stream_frames_[0]->stream_id); 1305 visitor_.stream_frames_[0]->stream_id);
1289 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1306 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1290 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1307 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1291 visitor_.stream_frames_[0]->offset); 1308 visitor_.stream_frames_[0]->offset);
1292 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 1309 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
(...skipping 15 matching lines...) Expand all
1308 expected_error = "Unable to read frame data."; 1325 expected_error = "Unable to read frame data.";
1309 } 1326 }
1310 CheckProcessingFails( 1327 CheckProcessingFails(
1311 packet, 1328 packet,
1312 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, 1329 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
1313 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1330 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1314 expected_error, QUIC_INVALID_FRAME_DATA); 1331 expected_error, QUIC_INVALID_FRAME_DATA);
1315 } 1332 }
1316 } 1333 }
1317 1334
1318 TEST_F(QuicFramerTest, RejectPacket) { 1335 TEST_P(QuicFramerTest, RejectPacket) {
1319 visitor_.accept_packet_ = false; 1336 visitor_.accept_packet_ = false;
1320 1337
1321 unsigned char packet[] = { 1338 unsigned char packet[] = {
1322 // public flags (8 byte guid) 1339 // public flags (8 byte guid)
1323 0x3C, 1340 0x3C,
1324 // guid 1341 // guid
1325 0x10, 0x32, 0x54, 0x76, 1342 0x10, 0x32, 0x54, 0x76,
1326 0x98, 0xBA, 0xDC, 0xFE, 1343 0x98, 0xBA, 0xDC, 0xFE,
1327 // packet sequence number 1344 // packet sequence number
1328 0xBC, 0x9A, 0x78, 0x56, 1345 0xBC, 0x9A, 0x78, 0x56,
(...skipping 22 matching lines...) Expand all
1351 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1368 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1352 1369
1353 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1370 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1354 ASSERT_TRUE(visitor_.header_.get()); 1371 ASSERT_TRUE(visitor_.header_.get());
1355 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1372 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1356 1373
1357 ASSERT_EQ(0u, visitor_.stream_frames_.size()); 1374 ASSERT_EQ(0u, visitor_.stream_frames_.size());
1358 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1375 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1359 } 1376 }
1360 1377
1361 TEST_F(QuicFramerTest, RevivedStreamFrame) { 1378 TEST_P(QuicFramerTest, RevivedStreamFrame) {
1362 unsigned char payload[] = { 1379 unsigned char payload[] = {
1363 // frame type (stream frame) 1380 // frame type (stream frame)
1364 0x01, 1381 0x01,
1365 // stream id 1382 // stream id
1366 0x04, 0x03, 0x02, 0x01, 1383 0x04, 0x03, 0x02, 0x01,
1367 // fin 1384 // fin
1368 0x01, 1385 0x01,
1369 // offset 1386 // offset
1370 0x54, 0x76, 0x10, 0x32, 1387 0x54, 0x76, 0x10, 0x32,
1371 0xDC, 0xFE, 0x98, 0xBA, 1388 0xDC, 0xFE, 0x98, 0xBA,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 1426
1410 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1427 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1411 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1428 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1412 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1429 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1413 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1430 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1414 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1431 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1415 visitor_.stream_frames_[0]->offset); 1432 visitor_.stream_frames_[0]->offset);
1416 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 1433 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
1417 } 1434 }
1418 1435
1419 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { 1436 TEST_P(QuicFramerTest, StreamFrameInFecGroup) {
1420 unsigned char packet[] = { 1437 unsigned char packet[] = {
1421 // public flags (8 byte guid) 1438 // public flags (8 byte guid)
1422 0x3C, 1439 0x3C,
1423 // guid 1440 // guid
1424 0x10, 0x32, 0x54, 0x76, 1441 0x10, 0x32, 0x54, 0x76,
1425 0x98, 0xBA, 0xDC, 0xFE, 1442 0x98, 0xBA, 0xDC, 0xFE,
1426 // packet sequence number 1443 // packet sequence number
1427 0xBC, 0x9A, 0x78, 0x56, 1444 0xBC, 0x9A, 0x78, 0x56,
1428 0x12, 0x34, 1445 0x12, 0x34,
1429 // private flags (fec group) 1446 // private flags (fec group)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1465 1482
1466 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1483 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1467 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1484 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1468 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1485 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1469 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1486 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1470 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1487 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1471 visitor_.stream_frames_[0]->offset); 1488 visitor_.stream_frames_[0]->offset);
1472 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 1489 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
1473 } 1490 }
1474 1491
1475 TEST_F(QuicFramerTest, AckFrame) { 1492 TEST_P(QuicFramerTest, AckFrame) {
1476 unsigned char packet[] = { 1493 unsigned char packet[] = {
1477 // public flags (8 byte guid) 1494 // public flags (8 byte guid)
1478 0x3C, 1495 0x3C,
1479 // guid 1496 // guid
1480 0x10, 0x32, 0x54, 0x76, 1497 0x10, 0x32, 0x54, 0x76,
1481 0x98, 0xBA, 0xDC, 0xFE, 1498 0x98, 0xBA, 0xDC, 0xFE,
1482 // packet sequence number 1499 // packet sequence number
1483 0xBC, 0x9A, 0x78, 0x56, 1500 0xBC, 0x9A, 0x78, 0x56,
1484 0x34, 0x12, 1501 0x34, 0x12,
1485 // private flags 1502 // private flags
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1560 expected_error = "Unable to read sequence number in missing packets."; 1577 expected_error = "Unable to read sequence number in missing packets.";
1561 } 1578 }
1562 CheckProcessingFails( 1579 CheckProcessingFails(
1563 packet, 1580 packet,
1564 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1581 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1565 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1582 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1566 expected_error, QUIC_INVALID_FRAME_DATA); 1583 expected_error, QUIC_INVALID_FRAME_DATA);
1567 } 1584 }
1568 } 1585 }
1569 1586
1570 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { 1587 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) {
1571 unsigned char packet[] = { 1588 unsigned char packet[] = {
1572 // public flags (8 byte guid) 1589 // public flags (8 byte guid)
1573 0x3C, 1590 0x3C,
1574 // guid 1591 // guid
1575 0x10, 0x32, 0x54, 0x76, 1592 0x10, 0x32, 0x54, 0x76,
1576 0x98, 0xBA, 0xDC, 0xFE, 1593 0x98, 0xBA, 0xDC, 0xFE,
1577 // packet sequence number 1594 // packet sequence number
1578 0xBC, 0x9A, 0x78, 0x56, 1595 0xBC, 0x9A, 0x78, 0x56,
1579 0x34, 0x12, 1596 0x34, 0x12,
1580 // private flags 1597 // private flags
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 expected_error = "Unable to read receive window."; 1636 expected_error = "Unable to read receive window.";
1620 } 1637 }
1621 CheckProcessingFails( 1638 CheckProcessingFails(
1622 packet, 1639 packet,
1623 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1640 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1624 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1641 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1625 expected_error, QUIC_INVALID_FRAME_DATA); 1642 expected_error, QUIC_INVALID_FRAME_DATA);
1626 } 1643 }
1627 } 1644 }
1628 1645
1629 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { 1646 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
1630 unsigned char packet[] = { 1647 unsigned char packet[] = {
1631 // public flags (8 byte guid) 1648 // public flags (8 byte guid)
1632 0x3C, 1649 0x3C,
1633 // guid 1650 // guid
1634 0x10, 0x32, 0x54, 0x76, 1651 0x10, 0x32, 0x54, 0x76,
1635 0x98, 0xBA, 0xDC, 0xFE, 1652 0x98, 0xBA, 0xDC, 0xFE,
1636 // packet sequence number 1653 // packet sequence number
1637 0xBC, 0x9A, 0x78, 0x56, 1654 0xBC, 0x9A, 0x78, 0x56,
1638 0x34, 0x12, 1655 0x34, 0x12,
1639 // private flags 1656 // private flags
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 expected_error = "Unable to read time delta in received packets."; 1734 expected_error = "Unable to read time delta in received packets.";
1718 } 1735 }
1719 CheckProcessingFails( 1736 CheckProcessingFails(
1720 packet, 1737 packet,
1721 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1738 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1722 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1739 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1723 expected_error, QUIC_INVALID_FRAME_DATA); 1740 expected_error, QUIC_INVALID_FRAME_DATA);
1724 } 1741 }
1725 } 1742 }
1726 1743
1727 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { 1744 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) {
1728 unsigned char packet[] = { 1745 unsigned char packet[] = {
1729 // public flags (8 byte guid) 1746 // public flags (8 byte guid)
1730 0x3C, 1747 0x3C,
1731 // guid 1748 // guid
1732 0x10, 0x32, 0x54, 0x76, 1749 0x10, 0x32, 0x54, 0x76,
1733 0x98, 0xBA, 0xDC, 0xFE, 1750 0x98, 0xBA, 0xDC, 0xFE,
1734 // packet sequence number 1751 // packet sequence number
1735 0xBC, 0x9A, 0x78, 0x56, 1752 0xBC, 0x9A, 0x78, 0x56,
1736 0x34, 0x12, 1753 0x34, 0x12,
1737 // private flags 1754 // private flags
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 } 1789 }
1773 CheckProcessingFails( 1790 CheckProcessingFails(
1774 packet, 1791 packet,
1775 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1792 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1776 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1793 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1777 expected_error, QUIC_INVALID_FRAME_DATA); 1794 expected_error, QUIC_INVALID_FRAME_DATA);
1778 } 1795 }
1779 } 1796 }
1780 1797
1781 1798
1782 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { 1799 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
1783 unsigned char packet[] = { 1800 unsigned char packet[] = {
1784 // public flags (8 byte guid) 1801 // public flags (8 byte guid)
1785 0x3C, 1802 0x3C,
1786 // guid 1803 // guid
1787 0x10, 0x32, 0x54, 0x76, 1804 0x10, 0x32, 0x54, 0x76,
1788 0x98, 0xBA, 0xDC, 0xFE, 1805 0x98, 0xBA, 0xDC, 0xFE,
1789 // packet sequence number 1806 // packet sequence number
1790 0xBC, 0x9A, 0x78, 0x56, 1807 0xBC, 0x9A, 0x78, 0x56,
1791 0x34, 0x12, 1808 0x34, 0x12,
1792 // private flags 1809 // private flags
1793 0x00, 1810 0x00,
1794 1811
1795 // frame type (congestion feedback frame) 1812 // frame type (congestion feedback frame)
1796 0x03, 1813 0x03,
1797 // congestion feedback type (invalid) 1814 // congestion feedback type (invalid)
1798 0x03, 1815 0x03,
1799 }; 1816 };
1800 1817
1801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1818 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1802 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1819 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1803 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1820 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1804 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 1821 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
1805 } 1822 }
1806 1823
1807 TEST_F(QuicFramerTest, RstStreamFrame) { 1824 TEST_P(QuicFramerTest, RstStreamFrame) {
1808 unsigned char packet[] = { 1825 unsigned char packet[] = {
1809 // public flags (8 byte guid) 1826 // public flags (8 byte guid)
1810 0x3C, 1827 0x3C,
1811 // guid 1828 // guid
1812 0x10, 0x32, 0x54, 0x76, 1829 0x10, 0x32, 0x54, 0x76,
1813 0x98, 0xBA, 0xDC, 0xFE, 1830 0x98, 0xBA, 0xDC, 0xFE,
1814 // packet sequence number 1831 // packet sequence number
1815 0xBC, 0x9A, 0x78, 0x56, 1832 0xBC, 0x9A, 0x78, 0x56,
1816 0x34, 0x12, 1833 0x34, 0x12,
1817 // private flags 1834 // private flags
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1856 expected_error = "Unable to read rst stream error details."; 1873 expected_error = "Unable to read rst stream error details.";
1857 } 1874 }
1858 CheckProcessingFails( 1875 CheckProcessingFails(
1859 packet, 1876 packet,
1860 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1877 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1861 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1878 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1862 expected_error, QUIC_INVALID_RST_STREAM_DATA); 1879 expected_error, QUIC_INVALID_RST_STREAM_DATA);
1863 } 1880 }
1864 } 1881 }
1865 1882
1866 TEST_F(QuicFramerTest, ConnectionCloseFrame) { 1883 TEST_P(QuicFramerTest, ConnectionCloseFrame) {
1867 unsigned char packet[] = { 1884 unsigned char packet[] = {
1868 // public flags (8 byte guid) 1885 // public flags (8 byte guid)
1869 0x3C, 1886 0x3C,
1870 // guid 1887 // guid
1871 0x10, 0x32, 0x54, 0x76, 1888 0x10, 0x32, 0x54, 0x76,
1872 0x98, 0xBA, 0xDC, 0xFE, 1889 0x98, 0xBA, 0xDC, 0xFE,
1873 // packet sequence number 1890 // packet sequence number
1874 0xBC, 0x9A, 0x78, 0x56, 1891 0xBC, 0x9A, 0x78, 0x56,
1875 0x34, 0x12, 1892 0x34, 0x12,
1876 // private flags 1893 // private flags
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1943 expected_error = "Unable to read connection close error details."; 1960 expected_error = "Unable to read connection close error details.";
1944 } 1961 }
1945 CheckProcessingFails( 1962 CheckProcessingFails(
1946 packet, 1963 packet,
1947 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1964 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1948 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1965 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1949 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); 1966 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA);
1950 } 1967 }
1951 } 1968 }
1952 1969
1953 TEST_F(QuicFramerTest, GoAwayFrame) { 1970 TEST_P(QuicFramerTest, GoAwayFrame) {
1954 unsigned char packet[] = { 1971 unsigned char packet[] = {
1955 // public flags (8 byte guid) 1972 // public flags (8 byte guid)
1956 0x3C, 1973 0x3C,
1957 // guid 1974 // guid
1958 0x10, 0x32, 0x54, 0x76, 1975 0x10, 0x32, 0x54, 0x76,
1959 0x98, 0xBA, 0xDC, 0xFE, 1976 0x98, 0xBA, 0xDC, 0xFE,
1960 // packet sequence number 1977 // packet sequence number
1961 0xBC, 0x9A, 0x78, 0x56, 1978 0xBC, 0x9A, 0x78, 0x56,
1962 0x34, 0x12, 1979 0x34, 0x12,
1963 // private flags 1980 // private flags
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 expected_error = "Unable to read goaway reason."; 2021 expected_error = "Unable to read goaway reason.";
2005 } 2022 }
2006 CheckProcessingFails( 2023 CheckProcessingFails(
2007 packet, 2024 packet,
2008 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 2025 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2009 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2026 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2010 expected_error, QUIC_INVALID_GOAWAY_DATA); 2027 expected_error, QUIC_INVALID_GOAWAY_DATA);
2011 } 2028 }
2012 } 2029 }
2013 2030
2014 TEST_F(QuicFramerTest, PublicResetPacket) { 2031 TEST_P(QuicFramerTest, PublicResetPacket) {
2015 unsigned char packet[] = { 2032 unsigned char packet[] = {
2016 // public flags (public reset, 8 byte guid) 2033 // public flags (public reset, 8 byte guid)
2017 0x3E, 2034 0x3E,
2018 // guid 2035 // guid
2019 0x10, 0x32, 0x54, 0x76, 2036 0x10, 0x32, 0x54, 0x76,
2020 0x98, 0xBA, 0xDC, 0xFE, 2037 0x98, 0xBA, 0xDC, 0xFE,
2021 // nonce proof 2038 // nonce proof
2022 0x89, 0x67, 0x45, 0x23, 2039 0x89, 0x67, 0x45, 0x23,
2023 0x01, 0xEF, 0xCD, 0xAB, 2040 0x01, 0xEF, 0xCD, 0xAB,
2024 // rejected sequence number 2041 // rejected sequence number
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 CheckProcessingFails(packet, i, expected_error, 2073 CheckProcessingFails(packet, i, expected_error,
2057 QUIC_INVALID_PUBLIC_RST_PACKET); 2074 QUIC_INVALID_PUBLIC_RST_PACKET);
2058 } else { 2075 } else {
2059 expected_error = "Unable to read rejected sequence number."; 2076 expected_error = "Unable to read rejected sequence number.";
2060 CheckProcessingFails(packet, i, expected_error, 2077 CheckProcessingFails(packet, i, expected_error,
2061 QUIC_INVALID_PUBLIC_RST_PACKET); 2078 QUIC_INVALID_PUBLIC_RST_PACKET);
2062 } 2079 }
2063 } 2080 }
2064 } 2081 }
2065 2082
2066 TEST_F(QuicFramerTest, VersionNegotiationPacket) { 2083 TEST_P(QuicFramerTest, VersionNegotiationPacket) {
2084 // Set a specific version.
2085 framer_.set_version(QUIC_VERSION_6);
2086
2067 unsigned char packet[] = { 2087 unsigned char packet[] = {
2068 // public flags (version, 8 byte guid) 2088 // public flags (version, 8 byte guid)
2069 0x3D, 2089 0x3D,
2070 // guid 2090 // guid
2071 0x10, 0x32, 0x54, 0x76, 2091 0x10, 0x32, 0x54, 0x76,
2072 0x98, 0xBA, 0xDC, 0xFE, 2092 0x98, 0xBA, 0xDC, 0xFE,
2073 // version tag 2093 // version tag
2074 'Q', '0', '0', '6', 2094 'Q', '0', '0', '6',
2075 'Q', '2', '.', '0', 2095 'Q', '2', '.', '0',
2076 }; 2096 };
2077 2097
2078 QuicFramerPeer::SetIsServer(&framer_, false); 2098 QuicFramerPeer::SetIsServer(&framer_, false);
2079 2099
2080 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2081 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2101 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2082 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); 2102 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
2083 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); 2103 ASSERT_TRUE(visitor_.version_negotiation_packet_.get());
2084 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); 2104 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size());
2085 EXPECT_EQ(kQuicVersion1, 2105 EXPECT_EQ(QUIC_VERSION_6,
2086 visitor_.version_negotiation_packet_->versions[0]); 2106 visitor_.version_negotiation_packet_->versions[0]);
2087 2107
2088 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { 2108 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) {
2089 string expected_error; 2109 string expected_error;
2090 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; 2110 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER;
2091 if (i < kGuidOffset) { 2111 if (i < kGuidOffset) {
2092 expected_error = "Unable to read public flags."; 2112 expected_error = "Unable to read public flags.";
2093 } else if (i < kVersionOffset) { 2113 } else if (i < kVersionOffset) {
2094 expected_error = "Unable to read GUID."; 2114 expected_error = "Unable to read GUID.";
2095 } else { 2115 } else {
2096 expected_error = "Unable to read supported version in negotiation."; 2116 expected_error = "Unable to read supported version in negotiation.";
2097 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; 2117 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET;
2098 } 2118 }
2099 CheckProcessingFails(packet, i, expected_error, error_code); 2119 CheckProcessingFails(packet, i, expected_error, error_code);
2100 } 2120 }
2101 } 2121 }
2102 2122
2103 TEST_F(QuicFramerTest, FecPacket) { 2123 TEST_P(QuicFramerTest, FecPacket) {
2104 unsigned char packet[] = { 2124 unsigned char packet[] = {
2105 // public flags (8 byte guid) 2125 // public flags (8 byte guid)
2106 0x3C, 2126 0x3C,
2107 // guid 2127 // guid
2108 0x10, 0x32, 0x54, 0x76, 2128 0x10, 0x32, 0x54, 0x76,
2109 0x98, 0xBA, 0xDC, 0xFE, 2129 0x98, 0xBA, 0xDC, 0xFE,
2110 // packet sequence number 2130 // packet sequence number
2111 0xBC, 0x9A, 0x78, 0x56, 2131 0xBC, 0x9A, 0x78, 0x56,
2112 0x34, 0x12, 2132 0x34, 0x12,
2113 // private flags (fec group & FEC) 2133 // private flags (fec group & FEC)
(...skipping 16 matching lines...) Expand all
2130 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2150 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2131 2151
2132 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2152 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2133 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 2153 EXPECT_EQ(0u, visitor_.ack_frames_.size());
2134 ASSERT_EQ(1, visitor_.fec_count_); 2154 ASSERT_EQ(1, visitor_.fec_count_);
2135 const QuicFecData& fec_data = *visitor_.fec_data_[0]; 2155 const QuicFecData& fec_data = *visitor_.fec_data_[0];
2136 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); 2156 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group);
2137 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); 2157 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy);
2138 } 2158 }
2139 2159
2140 TEST_F(QuicFramerTest, ConstructPaddingFramePacket) { 2160 TEST_P(QuicFramerTest, ConstructPaddingFramePacket) {
2141 QuicPacketHeader header; 2161 QuicPacketHeader header;
2142 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2162 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2143 header.public_header.reset_flag = false; 2163 header.public_header.reset_flag = false;
2144 header.public_header.version_flag = false; 2164 header.public_header.version_flag = false;
2145 header.fec_flag = false; 2165 header.fec_flag = false;
2146 header.entropy_flag = false; 2166 header.entropy_flag = false;
2147 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2167 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2148 header.fec_group = 0; 2168 header.fec_group = 0;
2149 2169
2150 QuicPaddingFrame padding_frame; 2170 QuicPaddingFrame padding_frame;
(...skipping 24 matching lines...) Expand all
2175 2195
2176 scoped_ptr<QuicPacket> data( 2196 scoped_ptr<QuicPacket> data(
2177 framer_.ConstructFrameDataPacket(header, frames).packet); 2197 framer_.ConstructFrameDataPacket(header, frames).packet);
2178 ASSERT_TRUE(data != NULL); 2198 ASSERT_TRUE(data != NULL);
2179 2199
2180 test::CompareCharArraysWithHexError("constructed packet", 2200 test::CompareCharArraysWithHexError("constructed packet",
2181 data->data(), data->length(), 2201 data->data(), data->length(),
2182 AsChars(packet), arraysize(packet)); 2202 AsChars(packet), arraysize(packet));
2183 } 2203 }
2184 2204
2185 TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { 2205 TEST_P(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) {
2186 QuicPacketHeader header; 2206 QuicPacketHeader header;
2187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2207 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2188 header.public_header.reset_flag = false; 2208 header.public_header.reset_flag = false;
2189 header.public_header.version_flag = false; 2209 header.public_header.version_flag = false;
2190 header.fec_flag = false; 2210 header.fec_flag = false;
2191 header.entropy_flag = false; 2211 header.entropy_flag = false;
2192 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; 2212 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER;
2193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2213 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2194 header.fec_group = 0; 2214 header.fec_group = 0;
2195 2215
(...skipping 24 matching lines...) Expand all
2220 2240
2221 scoped_ptr<QuicPacket> data( 2241 scoped_ptr<QuicPacket> data(
2222 framer_.ConstructFrameDataPacket(header, frames).packet); 2242 framer_.ConstructFrameDataPacket(header, frames).packet);
2223 ASSERT_TRUE(data != NULL); 2243 ASSERT_TRUE(data != NULL);
2224 2244
2225 test::CompareCharArraysWithHexError("constructed packet", 2245 test::CompareCharArraysWithHexError("constructed packet",
2226 data->data(), data->length(), 2246 data->data(), data->length(),
2227 AsChars(packet), arraysize(packet)); 2247 AsChars(packet), arraysize(packet));
2228 } 2248 }
2229 2249
2230 TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { 2250 TEST_P(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) {
2231 QuicPacketHeader header; 2251 QuicPacketHeader header;
2232 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2252 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2233 header.public_header.reset_flag = false; 2253 header.public_header.reset_flag = false;
2234 header.public_header.version_flag = false; 2254 header.public_header.version_flag = false;
2235 header.fec_flag = false; 2255 header.fec_flag = false;
2236 header.entropy_flag = false; 2256 header.entropy_flag = false;
2237 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; 2257 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER;
2238 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2258 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2239 header.fec_group = 0; 2259 header.fec_group = 0;
2240 2260
(...skipping 24 matching lines...) Expand all
2265 2285
2266 scoped_ptr<QuicPacket> data( 2286 scoped_ptr<QuicPacket> data(
2267 framer_.ConstructFrameDataPacket(header, frames).packet); 2287 framer_.ConstructFrameDataPacket(header, frames).packet);
2268 ASSERT_TRUE(data != NULL); 2288 ASSERT_TRUE(data != NULL);
2269 2289
2270 test::CompareCharArraysWithHexError("constructed packet", 2290 test::CompareCharArraysWithHexError("constructed packet",
2271 data->data(), data->length(), 2291 data->data(), data->length(),
2272 AsChars(packet), arraysize(packet)); 2292 AsChars(packet), arraysize(packet));
2273 } 2293 }
2274 2294
2275 TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { 2295 TEST_P(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) {
2276 QuicPacketHeader header; 2296 QuicPacketHeader header;
2277 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2297 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2278 header.public_header.reset_flag = false; 2298 header.public_header.reset_flag = false;
2279 header.public_header.version_flag = false; 2299 header.public_header.version_flag = false;
2280 header.fec_flag = false; 2300 header.fec_flag = false;
2281 header.entropy_flag = false; 2301 header.entropy_flag = false;
2282 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; 2302 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
2283 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2303 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2284 header.fec_group = 0; 2304 header.fec_group = 0;
2285 2305
(...skipping 24 matching lines...) Expand all
2310 2330
2311 scoped_ptr<QuicPacket> data( 2331 scoped_ptr<QuicPacket> data(
2312 framer_.ConstructFrameDataPacket(header, frames).packet); 2332 framer_.ConstructFrameDataPacket(header, frames).packet);
2313 ASSERT_TRUE(data != NULL); 2333 ASSERT_TRUE(data != NULL);
2314 2334
2315 test::CompareCharArraysWithHexError("constructed packet", 2335 test::CompareCharArraysWithHexError("constructed packet",
2316 data->data(), data->length(), 2336 data->data(), data->length(),
2317 AsChars(packet), arraysize(packet)); 2337 AsChars(packet), arraysize(packet));
2318 } 2338 }
2319 2339
2320 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { 2340 TEST_P(QuicFramerTest, ConstructStreamFramePacket) {
2321 QuicPacketHeader header; 2341 QuicPacketHeader header;
2322 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2342 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2323 header.public_header.reset_flag = false; 2343 header.public_header.reset_flag = false;
2324 header.public_header.version_flag = false; 2344 header.public_header.version_flag = false;
2325 header.fec_flag = false; 2345 header.fec_flag = false;
2326 header.entropy_flag = true; 2346 header.entropy_flag = true;
2327 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 2347 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC);
2328 header.fec_group = 0; 2348 header.fec_group = 0;
2329 2349
2330 QuicStreamFrame stream_frame; 2350 QuicStreamFrame stream_frame;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2367 2387
2368 scoped_ptr<QuicPacket> data( 2388 scoped_ptr<QuicPacket> data(
2369 framer_.ConstructFrameDataPacket(header, frames).packet); 2389 framer_.ConstructFrameDataPacket(header, frames).packet);
2370 ASSERT_TRUE(data != NULL); 2390 ASSERT_TRUE(data != NULL);
2371 2391
2372 test::CompareCharArraysWithHexError("constructed packet", 2392 test::CompareCharArraysWithHexError("constructed packet",
2373 data->data(), data->length(), 2393 data->data(), data->length(),
2374 AsChars(packet), arraysize(packet)); 2394 AsChars(packet), arraysize(packet));
2375 } 2395 }
2376 2396
2377 TEST_F(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) { 2397 TEST_P(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) {
2378 QuicPacketHeader header; 2398 QuicPacketHeader header;
2379 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2399 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2380 header.public_header.reset_flag = false; 2400 header.public_header.reset_flag = false;
2381 header.public_header.version_flag = true; 2401 header.public_header.version_flag = true;
2382 header.fec_flag = false; 2402 header.fec_flag = false;
2383 header.entropy_flag = true; 2403 header.entropy_flag = true;
2384 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 2404 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC);
2385 header.fec_group = 0; 2405 header.fec_group = 0;
2386 2406
2387 QuicStreamFrame stream_frame; 2407 QuicStreamFrame stream_frame;
2388 stream_frame.stream_id = 0x01020304; 2408 stream_frame.stream_id = 0x01020304;
2389 stream_frame.fin = true; 2409 stream_frame.fin = true;
2390 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 2410 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654);
2391 stream_frame.data = "hello world!"; 2411 stream_frame.data = "hello world!";
2392 2412
2393 QuicFrames frames; 2413 QuicFrames frames;
2394 frames.push_back(QuicFrame(&stream_frame)); 2414 frames.push_back(QuicFrame(&stream_frame));
2395 2415
2416 // Set a specific version.
2417 framer_.set_version(QUIC_VERSION_6);
2396 unsigned char packet[] = { 2418 unsigned char packet[] = {
2397 // public flags (version, 8 byte guid) 2419 // public flags (version, 8 byte guid)
2398 0x3D, 2420 0x3D,
2399 // guid 2421 // guid
2400 0x10, 0x32, 0x54, 0x76, 2422 0x10, 0x32, 0x54, 0x76,
2401 0x98, 0xBA, 0xDC, 0xFE, 2423 0x98, 0xBA, 0xDC, 0xFE,
2402 // version tag 2424 // version tag
2403 'Q', '0', '0', '6', 2425 'Q', '0', '0', '6',
2404 // packet sequence number 2426 // packet sequence number
2405 0xBC, 0x9A, 0x78, 0x56, 2427 0xBC, 0x9A, 0x78, 0x56,
(...skipping 21 matching lines...) Expand all
2427 QuicFramerPeer::SetIsServer(&framer_, false); 2449 QuicFramerPeer::SetIsServer(&framer_, false);
2428 scoped_ptr<QuicPacket> data( 2450 scoped_ptr<QuicPacket> data(
2429 framer_.ConstructFrameDataPacket(header, frames).packet); 2451 framer_.ConstructFrameDataPacket(header, frames).packet);
2430 ASSERT_TRUE(data != NULL); 2452 ASSERT_TRUE(data != NULL);
2431 2453
2432 test::CompareCharArraysWithHexError("constructed packet", 2454 test::CompareCharArraysWithHexError("constructed packet",
2433 data->data(), data->length(), 2455 data->data(), data->length(),
2434 AsChars(packet), arraysize(packet)); 2456 AsChars(packet), arraysize(packet));
2435 } 2457 }
2436 2458
2437 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { 2459 TEST_P(QuicFramerTest, ConstructVersionNegotiationPacket) {
2438 QuicPacketPublicHeader header; 2460 QuicPacketPublicHeader header;
2439 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2461 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2440 header.reset_flag = false; 2462 header.reset_flag = false;
2441 header.version_flag = true; 2463 header.version_flag = true;
2442 2464
2443 unsigned char packet[] = { 2465 unsigned char packet[] = {
2444 // public flags (version, 8 byte guid) 2466 // public flags (version, 8 byte guid)
2445 0x3D, 2467 0x3D,
2446 // guid 2468 // guid
2447 0x10, 0x32, 0x54, 0x76, 2469 0x10, 0x32, 0x54, 0x76,
2448 0x98, 0xBA, 0xDC, 0xFE, 2470 0x98, 0xBA, 0xDC, 0xFE,
2449 // version tag 2471 // version tag
2450 'Q', '0', '0', '6', 2472 'Q', '0', '0', '6',
2451 'Q', '2', '.', '0', 2473 // 'Q', '0', '0', '7',
2452 }; 2474 };
2453 2475
2454 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); 2476 QuicVersionVector versions;
2455 QuicTagVector versions; 2477 versions.push_back(QUIC_VERSION_6);
2456 versions.push_back(kQuicVersion1); 2478 // versions.push_back(QUIC_VERSION_7);
2457 versions.push_back(kQuicVersion2);
2458 scoped_ptr<QuicEncryptedPacket> data( 2479 scoped_ptr<QuicEncryptedPacket> data(
2459 framer_.ConstructVersionNegotiationPacket(header, versions)); 2480 framer_.ConstructVersionNegotiationPacket(header, versions));
2460 2481
2461 test::CompareCharArraysWithHexError("constructed packet", 2482 test::CompareCharArraysWithHexError("constructed packet",
2462 data->data(), data->length(), 2483 data->data(), data->length(),
2463 AsChars(packet), arraysize(packet)); 2484 AsChars(packet), arraysize(packet));
2464 } 2485 }
2465 2486
2466 TEST_F(QuicFramerTest, ConstructAckFramePacket) { 2487 TEST_P(QuicFramerTest, ConstructAckFramePacket) {
2467 QuicPacketHeader header; 2488 QuicPacketHeader header;
2468 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2489 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2469 header.public_header.reset_flag = false; 2490 header.public_header.reset_flag = false;
2470 header.public_header.version_flag = false; 2491 header.public_header.version_flag = false;
2471 header.fec_flag = false; 2492 header.fec_flag = false;
2472 header.entropy_flag = true; 2493 header.entropy_flag = true;
2473 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2494 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2474 header.fec_group = 0; 2495 header.fec_group = 0;
2475 2496
2476 QuicAckFrame ack_frame; 2497 QuicAckFrame ack_frame;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2520 2541
2521 scoped_ptr<QuicPacket> data( 2542 scoped_ptr<QuicPacket> data(
2522 framer_.ConstructFrameDataPacket(header, frames).packet); 2543 framer_.ConstructFrameDataPacket(header, frames).packet);
2523 ASSERT_TRUE(data != NULL); 2544 ASSERT_TRUE(data != NULL);
2524 2545
2525 test::CompareCharArraysWithHexError("constructed packet", 2546 test::CompareCharArraysWithHexError("constructed packet",
2526 data->data(), data->length(), 2547 data->data(), data->length(),
2527 AsChars(packet), arraysize(packet)); 2548 AsChars(packet), arraysize(packet));
2528 } 2549 }
2529 2550
2530 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) { 2551 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) {
2531 QuicPacketHeader header; 2552 QuicPacketHeader header;
2532 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2553 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2533 header.public_header.reset_flag = false; 2554 header.public_header.reset_flag = false;
2534 header.public_header.version_flag = false; 2555 header.public_header.version_flag = false;
2535 header.fec_flag = false; 2556 header.fec_flag = false;
2536 header.entropy_flag = false; 2557 header.entropy_flag = false;
2537 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2558 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2538 header.fec_group = 0; 2559 header.fec_group = 0;
2539 2560
2540 QuicCongestionFeedbackFrame congestion_feedback_frame; 2561 QuicCongestionFeedbackFrame congestion_feedback_frame;
(...skipping 28 matching lines...) Expand all
2569 2590
2570 scoped_ptr<QuicPacket> data( 2591 scoped_ptr<QuicPacket> data(
2571 framer_.ConstructFrameDataPacket(header, frames).packet); 2592 framer_.ConstructFrameDataPacket(header, frames).packet);
2572 ASSERT_TRUE(data != NULL); 2593 ASSERT_TRUE(data != NULL);
2573 2594
2574 test::CompareCharArraysWithHexError("constructed packet", 2595 test::CompareCharArraysWithHexError("constructed packet",
2575 data->data(), data->length(), 2596 data->data(), data->length(),
2576 AsChars(packet), arraysize(packet)); 2597 AsChars(packet), arraysize(packet));
2577 } 2598 }
2578 2599
2579 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) { 2600 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) {
2580 QuicPacketHeader header; 2601 QuicPacketHeader header;
2581 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2602 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2582 header.public_header.reset_flag = false; 2603 header.public_header.reset_flag = false;
2583 header.public_header.version_flag = false; 2604 header.public_header.version_flag = false;
2584 header.fec_flag = false; 2605 header.fec_flag = false;
2585 header.entropy_flag = false; 2606 header.entropy_flag = false;
2586 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2607 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2587 header.fec_group = 0; 2608 header.fec_group = 0;
2588 2609
2589 QuicCongestionFeedbackFrame frame; 2610 QuicCongestionFeedbackFrame frame;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2642 2663
2643 scoped_ptr<QuicPacket> data( 2664 scoped_ptr<QuicPacket> data(
2644 framer_.ConstructFrameDataPacket(header, frames).packet); 2665 framer_.ConstructFrameDataPacket(header, frames).packet);
2645 ASSERT_TRUE(data != NULL); 2666 ASSERT_TRUE(data != NULL);
2646 2667
2647 test::CompareCharArraysWithHexError("constructed packet", 2668 test::CompareCharArraysWithHexError("constructed packet",
2648 data->data(), data->length(), 2669 data->data(), data->length(),
2649 AsChars(packet), arraysize(packet)); 2670 AsChars(packet), arraysize(packet));
2650 } 2671 }
2651 2672
2652 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) { 2673 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) {
2653 QuicPacketHeader header; 2674 QuicPacketHeader header;
2654 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2675 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2655 header.public_header.reset_flag = false; 2676 header.public_header.reset_flag = false;
2656 header.public_header.version_flag = false; 2677 header.public_header.version_flag = false;
2657 header.fec_flag = false; 2678 header.fec_flag = false;
2658 header.entropy_flag = false; 2679 header.entropy_flag = false;
2659 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2680 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2660 header.fec_group = 0; 2681 header.fec_group = 0;
2661 2682
2662 QuicCongestionFeedbackFrame congestion_feedback_frame; 2683 QuicCongestionFeedbackFrame congestion_feedback_frame;
(...skipping 26 matching lines...) Expand all
2689 2710
2690 scoped_ptr<QuicPacket> data( 2711 scoped_ptr<QuicPacket> data(
2691 framer_.ConstructFrameDataPacket(header, frames).packet); 2712 framer_.ConstructFrameDataPacket(header, frames).packet);
2692 ASSERT_TRUE(data != NULL); 2713 ASSERT_TRUE(data != NULL);
2693 2714
2694 test::CompareCharArraysWithHexError("constructed packet", 2715 test::CompareCharArraysWithHexError("constructed packet",
2695 data->data(), data->length(), 2716 data->data(), data->length(),
2696 AsChars(packet), arraysize(packet)); 2717 AsChars(packet), arraysize(packet));
2697 } 2718 }
2698 2719
2699 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) { 2720 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) {
2700 QuicPacketHeader header; 2721 QuicPacketHeader header;
2701 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2722 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2702 header.public_header.reset_flag = false; 2723 header.public_header.reset_flag = false;
2703 header.public_header.version_flag = false; 2724 header.public_header.version_flag = false;
2704 header.fec_flag = false; 2725 header.fec_flag = false;
2705 header.entropy_flag = false; 2726 header.entropy_flag = false;
2706 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2727 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2707 header.fec_group = 0; 2728 header.fec_group = 0;
2708 2729
2709 QuicCongestionFeedbackFrame congestion_feedback_frame; 2730 QuicCongestionFeedbackFrame congestion_feedback_frame;
2710 congestion_feedback_frame.type = 2731 congestion_feedback_frame.type =
2711 static_cast<CongestionFeedbackType>(kFixRate + 1); 2732 static_cast<CongestionFeedbackType>(kFixRate + 1);
2712 2733
2713 QuicFrames frames; 2734 QuicFrames frames;
2714 frames.push_back(QuicFrame(&congestion_feedback_frame)); 2735 frames.push_back(QuicFrame(&congestion_feedback_frame));
2715 2736
2716 scoped_ptr<QuicPacket> data( 2737 scoped_ptr<QuicPacket> data(
2717 framer_.ConstructFrameDataPacket(header, frames).packet); 2738 framer_.ConstructFrameDataPacket(header, frames).packet);
2718 ASSERT_TRUE(data == NULL); 2739 ASSERT_TRUE(data == NULL);
2719 } 2740 }
2720 2741
2721 TEST_F(QuicFramerTest, ConstructRstFramePacket) { 2742 TEST_P(QuicFramerTest, ConstructRstFramePacket) {
2722 QuicPacketHeader header; 2743 QuicPacketHeader header;
2723 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2744 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2724 header.public_header.reset_flag = false; 2745 header.public_header.reset_flag = false;
2725 header.public_header.version_flag = false; 2746 header.public_header.version_flag = false;
2726 header.fec_flag = false; 2747 header.fec_flag = false;
2727 header.entropy_flag = false; 2748 header.entropy_flag = false;
2728 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2749 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2729 header.fec_group = 0; 2750 header.fec_group = 0;
2730 2751
2731 QuicRstStreamFrame rst_frame; 2752 QuicRstStreamFrame rst_frame;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2765 2786
2766 scoped_ptr<QuicPacket> data( 2787 scoped_ptr<QuicPacket> data(
2767 framer_.ConstructFrameDataPacket(header, frames).packet); 2788 framer_.ConstructFrameDataPacket(header, frames).packet);
2768 ASSERT_TRUE(data != NULL); 2789 ASSERT_TRUE(data != NULL);
2769 2790
2770 test::CompareCharArraysWithHexError("constructed packet", 2791 test::CompareCharArraysWithHexError("constructed packet",
2771 data->data(), data->length(), 2792 data->data(), data->length(),
2772 AsChars(packet), arraysize(packet)); 2793 AsChars(packet), arraysize(packet));
2773 } 2794 }
2774 2795
2775 TEST_F(QuicFramerTest, ConstructCloseFramePacket) { 2796 TEST_P(QuicFramerTest, ConstructCloseFramePacket) {
2776 QuicPacketHeader header; 2797 QuicPacketHeader header;
2777 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2798 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2778 header.public_header.reset_flag = false; 2799 header.public_header.reset_flag = false;
2779 header.public_header.version_flag = false; 2800 header.public_header.version_flag = false;
2780 header.fec_flag = false; 2801 header.fec_flag = false;
2781 header.entropy_flag = true; 2802 header.entropy_flag = true;
2782 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2803 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2783 header.fec_group = 0; 2804 header.fec_group = 0;
2784 2805
2785 QuicConnectionCloseFrame close_frame; 2806 QuicConnectionCloseFrame close_frame;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2842 2863
2843 scoped_ptr<QuicPacket> data( 2864 scoped_ptr<QuicPacket> data(
2844 framer_.ConstructFrameDataPacket(header, frames).packet); 2865 framer_.ConstructFrameDataPacket(header, frames).packet);
2845 ASSERT_TRUE(data != NULL); 2866 ASSERT_TRUE(data != NULL);
2846 2867
2847 test::CompareCharArraysWithHexError("constructed packet", 2868 test::CompareCharArraysWithHexError("constructed packet",
2848 data->data(), data->length(), 2869 data->data(), data->length(),
2849 AsChars(packet), arraysize(packet)); 2870 AsChars(packet), arraysize(packet));
2850 } 2871 }
2851 2872
2852 TEST_F(QuicFramerTest, ConstructGoAwayPacket) { 2873 TEST_P(QuicFramerTest, ConstructGoAwayPacket) {
2853 QuicPacketHeader header; 2874 QuicPacketHeader header;
2854 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2875 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2855 header.public_header.reset_flag = false; 2876 header.public_header.reset_flag = false;
2856 header.public_header.version_flag = false; 2877 header.public_header.version_flag = false;
2857 header.fec_flag = false; 2878 header.fec_flag = false;
2858 header.entropy_flag = true; 2879 header.entropy_flag = true;
2859 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2880 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2860 header.fec_group = 0; 2881 header.fec_group = 0;
2861 2882
2862 QuicGoAwayFrame goaway_frame; 2883 QuicGoAwayFrame goaway_frame;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2896 2917
2897 scoped_ptr<QuicPacket> data( 2918 scoped_ptr<QuicPacket> data(
2898 framer_.ConstructFrameDataPacket(header, frames).packet); 2919 framer_.ConstructFrameDataPacket(header, frames).packet);
2899 ASSERT_TRUE(data != NULL); 2920 ASSERT_TRUE(data != NULL);
2900 2921
2901 test::CompareCharArraysWithHexError("constructed packet", 2922 test::CompareCharArraysWithHexError("constructed packet",
2902 data->data(), data->length(), 2923 data->data(), data->length(),
2903 AsChars(packet), arraysize(packet)); 2924 AsChars(packet), arraysize(packet));
2904 } 2925 }
2905 2926
2906 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { 2927 TEST_P(QuicFramerTest, ConstructPublicResetPacket) {
2907 QuicPublicResetPacket reset_packet; 2928 QuicPublicResetPacket reset_packet;
2908 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2929 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2909 reset_packet.public_header.reset_flag = true; 2930 reset_packet.public_header.reset_flag = true;
2910 reset_packet.public_header.version_flag = false; 2931 reset_packet.public_header.version_flag = false;
2911 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); 2932 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC);
2912 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); 2933 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789);
2913 2934
2914 unsigned char packet[] = { 2935 unsigned char packet[] = {
2915 // public flags (public reset, 8 byte GUID) 2936 // public flags (public reset, 8 byte GUID)
2916 0x3E, 2937 0x3E,
(...skipping 10 matching lines...) Expand all
2927 2948
2928 scoped_ptr<QuicEncryptedPacket> data( 2949 scoped_ptr<QuicEncryptedPacket> data(
2929 framer_.ConstructPublicResetPacket(reset_packet)); 2950 framer_.ConstructPublicResetPacket(reset_packet));
2930 ASSERT_TRUE(data != NULL); 2951 ASSERT_TRUE(data != NULL);
2931 2952
2932 test::CompareCharArraysWithHexError("constructed packet", 2953 test::CompareCharArraysWithHexError("constructed packet",
2933 data->data(), data->length(), 2954 data->data(), data->length(),
2934 AsChars(packet), arraysize(packet)); 2955 AsChars(packet), arraysize(packet));
2935 } 2956 }
2936 2957
2937 TEST_F(QuicFramerTest, ConstructFecPacket) { 2958 TEST_P(QuicFramerTest, ConstructFecPacket) {
2938 QuicPacketHeader header; 2959 QuicPacketHeader header;
2939 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2960 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2940 header.public_header.reset_flag = false; 2961 header.public_header.reset_flag = false;
2941 header.public_header.version_flag = false; 2962 header.public_header.version_flag = false;
2942 header.fec_flag = true; 2963 header.fec_flag = true;
2943 header.entropy_flag = true; 2964 header.entropy_flag = true;
2944 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); 2965 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC));
2945 header.is_in_fec_group = IN_FEC_GROUP; 2966 header.is_in_fec_group = IN_FEC_GROUP;
2946 header.fec_group = GG_UINT64_C(0x123456789ABB);; 2967 header.fec_group = GG_UINT64_C(0x123456789ABB);;
2947 2968
(...skipping 24 matching lines...) Expand all
2972 2993
2973 scoped_ptr<QuicPacket> data( 2994 scoped_ptr<QuicPacket> data(
2974 framer_.ConstructFecPacket(header, fec_data).packet); 2995 framer_.ConstructFecPacket(header, fec_data).packet);
2975 ASSERT_TRUE(data != NULL); 2996 ASSERT_TRUE(data != NULL);
2976 2997
2977 test::CompareCharArraysWithHexError("constructed packet", 2998 test::CompareCharArraysWithHexError("constructed packet",
2978 data->data(), data->length(), 2999 data->data(), data->length(),
2979 AsChars(packet), arraysize(packet)); 3000 AsChars(packet), arraysize(packet));
2980 } 3001 }
2981 3002
2982 TEST_F(QuicFramerTest, EncryptPacket) { 3003 TEST_P(QuicFramerTest, EncryptPacket) {
2983 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 3004 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
2984 unsigned char packet[] = { 3005 unsigned char packet[] = {
2985 // public flags (8 byte guid) 3006 // public flags (8 byte guid)
2986 0x3C, 3007 0x3C,
2987 // guid 3008 // guid
2988 0x10, 0x32, 0x54, 0x76, 3009 0x10, 0x32, 0x54, 0x76,
2989 0x98, 0xBA, 0xDC, 0xFE, 3010 0x98, 0xBA, 0xDC, 0xFE,
2990 // packet sequence number 3011 // packet sequence number
2991 0xBC, 0x9A, 0x78, 0x56, 3012 0xBC, 0x9A, 0x78, 0x56,
2992 0x34, 0x12, 3013 0x34, 0x12,
(...skipping 13 matching lines...) Expand all
3006 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, 3027 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
3007 PACKET_8BYTE_GUID, !kIncludeVersion, 3028 PACKET_8BYTE_GUID, !kIncludeVersion,
3008 PACKET_6BYTE_SEQUENCE_NUMBER)); 3029 PACKET_6BYTE_SEQUENCE_NUMBER));
3009 scoped_ptr<QuicEncryptedPacket> encrypted( 3030 scoped_ptr<QuicEncryptedPacket> encrypted(
3010 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 3031 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
3011 3032
3012 ASSERT_TRUE(encrypted.get() != NULL); 3033 ASSERT_TRUE(encrypted.get() != NULL);
3013 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 3034 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
3014 } 3035 }
3015 3036
3016 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { 3037 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
3017 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 3038 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
3018 unsigned char packet[] = { 3039 unsigned char packet[] = {
3019 // public flags (version, 8 byte guid) 3040 // public flags (version, 8 byte guid)
3020 0x3D, 3041 0x3D,
3021 // guid 3042 // guid
3022 0x10, 0x32, 0x54, 0x76, 3043 0x10, 0x32, 0x54, 0x76,
3023 0x98, 0xBA, 0xDC, 0xFE, 3044 0x98, 0xBA, 0xDC, 0xFE,
3024 // version tag 3045 // version tag
3025 'Q', '.', '1', '0', 3046 'Q', '.', '1', '0',
3026 // packet sequence number 3047 // packet sequence number
(...skipping 18 matching lines...) Expand all
3045 scoped_ptr<QuicEncryptedPacket> encrypted( 3066 scoped_ptr<QuicEncryptedPacket> encrypted(
3046 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 3067 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
3047 3068
3048 ASSERT_TRUE(encrypted.get() != NULL); 3069 ASSERT_TRUE(encrypted.get() != NULL);
3049 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 3070 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
3050 } 3071 }
3051 3072
3052 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ 3073 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/
3053 // lands. Currently this is causing valgrind problems, but it should be 3074 // lands. Currently this is causing valgrind problems, but it should be
3054 // fixed in the followup CL. 3075 // fixed in the followup CL.
3055 TEST_F(QuicFramerTest, DISABLED_CalculateLargestReceived) { 3076 TEST_P(QuicFramerTest, DISABLED_CalculateLargestReceived) {
3056 SequenceNumberSet missing; 3077 SequenceNumberSet missing;
3057 missing.insert(1); 3078 missing.insert(1);
3058 missing.insert(5); 3079 missing.insert(5);
3059 missing.insert(7); 3080 missing.insert(7);
3060 3081
3061 // These two we just walk to the next gap, and return the largest seen. 3082 // These two we just walk to the next gap, and return the largest seen.
3062 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); 3083 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1)));
3063 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5))); 3084 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5)));
3064 3085
3065 missing.insert(2); 3086 missing.insert(2);
3066 // For 1, we can't go forward as 2 would be implicitly acked so we return the 3087 // For 1, we can't go forward as 2 would be implicitly acked so we return the
3067 // largest missing packet. 3088 // largest missing packet.
3068 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); 3089 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1)));
3069 // For 2, we've seen 3 and 4, so can admit to a largest observed. 3090 // For 2, we've seen 3 and 4, so can admit to a largest observed.
3070 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2))); 3091 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2)));
3071 } 3092 }
3072 3093
3073 // TODO(rch) enable after landing the revised truncation CL. 3094 // TODO(rch) enable after landing the revised truncation CL.
3074 TEST_F(QuicFramerTest, DISABLED_Truncation) { 3095 TEST_P(QuicFramerTest, DISABLED_Truncation) {
3075 QuicPacketHeader header; 3096 QuicPacketHeader header;
3076 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 3097 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3077 header.public_header.reset_flag = false; 3098 header.public_header.reset_flag = false;
3078 header.public_header.version_flag = false; 3099 header.public_header.version_flag = false;
3079 header.fec_flag = false; 3100 header.fec_flag = false;
3080 header.entropy_flag = false; 3101 header.entropy_flag = false;
3081 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3102 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3082 header.fec_group = 0; 3103 header.fec_group = 0;
3083 3104
3084 QuicConnectionCloseFrame close_frame; 3105 QuicConnectionCloseFrame close_frame;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
3120 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, 3141 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
3121 *raw_close_packet)); 3142 *raw_close_packet));
3122 3143
3123 // Now make sure we can turn our ack packet back into an ack frame 3144 // Now make sure we can turn our ack packet back into an ack frame
3124 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); 3145 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
3125 3146
3126 // And do the same for the close frame. 3147 // And do the same for the close frame.
3127 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); 3148 ASSERT_TRUE(framer_.ProcessPacket(*close_packet));
3128 } 3149 }
3129 3150
3130 TEST_F(QuicFramerTest, CleanTruncation) { 3151 TEST_P(QuicFramerTest, CleanTruncation) {
3131 QuicPacketHeader header; 3152 QuicPacketHeader header;
3132 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 3153 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3133 header.public_header.reset_flag = false; 3154 header.public_header.reset_flag = false;
3134 header.public_header.version_flag = false; 3155 header.public_header.version_flag = false;
3135 header.fec_flag = false; 3156 header.fec_flag = false;
3136 header.entropy_flag = true; 3157 header.entropy_flag = true;
3137 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3158 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3138 header.fec_group = 0; 3159 header.fec_group = 0;
3139 3160
3140 QuicConnectionCloseFrame close_frame; 3161 QuicConnectionCloseFrame close_frame;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3200 frame.connection_close_frame = &visitor_.connection_close_frame_; 3221 frame.connection_close_frame = &visitor_.connection_close_frame_;
3201 frames.push_back(frame); 3222 frames.push_back(frame);
3202 3223
3203 original_raw_length = raw_close_packet->length(); 3224 original_raw_length = raw_close_packet->length();
3204 raw_close_packet.reset( 3225 raw_close_packet.reset(
3205 framer_.ConstructFrameDataPacket(header, frames).packet); 3226 framer_.ConstructFrameDataPacket(header, frames).packet);
3206 ASSERT_TRUE(raw_ack_packet != NULL); 3227 ASSERT_TRUE(raw_ack_packet != NULL);
3207 EXPECT_EQ(original_raw_length, raw_close_packet->length()); 3228 EXPECT_EQ(original_raw_length, raw_close_packet->length());
3208 } 3229 }
3209 3230
3210 TEST_F(QuicFramerTest, EntropyFlagTest) { 3231 TEST_P(QuicFramerTest, EntropyFlagTest) {
3211 unsigned char packet[] = { 3232 unsigned char packet[] = {
3212 // public flags (8 byte guid) 3233 // public flags (8 byte guid)
3213 0x3C, 3234 0x3C,
3214 // guid 3235 // guid
3215 0x10, 0x32, 0x54, 0x76, 3236 0x10, 0x32, 0x54, 0x76,
3216 0x98, 0xBA, 0xDC, 0xFE, 3237 0x98, 0xBA, 0xDC, 0xFE,
3217 // packet sequence number 3238 // packet sequence number
3218 0xBC, 0x9A, 0x78, 0x56, 3239 0xBC, 0x9A, 0x78, 0x56,
3219 0x34, 0x12, 3240 0x34, 0x12,
3220 // private flags (Entropy) 3241 // private flags (Entropy)
(...skipping 18 matching lines...) Expand all
3239 3260
3240 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3261 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3241 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3262 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3263 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3243 ASSERT_TRUE(visitor_.header_.get()); 3264 ASSERT_TRUE(visitor_.header_.get());
3244 EXPECT_TRUE(visitor_.header_->entropy_flag); 3265 EXPECT_TRUE(visitor_.header_->entropy_flag);
3245 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 3266 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
3246 EXPECT_FALSE(visitor_.header_->fec_flag); 3267 EXPECT_FALSE(visitor_.header_->fec_flag);
3247 }; 3268 };
3248 3269
3249 TEST_F(QuicFramerTest, FecEntropyTest) { 3270 TEST_P(QuicFramerTest, FecEntropyTest) {
3250 unsigned char packet[] = { 3271 unsigned char packet[] = {
3251 // public flags (8 byte guid) 3272 // public flags (8 byte guid)
3252 0x3C, 3273 0x3C,
3253 // guid 3274 // guid
3254 0x10, 0x32, 0x54, 0x76, 3275 0x10, 0x32, 0x54, 0x76,
3255 0x98, 0xBA, 0xDC, 0xFE, 3276 0x98, 0xBA, 0xDC, 0xFE,
3256 // packet sequence number 3277 // packet sequence number
3257 0xBC, 0x9A, 0x78, 0x56, 3278 0xBC, 0x9A, 0x78, 0x56,
3258 0x34, 0x12, 3279 0x34, 0x12,
3259 // private flags (Entropy & fec group & FEC) 3280 // private flags (Entropy & fec group & FEC)
(...skipping 20 matching lines...) Expand all
3280 3301
3281 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3302 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3282 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3303 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3283 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3304 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3284 ASSERT_TRUE(visitor_.header_.get()); 3305 ASSERT_TRUE(visitor_.header_.get());
3285 EXPECT_TRUE(visitor_.header_->fec_flag); 3306 EXPECT_TRUE(visitor_.header_->fec_flag);
3286 EXPECT_TRUE(visitor_.header_->entropy_flag); 3307 EXPECT_TRUE(visitor_.header_->entropy_flag);
3287 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 3308 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
3288 }; 3309 };
3289 3310
3290 TEST_F(QuicFramerTest, StopPacketProcessing) { 3311 TEST_P(QuicFramerTest, StopPacketProcessing) {
3291 unsigned char packet[] = { 3312 unsigned char packet[] = {
3292 // public flags (8 byte guid) 3313 // public flags (8 byte guid)
3293 0x3C, 3314 0x3C,
3294 // guid 3315 // guid
3295 0x10, 0x32, 0x54, 0x76, 3316 0x10, 0x32, 0x54, 0x76,
3296 0x98, 0xBA, 0xDC, 0xFE, 3317 0x98, 0xBA, 0xDC, 0xFE,
3297 // packet sequence number 3318 // packet sequence number
3298 0xBC, 0x9A, 0x78, 0x56, 3319 0xBC, 0x9A, 0x78, 0x56,
3299 0x34, 0x12, 3320 0x34, 0x12,
3300 // Entropy 3321 // Entropy
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
3341 EXPECT_CALL(visitor, OnPacketHeader(_)); 3362 EXPECT_CALL(visitor, OnPacketHeader(_));
3342 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); 3363 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false));
3343 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); 3364 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0);
3344 EXPECT_CALL(visitor, OnPacketComplete()); 3365 EXPECT_CALL(visitor, OnPacketComplete());
3345 3366
3346 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3367 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3347 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3368 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3369 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3349 } 3370 }
3350 3371
3351 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { 3372 TEST_P(QuicFramerTest, ConnectionCloseWithInvalidAck) {
3352 unsigned char packet[] = { 3373 unsigned char packet[] = {
3353 // public flags (8 byte guid) 3374 // public flags (8 byte guid)
3354 0x3C, 3375 0x3C,
3355 // guid 3376 // guid
3356 0x10, 0x32, 0x54, 0x76, 3377 0x10, 0x32, 0x54, 0x76,
3357 0x98, 0xBA, 0xDC, 0xFE, 3378 0x98, 0xBA, 0xDC, 0xFE,
3358 // packet sequence number 3379 // packet sequence number
3359 0xBC, 0x9A, 0x78, 0x56, 3380 0xBC, 0x9A, 0x78, 0x56,
3360 0x34, 0x12, 3381 0x34, 0x12,
3361 // private flags 3382 // private flags
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3401 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); 3422 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0);
3402 EXPECT_CALL(visitor, OnPacketComplete()); 3423 EXPECT_CALL(visitor, OnPacketComplete());
3403 3424
3404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3426 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3427 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3407 } 3428 }
3408 3429
3409 } // namespace test 3430 } // namespace test
3410 } // namespace net 3431 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698