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