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

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

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