OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |