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 "net/quic/core/quic_framer.h" | 5 #include "net/quic/core/quic_framer.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
11 #include <memory> | 11 #include <memory> |
12 #include <string> | 12 #include <string> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/memory/ptr_util.h" | 16 #include "base/memory/ptr_util.h" |
17 #include "net/quic/core/crypto/null_decrypter.h" | 17 #include "net/quic/core/crypto/null_decrypter.h" |
18 #include "net/quic/core/crypto/quic_decrypter.h" | 18 #include "net/quic/core/crypto/quic_decrypter.h" |
19 #include "net/quic/core/crypto/quic_encrypter.h" | 19 #include "net/quic/core/crypto/quic_encrypter.h" |
20 #include "net/quic/core/quic_protocol.h" | 20 #include "net/quic/core/quic_packets.h" |
21 #include "net/quic/core/quic_utils.h" | 21 #include "net/quic/core/quic_utils.h" |
22 #include "net/quic/test_tools/quic_framer_peer.h" | 22 #include "net/quic/test_tools/quic_framer_peer.h" |
23 #include "net/quic/test_tools/quic_test_utils.h" | 23 #include "net/quic/test_tools/quic_test_utils.h" |
24 #include "net/test/gtest_util.h" | 24 #include "net/test/gtest_util.h" |
25 | 25 |
26 using base::StringPiece; | 26 using base::StringPiece; |
27 using std::make_pair; | 27 using std::make_pair; |
28 using std::map; | 28 using std::map; |
29 using std::numeric_limits; | 29 using std::numeric_limits; |
30 using std::pair; | 30 using std::pair; |
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 | 1108 |
1109 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { | 1109 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { |
1110 // Test the case when a packet is received from the past and future packet | 1110 // Test the case when a packet is received from the past and future packet |
1111 // numbers are still calculated relative to the largest received packet. | 1111 // numbers are still calculated relative to the largest received packet. |
1112 QuicPacketHeader header; | 1112 QuicPacketHeader header; |
1113 header.public_header.connection_id = kConnectionId; | 1113 header.public_header.connection_id = kConnectionId; |
1114 header.public_header.reset_flag = false; | 1114 header.public_header.reset_flag = false; |
1115 header.public_header.version_flag = false; | 1115 header.public_header.version_flag = false; |
1116 header.packet_number = kPacketNumber - 2; | 1116 header.packet_number = kPacketNumber - 2; |
1117 | 1117 |
1118 QuicPaddingFrame padding_frame; | 1118 QuicFrames frames = {QuicFrame(QuicPaddingFrame())}; |
1119 QuicFrames frames; | |
1120 frames.push_back(QuicFrame(padding_frame)); | |
1121 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 1119 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
1122 ASSERT_TRUE(data != nullptr); | 1120 ASSERT_TRUE(data != nullptr); |
1123 | 1121 |
1124 QuicEncryptedPacket encrypted(data->data(), data->length(), false); | 1122 QuicEncryptedPacket encrypted(data->data(), data->length(), false); |
1125 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1123 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1126 ASSERT_TRUE(visitor_.header_.get()); | 1124 ASSERT_TRUE(visitor_.header_.get()); |
1127 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 1125 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
1128 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | 1126 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
1129 visitor_.header_->public_header.packet_number_length); | 1127 visitor_.header_->public_header.packet_number_length); |
1130 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->packet_number); | 1128 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->packet_number); |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1611 // clang-format on | 1609 // clang-format on |
1612 | 1610 |
1613 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1611 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1614 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1612 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1615 | 1613 |
1616 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1614 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1617 ASSERT_TRUE(visitor_.public_header_.get()); | 1615 ASSERT_TRUE(visitor_.public_header_.get()); |
1618 ASSERT_FALSE(visitor_.header_.get()); | 1616 ASSERT_FALSE(visitor_.header_.get()); |
1619 } | 1617 } |
1620 | 1618 |
1621 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) { | 1619 TEST_P(QuicFramerTest, AckFrameOneAckBlock) { |
1622 // clang-format off | 1620 // clang-format off |
1623 unsigned char packet[] = { | 1621 unsigned char packet[] = { |
1624 // public flags (8 byte connection_id) | 1622 // public flags (8 byte connection_id) |
1625 0x3C, | 1623 0x3C, |
1626 // connection_id | 1624 // connection_id |
1627 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1625 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
1628 // packet number | 1626 // packet number |
1629 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1627 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
1630 | 1628 |
1631 // frame type (ack frame) | 1629 // frame type (ack frame) |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1680 CheckProcessingFails( | 1678 CheckProcessingFails( |
1681 packet, | 1679 packet, |
1682 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, | 1680 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
1683 !kIncludeVersion, !kIncludePathId, | 1681 !kIncludeVersion, !kIncludePathId, |
1684 !kIncludeDiversificationNonce, | 1682 !kIncludeDiversificationNonce, |
1685 PACKET_6BYTE_PACKET_NUMBER), | 1683 PACKET_6BYTE_PACKET_NUMBER), |
1686 expected_error, QUIC_INVALID_ACK_DATA); | 1684 expected_error, QUIC_INVALID_ACK_DATA); |
1687 } | 1685 } |
1688 } | 1686 } |
1689 | 1687 |
1690 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) { | 1688 TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) { |
1691 // clang-format off | 1689 // clang-format off |
1692 unsigned char packet[] = { | 1690 unsigned char packet[] = { |
1693 // public flags (8 byte connection_id) | 1691 // public flags (8 byte connection_id) |
1694 0x3C, | 1692 0x3C, |
1695 // connection_id | 1693 // connection_id |
1696 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1694 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
1697 // packet number | 1695 // packet number |
1698 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1696 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
1699 | 1697 |
1700 // frame type (ack frame) | 1698 // frame type (ack frame) |
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2544 } | 2542 } |
2545 } | 2543 } |
2546 | 2544 |
2547 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2545 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
2548 QuicPacketHeader header; | 2546 QuicPacketHeader header; |
2549 header.public_header.connection_id = kConnectionId; | 2547 header.public_header.connection_id = kConnectionId; |
2550 header.public_header.reset_flag = false; | 2548 header.public_header.reset_flag = false; |
2551 header.public_header.version_flag = false; | 2549 header.public_header.version_flag = false; |
2552 header.packet_number = kPacketNumber; | 2550 header.packet_number = kPacketNumber; |
2553 | 2551 |
2554 QuicPaddingFrame padding_frame; | 2552 QuicFrames frames = {QuicFrame(QuicPaddingFrame())}; |
2555 | |
2556 QuicFrames frames; | |
2557 frames.push_back(QuicFrame(padding_frame)); | |
2558 | 2553 |
2559 // clang-format off | 2554 // clang-format off |
2560 unsigned char packet[kMaxPacketSize] = { | 2555 unsigned char packet[kMaxPacketSize] = { |
2561 // public flags (8 byte connection_id) | 2556 // public flags (8 byte connection_id) |
2562 0x38, | 2557 0x38, |
2563 // connection_id | 2558 // connection_id |
2564 0x10, 0x32, 0x54, 0x76, | 2559 0x10, 0x32, 0x54, 0x76, |
2565 0x98, 0xBA, 0xDC, 0xFE, | 2560 0x98, 0xBA, 0xDC, 0xFE, |
2566 // packet number | 2561 // packet number |
2567 0xBC, 0x9A, 0x78, 0x56, | 2562 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 20 matching lines...) Expand all Loading... |
2588 } | 2583 } |
2589 | 2584 |
2590 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 2585 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
2591 QuicPacketHeader header; | 2586 QuicPacketHeader header; |
2592 header.public_header.connection_id = kConnectionId; | 2587 header.public_header.connection_id = kConnectionId; |
2593 header.public_header.reset_flag = false; | 2588 header.public_header.reset_flag = false; |
2594 header.public_header.version_flag = false; | 2589 header.public_header.version_flag = false; |
2595 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 2590 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; |
2596 header.packet_number = kPacketNumber; | 2591 header.packet_number = kPacketNumber; |
2597 | 2592 |
2598 QuicPaddingFrame padding_frame; | 2593 QuicFrames frames = {QuicFrame(QuicPaddingFrame())}; |
2599 | |
2600 QuicFrames frames; | |
2601 frames.push_back(QuicFrame(padding_frame)); | |
2602 | 2594 |
2603 // clang-format off | 2595 // clang-format off |
2604 unsigned char packet[kMaxPacketSize] = { | 2596 unsigned char packet[kMaxPacketSize] = { |
2605 // public flags (8 byte connection_id and 4 byte packet number) | 2597 // public flags (8 byte connection_id and 4 byte packet number) |
2606 0x28, | 2598 0x28, |
2607 // connection_id | 2599 // connection_id |
2608 0x10, 0x32, 0x54, 0x76, | 2600 0x10, 0x32, 0x54, 0x76, |
2609 0x98, 0xBA, 0xDC, 0xFE, | 2601 0x98, 0xBA, 0xDC, 0xFE, |
2610 // packet number | 2602 // packet number |
2611 0xBC, 0x9A, 0x78, 0x56, | 2603 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 19 matching lines...) Expand all Loading... |
2631 } | 2623 } |
2632 | 2624 |
2633 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 2625 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
2634 QuicPacketHeader header; | 2626 QuicPacketHeader header; |
2635 header.public_header.connection_id = kConnectionId; | 2627 header.public_header.connection_id = kConnectionId; |
2636 header.public_header.reset_flag = false; | 2628 header.public_header.reset_flag = false; |
2637 header.public_header.version_flag = false; | 2629 header.public_header.version_flag = false; |
2638 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 2630 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; |
2639 header.packet_number = kPacketNumber; | 2631 header.packet_number = kPacketNumber; |
2640 | 2632 |
2641 QuicPaddingFrame padding_frame; | 2633 QuicFrames frames = {QuicFrame(QuicPaddingFrame())}; |
2642 | |
2643 QuicFrames frames; | |
2644 frames.push_back(QuicFrame(padding_frame)); | |
2645 | 2634 |
2646 // clang-format off | 2635 // clang-format off |
2647 unsigned char packet[kMaxPacketSize] = { | 2636 unsigned char packet[kMaxPacketSize] = { |
2648 // public flags (8 byte connection_id and 2 byte packet number) | 2637 // public flags (8 byte connection_id and 2 byte packet number) |
2649 0x18, | 2638 0x18, |
2650 // connection_id | 2639 // connection_id |
2651 0x10, 0x32, 0x54, 0x76, | 2640 0x10, 0x32, 0x54, 0x76, |
2652 0x98, 0xBA, 0xDC, 0xFE, | 2641 0x98, 0xBA, 0xDC, 0xFE, |
2653 // packet number | 2642 // packet number |
2654 0xBC, 0x9A, | 2643 0xBC, 0x9A, |
(...skipping 19 matching lines...) Expand all Loading... |
2674 } | 2663 } |
2675 | 2664 |
2676 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 2665 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
2677 QuicPacketHeader header; | 2666 QuicPacketHeader header; |
2678 header.public_header.connection_id = kConnectionId; | 2667 header.public_header.connection_id = kConnectionId; |
2679 header.public_header.reset_flag = false; | 2668 header.public_header.reset_flag = false; |
2680 header.public_header.version_flag = false; | 2669 header.public_header.version_flag = false; |
2681 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 2670 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; |
2682 header.packet_number = kPacketNumber; | 2671 header.packet_number = kPacketNumber; |
2683 | 2672 |
2684 QuicPaddingFrame padding_frame; | 2673 QuicFrames frames = {QuicFrame(QuicPaddingFrame())}; |
2685 | |
2686 QuicFrames frames; | |
2687 frames.push_back(QuicFrame(padding_frame)); | |
2688 | 2674 |
2689 // clang-format off | 2675 // clang-format off |
2690 unsigned char packet[kMaxPacketSize] = { | 2676 unsigned char packet[kMaxPacketSize] = { |
2691 // public flags (8 byte connection_id and 1 byte packet number) | 2677 // public flags (8 byte connection_id and 1 byte packet number) |
2692 0x08, | 2678 0x08, |
2693 // connection_id | 2679 // connection_id |
2694 0x10, 0x32, 0x54, 0x76, | 2680 0x10, 0x32, 0x54, 0x76, |
2695 0x98, 0xBA, 0xDC, 0xFE, | 2681 0x98, 0xBA, 0xDC, 0xFE, |
2696 // packet number | 2682 // packet number |
2697 0xBC, | 2683 0xBC, |
(...skipping 21 matching lines...) Expand all Loading... |
2719 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 2705 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
2720 QuicPacketHeader header; | 2706 QuicPacketHeader header; |
2721 header.public_header.connection_id = kConnectionId; | 2707 header.public_header.connection_id = kConnectionId; |
2722 header.public_header.reset_flag = false; | 2708 header.public_header.reset_flag = false; |
2723 header.public_header.version_flag = false; | 2709 header.public_header.version_flag = false; |
2724 header.packet_number = kPacketNumber; | 2710 header.packet_number = kPacketNumber; |
2725 | 2711 |
2726 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 2712 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
2727 StringPiece("hello world!")); | 2713 StringPiece("hello world!")); |
2728 | 2714 |
2729 QuicFrames frames; | 2715 QuicFrames frames = {QuicFrame(&stream_frame)}; |
2730 frames.push_back(QuicFrame(&stream_frame)); | |
2731 | 2716 |
2732 // clang-format off | 2717 // clang-format off |
2733 unsigned char packet[] = { | 2718 unsigned char packet[] = { |
2734 // public flags (8 byte connection_id) | 2719 // public flags (8 byte connection_id) |
2735 0x38, | 2720 0x38, |
2736 // connection_id | 2721 // connection_id |
2737 0x10, 0x32, 0x54, 0x76, | 2722 0x10, 0x32, 0x54, 0x76, |
2738 0x98, 0xBA, 0xDC, 0xFE, | 2723 0x98, 0xBA, 0xDC, 0xFE, |
2739 // packet number | 2724 // packet number |
2740 0xBC, 0x9A, 0x78, 0x56, | 2725 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 23 matching lines...) Expand all Loading... |
2764 | 2749 |
2765 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 2750 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
2766 QuicPacketHeader header; | 2751 QuicPacketHeader header; |
2767 header.public_header.connection_id = kConnectionId; | 2752 header.public_header.connection_id = kConnectionId; |
2768 header.public_header.reset_flag = false; | 2753 header.public_header.reset_flag = false; |
2769 header.public_header.version_flag = true; | 2754 header.public_header.version_flag = true; |
2770 header.packet_number = kPacketNumber; | 2755 header.packet_number = kPacketNumber; |
2771 | 2756 |
2772 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 2757 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
2773 StringPiece("hello world!")); | 2758 StringPiece("hello world!")); |
2774 | 2759 QuicFrames frames = {QuicFrame(&stream_frame)}; |
2775 QuicFrames frames; | |
2776 frames.push_back(QuicFrame(&stream_frame)); | |
2777 | 2760 |
2778 // clang-format off | 2761 // clang-format off |
2779 unsigned char packet[] = { | 2762 unsigned char packet[] = { |
2780 // public flags (version, 8 byte connection_id) | 2763 // public flags (version, 8 byte connection_id) |
2781 static_cast<unsigned char>( | 2764 static_cast<unsigned char>( |
2782 FLAGS_quic_remove_v33_hacks2 ? 0x39 : 0x3D), | 2765 FLAGS_quic_remove_v33_hacks2 ? 0x39 : 0x3D), |
2783 // connection_id | 2766 // connection_id |
2784 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2767 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2785 // version tag | 2768 // version tag |
2786 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 2769 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
(...skipping 24 matching lines...) Expand all Loading... |
2811 QuicPacketHeader header; | 2794 QuicPacketHeader header; |
2812 header.public_header.connection_id = kConnectionId; | 2795 header.public_header.connection_id = kConnectionId; |
2813 header.public_header.multipath_flag = true; | 2796 header.public_header.multipath_flag = true; |
2814 header.public_header.reset_flag = false; | 2797 header.public_header.reset_flag = false; |
2815 header.public_header.version_flag = false; | 2798 header.public_header.version_flag = false; |
2816 header.path_id = kPathId; | 2799 header.path_id = kPathId; |
2817 header.packet_number = kPacketNumber; | 2800 header.packet_number = kPacketNumber; |
2818 | 2801 |
2819 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 2802 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
2820 StringPiece("hello world!")); | 2803 StringPiece("hello world!")); |
2821 | 2804 QuicFrames frames = {QuicFrame(&stream_frame)}; |
2822 QuicFrames frames; | |
2823 frames.push_back(QuicFrame(&stream_frame)); | |
2824 | 2805 |
2825 // clang-format off | 2806 // clang-format off |
2826 unsigned char packet[] = { | 2807 unsigned char packet[] = { |
2827 // public flags (8 byte connection_id) | 2808 // public flags (8 byte connection_id) |
2828 0x78, | 2809 0x78, |
2829 // connection_id | 2810 // connection_id |
2830 0x10, 0x32, 0x54, 0x76, | 2811 0x10, 0x32, 0x54, 0x76, |
2831 0x98, 0xBA, 0xDC, 0xFE, | 2812 0x98, 0xBA, 0xDC, 0xFE, |
2832 // path_id | 2813 // path_id |
2833 0x42, | 2814 0x42, |
(...skipping 27 matching lines...) Expand all Loading... |
2861 QuicPacketHeader header; | 2842 QuicPacketHeader header; |
2862 header.public_header.connection_id = kConnectionId; | 2843 header.public_header.connection_id = kConnectionId; |
2863 header.public_header.multipath_flag = true; | 2844 header.public_header.multipath_flag = true; |
2864 header.public_header.reset_flag = false; | 2845 header.public_header.reset_flag = false; |
2865 header.public_header.version_flag = true; | 2846 header.public_header.version_flag = true; |
2866 header.path_id = kPathId; | 2847 header.path_id = kPathId; |
2867 header.packet_number = kPacketNumber; | 2848 header.packet_number = kPacketNumber; |
2868 | 2849 |
2869 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | 2850 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
2870 StringPiece("hello world!")); | 2851 StringPiece("hello world!")); |
2871 | 2852 QuicFrames frames = {QuicFrame(&stream_frame)}; |
2872 QuicFrames frames; | |
2873 frames.push_back(QuicFrame(&stream_frame)); | |
2874 | 2853 |
2875 // clang-format off | 2854 // clang-format off |
2876 unsigned char packet[] = { | 2855 unsigned char packet[] = { |
2877 // public flags (8 byte connection_id) | 2856 // public flags (8 byte connection_id) |
2878 static_cast<unsigned char>( | 2857 static_cast<unsigned char>( |
2879 FLAGS_quic_remove_v33_hacks2 ? 0x79 : 0x7D), | 2858 FLAGS_quic_remove_v33_hacks2 ? 0x79 : 0x7D), |
2880 // connection_id | 2859 // connection_id |
2881 0x10, 0x32, 0x54, 0x76, | 2860 0x10, 0x32, 0x54, 0x76, |
2882 0x98, 0xBA, 0xDC, 0xFE, | 2861 0x98, 0xBA, 0xDC, 0xFE, |
2883 // version tag | 2862 // version tag |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2925 | 2904 |
2926 QuicConnectionId connection_id = kConnectionId; | 2905 QuicConnectionId connection_id = kConnectionId; |
2927 std::unique_ptr<QuicEncryptedPacket> data( | 2906 std::unique_ptr<QuicEncryptedPacket> data( |
2928 framer_.BuildVersionNegotiationPacket(connection_id, | 2907 framer_.BuildVersionNegotiationPacket(connection_id, |
2929 SupportedVersions(GetParam()))); | 2908 SupportedVersions(GetParam()))); |
2930 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2909 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
2931 data->length(), AsChars(packet), | 2910 data->length(), AsChars(packet), |
2932 arraysize(packet)); | 2911 arraysize(packet)); |
2933 } | 2912 } |
2934 | 2913 |
2935 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { | 2914 TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) { |
2936 QuicPacketHeader header; | 2915 QuicPacketHeader header; |
2937 header.public_header.connection_id = kConnectionId; | 2916 header.public_header.connection_id = kConnectionId; |
2938 header.public_header.reset_flag = false; | 2917 header.public_header.reset_flag = false; |
2939 header.public_header.version_flag = false; | 2918 header.public_header.version_flag = false; |
2940 header.packet_number = kPacketNumber; | 2919 header.packet_number = kPacketNumber; |
2941 | 2920 |
2942 // Use kSmallLargestObserved to make this test finished in a short time. | 2921 // Use kSmallLargestObserved to make this test finished in a short time. |
2943 QuicAckFrame ack_frame; | 2922 QuicAckFrame ack_frame; |
2944 ack_frame.largest_observed = kSmallLargestObserved; | 2923 ack_frame.largest_observed = kSmallLargestObserved; |
2945 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 2924 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
2946 ack_frame.packets.Add(1, kSmallLargestObserved + 1); | 2925 ack_frame.packets.Add(1, kSmallLargestObserved + 1); |
2947 | 2926 |
2948 QuicFrames frames; | 2927 QuicFrames frames = {QuicFrame(&ack_frame)}; |
2949 frames.push_back(QuicFrame(&ack_frame)); | |
2950 | 2928 |
2951 // clang-format off | 2929 // clang-format off |
2952 unsigned char packet[] = { | 2930 unsigned char packet[] = { |
2953 // public flags (8 byte connection_id) | 2931 // public flags (8 byte connection_id) |
2954 0x38, | 2932 0x38, |
2955 // connection_id | 2933 // connection_id |
2956 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2934 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
2957 // packet number | 2935 // packet number |
2958 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2936 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
2959 | 2937 |
(...skipping 12 matching lines...) Expand all Loading... |
2972 // clang-format on | 2950 // clang-format on |
2973 | 2951 |
2974 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2952 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
2975 ASSERT_TRUE(data != nullptr); | 2953 ASSERT_TRUE(data != nullptr); |
2976 | 2954 |
2977 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2955 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
2978 data->length(), AsChars(packet), | 2956 data->length(), AsChars(packet), |
2979 arraysize(packet)); | 2957 arraysize(packet)); |
2980 } | 2958 } |
2981 | 2959 |
2982 TEST_P(QuicFramerTest, BuildNewAckFramePacketMultipleAckBlocks) { | 2960 TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) { |
2983 QuicPacketHeader header; | 2961 QuicPacketHeader header; |
2984 header.public_header.connection_id = kConnectionId; | 2962 header.public_header.connection_id = kConnectionId; |
2985 header.public_header.reset_flag = false; | 2963 header.public_header.reset_flag = false; |
2986 header.public_header.version_flag = false; | 2964 header.public_header.version_flag = false; |
2987 header.packet_number = kPacketNumber; | 2965 header.packet_number = kPacketNumber; |
2988 | 2966 |
2989 // Use kSmallLargestObserved to make this test finished in a short time. | 2967 // Use kSmallLargestObserved to make this test finished in a short time. |
2990 QuicAckFrame ack_frame; | 2968 QuicAckFrame ack_frame; |
2991 ack_frame.largest_observed = kSmallLargestObserved; | 2969 ack_frame.largest_observed = kSmallLargestObserved; |
2992 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 2970 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
2993 ack_frame.packets.Add(1, 5); | 2971 ack_frame.packets.Add(1, 5); |
2994 ack_frame.packets.Add(10, 500); | 2972 ack_frame.packets.Add(10, 500); |
2995 ack_frame.packets.Add(900, kSmallMissingPacket); | 2973 ack_frame.packets.Add(900, kSmallMissingPacket); |
2996 ack_frame.packets.Add(kSmallMissingPacket + 1, kSmallLargestObserved + 1); | 2974 ack_frame.packets.Add(kSmallMissingPacket + 1, kSmallLargestObserved + 1); |
2997 | 2975 |
2998 QuicFrames frames; | 2976 QuicFrames frames = {QuicFrame(&ack_frame)}; |
2999 frames.push_back(QuicFrame(&ack_frame)); | |
3000 | 2977 |
3001 // clang-format off | 2978 // clang-format off |
3002 unsigned char packet[] = { | 2979 unsigned char packet[] = { |
3003 // public flags (8 byte connection_id) | 2980 // public flags (8 byte connection_id) |
3004 0x38, | 2981 0x38, |
3005 // connection_id | 2982 // connection_id |
3006 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 2983 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
3007 // packet number | 2984 // packet number |
3008 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 2985 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
3009 | 2986 |
(...skipping 30 matching lines...) Expand all Loading... |
3040 // clang-format on | 3017 // clang-format on |
3041 | 3018 |
3042 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3019 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3043 ASSERT_TRUE(data != nullptr); | 3020 ASSERT_TRUE(data != nullptr); |
3044 | 3021 |
3045 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3022 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3046 data->length(), AsChars(packet), | 3023 data->length(), AsChars(packet), |
3047 arraysize(packet)); | 3024 arraysize(packet)); |
3048 } | 3025 } |
3049 | 3026 |
3050 TEST_P(QuicFramerTest, BuildNewAckFramePacketMaxAckBlocks) { | 3027 TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) { |
3051 QuicPacketHeader header; | 3028 QuicPacketHeader header; |
3052 header.public_header.connection_id = kConnectionId; | 3029 header.public_header.connection_id = kConnectionId; |
3053 header.public_header.reset_flag = false; | 3030 header.public_header.reset_flag = false; |
3054 header.public_header.version_flag = false; | 3031 header.public_header.version_flag = false; |
3055 header.packet_number = kPacketNumber; | 3032 header.packet_number = kPacketNumber; |
3056 | 3033 |
3057 // Use kSmallLargestObservedto make this test finished in a short time. | 3034 // Use kSmallLargestObservedto make this test finished in a short time. |
3058 QuicAckFrame ack_frame; | 3035 QuicAckFrame ack_frame; |
3059 ack_frame.largest_observed = kSmallLargestObserved; | 3036 ack_frame.largest_observed = kSmallLargestObserved; |
3060 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); | 3037 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); |
3061 // 300 ack blocks. | 3038 // 300 ack blocks. |
3062 for (size_t i = 2; i < 2 * 300; i += 2) { | 3039 for (size_t i = 2; i < 2 * 300; i += 2) { |
3063 ack_frame.packets.Add(i); | 3040 ack_frame.packets.Add(i); |
3064 } | 3041 } |
3065 ack_frame.packets.Add(600, kSmallLargestObserved + 1); | 3042 ack_frame.packets.Add(600, kSmallLargestObserved + 1); |
3066 | 3043 |
3067 QuicFrames frames; | 3044 QuicFrames frames = {QuicFrame(&ack_frame)}; |
3068 frames.push_back(QuicFrame(&ack_frame)); | |
3069 | 3045 |
3070 // clang-format off | 3046 // clang-format off |
3071 unsigned char packet[] = { | 3047 unsigned char packet[] = { |
3072 // public flags (8 byte connection_id) | 3048 // public flags (8 byte connection_id) |
3073 0x38, | 3049 0x38, |
3074 // connection_id | 3050 // connection_id |
3075 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3051 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
3076 // packet number | 3052 // packet number |
3077 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3053 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
3078 // frame type (ack frame) | 3054 // frame type (ack frame) |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3172 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { | 3148 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { |
3173 QuicPacketHeader header; | 3149 QuicPacketHeader header; |
3174 header.public_header.connection_id = kConnectionId; | 3150 header.public_header.connection_id = kConnectionId; |
3175 header.public_header.reset_flag = false; | 3151 header.public_header.reset_flag = false; |
3176 header.public_header.version_flag = false; | 3152 header.public_header.version_flag = false; |
3177 header.packet_number = kPacketNumber; | 3153 header.packet_number = kPacketNumber; |
3178 | 3154 |
3179 QuicStopWaitingFrame stop_waiting_frame; | 3155 QuicStopWaitingFrame stop_waiting_frame; |
3180 stop_waiting_frame.least_unacked = kLeastUnacked; | 3156 stop_waiting_frame.least_unacked = kLeastUnacked; |
3181 | 3157 |
3182 QuicFrames frames; | 3158 QuicFrames frames = {QuicFrame(&stop_waiting_frame)}; |
3183 frames.push_back(QuicFrame(&stop_waiting_frame)); | |
3184 | 3159 |
3185 // clang-format off | 3160 // clang-format off |
3186 unsigned char packet[] = { | 3161 unsigned char packet[] = { |
3187 // public flags (8 byte connection_id) | 3162 // public flags (8 byte connection_id) |
3188 0x38, | 3163 0x38, |
3189 // connection_id | 3164 // connection_id |
3190 0x10, 0x32, 0x54, 0x76, | 3165 0x10, 0x32, 0x54, 0x76, |
3191 0x98, 0xBA, 0xDC, 0xFE, | 3166 0x98, 0xBA, 0xDC, 0xFE, |
3192 // packet number | 3167 // packet number |
3193 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3168 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3236 // stream id | 3211 // stream id |
3237 0x04, 0x03, 0x02, 0x01, | 3212 0x04, 0x03, 0x02, 0x01, |
3238 // sent byte offset | 3213 // sent byte offset |
3239 0x01, 0x02, 0x03, 0x04, | 3214 0x01, 0x02, 0x03, 0x04, |
3240 0x05, 0x06, 0x07, 0x08, | 3215 0x05, 0x06, 0x07, 0x08, |
3241 // error code | 3216 // error code |
3242 0x08, 0x07, 0x06, 0x05, | 3217 0x08, 0x07, 0x06, 0x05, |
3243 }; | 3218 }; |
3244 // clang-format on | 3219 // clang-format on |
3245 | 3220 |
3246 QuicFrames frames; | 3221 QuicFrames frames = {QuicFrame(&rst_frame)}; |
3247 frames.push_back(QuicFrame(&rst_frame)); | |
3248 | 3222 |
3249 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3223 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3250 ASSERT_TRUE(data != nullptr); | 3224 ASSERT_TRUE(data != nullptr); |
3251 | 3225 |
3252 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3226 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3253 data->length(), AsChars(packet), | 3227 data->length(), AsChars(packet), |
3254 arraysize(packet)); | 3228 arraysize(packet)); |
3255 } | 3229 } |
3256 | 3230 |
3257 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 3231 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
3258 QuicPacketHeader header; | 3232 QuicPacketHeader header; |
3259 header.public_header.connection_id = kConnectionId; | 3233 header.public_header.connection_id = kConnectionId; |
3260 header.public_header.reset_flag = false; | 3234 header.public_header.reset_flag = false; |
3261 header.public_header.version_flag = false; | 3235 header.public_header.version_flag = false; |
3262 header.packet_number = kPacketNumber; | 3236 header.packet_number = kPacketNumber; |
3263 | 3237 |
3264 QuicConnectionCloseFrame close_frame; | 3238 QuicConnectionCloseFrame close_frame; |
3265 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3239 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
3266 close_frame.error_details = "because I can"; | 3240 close_frame.error_details = "because I can"; |
3267 | 3241 |
3268 QuicFrames frames; | 3242 QuicFrames frames = {QuicFrame(&close_frame)}; |
3269 frames.push_back(QuicFrame(&close_frame)); | |
3270 | 3243 |
3271 // clang-format off | 3244 // clang-format off |
3272 unsigned char packet[] = { | 3245 unsigned char packet[] = { |
3273 // public flags (8 byte connection_id) | 3246 // public flags (8 byte connection_id) |
3274 0x38, | 3247 0x38, |
3275 // connection_id | 3248 // connection_id |
3276 0x10, 0x32, 0x54, 0x76, | 3249 0x10, 0x32, 0x54, 0x76, |
3277 0x98, 0xBA, 0xDC, 0xFE, | 3250 0x98, 0xBA, 0xDC, 0xFE, |
3278 // packet number | 3251 // packet number |
3279 0xBC, 0x9A, 0x78, 0x56, | 3252 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 26 matching lines...) Expand all Loading... |
3306 header.public_header.connection_id = kConnectionId; | 3279 header.public_header.connection_id = kConnectionId; |
3307 header.public_header.reset_flag = false; | 3280 header.public_header.reset_flag = false; |
3308 header.public_header.version_flag = false; | 3281 header.public_header.version_flag = false; |
3309 header.packet_number = kPacketNumber; | 3282 header.packet_number = kPacketNumber; |
3310 | 3283 |
3311 QuicGoAwayFrame goaway_frame; | 3284 QuicGoAwayFrame goaway_frame; |
3312 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3285 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
3313 goaway_frame.last_good_stream_id = kStreamId; | 3286 goaway_frame.last_good_stream_id = kStreamId; |
3314 goaway_frame.reason_phrase = "because I can"; | 3287 goaway_frame.reason_phrase = "because I can"; |
3315 | 3288 |
3316 QuicFrames frames; | 3289 QuicFrames frames = {QuicFrame(&goaway_frame)}; |
3317 frames.push_back(QuicFrame(&goaway_frame)); | |
3318 | 3290 |
3319 // clang-format off | 3291 // clang-format off |
3320 unsigned char packet[] = { | 3292 unsigned char packet[] = { |
3321 // public flags (8 byte connection_id) | 3293 // public flags (8 byte connection_id) |
3322 0x38, | 3294 0x38, |
3323 // connection_id | 3295 // connection_id |
3324 0x10, 0x32, 0x54, 0x76, | 3296 0x10, 0x32, 0x54, 0x76, |
3325 0x98, 0xBA, 0xDC, 0xFE, | 3297 0x98, 0xBA, 0xDC, 0xFE, |
3326 // packet number | 3298 // packet number |
3327 0xBC, 0x9A, 0x78, 0x56, | 3299 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 27 matching lines...) Expand all Loading... |
3355 QuicPacketHeader header; | 3327 QuicPacketHeader header; |
3356 header.public_header.connection_id = kConnectionId; | 3328 header.public_header.connection_id = kConnectionId; |
3357 header.public_header.reset_flag = false; | 3329 header.public_header.reset_flag = false; |
3358 header.public_header.version_flag = false; | 3330 header.public_header.version_flag = false; |
3359 header.packet_number = kPacketNumber; | 3331 header.packet_number = kPacketNumber; |
3360 | 3332 |
3361 QuicWindowUpdateFrame window_update_frame; | 3333 QuicWindowUpdateFrame window_update_frame; |
3362 window_update_frame.stream_id = kStreamId; | 3334 window_update_frame.stream_id = kStreamId; |
3363 window_update_frame.byte_offset = 0x1122334455667788; | 3335 window_update_frame.byte_offset = 0x1122334455667788; |
3364 | 3336 |
3365 QuicFrames frames; | 3337 QuicFrames frames = {QuicFrame(&window_update_frame)}; |
3366 frames.push_back(QuicFrame(&window_update_frame)); | |
3367 | 3338 |
3368 // clang-format off | 3339 // clang-format off |
3369 unsigned char packet[] = { | 3340 unsigned char packet[] = { |
3370 // public flags (8 byte connection_id) | 3341 // public flags (8 byte connection_id) |
3371 0x38, | 3342 0x38, |
3372 // connection_id | 3343 // connection_id |
3373 0x10, 0x32, 0x54, 0x76, | 3344 0x10, 0x32, 0x54, 0x76, |
3374 0x98, 0xBA, 0xDC, 0xFE, | 3345 0x98, 0xBA, 0xDC, 0xFE, |
3375 // packet number | 3346 // packet number |
3376 0xBC, 0x9A, 0x78, 0x56, | 3347 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 20 matching lines...) Expand all Loading... |
3397 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 3368 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
3398 QuicPacketHeader header; | 3369 QuicPacketHeader header; |
3399 header.public_header.connection_id = kConnectionId; | 3370 header.public_header.connection_id = kConnectionId; |
3400 header.public_header.reset_flag = false; | 3371 header.public_header.reset_flag = false; |
3401 header.public_header.version_flag = false; | 3372 header.public_header.version_flag = false; |
3402 header.packet_number = kPacketNumber; | 3373 header.packet_number = kPacketNumber; |
3403 | 3374 |
3404 QuicBlockedFrame blocked_frame; | 3375 QuicBlockedFrame blocked_frame; |
3405 blocked_frame.stream_id = kStreamId; | 3376 blocked_frame.stream_id = kStreamId; |
3406 | 3377 |
3407 QuicFrames frames; | 3378 QuicFrames frames = {QuicFrame(&blocked_frame)}; |
3408 frames.push_back(QuicFrame(&blocked_frame)); | |
3409 | 3379 |
3410 // clang-format off | 3380 // clang-format off |
3411 unsigned char packet[] = { | 3381 unsigned char packet[] = { |
3412 // public flags (8 byte connection_id) | 3382 // public flags (8 byte connection_id) |
3413 0x38, | 3383 0x38, |
3414 // connection_id | 3384 // connection_id |
3415 0x10, 0x32, 0x54, 0x76, | 3385 0x10, 0x32, 0x54, 0x76, |
3416 0x98, 0xBA, 0xDC, 0xFE, | 3386 0x98, 0xBA, 0xDC, 0xFE, |
3417 // packet number | 3387 // packet number |
3418 0xBC, 0x9A, 0x78, 0x56, | 3388 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 14 matching lines...) Expand all Loading... |
3433 arraysize(packet)); | 3403 arraysize(packet)); |
3434 } | 3404 } |
3435 | 3405 |
3436 TEST_P(QuicFramerTest, BuildPingPacket) { | 3406 TEST_P(QuicFramerTest, BuildPingPacket) { |
3437 QuicPacketHeader header; | 3407 QuicPacketHeader header; |
3438 header.public_header.connection_id = kConnectionId; | 3408 header.public_header.connection_id = kConnectionId; |
3439 header.public_header.reset_flag = false; | 3409 header.public_header.reset_flag = false; |
3440 header.public_header.version_flag = false; | 3410 header.public_header.version_flag = false; |
3441 header.packet_number = kPacketNumber; | 3411 header.packet_number = kPacketNumber; |
3442 | 3412 |
3443 QuicPingFrame ping_frame; | 3413 QuicFrames frames = {QuicFrame(QuicPingFrame())}; |
3444 | |
3445 QuicFrames frames; | |
3446 frames.push_back(QuicFrame(ping_frame)); | |
3447 | 3414 |
3448 // clang-format off | 3415 // clang-format off |
3449 unsigned char packet[] = { | 3416 unsigned char packet[] = { |
3450 // public flags (8 byte connection_id) | 3417 // public flags (8 byte connection_id) |
3451 0x38, | 3418 0x38, |
3452 // connection_id | 3419 // connection_id |
3453 0x10, 0x32, 0x54, 0x76, | 3420 0x10, 0x32, 0x54, 0x76, |
3454 0x98, 0xBA, 0xDC, 0xFE, | 3421 0x98, 0xBA, 0xDC, 0xFE, |
3455 // packet number | 3422 // packet number |
3456 0xBC, 0x9A, 0x78, 0x56, | 3423 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3510 } | 3477 } |
3511 | 3478 |
3512 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 3479 // Test that the MTU discovery packet is serialized correctly as a PING packet. |
3513 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 3480 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { |
3514 QuicPacketHeader header; | 3481 QuicPacketHeader header; |
3515 header.public_header.connection_id = kConnectionId; | 3482 header.public_header.connection_id = kConnectionId; |
3516 header.public_header.reset_flag = false; | 3483 header.public_header.reset_flag = false; |
3517 header.public_header.version_flag = false; | 3484 header.public_header.version_flag = false; |
3518 header.packet_number = kPacketNumber; | 3485 header.packet_number = kPacketNumber; |
3519 | 3486 |
3520 QuicMtuDiscoveryFrame mtu_discovery_frame; | 3487 QuicFrames frames = {QuicFrame(QuicMtuDiscoveryFrame())}; |
3521 | |
3522 QuicFrames frames; | |
3523 frames.push_back(QuicFrame(mtu_discovery_frame)); | |
3524 | 3488 |
3525 // clang-format off | 3489 // clang-format off |
3526 unsigned char packet[] = { | 3490 unsigned char packet[] = { |
3527 // public flags (8 byte connection_id) | 3491 // public flags (8 byte connection_id) |
3528 0x38, | 3492 0x38, |
3529 // connection_id | 3493 // connection_id |
3530 0x10, 0x32, 0x54, 0x76, | 3494 0x10, 0x32, 0x54, 0x76, |
3531 0x98, 0xBA, 0xDC, 0xFE, | 3495 0x98, 0xBA, 0xDC, 0xFE, |
3532 // packet number | 3496 // packet number |
3533 0xBC, 0x9A, 0x78, 0x56, | 3497 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3921 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 3885 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
3922 QuicPacketHeader header; | 3886 QuicPacketHeader header; |
3923 header.public_header.connection_id = kConnectionId; | 3887 header.public_header.connection_id = kConnectionId; |
3924 header.public_header.reset_flag = false; | 3888 header.public_header.reset_flag = false; |
3925 header.public_header.version_flag = false; | 3889 header.public_header.version_flag = false; |
3926 header.packet_number = kPacketNumber; | 3890 header.packet_number = kPacketNumber; |
3927 | 3891 |
3928 QuicAckFrame ack_frame; | 3892 QuicAckFrame ack_frame; |
3929 // Create a packet with just the ack. | 3893 // Create a packet with just the ack. |
3930 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); | 3894 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); |
3931 QuicFrame frame; | 3895 QuicFrames frames = {QuicFrame(&ack_frame)}; |
3932 frame.type = ACK_FRAME; | |
3933 frame.ack_frame = &ack_frame; | |
3934 QuicFrames frames; | |
3935 frames.push_back(frame); | |
3936 | 3896 |
3937 // Build an ack packet with truncation due to limit in number of nack ranges. | 3897 // Build an ack packet with truncation due to limit in number of nack ranges. |
3938 std::unique_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); | 3898 std::unique_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); |
3939 ASSERT_TRUE(raw_ack_packet != nullptr); | 3899 ASSERT_TRUE(raw_ack_packet != nullptr); |
3940 char buffer[kMaxPacketSize]; | 3900 char buffer[kMaxPacketSize]; |
3941 size_t encrypted_length = framer_.EncryptPayload( | 3901 size_t encrypted_length = framer_.EncryptPayload( |
3942 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, | 3902 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, |
3943 buffer, kMaxPacketSize); | 3903 buffer, kMaxPacketSize); |
3944 ASSERT_NE(0u, encrypted_length); | 3904 ASSERT_NE(0u, encrypted_length); |
3945 // Now make sure we can turn our ack packet back into an ack frame. | 3905 // Now make sure we can turn our ack packet back into an ack frame. |
(...skipping 10 matching lines...) Expand all Loading... |
3956 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 3916 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { |
3957 QuicPacketHeader header; | 3917 QuicPacketHeader header; |
3958 header.public_header.connection_id = kConnectionId; | 3918 header.public_header.connection_id = kConnectionId; |
3959 header.public_header.reset_flag = false; | 3919 header.public_header.reset_flag = false; |
3960 header.public_header.version_flag = false; | 3920 header.public_header.version_flag = false; |
3961 header.packet_number = kPacketNumber; | 3921 header.packet_number = kPacketNumber; |
3962 | 3922 |
3963 // Create a packet with just the ack. | 3923 // Create a packet with just the ack. |
3964 QuicAckFrame ack_frame; | 3924 QuicAckFrame ack_frame; |
3965 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); | 3925 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); |
3966 QuicFrame frame; | 3926 QuicFrames frames = {QuicFrame(&ack_frame)}; |
3967 frame.type = ACK_FRAME; | |
3968 frame.ack_frame = &ack_frame; | |
3969 QuicFrames frames; | |
3970 frames.push_back(frame); | |
3971 | 3927 |
3972 // Build an ack packet with truncation due to limit in number of nack ranges. | 3928 // Build an ack packet with truncation due to limit in number of nack ranges. |
3973 std::unique_ptr<QuicPacket> raw_ack_packet( | 3929 std::unique_ptr<QuicPacket> raw_ack_packet( |
3974 BuildDataPacket(header, frames, 500)); | 3930 BuildDataPacket(header, frames, 500)); |
3975 ASSERT_TRUE(raw_ack_packet != nullptr); | 3931 ASSERT_TRUE(raw_ack_packet != nullptr); |
3976 char buffer[kMaxPacketSize]; | 3932 char buffer[kMaxPacketSize]; |
3977 size_t encrypted_length = framer_.EncryptPayload( | 3933 size_t encrypted_length = framer_.EncryptPayload( |
3978 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, | 3934 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, |
3979 buffer, kMaxPacketSize); | 3935 buffer, kMaxPacketSize); |
3980 ASSERT_NE(0u, encrypted_length); | 3936 ASSERT_NE(0u, encrypted_length); |
(...skipping 13 matching lines...) Expand all Loading... |
3994 header.public_header.connection_id = kConnectionId; | 3950 header.public_header.connection_id = kConnectionId; |
3995 header.public_header.reset_flag = false; | 3951 header.public_header.reset_flag = false; |
3996 header.public_header.version_flag = false; | 3952 header.public_header.version_flag = false; |
3997 header.packet_number = kPacketNumber; | 3953 header.packet_number = kPacketNumber; |
3998 | 3954 |
3999 QuicAckFrame ack_frame; | 3955 QuicAckFrame ack_frame; |
4000 ack_frame.largest_observed = 201; | 3956 ack_frame.largest_observed = 201; |
4001 ack_frame.packets.Add(1, ack_frame.largest_observed); | 3957 ack_frame.packets.Add(1, ack_frame.largest_observed); |
4002 | 3958 |
4003 // Create a packet with just the ack. | 3959 // Create a packet with just the ack. |
4004 QuicFrame frame; | 3960 QuicFrames frames = {QuicFrame(&ack_frame)}; |
4005 frame.type = ACK_FRAME; | |
4006 frame.ack_frame = &ack_frame; | |
4007 QuicFrames frames; | |
4008 frames.push_back(frame); | |
4009 | 3961 |
4010 std::unique_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); | 3962 std::unique_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); |
4011 ASSERT_TRUE(raw_ack_packet != nullptr); | 3963 ASSERT_TRUE(raw_ack_packet != nullptr); |
4012 | 3964 |
4013 char buffer[kMaxPacketSize]; | 3965 char buffer[kMaxPacketSize]; |
4014 size_t encrypted_length = framer_.EncryptPayload( | 3966 size_t encrypted_length = framer_.EncryptPayload( |
4015 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, | 3967 ENCRYPTION_NONE, kDefaultPathId, header.packet_number, *raw_ack_packet, |
4016 buffer, kMaxPacketSize); | 3968 buffer, kMaxPacketSize); |
4017 ASSERT_NE(0u, encrypted_length); | 3969 ASSERT_NE(0u, encrypted_length); |
4018 | 3970 |
4019 // Now make sure we can turn our ack packet back into an ack frame. | 3971 // Now make sure we can turn our ack packet back into an ack frame. |
4020 ASSERT_TRUE(framer_.ProcessPacket( | 3972 ASSERT_TRUE(framer_.ProcessPacket( |
4021 QuicEncryptedPacket(buffer, encrypted_length, false))); | 3973 QuicEncryptedPacket(buffer, encrypted_length, false))); |
4022 | 3974 |
4023 // Test for clean truncation of the ack by comparing the length of the | 3975 // Test for clean truncation of the ack by comparing the length of the |
4024 // original packets to the re-serialized packets. | 3976 // original packets to the re-serialized packets. |
4025 frames.clear(); | 3977 frames.clear(); |
4026 frame.type = ACK_FRAME; | 3978 frames.push_back(QuicFrame(visitor_.ack_frames_[0].get())); |
4027 frame.ack_frame = visitor_.ack_frames_[0].get(); | |
4028 frames.push_back(frame); | |
4029 | 3979 |
4030 size_t original_raw_length = raw_ack_packet->length(); | 3980 size_t original_raw_length = raw_ack_packet->length(); |
4031 raw_ack_packet.reset(BuildDataPacket(header, frames)); | 3981 raw_ack_packet.reset(BuildDataPacket(header, frames)); |
4032 ASSERT_TRUE(raw_ack_packet != nullptr); | 3982 ASSERT_TRUE(raw_ack_packet != nullptr); |
4033 EXPECT_EQ(original_raw_length, raw_ack_packet->length()); | 3983 EXPECT_EQ(original_raw_length, raw_ack_packet->length()); |
4034 ASSERT_TRUE(raw_ack_packet != nullptr); | 3984 ASSERT_TRUE(raw_ack_packet != nullptr); |
4035 } | 3985 } |
4036 | 3986 |
4037 TEST_P(QuicFramerTest, StopPacketProcessing) { | 3987 TEST_P(QuicFramerTest, StopPacketProcessing) { |
4038 // clang-format off | 3988 // clang-format off |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4226 'o', ' ', 'w', 'o', | 4176 'o', ' ', 'w', 'o', |
4227 'r', 'l', 'd', '!', | 4177 'r', 'l', 'd', '!', |
4228 }; | 4178 }; |
4229 // clang-format on | 4179 // clang-format on |
4230 | 4180 |
4231 QuicFramerFuzzFunc(packet, arraysize(packet)); | 4181 QuicFramerFuzzFunc(packet, arraysize(packet)); |
4232 } | 4182 } |
4233 | 4183 |
4234 } // namespace test | 4184 } // namespace test |
4235 } // namespace net | 4185 } // namespace net |
OLD | NEW |