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

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

Issue 11439003: Revert 171096 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <map>
7 #include <string>
8 #include <vector> 6 #include <vector>
9 7
10 #include "base/hash_tables.h" 8 #include "base/hash_tables.h"
11 #include "base/logging.h" 9 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
13 #include "base/port.h" 11 #include "base/port.h"
14 #include "base/stl_util.h" 12 #include "base/stl_util.h"
15 #include "net/quic/quic_framer.h" 13 #include "net/quic/quic_framer.h"
16 #include "net/quic/quic_protocol.h" 14 #include "net/quic/quic_protocol.h"
17 #include "net/quic/quic_utils.h" 15 #include "net/quic/quic_utils.h"
18 #include "net/quic/test_tools/quic_test_utils.h" 16 #include "net/quic/test_tools/quic_test_utils.h"
19 17
20 using base::hash_set; 18 using base::hash_set;
21 using base::StringPiece; 19 using base::StringPiece;
22 using std::map;
23 using std::string; 20 using std::string;
24 using std::vector; 21 using std::vector;
25 22
26 namespace net { 23 namespace net {
27 24
28 namespace test { 25 namespace test {
29 26
30 class TestEncrypter : public QuicEncrypter { 27 class TestEncrypter : public QuicEncrypter {
31 public: 28 public:
32 virtual ~TestEncrypter() {} 29 virtual ~TestEncrypter() {}
(...skipping 21 matching lines...) Expand all
54 associated_data_ = associated_data.as_string(); 51 associated_data_ = associated_data.as_string();
55 ciphertext_ = ciphertext.as_string(); 52 ciphertext_ = ciphertext.as_string();
56 return new QuicData(ciphertext.data(), ciphertext.length()); 53 return new QuicData(ciphertext.data(), ciphertext.length());
57 } 54 }
58 string associated_data_; 55 string associated_data_;
59 string ciphertext_; 56 string ciphertext_;
60 }; 57 };
61 58
62 // The offset of congestion info in our tests, given the size of our usual ack 59 // The offset of congestion info in our tests, given the size of our usual ack
63 // frame. This does NOT work for all packets. 60 // frame. This does NOT work for all packets.
64 const int kCongestionInfoOffset = kPacketHeaderSize + 33; 61 const int kCongestionInfoOffset = kPacketHeaderSize + 54;
65 62
66 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { 63 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
67 public: 64 public:
68 TestQuicVisitor() 65 TestQuicVisitor()
69 : error_count_(0), 66 : error_count_(0),
70 packet_count_(0), 67 packet_count_(0),
71 frame_count_(0), 68 frame_count_(0),
72 fec_count_(0), 69 fec_count_(0),
73 complete_packets_(0), 70 complete_packets_(0),
74 revived_packets_(0), 71 revived_packets_(0),
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 0x34, 0x12, 531 0x34, 0x12,
535 // flags 532 // flags
536 0x00, 533 0x00,
537 // fec group 534 // fec group
538 0x00, 535 0x00,
539 536
540 // frame count 537 // frame count
541 0x01, 538 0x01,
542 // frame type (ack frame) 539 // frame type (ack frame)
543 0x02, 540 0x02,
544 // num_acked_packets 541 // largest received packet sequence number
545 0x03, 542 0xBC, 0x9A, 0x78, 0x56,
546 // smallest received packet sequence number 543 0x34, 0x12,
544 // time delta
545 0x87, 0x96, 0xA5, 0xB4,
546 0xC3, 0xD2, 0xE1, 0x07,
547 // num_unacked_packets
548 0x02,
549 // unacked packet sequence number
547 0xBA, 0x9A, 0x78, 0x56, 550 0xBA, 0x9A, 0x78, 0x56,
548 0x34, 0x12, 551 0x34, 0x12,
549 // time 552 // unacked packet sequence number
550 0x87, 0x96, 0xA5, 0xB4, 553 0xBB, 0x9A, 0x78, 0x56,
551 0xC3, 0xD2, 0xE1, 0x07, 554 0x34, 0x12,
552 // sequence delta
553 0x01,
554 // time delta
555 0x01, 0x00, 0x00, 0x00,
556 // sequence delta (skip one packet)
557 0x03,
558 // time delta
559 0x02, 0x00, 0x00, 0x00,
560 // least packet sequence number awaiting an ack 555 // least packet sequence number awaiting an ack
561 0xA0, 0x9A, 0x78, 0x56, 556 0xA0, 0x9A, 0x78, 0x56,
562 0x34, 0x12, 557 0x34, 0x12,
558 // num non retransmitting packets
559 0x03,
560 // non retransmitting packet sequence number
561 0xAE, 0x9A, 0x78, 0x56,
562 0x34, 0x12,
563 // non retransmitting packet sequence number
564 0xAF, 0x9A, 0x78, 0x56,
565 0x34, 0x12,
566 // non retransmitting packet sequence number
567 0xB0, 0x9A, 0x78, 0x56,
568 0x34, 0x12,
563 // congestion feedback type (none) 569 // congestion feedback type (none)
564 0x00, 570 0x00,
565 }; 571 };
566 572
567 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 573 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
568 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 574 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
569 575
570 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 576 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
571 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 577 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
572 ASSERT_TRUE(visitor_.header_.get()); 578 ASSERT_TRUE(visitor_.header_.get());
573 579
574 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 580 EXPECT_EQ(0u, visitor_.stream_frames_.size());
575 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 581 ASSERT_EQ(1u, visitor_.ack_frames_.size());
576 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 582 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
577 ASSERT_EQ(3u, frame.received_info.received_packet_times.size()); 583 EXPECT_EQ(GG_UINT64_C(0x0123456789ABC),
578 map<QuicPacketSequenceNumber, QuicTime>::const_iterator iter = 584 frame.received_info.largest_received);
579 frame.received_info.received_packet_times.begin(); 585 EXPECT_EQ(QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687)),
580 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first); 586 frame.received_info.time_received);
581 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59687), iter->second);
582 ++iter;
583 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first);
584 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59688), iter->second);
585 ++iter;
586 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first);
587 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59689), iter->second);
588 587
588 const SequenceSet& sequence_nums = frame.received_info.missing_packets;
589 ASSERT_EQ(2u, sequence_nums.size());
590 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABB)));
591 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABA)));
589 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); 592 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
593 ASSERT_EQ(3u, frame.sent_info.non_retransmiting.size());
594 const SequenceSet& non_retrans = frame.sent_info.non_retransmiting;
595 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AB0)));
596 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAF)));
597 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAE)));
590 ASSERT_EQ(kNone, frame.congestion_info.type); 598 ASSERT_EQ(kNone, frame.congestion_info.type);
591 599
592 // Now test framing boundaries 600 // Now test framing boundaries
593 for (size_t i = kPacketHeaderSize; i < kPacketHeaderSize + 34; ++i) { 601 for (size_t i = kPacketHeaderSize; i < kPacketHeaderSize + 55; ++i) {
594 string expected_error; 602 string expected_error;
595 if (i < kPacketHeaderSize + 1) { 603 if (i < kPacketHeaderSize + 1) {
596 expected_error = "Unable to read frame count."; 604 expected_error = "Unable to read frame count.";
597 } else if (i < kPacketHeaderSize + 2) { 605 } else if (i < kPacketHeaderSize + 2) {
598 expected_error = "Unable to read frame type."; 606 expected_error = "Unable to read frame type.";
599 } else if (i < kPacketHeaderSize + 3) { 607 } else if (i < kPacketHeaderSize + 8) {
600 expected_error = "Unable to read num acked packets."; 608 expected_error = "Unable to read largest received.";
601 } else if (i < kPacketHeaderSize + 9) { 609 } else if (i < kPacketHeaderSize + 16) {
602 expected_error = "Unable to read smallest received."; 610 expected_error = "Unable to read time received.";
603 } else if (i < kPacketHeaderSize + 17) { 611 } else if (i < kPacketHeaderSize + 17) {
604 expected_error = "Unable to read time received."; 612 expected_error = "Unable to read num unacked packets.";
605 } else if (i < kPacketHeaderSize + 18) { 613 } else if (i < kPacketHeaderSize + 29) {
606 expected_error = "Unable to read sequence delta in acked packets."; 614 expected_error = "Unable to read sequence number in unacked packets.";
607 } else if (i < kPacketHeaderSize + 22) { 615 } else if (i < kPacketHeaderSize + 35) {
608 expected_error = "Unable to read time delta in acked packets.";
609 } else if (i < kPacketHeaderSize + 23) {
610 expected_error = "Unable to read sequence delta in acked packets.";
611 } else if (i < kPacketHeaderSize + 27) {
612 expected_error = "Unable to read time delta in acked packets.";
613 } else if (i < kPacketHeaderSize + 33) {
614 expected_error = "Unable to read least unacked."; 616 expected_error = "Unable to read least unacked.";
615 } else if (i < kPacketHeaderSize + 34) { 617 } else if (i < kPacketHeaderSize + 36) {
618 expected_error = "Unable to read num non-retransmitting.";
619 } else if (i < kPacketHeaderSize + 54) {
620 expected_error = "Unable to read sequence number in non-retransmitting.";
621 } else if (i < kPacketHeaderSize + 55) {
616 expected_error = "Unable to read congestion info type."; 622 expected_error = "Unable to read congestion info type.";
617 } 623 }
618 624
619 QuicEncryptedPacket encrypted(AsChars(packet), i, false); 625 QuicEncryptedPacket encrypted(AsChars(packet), i, false);
620 EXPECT_FALSE(framer_.ProcessPacket(self_address_, peer_address_, 626 EXPECT_FALSE(framer_.ProcessPacket(self_address_, peer_address_,
621 encrypted)); 627 encrypted));
622 EXPECT_EQ(expected_error, framer_.detailed_error()); 628 EXPECT_EQ(expected_error, framer_.detailed_error());
623 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 629 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
624 } 630 }
625 } 631 }
626 632
627 TEST_F(QuicFramerTest, AckFrameTCP) { 633 TEST_F(QuicFramerTest, AckFrameTCP) {
628 unsigned char packet[] = { 634 unsigned char packet[] = {
629 // guid 635 // guid
630 0x10, 0x32, 0x54, 0x76, 636 0x10, 0x32, 0x54, 0x76,
631 0x98, 0xBA, 0xDC, 0xFE, 637 0x98, 0xBA, 0xDC, 0xFE,
632 // packet id 638 // packet id
633 0xBC, 0x9A, 0x78, 0x56, 639 0xBC, 0x9A, 0x78, 0x56,
634 0x34, 0x12, 640 0x34, 0x12,
635 // flags 641 // flags
636 0x00, 642 0x00,
637 // fec group 643 // fec group
638 0x00, 644 0x00,
639 645
640 // frame count 646 // frame count
641 0x01, 647 0x01,
642 // frame type (ack frame) 648 // frame type (ack frame)
643 0x02, 649 0x02,
644 // num_acked_packets 650 // largest received packet sequence number
645 0x03, 651 0xBC, 0x9A, 0x78, 0x56,
646 // smallest received packet sequence number 652 0x34, 0x12,
653 // time delta
654 0x87, 0x96, 0xA5, 0xB4,
655 0xC3, 0xD2, 0xE1, 0x07,
656 // num_unacked_packets
657 0x02,
658 // unacked packet sequence number
647 0xBA, 0x9A, 0x78, 0x56, 659 0xBA, 0x9A, 0x78, 0x56,
648 0x34, 0x12, 660 0x34, 0x12,
649 // time 661 // unacked packet sequence number
650 0x87, 0x96, 0xA5, 0xB4, 662 0xBB, 0x9A, 0x78, 0x56,
651 0xC3, 0xD2, 0xE1, 0x07, 663 0x34, 0x12,
652 // sequence delta
653 0x01,
654 // time delta
655 0x01, 0x00, 0x00, 0x00,
656 // sequence delta (skip one packet)
657 0x03,
658 // time delta
659 0x02, 0x00, 0x00, 0x00,
660 // least packet sequence number awaiting an ack 664 // least packet sequence number awaiting an ack
661 0xA0, 0x9A, 0x78, 0x56, 665 0xA0, 0x9A, 0x78, 0x56,
662 0x34, 0x12, 666 0x34, 0x12,
667 // num non retransmitting packets
668 0x03,
669 // non retransmitting packet sequence number
670 0xAE, 0x9A, 0x78, 0x56,
671 0x34, 0x12,
672 // non retransmitting packet sequence number
673 0xAF, 0x9A, 0x78, 0x56,
674 0x34, 0x12,
675 // non retransmitting packet sequence number
676 0xB0, 0x9A, 0x78, 0x56,
677 0x34, 0x12,
663 // congestion feedback type (tcp) 678 // congestion feedback type (tcp)
664 0x01, 679 0x01,
665 // ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets 680 // ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets
666 0x01, 0x02, 681 0x01, 0x02,
667 // ack_frame.congestion_info.tcp.receive_window 682 // ack_frame.congestion_info.tcp.receive_window
668 0x03, 0x04, 683 0x03, 0x04,
669 }; 684 };
670 685
671 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 686 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
672 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 687 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
673 688
674 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 689 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
675 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 690 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
676 ASSERT_TRUE(visitor_.header_.get()); 691 ASSERT_TRUE(visitor_.header_.get());
677 692
678 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 693 EXPECT_EQ(0u, visitor_.stream_frames_.size());
679 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 694 ASSERT_EQ(1u, visitor_.ack_frames_.size());
680 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 695 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
681 ASSERT_EQ(3u, frame.received_info.received_packet_times.size()); 696 EXPECT_EQ(GG_UINT64_C(0x0123456789ABC),
682 map<QuicPacketSequenceNumber, QuicTime>::const_iterator iter = 697 frame.received_info.largest_received);
683 frame.received_info.received_packet_times.begin(); 698 EXPECT_EQ(QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687)),
684 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first); 699 frame.received_info.time_received);
685 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59687), iter->second);
686 ++iter;
687 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first);
688 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59688), iter->second);
689 ++iter;
690 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first);
691 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59689), iter->second);
692 700
701 const SequenceSet& sequence_nums = frame.received_info.missing_packets;
702 ASSERT_EQ(2u, sequence_nums.size());
703 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABB)));
704 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABA)));
693 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); 705 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
706 ASSERT_EQ(3u, frame.sent_info.non_retransmiting.size());
707 const SequenceSet& non_retrans = frame.sent_info.non_retransmiting;
708 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AB0)));
709 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAF)));
710 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAE)));
694 ASSERT_EQ(kTCP, frame.congestion_info.type); 711 ASSERT_EQ(kTCP, frame.congestion_info.type);
695 EXPECT_EQ(0x0201, 712 EXPECT_EQ(0x0201,
696 frame.congestion_info.tcp.accumulated_number_of_lost_packets); 713 frame.congestion_info.tcp.accumulated_number_of_lost_packets);
697 EXPECT_EQ(0x0403, frame.congestion_info.tcp.receive_window); 714 EXPECT_EQ(0x0403, frame.congestion_info.tcp.receive_window);
698 715
699 // Now test framing boundaries 716 // Now test framing boundaries
700 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) { 717 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) {
701 string expected_error; 718 string expected_error;
702 if (i < kCongestionInfoOffset + 1) { 719 if (i < kCongestionInfoOffset + 1) {
703 expected_error = "Unable to read congestion info type."; 720 expected_error = "Unable to read congestion info type.";
(...skipping 21 matching lines...) Expand all
725 0x34, 0x12, 742 0x34, 0x12,
726 // flags 743 // flags
727 0x00, 744 0x00,
728 // fec group 745 // fec group
729 0x00, 746 0x00,
730 747
731 // frame count 748 // frame count
732 0x01, 749 0x01,
733 // frame type (ack frame) 750 // frame type (ack frame)
734 0x02, 751 0x02,
735 // num_acked_packets 752 // largest received packet sequence number
736 0x03, 753 0xBC, 0x9A, 0x78, 0x56,
737 // smallest received packet sequence number 754 0x34, 0x12,
755 // time delta
756 0x87, 0x96, 0xA5, 0xB4,
757 0xC3, 0xD2, 0xE1, 0x07,
758 // num_unacked_packets
759 0x02,
760 // unacked packet sequence number
738 0xBA, 0x9A, 0x78, 0x56, 761 0xBA, 0x9A, 0x78, 0x56,
739 0x34, 0x12, 762 0x34, 0x12,
740 // time 763 // unacked packet sequence number
741 0x87, 0x96, 0xA5, 0xB4, 764 0xBB, 0x9A, 0x78, 0x56,
742 0xC3, 0xD2, 0xE1, 0x07, 765 0x34, 0x12,
743 // sequence delta
744 0x01,
745 // time delta
746 0x01, 0x00, 0x00, 0x00,
747 // sequence delta (skip one packet)
748 0x03,
749 // time delta
750 0x02, 0x00, 0x00, 0x00,
751 // least packet sequence number awaiting an ack 766 // least packet sequence number awaiting an ack
752 0xA0, 0x9A, 0x78, 0x56, 767 0xA0, 0x9A, 0x78, 0x56,
753 0x34, 0x12, 768 0x34, 0x12,
769 // num non retransmitting packets
770 0x03,
771 // non retransmitting packet sequence number
772 0xAE, 0x9A, 0x78, 0x56,
773 0x34, 0x12,
774 // non retransmitting packet sequence number
775 0xAF, 0x9A, 0x78, 0x56,
776 0x34, 0x12,
777 // non retransmitting packet sequence number
778 0xB0, 0x9A, 0x78, 0x56,
779 0x34, 0x12,
754 // congestion feedback type (inter arrival) 780 // congestion feedback type (inter arrival)
755 0x02, 781 0x02,
756 // accumulated_number_of_lost_packets 782 // accumulated_number_of_lost_packets
757 0x02, 0x03, 783 0x02, 0x03,
758 // offset_time 784 // offset_time
759 0x04, 0x05, 785 0x04, 0x05,
760 // delta_time 786 // delta_time
761 0x06, 0x07, 787 0x06, 0x07,
762 }; 788 };
763 789
764 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 790 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
765 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 791 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
766 792
767 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 793 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
768 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 794 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
769 ASSERT_TRUE(visitor_.header_.get()); 795 ASSERT_TRUE(visitor_.header_.get());
770 796
771 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 797 EXPECT_EQ(0u, visitor_.stream_frames_.size());
772 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 798 ASSERT_EQ(1u, visitor_.ack_frames_.size());
773 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 799 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
774 ASSERT_EQ(3u, frame.received_info.received_packet_times.size()); 800 EXPECT_EQ(GG_UINT64_C(0x0123456789ABC),
775 map<QuicPacketSequenceNumber, QuicTime>::const_iterator iter = 801 frame.received_info.largest_received);
776 frame.received_info.received_packet_times.begin(); 802 EXPECT_EQ(QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687)),
777 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first); 803 frame.received_info.time_received);
778 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59687), iter->second);
779 ++iter;
780 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first);
781 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59688), iter->second);
782 ++iter;
783 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first);
784 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59689), iter->second);
785 804
786 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), 805 const SequenceSet& sequence_nums = frame.received_info.missing_packets;
787 frame.sent_info.least_unacked); 806 ASSERT_EQ(2u, sequence_nums.size());
807 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABB)));
808 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABA)));
809 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
810 ASSERT_EQ(3u, frame.sent_info.non_retransmiting.size());
811 const SequenceSet& non_retrans = frame.sent_info.non_retransmiting;
812 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AB0)));
813 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAF)));
814 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAE)));
788 ASSERT_EQ(kInterArrival, frame.congestion_info.type); 815 ASSERT_EQ(kInterArrival, frame.congestion_info.type);
789 EXPECT_EQ(0x0302, frame.congestion_info.inter_arrival. 816 EXPECT_EQ(0x0302, frame.congestion_info.inter_arrival.
790 accumulated_number_of_lost_packets); 817 accumulated_number_of_lost_packets);
791 EXPECT_EQ(0x0504, frame.congestion_info.inter_arrival.offset_time); 818 EXPECT_EQ(0x0504, frame.congestion_info.inter_arrival.offset_time);
792 EXPECT_EQ(0x0706, frame.congestion_info.inter_arrival.delta_time); 819 EXPECT_EQ(0x0706, frame.congestion_info.inter_arrival.delta_time);
793 820
794 // Now test framing boundaries 821 // Now test framing boundaries
795 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) { 822 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) {
796 string expected_error; 823 string expected_error;
797 if (i < kCongestionInfoOffset + 1) { 824 if (i < kCongestionInfoOffset + 1) {
(...skipping 23 matching lines...) Expand all
821 0x34, 0x12, 848 0x34, 0x12,
822 // flags 849 // flags
823 0x00, 850 0x00,
824 // fec group 851 // fec group
825 0x00, 852 0x00,
826 853
827 // frame count 854 // frame count
828 0x01, 855 0x01,
829 // frame type (ack frame) 856 // frame type (ack frame)
830 0x02, 857 0x02,
831 // num_acked_packets 858 // largest received packet sequence number
832 0x03, 859 0xBC, 0x9A, 0x78, 0x56,
833 // smallest received packet sequence number 860 0x34, 0x12,
861 // time delta
862 0x87, 0x96, 0xA5, 0xB4,
863 0xC3, 0xD2, 0xE1, 0x07,
864 // num_unacked_packets
865 0x02,
866 // unacked packet sequence number
834 0xBA, 0x9A, 0x78, 0x56, 867 0xBA, 0x9A, 0x78, 0x56,
835 0x34, 0x12, 868 0x34, 0x12,
836 // time 869 // unacked packet sequence number
837 0x87, 0x96, 0xA5, 0xB4, 870 0xBB, 0x9A, 0x78, 0x56,
838 0xC3, 0xD2, 0xE1, 0x07, 871 0x34, 0x12,
839 // sequence delta
840 0x01,
841 // time delta
842 0x01, 0x00, 0x00, 0x00,
843 // sequence delta (skip one packet)
844 0x03,
845 // time delta
846 0x02, 0x00, 0x00, 0x00,
847 // least packet sequence number awaiting an ack 872 // least packet sequence number awaiting an ack
848 0xA0, 0x9A, 0x78, 0x56, 873 0xA0, 0x9A, 0x78, 0x56,
849 0x34, 0x12, 874 0x34, 0x12,
875 // num non retransmitting packets
876 0x03,
877 // non retransmitting packet sequence number
878 0xAE, 0x9A, 0x78, 0x56,
879 0x34, 0x12,
880 // non retransmitting packet sequence number
881 0xAF, 0x9A, 0x78, 0x56,
882 0x34, 0x12,
883 // non retransmitting packet sequence number
884 0xB0, 0x9A, 0x78, 0x56,
885 0x34, 0x12,
850 // congestion feedback type (fix rate) 886 // congestion feedback type (fix rate)
851 0x03, 887 0x03,
852 // bitrate_in_bytes_per_second; 888 // bitrate_in_bytes_per_second;
853 0x01, 0x02, 0x03, 0x04, 889 0x01, 0x02, 0x03, 0x04,
854 }; 890 };
855 891
856 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 892 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
857 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 893 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
858 894
859 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 895 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
860 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 896 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
861 ASSERT_TRUE(visitor_.header_.get()); 897 ASSERT_TRUE(visitor_.header_.get());
862 898
863 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 899 EXPECT_EQ(0u, visitor_.stream_frames_.size());
864 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 900 ASSERT_EQ(1u, visitor_.ack_frames_.size());
865 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 901 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
866 ASSERT_EQ(3u, frame.received_info.received_packet_times.size()); 902 EXPECT_EQ(GG_UINT64_C(0x0123456789ABC),
867 map<QuicPacketSequenceNumber, QuicTime>::const_iterator iter = 903 frame.received_info.largest_received);
868 frame.received_info.received_packet_times.begin(); 904 EXPECT_EQ(QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687)),
869 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first); 905 frame.received_info.time_received);
870 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59687), iter->second); 906
871 ++iter; 907 const SequenceSet& sequence_nums = frame.received_info.missing_packets;
872 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first); 908 ASSERT_EQ(2u, sequence_nums.size());
873 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59688), iter->second); 909 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABB)));
874 ++iter; 910 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABA)));
875 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first); 911 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
876 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59689), iter->second); 912 ASSERT_EQ(3u, frame.sent_info.non_retransmiting.size());
877 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), 913 const SequenceSet& non_retrans = frame.sent_info.non_retransmiting;
878 frame.sent_info.least_unacked); 914 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AB0)));
915 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAF)));
916 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAE)));
879 ASSERT_EQ(kFixRate, frame.congestion_info.type); 917 ASSERT_EQ(kFixRate, frame.congestion_info.type);
880 EXPECT_EQ(static_cast<uint32>(0x04030201), 918 EXPECT_EQ(static_cast<uint32>(0x04030201),
881 frame.congestion_info.fix_rate.bitrate_in_bytes_per_second); 919 frame.congestion_info.fix_rate.bitrate_in_bytes_per_second);
882 920
883 // Now test framing boundaries 921 // Now test framing boundaries
884 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) { 922 for (size_t i = kCongestionInfoOffset; i < kCongestionInfoOffset + 5; ++i) {
885 string expected_error; 923 string expected_error;
886 if (i < kCongestionInfoOffset + 1) { 924 if (i < kCongestionInfoOffset + 1) {
887 expected_error = "Unable to read congestion info type."; 925 expected_error = "Unable to read congestion info type.";
888 } else if (i < kCongestionInfoOffset + 5) { 926 } else if (i < kCongestionInfoOffset + 5) {
(...skipping 18 matching lines...) Expand all
907 0x34, 0x12, 945 0x34, 0x12,
908 // flags 946 // flags
909 0x00, 947 0x00,
910 // fec group 948 // fec group
911 0x00, 949 0x00,
912 950
913 // frame count 951 // frame count
914 0x01, 952 0x01,
915 // frame type (ack frame) 953 // frame type (ack frame)
916 0x02, 954 0x02,
917 // num_acked_packets 955 // largest received packet sequence number
918 0x03, 956 0xBC, 0x9A, 0x78, 0x56,
919 // smallest received packet sequence number 957 0x34, 0x12,
958 // time delta
959 0x87, 0x96, 0xA5, 0xB4,
960 0xC3, 0xD2, 0xE1, 0x07,
961 // num_unacked_packets
962 0x02,
963 // unacked packet sequence number
920 0xBA, 0x9A, 0x78, 0x56, 964 0xBA, 0x9A, 0x78, 0x56,
921 0x34, 0x12, 965 0x34, 0x12,
922 // time 966 // unacked packet sequence number
923 0x87, 0x96, 0xA5, 0xB4, 967 0xBB, 0x9A, 0x78, 0x56,
924 0xC3, 0xD2, 0xE1, 0x07, 968 0x34, 0x12,
925 // sequence delta
926 0x01,
927 // time delta
928 0x01, 0x00, 0x00, 0x00,
929 // sequence delta (skip one packet)
930 0x03,
931 // time delta
932 0x02, 0x00, 0x00, 0x00,
933 // least packet sequence number awaiting an ack 969 // least packet sequence number awaiting an ack
934 0xA0, 0x9A, 0x78, 0x56, 970 0xA0, 0x9A, 0x78, 0x56,
935 0x34, 0x12, 971 0x34, 0x12,
972 // num non retransmitting packets
973 0x03,
974 // non retransmitting packet sequence number
975 0xAE, 0x9A, 0x78, 0x56,
976 0x34, 0x12,
977 // non retransmitting packet sequence number
978 0xAF, 0x9A, 0x78, 0x56,
979 0x34, 0x12,
980 // non retransmitting packet sequence number
981 0xB0, 0x9A, 0x78, 0x56,
982 0x34, 0x12,
936 // congestion feedback type (invalid) 983 // congestion feedback type (invalid)
937 0x04, 984 0x04,
938 }; 985 };
939 986
940 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 987 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
941 EXPECT_FALSE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 988 EXPECT_FALSE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
942 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 989 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
943 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 990 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
944 } 991 }
945 992
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 1081
1035 // error details length 1082 // error details length
1036 0x0d, 0x00, 1083 0x0d, 0x00,
1037 // error details 1084 // error details
1038 'b', 'e', 'c', 'a', 1085 'b', 'e', 'c', 'a',
1039 'u', 's', 'e', ' ', 1086 'u', 's', 'e', ' ',
1040 'I', ' ', 'c', 'a', 1087 'I', ' ', 'c', 'a',
1041 'n', 1088 'n',
1042 1089
1043 // Ack frame. 1090 // Ack frame.
1044 // num_acked_packets 1091
1045 0x03, 1092 // largest received packet sequence number
1046 // smallest received packet sequence number 1093 0xBC, 0x9A, 0x78, 0x56,
1094 0x34, 0x12,
1095 // time delta
1096 0x87, 0x96, 0xA5, 0xB4,
1097 0xC3, 0xD2, 0xE1, 0x07,
1098 // num_unacked_packets
1099 0x02,
1100 // unacked packet sequence number
1047 0xBA, 0x9A, 0x78, 0x56, 1101 0xBA, 0x9A, 0x78, 0x56,
1048 0x34, 0x12, 1102 0x34, 0x12,
1049 // time 1103 // unacked packet sequence number
1050 0x87, 0x96, 0xA5, 0xB4, 1104 0xBB, 0x9A, 0x78, 0x56,
1051 0xC3, 0xD2, 0xE1, 0x07, 1105 0x34, 0x12,
1052 // sequence delta
1053 0x01,
1054 // time delta
1055 0x01, 0x00, 0x00, 0x00,
1056 // sequence delta (skip one packet)
1057 0x03,
1058 // time delta
1059 0x02, 0x00, 0x00, 0x00,
1060 // least packet sequence number awaiting an ack 1106 // least packet sequence number awaiting an ack
1061 0xA0, 0x9A, 0x78, 0x56, 1107 0xA0, 0x9A, 0x78, 0x56,
1062 0x34, 0x12, 1108 0x34, 0x12,
1109 // num non retransmitting packets
1110 0x03,
1111 // non retransmitting packet sequence number
1112 0xAE, 0x9A, 0x78, 0x56,
1113 0x34, 0x12,
1114 // non retransmitting packet sequence number
1115 0xAF, 0x9A, 0x78, 0x56,
1116 0x34, 0x12,
1117 // non retransmitting packet sequence number
1118 0xB0, 0x9A, 0x78, 0x56,
1119 0x34, 0x12,
1063 // congestion feedback type (inter arrival) 1120 // congestion feedback type (inter arrival)
1064 0x02, 1121 0x02,
1065 // accumulated_number_of_lost_packets 1122 // accumulated_number_of_lost_packets
1066 0x02, 0x03, 1123 0x02, 0x03,
1067 // offset_time 1124 // offset_time
1068 0x04, 0x05, 1125 0x04, 0x05,
1069 // delta_time 1126 // delta_time
1070 0x06, 0x07, 1127 0x06, 0x07,
1071 }; 1128 };
1072 1129
1073 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1130 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1074 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted)); 1131 EXPECT_TRUE(framer_.ProcessPacket(self_address_, peer_address_, encrypted));
1075 1132
1076 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet)))); 1133 EXPECT_TRUE(CheckDecryption(StringPiece(AsChars(packet), arraysize(packet))));
1077 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1134 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1078 ASSERT_TRUE(visitor_.header_.get()); 1135 ASSERT_TRUE(visitor_.header_.get());
1079 1136
1080 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1137 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1081 1138
1082 EXPECT_EQ(0x05060708, visitor_.connection_close_frame_.error_code); 1139 EXPECT_EQ(0x05060708, visitor_.connection_close_frame_.error_code);
1083 EXPECT_EQ("because I can", visitor_.connection_close_frame_.error_details); 1140 EXPECT_EQ("because I can", visitor_.connection_close_frame_.error_details);
1084 1141
1085 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1142 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1086 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1143 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1087 ASSERT_EQ(3u, frame.received_info.received_packet_times.size()); 1144 EXPECT_EQ(GG_UINT64_C(0x0123456789ABC),
1088 map<QuicPacketSequenceNumber, QuicTime>::const_iterator iter = 1145 frame.received_info.largest_received);
1089 frame.received_info.received_packet_times.begin(); 1146 EXPECT_EQ(QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687)),
1090 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first); 1147 frame.received_info.time_received);
1091 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59687), iter->second); 1148
1092 ++iter; 1149 const SequenceSet& sequence_nums = frame.received_info.missing_packets;
1093 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first); 1150 ASSERT_EQ(2u, sequence_nums.size());
1094 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59688), iter->second); 1151 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABB)));
1095 ++iter; 1152 EXPECT_EQ(1u, sequence_nums.count(GG_UINT64_C(0x0123456789ABA)));
1096 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first); 1153 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
1097 EXPECT_EQ(QuicTime::FromMicroseconds(0x07E1D2C3B4A59689), iter->second); 1154 ASSERT_EQ(3u, frame.sent_info.non_retransmiting.size());
1098 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), 1155 const SequenceSet& non_retrans = frame.sent_info.non_retransmiting;
1099 frame.sent_info.least_unacked); 1156 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AB0)));
1157 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAF)));
1158 EXPECT_EQ(1u, non_retrans.count(GG_UINT64_C(0x0123456789AAE)));
1100 ASSERT_EQ(kInterArrival, frame.congestion_info.type); 1159 ASSERT_EQ(kInterArrival, frame.congestion_info.type);
1101 EXPECT_EQ(0x0302, frame.congestion_info.inter_arrival. 1160 EXPECT_EQ(0x0302, frame.congestion_info.inter_arrival.
1102 accumulated_number_of_lost_packets); 1161 accumulated_number_of_lost_packets);
1103 EXPECT_EQ(0x0504, 1162 EXPECT_EQ(0x0504,
1104 frame.congestion_info.inter_arrival.offset_time); 1163 frame.congestion_info.inter_arrival.offset_time);
1105 EXPECT_EQ(0x0706, 1164 EXPECT_EQ(0x0706,
1106 frame.congestion_info.inter_arrival.delta_time); 1165 frame.congestion_info.inter_arrival.delta_time);
1107 1166
1108 // Now test framing boundaries 1167 // Now test framing boundaries
1109 for (size_t i = kPacketHeaderSize + 3; i < kPacketHeaderSize + 21; ++i) { 1168 for (size_t i = kPacketHeaderSize + 3; i < kPacketHeaderSize + 21; ++i) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 } 1282 }
1224 1283
1225 TEST_F(QuicFramerTest, ConstructAckFramePacket) { 1284 TEST_F(QuicFramerTest, ConstructAckFramePacket) {
1226 QuicPacketHeader header; 1285 QuicPacketHeader header;
1227 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1286 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1228 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1287 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1229 header.flags = PACKET_FLAGS_NONE; 1288 header.flags = PACKET_FLAGS_NONE;
1230 header.fec_group = 0; 1289 header.fec_group = 0;
1231 1290
1232 QuicAckFrame ack_frame; 1291 QuicAckFrame ack_frame;
1233 ack_frame.received_info.RecordAck( 1292 ack_frame.received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1234 GG_UINT64_C(0x0123456789ABA), 1293 ack_frame.received_info.time_received =
1235 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1294 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1236 ack_frame.received_info.RecordAck( 1295 ack_frame.received_info.missing_packets.insert(
1237 GG_UINT64_C(0x0123456789ABB), 1296 GG_UINT64_C(0x0123456789ABB));
1238 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1297 ack_frame.received_info.missing_packets.insert(
1239 ack_frame.received_info.RecordAck( 1298 GG_UINT64_C(0x0123456789ABA));
1240 GG_UINT64_C(0x0123456789ABD),
1241 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1242 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1299 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1300 ack_frame.sent_info.non_retransmiting.insert(
1301 GG_UINT64_C(0x0123456789AB0));
1302 ack_frame.sent_info.non_retransmiting.insert(
1303 GG_UINT64_C(0x0123456789AAF));
1304 ack_frame.sent_info.non_retransmiting.insert(
1305 GG_UINT64_C(0x0123456789AAE));
1243 ack_frame.congestion_info.type = kNone; 1306 ack_frame.congestion_info.type = kNone;
1244 1307
1245 QuicFrame frame; 1308 QuicFrame frame;
1246 frame.type = ACK_FRAME; 1309 frame.type = ACK_FRAME;
1247 frame.ack_frame = &ack_frame; 1310 frame.ack_frame = &ack_frame;
1248 1311
1249 QuicFrames frames; 1312 QuicFrames frames;
1250 frames.push_back(frame); 1313 frames.push_back(frame);
1251 1314
1252 unsigned char packet[] = { 1315 unsigned char packet[] = {
1253 // guid 1316 // guid
1254 0x10, 0x32, 0x54, 0x76, 1317 0x10, 0x32, 0x54, 0x76,
1255 0x98, 0xBA, 0xDC, 0xFE, 1318 0x98, 0xBA, 0xDC, 0xFE,
1256 // packet id 1319 // packet id
1257 0xBC, 0x9A, 0x78, 0x56, 1320 0xBC, 0x9A, 0x78, 0x56,
1258 0x34, 0x12, 1321 0x34, 0x12,
1259 // flags 1322 // flags
1260 0x00, 1323 0x00,
1261 // fec group 1324 // fec group
1262 0x00, 1325 0x00,
1263 1326
1264 // frame count 1327 // frame count
1265 0x01, 1328 0x01,
1266 // frame type (ack frame) 1329 // frame type (ack frame)
1267 0x02, 1330 0x02,
1268 // num_acked_packets 1331 // largest received packet sequence number
1269 0x03, 1332 0xBC, 0x9A, 0x78, 0x56,
1270 // smallest received packet sequence number 1333 0x34, 0x12,
1334 // time delta
1335 0x87, 0x96, 0xA5, 0xB4,
1336 0xC3, 0xD2, 0xE1, 0x07,
1337 // num_unacked_packets
1338 0x02,
1339 #if defined(OS_WIN)
1340 // Windows hash_set order is different.
1341 // unacked packet sequence number
1342 0xBB, 0x9A, 0x78, 0x56,
1343 0x34, 0x12,
1344 // unacked packet sequence number
1271 0xBA, 0x9A, 0x78, 0x56, 1345 0xBA, 0x9A, 0x78, 0x56,
1272 0x34, 0x12, 1346 0x34, 0x12,
1273 // time 1347 #else
1274 0x87, 0x96, 0xA5, 0xB4, 1348 // unacked packet sequence number
1275 0xC3, 0xD2, 0xE1, 0x07, 1349 0xBA, 0x9A, 0x78, 0x56,
1276 // sequence delta 1350 0x34, 0x12,
1277 0x01, 1351 // unacked packet sequence number
1278 // time delta 1352 0xBB, 0x9A, 0x78, 0x56,
1279 0x01, 0x00, 0x00, 0x00, 1353 0x34, 0x12,
1280 // sequence delta (skip one packet) 1354 #endif
1281 0x03,
1282 // time delta
1283 0x02, 0x00, 0x00, 0x00,
1284 // least packet sequence number awaiting an ack 1355 // least packet sequence number awaiting an ack
1285 0xA0, 0x9A, 0x78, 0x56, 1356 0xA0, 0x9A, 0x78, 0x56,
1286 0x34, 0x12, 1357 0x34, 0x12,
1358 // num non retransmitting packets
1359 0x03,
1360 #if defined(OS_WIN)
1361 // Windows hash_set order is different.
1362 // non retransmitting packet sequence number
1363 0xB0, 0x9A, 0x78, 0x56,
1364 0x34, 0x12,
1365 // non retransmitting packet sequence number
1366 0xAF, 0x9A, 0x78, 0x56,
1367 0x34, 0x12,
1368 // non retransmitting packet sequence number
1369 0xAE, 0x9A, 0x78, 0x56,
1370 0x34, 0x12,
1371 #else
1372 // non retransmitting packet sequence number
1373 0xAE, 0x9A, 0x78, 0x56,
1374 0x34, 0x12,
1375 // non retransmitting packet sequence number
1376 0xAF, 0x9A, 0x78, 0x56,
1377 0x34, 0x12,
1378 // non retransmitting packet sequence number
1379 0xB0, 0x9A, 0x78, 0x56,
1380 0x34, 0x12,
1381 #endif
1287 // congestion feedback type (none) 1382 // congestion feedback type (none)
1288 0x00, 1383 0x00,
1289 }; 1384 };
1290 1385
1291 QuicPacket* data; 1386 QuicPacket* data;
1292 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data)); 1387 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data));
1293 1388
1294 test::CompareCharArraysWithHexError("constructed packet", 1389 test::CompareCharArraysWithHexError("constructed packet",
1295 data->data(), data->length(), 1390 data->data(), data->length(),
1296 AsChars(packet), arraysize(packet)); 1391 AsChars(packet), arraysize(packet));
1297 1392
1298 delete data; 1393 delete data;
1299 } 1394 }
1300 1395
1301 TEST_F(QuicFramerTest, ConstructAckFramePacketTCP) { 1396 TEST_F(QuicFramerTest, ConstructAckFramePacketTCP) {
1302 QuicPacketHeader header; 1397 QuicPacketHeader header;
1303 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1398 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1304 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1399 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1305 header.flags = PACKET_FLAGS_NONE; 1400 header.flags = PACKET_FLAGS_NONE;
1306 header.fec_group = 0; 1401 header.fec_group = 0;
1307 1402
1308 QuicAckFrame ack_frame; 1403 QuicAckFrame ack_frame;
1309 ack_frame.received_info.RecordAck( 1404 ack_frame.received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1310 GG_UINT64_C(0x0123456789ABA), 1405 ack_frame.received_info.time_received =
1311 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1406 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1312 ack_frame.received_info.RecordAck( 1407 ack_frame.received_info.missing_packets.insert(
1313 GG_UINT64_C(0x0123456789ABB), 1408 GG_UINT64_C(0x0123456789ABB));
1314 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1409 ack_frame.received_info.missing_packets.insert(
1315 ack_frame.received_info.RecordAck( 1410 GG_UINT64_C(0x0123456789ABA));
1316 GG_UINT64_C(0x0123456789ABD),
1317 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1318 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1411 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1412 ack_frame.sent_info.non_retransmiting.insert(
1413 GG_UINT64_C(0x0123456789AB0));
1414 ack_frame.sent_info.non_retransmiting.insert(
1415 GG_UINT64_C(0x0123456789AAF));
1416 ack_frame.sent_info.non_retransmiting.insert(
1417 GG_UINT64_C(0x0123456789AAE));
1319 ack_frame.congestion_info.type = kTCP; 1418 ack_frame.congestion_info.type = kTCP;
1320 ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets = 0x0201; 1419 ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets = 0x0201;
1321 ack_frame.congestion_info.tcp.receive_window = 0x0403; 1420 ack_frame.congestion_info.tcp.receive_window = 0x0403;
1322 1421
1323 QuicFrame frame; 1422 QuicFrame frame;
1324 frame.type = ACK_FRAME; 1423 frame.type = ACK_FRAME;
1325 frame.ack_frame = &ack_frame; 1424 frame.ack_frame = &ack_frame;
1326 1425
1327 QuicFrames frames; 1426 QuicFrames frames;
1328 frames.push_back(frame); 1427 frames.push_back(frame);
1329 1428
1330 unsigned char packet[] = { 1429 unsigned char packet[] = {
1331 // guid 1430 // guid
1332 0x10, 0x32, 0x54, 0x76, 1431 0x10, 0x32, 0x54, 0x76,
1333 0x98, 0xBA, 0xDC, 0xFE, 1432 0x98, 0xBA, 0xDC, 0xFE,
1334 // packet id 1433 // packet id
1335 0xBC, 0x9A, 0x78, 0x56, 1434 0xBC, 0x9A, 0x78, 0x56,
1336 0x34, 0x12, 1435 0x34, 0x12,
1337 // flags 1436 // flags
1338 0x00, 1437 0x00,
1339 // fec group 1438 // fec group
1340 0x00, 1439 0x00,
1341 1440
1342 // frame count 1441 // frame count
1343 0x01, 1442 0x01,
1344 // frame type (ack frame) 1443 // frame type (ack frame)
1345 0x02, 1444 0x02,
1346 // num_acked_packets 1445 // largest received packet sequence number
1347 0x03, 1446 0xBC, 0x9A, 0x78, 0x56,
1348 // smallest received packet sequence number 1447 0x34, 0x12,
1448 // time delta
1449 0x87, 0x96, 0xA5, 0xB4,
1450 0xC3, 0xD2, 0xE1, 0x07,
1451 // num_unacked_packets
1452 0x02,
1453 #if defined(OS_WIN)
1454 // Windows hash_set order is different.
1455 // unacked packet sequence number
1456 0xBB, 0x9A, 0x78, 0x56,
1457 0x34, 0x12,
1458 // unacked packet sequence number
1349 0xBA, 0x9A, 0x78, 0x56, 1459 0xBA, 0x9A, 0x78, 0x56,
1350 0x34, 0x12, 1460 0x34, 0x12,
1351 // time 1461 #else
1352 0x87, 0x96, 0xA5, 0xB4, 1462 // unacked packet sequence number
1353 0xC3, 0xD2, 0xE1, 0x07, 1463 0xBA, 0x9A, 0x78, 0x56,
1354 // sequence delta 1464 0x34, 0x12,
1355 0x01, 1465 // unacked packet sequence number
1356 // time delta 1466 0xBB, 0x9A, 0x78, 0x56,
1357 0x01, 0x00, 0x00, 0x00, 1467 0x34, 0x12,
1358 // sequence delta (skip one packet) 1468 #endif
1359 0x03,
1360 // time delta
1361 0x02, 0x00, 0x00, 0x00,
1362 // least packet sequence number awaiting an ack 1469 // least packet sequence number awaiting an ack
1363 0xA0, 0x9A, 0x78, 0x56, 1470 0xA0, 0x9A, 0x78, 0x56,
1364 0x34, 0x12, 1471 0x34, 0x12,
1472 // num non retransmitting packets
1473 0x03,
1474 #if defined(OS_WIN)
1475 // Windows hash_set order is different.
1476 // non retransmitting packet sequence number
1477 0xB0, 0x9A, 0x78, 0x56,
1478 0x34, 0x12,
1479 // non retransmitting packet sequence number
1480 0xAF, 0x9A, 0x78, 0x56,
1481 0x34, 0x12,
1482 // non retransmitting packet sequence number
1483 0xAE, 0x9A, 0x78, 0x56,
1484 0x34, 0x12,
1485 #else
1486 // non retransmitting packet sequence number
1487 0xAE, 0x9A, 0x78, 0x56,
1488 0x34, 0x12,
1489 // non retransmitting packet sequence number
1490 0xAF, 0x9A, 0x78, 0x56,
1491 0x34, 0x12,
1492 // non retransmitting packet sequence number
1493 0xB0, 0x9A, 0x78, 0x56,
1494 0x34, 0x12,
1495 #endif
1365 // congestion feedback type (tcp) 1496 // congestion feedback type (tcp)
1366 0x01, 1497 0x01,
1367 // ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets 1498 // ack_frame.congestion_info.tcp.accumulated_number_of_lost_packets
1368 0x01, 0x02, 1499 0x01, 0x02,
1369 // ack_frame.congestion_info.tcp.receive_window 1500 // ack_frame.congestion_info.tcp.receive_window
1370 0x03, 0x04, 1501 0x03, 0x04,
1371 }; 1502 };
1372 1503
1373 QuicPacket* data; 1504 QuicPacket* data;
1374 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data)); 1505 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data));
1375 1506
1376 test::CompareCharArraysWithHexError("constructed packet", 1507 test::CompareCharArraysWithHexError("constructed packet",
1377 data->data(), data->length(), 1508 data->data(), data->length(),
1378 AsChars(packet), arraysize(packet)); 1509 AsChars(packet), arraysize(packet));
1379 1510
1380 delete data; 1511 delete data;
1381 } 1512 }
1382 1513
1383 TEST_F(QuicFramerTest, ConstructAckFramePacketInterArrival) { 1514 TEST_F(QuicFramerTest, ConstructAckFramePacketInterArrival) {
1384 QuicPacketHeader header; 1515 QuicPacketHeader header;
1385 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1516 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1386 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1517 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1387 header.flags = PACKET_FLAGS_NONE; 1518 header.flags = PACKET_FLAGS_NONE;
1388 header.fec_group = 0; 1519 header.fec_group = 0;
1389 1520
1390 QuicAckFrame ack_frame; 1521 QuicAckFrame ack_frame;
1391 ack_frame.received_info.RecordAck( 1522 ack_frame.received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1392 GG_UINT64_C(0x0123456789ABA), 1523 ack_frame.received_info.time_received =
1393 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1524 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1394 ack_frame.received_info.RecordAck( 1525 ack_frame.received_info.missing_packets.insert(
1395 GG_UINT64_C(0x0123456789ABB), 1526 GG_UINT64_C(0x0123456789ABB));
1396 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1527 ack_frame.received_info.missing_packets.insert(
1397 ack_frame.received_info.RecordAck( 1528 GG_UINT64_C(0x0123456789ABA));
1398 GG_UINT64_C(0x0123456789ABD),
1399 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1400 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1529 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1530 ack_frame.sent_info.non_retransmiting.insert(
1531 GG_UINT64_C(0x0123456789AB0));
1532 ack_frame.sent_info.non_retransmiting.insert(
1533 GG_UINT64_C(0x0123456789AAF));
1534 ack_frame.sent_info.non_retransmiting.insert(
1535 GG_UINT64_C(0x0123456789AAE));
1401 ack_frame.congestion_info.type = kInterArrival; 1536 ack_frame.congestion_info.type = kInterArrival;
1402 ack_frame.congestion_info.inter_arrival.accumulated_number_of_lost_packets 1537 ack_frame.congestion_info.inter_arrival.accumulated_number_of_lost_packets
1403 = 0x0302; 1538 = 0x0302;
1404 ack_frame.congestion_info.inter_arrival.offset_time = 0x0504; 1539 ack_frame.congestion_info.inter_arrival.offset_time = 0x0504;
1405 ack_frame.congestion_info.inter_arrival.delta_time = 0x0706; 1540 ack_frame.congestion_info.inter_arrival.delta_time = 0x0706;
1406 1541
1407 QuicFrame frame; 1542 QuicFrame frame;
1408 frame.type = ACK_FRAME; 1543 frame.type = ACK_FRAME;
1409 frame.ack_frame = &ack_frame; 1544 frame.ack_frame = &ack_frame;
1410 1545
1411 QuicFrames frames; 1546 QuicFrames frames;
1412 frames.push_back(frame); 1547 frames.push_back(frame);
1413 1548
1414 unsigned char packet[] = { 1549 unsigned char packet[] = {
1415 // guid 1550 // guid
1416 0x10, 0x32, 0x54, 0x76, 1551 0x10, 0x32, 0x54, 0x76,
1417 0x98, 0xBA, 0xDC, 0xFE, 1552 0x98, 0xBA, 0xDC, 0xFE,
1418 // packet id 1553 // packet id
1419 0xBC, 0x9A, 0x78, 0x56, 1554 0xBC, 0x9A, 0x78, 0x56,
1420 0x34, 0x12, 1555 0x34, 0x12,
1421 // flags 1556 // flags
1422 0x00, 1557 0x00,
1423 // fec group 1558 // fec group
1424 0x00, 1559 0x00,
1425 1560
1426 // frame count 1561 // frame count
1427 0x01, 1562 0x01,
1428 // frame type (ack frame) 1563 // frame type (ack frame)
1429 0x02, 1564 0x02,
1430 // num_acked_packets 1565 // largest received packet sequence number
1431 0x03, 1566 0xBC, 0x9A, 0x78, 0x56,
1432 // smallest received packet sequence number 1567 0x34, 0x12,
1568 // time delta
1569 0x87, 0x96, 0xA5, 0xB4,
1570 0xC3, 0xD2, 0xE1, 0x07,
1571 // num_unacked_packets
1572 0x02,
1573 #if defined(OS_WIN)
1574 // Windows hash_set order is different.
1575 // unacked packet sequence number
1576 0xBB, 0x9A, 0x78, 0x56,
1577 0x34, 0x12,
1578 // unacked packet sequence number
1433 0xBA, 0x9A, 0x78, 0x56, 1579 0xBA, 0x9A, 0x78, 0x56,
1434 0x34, 0x12, 1580 0x34, 0x12,
1435 // time 1581 #else
1436 0x87, 0x96, 0xA5, 0xB4, 1582 // unacked packet sequence number
1437 0xC3, 0xD2, 0xE1, 0x07, 1583 0xBA, 0x9A, 0x78, 0x56,
1438 // sequence delta 1584 0x34, 0x12,
1439 0x01, 1585 // unacked packet sequence number
1440 // time delta 1586 0xBB, 0x9A, 0x78, 0x56,
1441 0x01, 0x00, 0x00, 0x00, 1587 0x34, 0x12,
1442 // sequence delta (skip one packet) 1588 #endif
1443 0x03,
1444 // time delta
1445 0x02, 0x00, 0x00, 0x00,
1446 // least packet sequence number awaiting an ack 1589 // least packet sequence number awaiting an ack
1447 0xA0, 0x9A, 0x78, 0x56, 1590 0xA0, 0x9A, 0x78, 0x56,
1448 0x34, 0x12, 1591 0x34, 0x12,
1592 // num non retransmitting packets
1593 0x03,
1594 #if defined(OS_WIN)
1595 // Windows hash_set order is different.
1596 // non retransmitting packet sequence number
1597 0xB0, 0x9A, 0x78, 0x56,
1598 0x34, 0x12,
1599 // non retransmitting packet sequence number
1600 0xAF, 0x9A, 0x78, 0x56,
1601 0x34, 0x12,
1602 // non retransmitting packet sequence number
1603 0xAE, 0x9A, 0x78, 0x56,
1604 0x34, 0x12,
1605 #else
1606 // non retransmitting packet sequence number
1607 0xAE, 0x9A, 0x78, 0x56,
1608 0x34, 0x12,
1609 // non retransmitting packet sequence number
1610 0xAF, 0x9A, 0x78, 0x56,
1611 0x34, 0x12,
1612 // non retransmitting packet sequence number
1613 0xB0, 0x9A, 0x78, 0x56,
1614 0x34, 0x12,
1615 #endif
1449 // congestion feedback type (inter arrival) 1616 // congestion feedback type (inter arrival)
1450 0x02, 1617 0x02,
1451 // accumulated_number_of_lost_packets 1618 // accumulated_number_of_lost_packets
1452 0x02, 0x03, 1619 0x02, 0x03,
1453 // offset_time 1620 // offset_time
1454 0x04, 0x05, 1621 0x04, 0x05,
1455 // delta_time 1622 // delta_time
1456 0x06, 0x07, 1623 0x06, 0x07,
1457 }; 1624 };
1458 1625
1459 QuicPacket* data; 1626 QuicPacket* data;
1460 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data)); 1627 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data));
1461 1628
1462 test::CompareCharArraysWithHexError("constructed packet", 1629 test::CompareCharArraysWithHexError("constructed packet",
1463 data->data(), data->length(), 1630 data->data(), data->length(),
1464 AsChars(packet), arraysize(packet)); 1631 AsChars(packet), arraysize(packet));
1465 1632
1466 delete data; 1633 delete data;
1467 } 1634 }
1468 1635
1469 TEST_F(QuicFramerTest, ConstructAckFramePacketFixRate) { 1636 TEST_F(QuicFramerTest, ConstructAckFramePacketFixRate) {
1470 QuicPacketHeader header; 1637 QuicPacketHeader header;
1471 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1638 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1472 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1639 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1473 header.flags = PACKET_FLAGS_NONE; 1640 header.flags = PACKET_FLAGS_NONE;
1474 header.fec_group = 0; 1641 header.fec_group = 0;
1475 1642
1476 QuicAckFrame ack_frame; 1643 QuicAckFrame ack_frame;
1477 ack_frame.received_info.RecordAck( 1644 ack_frame.received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1478 GG_UINT64_C(0x0123456789ABA), 1645 ack_frame.received_info.time_received =
1479 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1646 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1480 ack_frame.received_info.RecordAck( 1647 ack_frame.received_info.missing_packets.insert(
1481 GG_UINT64_C(0x0123456789ABB), 1648 GG_UINT64_C(0x0123456789ABB));
1482 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1649 ack_frame.received_info.missing_packets.insert(
1483 ack_frame.received_info.RecordAck( 1650 GG_UINT64_C(0x0123456789ABA));
1484 GG_UINT64_C(0x0123456789ABD),
1485 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1486 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1651 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1652 ack_frame.sent_info.non_retransmiting.insert(
1653 GG_UINT64_C(0x0123456789AB0));
1654 ack_frame.sent_info.non_retransmiting.insert(
1655 GG_UINT64_C(0x0123456789AAF));
1656 ack_frame.sent_info.non_retransmiting.insert(
1657 GG_UINT64_C(0x0123456789AAE));
1487 ack_frame.congestion_info.type = kFixRate; 1658 ack_frame.congestion_info.type = kFixRate;
1488 ack_frame.congestion_info.fix_rate.bitrate_in_bytes_per_second 1659 ack_frame.congestion_info.fix_rate.bitrate_in_bytes_per_second
1489 = 0x04030201; 1660 = 0x04030201;
1490 1661
1491 QuicFrame frame; 1662 QuicFrame frame;
1492 frame.type = ACK_FRAME; 1663 frame.type = ACK_FRAME;
1493 frame.ack_frame = &ack_frame; 1664 frame.ack_frame = &ack_frame;
1494 1665
1495 QuicFrames frames; 1666 QuicFrames frames;
1496 frames.push_back(frame); 1667 frames.push_back(frame);
1497 1668
1498 unsigned char packet[] = { 1669 unsigned char packet[] = {
1499 // guid 1670 // guid
1500 0x10, 0x32, 0x54, 0x76, 1671 0x10, 0x32, 0x54, 0x76,
1501 0x98, 0xBA, 0xDC, 0xFE, 1672 0x98, 0xBA, 0xDC, 0xFE,
1502 // packet id 1673 // packet id
1503 0xBC, 0x9A, 0x78, 0x56, 1674 0xBC, 0x9A, 0x78, 0x56,
1504 0x34, 0x12, 1675 0x34, 0x12,
1505 // flags 1676 // flags
1506 0x00, 1677 0x00,
1507 // fec group 1678 // fec group
1508 0x00, 1679 0x00,
1509 1680
1510 // frame count 1681 // frame count
1511 0x01, 1682 0x01,
1512 // frame type (ack frame) 1683 // frame type (ack frame)
1513 0x02, 1684 0x02,
1514 // num_acked_packets 1685 // largest received packet sequence number
1515 0x03, 1686 0xBC, 0x9A, 0x78, 0x56,
1516 // smallest received packet sequence number 1687 0x34, 0x12,
1688 // time delta
1689 0x87, 0x96, 0xA5, 0xB4,
1690 0xC3, 0xD2, 0xE1, 0x07,
1691 // num_unacked_packets
1692 0x02,
1693 #if defined(OS_WIN)
1694 // Windows hash_set order is different.
1695 // unacked packet sequence number
1696 0xBB, 0x9A, 0x78, 0x56,
1697 0x34, 0x12,
1698 // unacked packet sequence number
1517 0xBA, 0x9A, 0x78, 0x56, 1699 0xBA, 0x9A, 0x78, 0x56,
1518 0x34, 0x12, 1700 0x34, 0x12,
1519 // time 1701 #else
1520 0x87, 0x96, 0xA5, 0xB4, 1702 // unacked packet sequence number
1521 0xC3, 0xD2, 0xE1, 0x07, 1703 0xBA, 0x9A, 0x78, 0x56,
1522 // sequence delta 1704 0x34, 0x12,
1523 0x01, 1705 // unacked packet sequence number
1524 // time delta 1706 0xBB, 0x9A, 0x78, 0x56,
1525 0x01, 0x00, 0x00, 0x00, 1707 0x34, 0x12,
1526 // sequence delta (skip one packet) 1708 #endif
1527 0x03,
1528 // time delta
1529 0x02, 0x00, 0x00, 0x00,
1530 // least packet sequence number awaiting an ack 1709 // least packet sequence number awaiting an ack
1531 0xA0, 0x9A, 0x78, 0x56, 1710 0xA0, 0x9A, 0x78, 0x56,
1532 0x34, 0x12, 1711 0x34, 0x12,
1712 // num non retransmitting packets
1713 0x03,
1714 #if defined(OS_WIN)
1715 // Windows hash_set order is different.
1716 // non retransmitting packet sequence number
1717 0xB0, 0x9A, 0x78, 0x56,
1718 0x34, 0x12,
1719 // non retransmitting packet sequence number
1720 0xAF, 0x9A, 0x78, 0x56,
1721 0x34, 0x12,
1722 // non retransmitting packet sequence number
1723 0xAE, 0x9A, 0x78, 0x56,
1724 0x34, 0x12,
1725 #else
1726 // non retransmitting packet sequence number
1727 0xAE, 0x9A, 0x78, 0x56,
1728 0x34, 0x12,
1729 // non retransmitting packet sequence number
1730 0xAF, 0x9A, 0x78, 0x56,
1731 0x34, 0x12,
1732 // non retransmitting packet sequence number
1733 0xB0, 0x9A, 0x78, 0x56,
1734 0x34, 0x12,
1735 #endif
1533 // congestion feedback type (fix rate) 1736 // congestion feedback type (fix rate)
1534 0x03, 1737 0x03,
1535 // bitrate_in_bytes_per_second; 1738 // bitrate_in_bytes_per_second;
1536 0x01, 0x02, 0x03, 0x04, 1739 0x01, 0x02, 0x03, 0x04,
1537 }; 1740 };
1538 1741
1539 QuicPacket* data; 1742 QuicPacket* data;
1540 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data)); 1743 EXPECT_TRUE(framer_.ConstructFrameDataPacket(header, frames, &data));
1541 1744
1542 test::CompareCharArraysWithHexError("constructed packet", 1745 test::CompareCharArraysWithHexError("constructed packet",
1543 data->data(), data->length(), 1746 data->data(), data->length(),
1544 AsChars(packet), arraysize(packet)); 1747 AsChars(packet), arraysize(packet));
1545 1748
1546 delete data; 1749 delete data;
1547 } 1750 }
1548 1751
1549 TEST_F(QuicFramerTest, ConstructAckFramePacketInvalidFeedback) { 1752 TEST_F(QuicFramerTest, ConstructAckFramePacketInvalidFeedback) {
1550 QuicPacketHeader header; 1753 QuicPacketHeader header;
1551 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1754 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1552 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1755 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1553 header.flags = PACKET_FLAGS_NONE; 1756 header.flags = PACKET_FLAGS_NONE;
1554 header.fec_group = 0; 1757 header.fec_group = 0;
1555 1758
1556 QuicAckFrame ack_frame; 1759 QuicAckFrame ack_frame;
1557 ack_frame.received_info.RecordAck( 1760 ack_frame.received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1558 GG_UINT64_C(0x0123456789ABA), 1761 ack_frame.received_info.time_received =
1559 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1762 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1560 ack_frame.received_info.RecordAck( 1763 ack_frame.received_info.missing_packets.insert(
1561 GG_UINT64_C(0x0123456789ABB), 1764 GG_UINT64_C(0x0123456789ABB));
1562 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1765 ack_frame.received_info.missing_packets.insert(
1563 ack_frame.received_info.RecordAck( 1766 GG_UINT64_C(0x0123456789ABA));
1564 GG_UINT64_C(0x0123456789ABD),
1565 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1566 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1767 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1768 ack_frame.sent_info.non_retransmiting.insert(
1769 GG_UINT64_C(0x0123456789AB0));
1770 ack_frame.sent_info.non_retransmiting.insert(
1771 GG_UINT64_C(0x0123456789AAF));
1772 ack_frame.sent_info.non_retransmiting.insert(
1773 GG_UINT64_C(0x0123456789AAE));
1567 ack_frame.congestion_info.type = 1774 ack_frame.congestion_info.type =
1568 static_cast<CongestionFeedbackType>(kFixRate + 1); 1775 static_cast<CongestionFeedbackType>(kFixRate + 1);
1569 1776
1570 QuicFrame frame; 1777 QuicFrame frame;
1571 frame.type = ACK_FRAME; 1778 frame.type = ACK_FRAME;
1572 frame.ack_frame = &ack_frame; 1779 frame.ack_frame = &ack_frame;
1573 1780
1574 QuicFrames frames; 1781 QuicFrames frames;
1575 frames.push_back(frame); 1782 frames.push_back(frame);
1576 1783
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1850 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1644 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1851 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1645 header.flags = PACKET_FLAGS_NONE; 1852 header.flags = PACKET_FLAGS_NONE;
1646 header.fec_group = 0; 1853 header.fec_group = 0;
1647 1854
1648 QuicConnectionCloseFrame close_frame; 1855 QuicConnectionCloseFrame close_frame;
1649 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 1856 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
1650 close_frame.error_details = "because I can"; 1857 close_frame.error_details = "because I can";
1651 1858
1652 QuicAckFrame* ack_frame = &close_frame.ack_frame; 1859 QuicAckFrame* ack_frame = &close_frame.ack_frame;
1653 ack_frame->received_info.RecordAck( 1860 ack_frame->received_info.largest_received = GG_UINT64_C(0x0123456789ABC);
1654 GG_UINT64_C(0x0123456789ABA), 1861 ack_frame->received_info.time_received =
1655 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687))); 1862 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59687));
1656 ack_frame->received_info.RecordAck( 1863 ack_frame->received_info.missing_packets.insert(
1657 GG_UINT64_C(0x0123456789ABB), 1864 GG_UINT64_C(0x0123456789ABB));
1658 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59688))); 1865 ack_frame->received_info.missing_packets.insert(
1659 ack_frame->received_info.RecordAck( 1866 GG_UINT64_C(0x0123456789ABA));
1660 GG_UINT64_C(0x0123456789ABD),
1661 QuicTime::FromMicroseconds(GG_UINT64_C(0x07E1D2C3B4A59689)));
1662 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 1867 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
1868 ack_frame->sent_info.non_retransmiting.insert(
1869 GG_UINT64_C(0x0123456789AB0));
1870 ack_frame->sent_info.non_retransmiting.insert(
1871 GG_UINT64_C(0x0123456789AAF));
1872 ack_frame->sent_info.non_retransmiting.insert(
1873 GG_UINT64_C(0x0123456789AAE));
1663 ack_frame->congestion_info.type = kInterArrival; 1874 ack_frame->congestion_info.type = kInterArrival;
1664 ack_frame->congestion_info.inter_arrival.accumulated_number_of_lost_packets 1875 ack_frame->congestion_info.inter_arrival.accumulated_number_of_lost_packets
1665 = 0x0302; 1876 = 0x0302;
1666 ack_frame->congestion_info.inter_arrival.offset_time = 0x0504; 1877 ack_frame->congestion_info.inter_arrival.offset_time = 0x0504;
1667 ack_frame->congestion_info.inter_arrival.delta_time = 0x0706; 1878 ack_frame->congestion_info.inter_arrival.delta_time = 0x0706;
1668 1879
1669 QuicFrame frame(&close_frame); 1880 QuicFrame frame(&close_frame);
1670 1881
1671 QuicFrames frames; 1882 QuicFrames frames;
1672 frames.push_back(frame); 1883 frames.push_back(frame);
(...skipping 18 matching lines...) Expand all
1691 0x08, 0x07, 0x06, 0x05, 1902 0x08, 0x07, 0x06, 0x05,
1692 // error details length 1903 // error details length
1693 0x0d, 0x00, 1904 0x0d, 0x00,
1694 // error details 1905 // error details
1695 'b', 'e', 'c', 'a', 1906 'b', 'e', 'c', 'a',
1696 'u', 's', 'e', ' ', 1907 'u', 's', 'e', ' ',
1697 'I', ' ', 'c', 'a', 1908 'I', ' ', 'c', 'a',
1698 'n', 1909 'n',
1699 1910
1700 // Ack frame. 1911 // Ack frame.
1701 // num_acked_packets 1912
1702 0x03, 1913 // largest received packet sequence number
1703 // smallest received packet sequence number 1914 0xBC, 0x9A, 0x78, 0x56,
1915 0x34, 0x12,
1916 // time delta
1917 0x87, 0x96, 0xA5, 0xB4,
1918 0xC3, 0xD2, 0xE1, 0x07,
1919 // num_unacked_packets
1920 0x02,
1921 #if defined(OS_WIN)
1922 // Windows hash_set order is different.
1923 // unacked packet sequence number
1924 0xBB, 0x9A, 0x78, 0x56,
1925 0x34, 0x12,
1926 // unacked packet sequence number
1704 0xBA, 0x9A, 0x78, 0x56, 1927 0xBA, 0x9A, 0x78, 0x56,
1705 0x34, 0x12, 1928 0x34, 0x12,
1706 // time 1929 #else
1707 0x87, 0x96, 0xA5, 0xB4, 1930 // unacked packet sequence number
1708 0xC3, 0xD2, 0xE1, 0x07, 1931 0xBA, 0x9A, 0x78, 0x56,
1709 // sequence delta 1932 0x34, 0x12,
1710 0x01, 1933 // unacked packet sequence number
1711 // time delta 1934 0xBB, 0x9A, 0x78, 0x56,
1712 0x01, 0x00, 0x00, 0x00, 1935 0x34, 0x12,
1713 // sequence delta (skip one packet) 1936 #endif
1714 0x03,
1715 // time delta
1716 0x02, 0x00, 0x00, 0x00,
1717
1718 // least packet sequence number awaiting an ack 1937 // least packet sequence number awaiting an ack
1719 0xA0, 0x9A, 0x78, 0x56, 1938 0xA0, 0x9A, 0x78, 0x56,
1720 0x34, 0x12, 1939 0x34, 0x12,
1940 // num non retransmitting packets
1941 0x03,
1942 #if defined(OS_WIN)
1943 // Windows hash_set order is different.
1944 // non retransmitting packet sequence number
1945 0xB0, 0x9A, 0x78, 0x56,
1946 0x34, 0x12,
1947 // non retransmitting packet sequence number
1948 0xAF, 0x9A, 0x78, 0x56,
1949 0x34, 0x12,
1950 // non retransmitting packet sequence number
1951 0xAE, 0x9A, 0x78, 0x56,
1952 0x34, 0x12,
1953 #else
1954 // non retransmitting packet sequence number
1955 0xAE, 0x9A, 0x78, 0x56,
1956 0x34, 0x12,
1957 // non retransmitting packet sequence number
1958 0xAF, 0x9A, 0x78, 0x56,
1959 0x34, 0x12,
1960 // non retransmitting packet sequence number
1961 0xB0, 0x9A, 0x78, 0x56,
1962 0x34, 0x12,
1963 #endif
1721 // congestion feedback type (inter arrival) 1964 // congestion feedback type (inter arrival)
1722 0x02, 1965 0x02,
1723 // accumulated_number_of_lost_packets 1966 // accumulated_number_of_lost_packets
1724 0x02, 0x03, 1967 0x02, 0x03,
1725 // offset_time 1968 // offset_time
1726 0x04, 0x05, 1969 0x04, 0x05,
1727 // delta_time 1970 // delta_time
1728 0x06, 0x07, 1971 0x06, 0x07,
1729 }; 1972 };
1730 1973
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 QuicPacket raw(AsChars(packet), arraysize(packet), false, PACKET_FLAGS_NONE); 2050 QuicPacket raw(AsChars(packet), arraysize(packet), false, PACKET_FLAGS_NONE);
1808 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(raw)); 2051 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(raw));
1809 2052
1810 ASSERT_TRUE(encrypted.get() != NULL); 2053 ASSERT_TRUE(encrypted.get() != NULL);
1811 EXPECT_TRUE(CheckEncryption(StringPiece(AsChars(packet), arraysize(packet)))); 2054 EXPECT_TRUE(CheckEncryption(StringPiece(AsChars(packet), arraysize(packet))));
1812 } 2055 }
1813 2056
1814 } // namespace test 2057 } // namespace test
1815 2058
1816 } // namespace net 2059 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698