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

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

Issue 420313005: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0723
Patch Set: change QUIC packet size to 1350 Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 1665 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 1676
1677 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1677 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1678 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1678 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1679 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1679 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1680 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1680 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1681 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1681 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1682 visitor_.stream_frames_[0]->offset); 1682 visitor_.stream_frames_[0]->offset);
1683 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1683 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1684 } 1684 }
1685 1685
1686 TEST_P(QuicFramerTest, AckFrame15) { 1686 TEST_P(QuicFramerTest, AckFrame) {
1687 if (framer_.version() != QUIC_VERSION_15) {
1688 return;
1689 }
1690
1691 unsigned char packet[] = { 1687 unsigned char packet[] = {
1692 // public flags (8 byte connection_id) 1688 // public flags (8 byte connection_id)
1693 0x3C, 1689 0x3C,
1694 // connection_id
1695 0x10, 0x32, 0x54, 0x76,
1696 0x98, 0xBA, 0xDC, 0xFE,
1697 // packet sequence number
1698 0xA8, 0x9A, 0x78, 0x56,
1699 0x34, 0x12,
1700 // private flags (entropy)
1701 0x01,
1702
1703 // frame type (ack frame)
1704 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
1705 0x6C,
1706 // entropy hash of sent packets till least awaiting - 1.
1707 0xAB,
1708 // least packet sequence number awaiting an ack, delta from sequence number.
1709 0x08, 0x00, 0x00, 0x00,
1710 0x00, 0x00,
1711 // entropy hash of all received packets.
1712 0xBA,
1713 // largest observed packet sequence number
1714 0xBF, 0x9A, 0x78, 0x56,
1715 0x34, 0x12,
1716 // Zero delta time.
1717 0x0, 0x0,
1718 // num missing packets
1719 0x01,
1720 // missing packet delta
1721 0x01,
1722 // 0 more missing packets in range.
1723 0x00,
1724 // Number of revived packets.
1725 0x00,
1726 };
1727
1728 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1729 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1730
1731 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1732 ASSERT_TRUE(visitor_.header_.get());
1733 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1734
1735 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1736 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1737 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1738 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash);
1739 EXPECT_EQ(0xBA, frame.received_info.entropy_hash);
1740 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
1741 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
1742 SequenceNumberSet::const_iterator missing_iter =
1743 frame.received_info.missing_packets.begin();
1744 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1745 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
1746
1747 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
1748 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
1749 const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
1750 PACKET_6BYTE_SEQUENCE_NUMBER;
1751 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1752 kQuicEntropyHashSize;
1753 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1754 PACKET_6BYTE_SEQUENCE_NUMBER;
1755 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1756 kQuicDeltaTimeLargestObservedSize;
1757 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
1758 kNumberOfNackRangesSize;
1759 const size_t kMissingPacketsRange = kMissingPacketsOffset +
1760 PACKET_1BYTE_SEQUENCE_NUMBER;
1761 const size_t kRevivedPacketsLength = kMissingPacketsRange +
1762 PACKET_1BYTE_SEQUENCE_NUMBER;
1763 // Now test framing boundaries
1764 const size_t ack_frame_size = kRevivedPacketsLength +
1765 PACKET_1BYTE_SEQUENCE_NUMBER;
1766 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
1767 string expected_error;
1768 if (i < kLeastUnackedOffset) {
1769 expected_error = "Unable to read entropy hash for sent packets.";
1770 } else if (i < kReceivedEntropyOffset) {
1771 expected_error = "Unable to read least unacked delta.";
1772 } else if (i < kLargestObservedOffset) {
1773 expected_error = "Unable to read entropy hash for received packets.";
1774 } else if (i < kMissingDeltaTimeOffset) {
1775 expected_error = "Unable to read largest observed.";
1776 } else if (i < kNumMissingPacketOffset) {
1777 expected_error = "Unable to read delta time largest observed.";
1778 } else if (i < kMissingPacketsOffset) {
1779 expected_error = "Unable to read num missing packet ranges.";
1780 } else if (i < kMissingPacketsRange) {
1781 expected_error = "Unable to read missing sequence number delta.";
1782 } else if (i < kRevivedPacketsLength) {
1783 expected_error = "Unable to read missing sequence number range.";
1784 } else {
1785 expected_error = "Unable to read num revived packets.";
1786 }
1787 CheckProcessingFails(
1788 packet,
1789 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
1790 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1791 expected_error, QUIC_INVALID_ACK_DATA);
1792 }
1793 }
1794
1795 TEST_P(QuicFramerTest, AckFrame) {
1796 if (framer_.version() <= QUIC_VERSION_15) {
1797 return;
1798 }
1799
1800 unsigned char packet[] = {
1801 // public flags (8 byte connection_id)
1802 0x3C,
1803 // connection_id 1690 // connection_id
1804 0x10, 0x32, 0x54, 0x76, 1691 0x10, 0x32, 0x54, 0x76,
1805 0x98, 0xBA, 0xDC, 0xFE, 1692 0x98, 0xBA, 0xDC, 0xFE,
1806 // packet sequence number 1693 // packet sequence number
1807 0xA8, 0x9A, 0x78, 0x56, 1694 0xA8, 0x9A, 0x78, 0x56,
1808 0x34, 0x12, 1695 0x34, 0x12,
1809 // private flags (entropy) 1696 // private flags (entropy)
1810 0x01, 1697 0x01,
1811 1698
1812 // frame type (ack frame) 1699 // frame type (ack frame)
(...skipping 19 matching lines...) Expand all
1832 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1833 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1720 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1834 1721
1835 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1722 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1836 ASSERT_TRUE(visitor_.header_.get()); 1723 ASSERT_TRUE(visitor_.header_.get());
1837 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1724 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1838 1725
1839 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1726 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1840 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1727 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1841 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1728 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1842 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); 1729 EXPECT_EQ(0xBA, frame.entropy_hash);
1843 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); 1730 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed);
1844 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); 1731 ASSERT_EQ(1u, frame.missing_packets.size());
1845 SequenceNumberSet::const_iterator missing_iter = 1732 SequenceNumberSet::const_iterator missing_iter =
1846 frame.received_info.missing_packets.begin(); 1733 frame.missing_packets.begin();
1847 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1734 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1848 1735
1849 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1736 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1850 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1737 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1851 kQuicEntropyHashSize; 1738 kQuicEntropyHashSize;
1852 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1739 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1853 PACKET_6BYTE_SEQUENCE_NUMBER; 1740 PACKET_6BYTE_SEQUENCE_NUMBER;
1854 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + 1741 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1855 kQuicDeltaTimeLargestObservedSize; 1742 kQuicDeltaTimeLargestObservedSize;
1856 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + 1743 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
(...skipping 24 matching lines...) Expand all
1881 } 1768 }
1882 CheckProcessingFails( 1769 CheckProcessingFails(
1883 packet, 1770 packet,
1884 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 1771 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
1885 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1772 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1886 expected_error, QUIC_INVALID_ACK_DATA); 1773 expected_error, QUIC_INVALID_ACK_DATA);
1887 } 1774 }
1888 } 1775 }
1889 1776
1890 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { 1777 TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
1891 if (framer_.version() <= QUIC_VERSION_15) {
1892 return;
1893 }
1894
1895 unsigned char packet[] = { 1778 unsigned char packet[] = {
1896 // public flags (8 byte connection_id) 1779 // public flags (8 byte connection_id)
1897 0x3C, 1780 0x3C,
1898 // connection_id 1781 // connection_id
1899 0x10, 0x32, 0x54, 0x76, 1782 0x10, 0x32, 0x54, 0x76,
1900 0x98, 0xBA, 0xDC, 0xFE, 1783 0x98, 0xBA, 0xDC, 0xFE,
1901 // packet sequence number 1784 // packet sequence number
1902 0xA8, 0x9A, 0x78, 0x56, 1785 0xA8, 0x9A, 0x78, 0x56,
1903 0x34, 0x12, 1786 0x34, 0x12,
1904 // private flags (entropy) 1787 // private flags (entropy)
(...skipping 25 matching lines...) Expand all
1930 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1813 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1931 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1814 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1932 1815
1933 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1816 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1934 ASSERT_TRUE(visitor_.header_.get()); 1817 ASSERT_TRUE(visitor_.header_.get());
1935 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1818 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1936 1819
1937 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1820 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1938 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1821 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1939 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1822 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1940 EXPECT_EQ(0xBA, frame.received_info.entropy_hash); 1823 EXPECT_EQ(0xBA, frame.entropy_hash);
1941 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); 1824 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed);
1942 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); 1825 ASSERT_EQ(1u, frame.missing_packets.size());
1943 SequenceNumberSet::const_iterator missing_iter = 1826 SequenceNumberSet::const_iterator missing_iter =
1944 frame.received_info.missing_packets.begin(); 1827 frame.missing_packets.begin();
1945 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1828 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1946 1829
1947 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1830 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1948 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1831 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1949 kQuicEntropyHashSize; 1832 kQuicEntropyHashSize;
1950 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1833 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1951 PACKET_6BYTE_SEQUENCE_NUMBER; 1834 PACKET_6BYTE_SEQUENCE_NUMBER;
1952 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + 1835 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1953 kQuicDeltaTimeLargestObservedSize; 1836 kQuicDeltaTimeLargestObservedSize;
1954 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + 1837 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
(...skipping 29 matching lines...) Expand all
1984 expected_error = "Unable to read revived packet."; 1867 expected_error = "Unable to read revived packet.";
1985 } 1868 }
1986 CheckProcessingFails( 1869 CheckProcessingFails(
1987 packet, 1870 packet,
1988 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 1871 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
1989 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1872 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1990 expected_error, QUIC_INVALID_ACK_DATA); 1873 expected_error, QUIC_INVALID_ACK_DATA);
1991 } 1874 }
1992 } 1875 }
1993 1876
1994 TEST_P(QuicFramerTest, AckFrameRevivedPackets15) { 1877 TEST_P(QuicFramerTest, AckFrameNoNacks) {
1995 if (framer_.version() != QUIC_VERSION_15) {
1996 return;
1997 }
1998
1999 unsigned char packet[] = { 1878 unsigned char packet[] = {
2000 // public flags (8 byte connection_id) 1879 // public flags (8 byte connection_id)
2001 0x3C, 1880 0x3C,
2002 // connection_id
2003 0x10, 0x32, 0x54, 0x76,
2004 0x98, 0xBA, 0xDC, 0xFE,
2005 // packet sequence number
2006 0xA8, 0x9A, 0x78, 0x56,
2007 0x34, 0x12,
2008 // private flags (entropy)
2009 0x01,
2010
2011 // frame type (ack frame)
2012 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2013 0x6C,
2014 // entropy hash of sent packets till least awaiting - 1.
2015 0xAB,
2016 // least packet sequence number awaiting an ack, delta from sequence number.
2017 0x08, 0x00, 0x00, 0x00,
2018 0x00, 0x00,
2019 // entropy hash of all received packets.
2020 0xBA,
2021 // largest observed packet sequence number
2022 0xBF, 0x9A, 0x78, 0x56,
2023 0x34, 0x12,
2024 // Zero delta time.
2025 0x0, 0x0,
2026 // num missing packets
2027 0x01,
2028 // missing packet delta
2029 0x01,
2030 // 0 more missing packets in range.
2031 0x00,
2032 // Number of revived packets.
2033 0x01,
2034 // Revived packet sequence number.
2035 0xBE, 0x9A, 0x78, 0x56,
2036 0x34, 0x12,
2037 };
2038
2039 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2040 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2041
2042 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2043 ASSERT_TRUE(visitor_.header_.get());
2044 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2045
2046 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2047 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2048 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2049 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash);
2050 EXPECT_EQ(0xBA, frame.received_info.entropy_hash);
2051 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
2052 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
2053 SequenceNumberSet::const_iterator missing_iter =
2054 frame.received_info.missing_packets.begin();
2055 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
2056 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
2057
2058 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
2059 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
2060 const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
2061 PACKET_6BYTE_SEQUENCE_NUMBER;
2062 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
2063 kQuicEntropyHashSize;
2064 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
2065 PACKET_6BYTE_SEQUENCE_NUMBER;
2066 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
2067 kQuicDeltaTimeLargestObservedSize;
2068 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
2069 kNumberOfNackRangesSize;
2070 const size_t kMissingPacketsRange = kMissingPacketsOffset +
2071 PACKET_1BYTE_SEQUENCE_NUMBER;
2072 const size_t kRevivedPacketsLength = kMissingPacketsRange +
2073 PACKET_1BYTE_SEQUENCE_NUMBER;
2074 const size_t kRevivedPacketSequenceNumberLength = kRevivedPacketsLength +
2075 PACKET_1BYTE_SEQUENCE_NUMBER;
2076 // Now test framing boundaries
2077 const size_t ack_frame_size = kRevivedPacketSequenceNumberLength +
2078 PACKET_6BYTE_SEQUENCE_NUMBER;
2079 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2080 string expected_error;
2081 if (i < kLeastUnackedOffset) {
2082 expected_error = "Unable to read entropy hash for sent packets.";
2083 } else if (i < kReceivedEntropyOffset) {
2084 expected_error = "Unable to read least unacked delta.";
2085 } else if (i < kLargestObservedOffset) {
2086 expected_error = "Unable to read entropy hash for received packets.";
2087 } else if (i < kMissingDeltaTimeOffset) {
2088 expected_error = "Unable to read largest observed.";
2089 } else if (i < kNumMissingPacketOffset) {
2090 expected_error = "Unable to read delta time largest observed.";
2091 } else if (i < kMissingPacketsOffset) {
2092 expected_error = "Unable to read num missing packet ranges.";
2093 } else if (i < kMissingPacketsRange) {
2094 expected_error = "Unable to read missing sequence number delta.";
2095 } else if (i < kRevivedPacketsLength) {
2096 expected_error = "Unable to read missing sequence number range.";
2097 } else if (i < kRevivedPacketSequenceNumberLength) {
2098 expected_error = "Unable to read num revived packets.";
2099 } else {
2100 expected_error = "Unable to read revived packet.";
2101 }
2102 CheckProcessingFails(
2103 packet,
2104 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2105 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2106 expected_error, QUIC_INVALID_ACK_DATA);
2107 }
2108 }
2109
2110 TEST_P(QuicFramerTest, AckFrameNoNacks) {
2111 if (framer_.version() <= QUIC_VERSION_15) {
2112 return;
2113 }
2114 unsigned char packet[] = {
2115 // public flags (8 byte connection_id)
2116 0x3C,
2117 // connection_id
2118 0x10, 0x32, 0x54, 0x76,
2119 0x98, 0xBA, 0xDC, 0xFE,
2120 // packet sequence number
2121 0xA8, 0x9A, 0x78, 0x56,
2122 0x34, 0x12,
2123 // private flags (entropy)
2124 0x01,
2125
2126 // frame type (ack frame)
2127 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
2128 0x4C,
2129 // entropy hash of all received packets.
2130 0xBA,
2131 // largest observed packet sequence number
2132 0xBF, 0x9A, 0x78, 0x56,
2133 0x34, 0x12,
2134 // Zero delta time.
2135 0x0, 0x0,
2136 };
2137
2138 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2139 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2140
2141 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2142 ASSERT_TRUE(visitor_.header_.get());
2143 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2144
2145 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2146 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2147 QuicAckFrame* frame = visitor_.ack_frames_[0];
2148 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2149 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2150 frame->received_info.largest_observed);
2151 ASSERT_EQ(0u, frame->received_info.missing_packets.size());
2152
2153 // Verify that the packet re-serializes identically.
2154 QuicFrames frames;
2155 frames.push_back(QuicFrame(frame));
2156 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2157 ASSERT_TRUE(data != NULL);
2158
2159 test::CompareCharArraysWithHexError("constructed packet",
2160 data->data(), data->length(),
2161 AsChars(packet), arraysize(packet));
2162 }
2163
2164 TEST_P(QuicFramerTest, AckFrameNoNacks15) {
2165 if (framer_.version() > QUIC_VERSION_15) {
2166 return;
2167 }
2168 unsigned char packet[] = {
2169 // public flags (8 byte connection_id)
2170 0x3C,
2171 // connection_id
2172 0x10, 0x32, 0x54, 0x76,
2173 0x98, 0xBA, 0xDC, 0xFE,
2174 // packet sequence number
2175 0xA8, 0x9A, 0x78, 0x56,
2176 0x34, 0x12,
2177 // private flags (entropy)
2178 0x01,
2179
2180 // frame type (ack frame)
2181 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
2182 0x4C,
2183 // entropy hash of sent packets till least awaiting - 1.
2184 0xAB,
2185 // least packet sequence number awaiting an ack, delta from sequence number.
2186 0x08, 0x00, 0x00, 0x00,
2187 0x00, 0x00,
2188 // entropy hash of all received packets.
2189 0xBA,
2190 // largest observed packet sequence number
2191 0xBF, 0x9A, 0x78, 0x56,
2192 0x34, 0x12,
2193 // Zero delta time.
2194 0x0, 0x0,
2195 };
2196
2197 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2198 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2199
2200 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2201 ASSERT_TRUE(visitor_.header_.get());
2202 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2203
2204 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2205 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2206 QuicAckFrame* frame = visitor_.ack_frames_[0];
2207 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash);
2208 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2209 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2210 frame->received_info.largest_observed);
2211 ASSERT_EQ(0u, frame->received_info.missing_packets.size());
2212 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked);
2213
2214 // Verify that the packet re-serializes identically.
2215 QuicFrames frames;
2216 frames.push_back(QuicFrame(frame));
2217 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2218 ASSERT_TRUE(data != NULL);
2219
2220 test::CompareCharArraysWithHexError("constructed packet",
2221 data->data(), data->length(),
2222 AsChars(packet), arraysize(packet));
2223 }
2224
2225 TEST_P(QuicFramerTest, AckFrame500Nacks) {
2226 if (framer_.version() <= QUIC_VERSION_15) {
2227 return;
2228 }
2229 unsigned char packet[] = {
2230 // public flags (8 byte connection_id)
2231 0x3C,
2232 // connection_id 1881 // connection_id
2233 0x10, 0x32, 0x54, 0x76, 1882 0x10, 0x32, 0x54, 0x76,
2234 0x98, 0xBA, 0xDC, 0xFE, 1883 0x98, 0xBA, 0xDC, 0xFE,
2235 // packet sequence number 1884 // packet sequence number
2236 0xA8, 0x9A, 0x78, 0x56, 1885 0xA8, 0x9A, 0x78, 0x56,
2237 0x34, 0x12, 1886 0x34, 0x12,
2238 // private flags (entropy) 1887 // private flags (entropy)
2239 0x01, 1888 0x01,
2240 1889
2241 // frame type (ack frame) 1890 // frame type (ack frame)
2242 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 1891 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
2243 0x6C, 1892 0x4C,
2244 // entropy hash of all received packets. 1893 // entropy hash of all received packets.
2245 0xBA, 1894 0xBA,
2246 // largest observed packet sequence number 1895 // largest observed packet sequence number
2247 0xBF, 0x9A, 0x78, 0x56, 1896 0xBF, 0x9A, 0x78, 0x56,
2248 0x34, 0x12, 1897 0x34, 0x12,
2249 // Zero delta time. 1898 // Zero delta time.
2250 0x0, 0x0, 1899 0x0, 0x0,
2251 // num missing packet ranges
2252 0x02,
2253 // missing packet delta
2254 0x01,
2255 // 243 more missing packets in range.
2256 // The ranges are listed in this order so the re-constructed packet matches.
2257 0xF3,
2258 // No gap between ranges
2259 0x00,
2260 // 255 more missing packets in range.
2261 0xFF,
2262 // No revived packets.
2263 0x00,
2264 }; 1900 };
2265 1901
2266 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1902 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2267 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1903 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2268 1904
2269 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1905 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2270 ASSERT_TRUE(visitor_.header_.get()); 1906 ASSERT_TRUE(visitor_.header_.get());
2271 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1907 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2272 1908
2273 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1909 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2274 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1910 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2275 QuicAckFrame* frame = visitor_.ack_frames_[0]; 1911 QuicAckFrame* frame = visitor_.ack_frames_[0];
2276 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); 1912 EXPECT_EQ(0xBA, frame->entropy_hash);
2277 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), 1913 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
2278 frame->received_info.largest_observed); 1914 ASSERT_EQ(0u, frame->missing_packets.size());
2279 EXPECT_EQ(0u, frame->received_info.revived_packets.size());
2280 ASSERT_EQ(500u, frame->received_info.missing_packets.size());
2281 SequenceNumberSet::const_iterator first_missing_iter =
2282 frame->received_info.missing_packets.begin();
2283 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
2284 SequenceNumberSet::const_reverse_iterator last_missing_iter =
2285 frame->received_info.missing_packets.rbegin();
2286 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter);
2287 1915
2288 // Verify that the packet re-serializes identically. 1916 // Verify that the packet re-serializes identically.
2289 QuicFrames frames; 1917 QuicFrames frames;
2290 frames.push_back(QuicFrame(frame)); 1918 frames.push_back(QuicFrame(frame));
2291 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 1919 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2292 ASSERT_TRUE(data != NULL); 1920 ASSERT_TRUE(data != NULL);
2293 1921
2294 test::CompareCharArraysWithHexError("constructed packet", 1922 test::CompareCharArraysWithHexError("constructed packet",
2295 data->data(), data->length(), 1923 data->data(), data->length(),
2296 AsChars(packet), arraysize(packet)); 1924 AsChars(packet), arraysize(packet));
2297 } 1925 }
2298 1926
2299 TEST_P(QuicFramerTest, AckFrame500Nacks15) { 1927 TEST_P(QuicFramerTest, AckFrame500Nacks) {
2300 if (framer_.version() != QUIC_VERSION_15) {
2301 return;
2302 }
2303 unsigned char packet[] = { 1928 unsigned char packet[] = {
2304 // public flags (8 byte connection_id) 1929 // public flags (8 byte connection_id)
2305 0x3C, 1930 0x3C,
2306 // connection_id 1931 // connection_id
2307 0x10, 0x32, 0x54, 0x76, 1932 0x10, 0x32, 0x54, 0x76,
2308 0x98, 0xBA, 0xDC, 0xFE, 1933 0x98, 0xBA, 0xDC, 0xFE,
2309 // packet sequence number 1934 // packet sequence number
2310 0xA8, 0x9A, 0x78, 0x56, 1935 0xA8, 0x9A, 0x78, 0x56,
2311 0x34, 0x12, 1936 0x34, 0x12,
2312 // private flags (entropy) 1937 // private flags (entropy)
2313 0x01, 1938 0x01,
2314 1939
2315 // frame type (ack frame) 1940 // frame type (ack frame)
2316 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 1941 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2317 0x6C, 1942 0x6C,
2318 // entropy hash of sent packets till least awaiting - 1.
2319 0xAB,
2320 // least packet sequence number awaiting an ack, delta from sequence number.
2321 0x08, 0x00, 0x00, 0x00,
2322 0x00, 0x00,
2323 // entropy hash of all received packets. 1943 // entropy hash of all received packets.
2324 0xBA, 1944 0xBA,
2325 // largest observed packet sequence number 1945 // largest observed packet sequence number
2326 0xBF, 0x9A, 0x78, 0x56, 1946 0xBF, 0x9A, 0x78, 0x56,
2327 0x34, 0x12, 1947 0x34, 0x12,
2328 // Zero delta time. 1948 // Zero delta time.
2329 0x0, 0x0, 1949 0x0, 0x0,
2330 // num missing packet ranges 1950 // num missing packet ranges
2331 0x02, 1951 0x02,
2332 // missing packet delta 1952 // missing packet delta
(...skipping 12 matching lines...) Expand all
2345 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1965 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2346 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1966 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2347 1967
2348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1968 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2349 ASSERT_TRUE(visitor_.header_.get()); 1969 ASSERT_TRUE(visitor_.header_.get());
2350 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1970 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2351 1971
2352 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1972 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2353 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1973 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2354 QuicAckFrame* frame = visitor_.ack_frames_[0]; 1974 QuicAckFrame* frame = visitor_.ack_frames_[0];
2355 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash); 1975 EXPECT_EQ(0xBA, frame->entropy_hash);
2356 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); 1976 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
2357 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), 1977 EXPECT_EQ(0u, frame->revived_packets.size());
2358 frame->received_info.largest_observed); 1978 ASSERT_EQ(500u, frame->missing_packets.size());
2359 EXPECT_EQ(0u, frame->received_info.revived_packets.size());
2360 ASSERT_EQ(500u, frame->received_info.missing_packets.size());
2361 SequenceNumberSet::const_iterator first_missing_iter = 1979 SequenceNumberSet::const_iterator first_missing_iter =
2362 frame->received_info.missing_packets.begin(); 1980 frame->missing_packets.begin();
2363 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); 1981 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
2364 SequenceNumberSet::const_reverse_iterator last_missing_iter = 1982 SequenceNumberSet::const_reverse_iterator last_missing_iter =
2365 frame->received_info.missing_packets.rbegin(); 1983 frame->missing_packets.rbegin();
2366 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); 1984 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter);
2367 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked);
2368 1985
2369 // Verify that the packet re-serializes identically. 1986 // Verify that the packet re-serializes identically.
2370 QuicFrames frames; 1987 QuicFrames frames;
2371 frames.push_back(QuicFrame(frame)); 1988 frames.push_back(QuicFrame(frame));
2372 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 1989 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2373 ASSERT_TRUE(data != NULL); 1990 ASSERT_TRUE(data != NULL);
2374 1991
2375 test::CompareCharArraysWithHexError("constructed packet", 1992 test::CompareCharArraysWithHexError("constructed packet",
2376 data->data(), data->length(), 1993 data->data(), data->length(),
2377 AsChars(packet), arraysize(packet)); 1994 AsChars(packet), arraysize(packet));
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2511 expected_error = "Unable to read time delta in received packets."; 2128 expected_error = "Unable to read time delta in received packets.";
2512 } 2129 }
2513 CheckProcessingFails( 2130 CheckProcessingFails(
2514 packet, 2131 packet,
2515 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2132 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2516 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2133 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2517 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); 2134 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2518 } 2135 }
2519 } 2136 }
2520 2137
2521 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) {
2522 unsigned char packet[] = {
2523 // public flags (8 byte connection_id)
2524 0x3C,
2525 // connection_id
2526 0x10, 0x32, 0x54, 0x76,
2527 0x98, 0xBA, 0xDC, 0xFE,
2528 // packet sequence number
2529 0xBC, 0x9A, 0x78, 0x56,
2530 0x34, 0x12,
2531 // private flags
2532 0x00,
2533
2534 // frame type (congestion feedback frame)
2535 0x20,
2536 // congestion feedback type (fix rate)
2537 0x02,
2538 // bitrate_in_bytes_per_second;
2539 0x01, 0x02, 0x03, 0x04,
2540 };
2541
2542 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2543 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2544
2545 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2546 ASSERT_TRUE(visitor_.header_.get());
2547 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2548
2549 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2550 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
2551 const QuicCongestionFeedbackFrame& frame =
2552 *visitor_.congestion_feedback_frames_[0];
2553 ASSERT_EQ(kFixRate, frame.type);
2554 EXPECT_EQ(static_cast<uint32>(0x04030201),
2555 frame.fix_rate.bitrate.ToBytesPerSecond());
2556
2557 // Now test framing boundaries
2558 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) {
2559 string expected_error;
2560 if (i < 2) {
2561 expected_error = "Unable to read congestion feedback type.";
2562 } else if (i < 6) {
2563 expected_error = "Unable to read bitrate.";
2564 }
2565 CheckProcessingFails(
2566 packet,
2567 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2568 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2569 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2570 }
2571 }
2572
2573 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { 2138 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
2574 unsigned char packet[] = { 2139 unsigned char packet[] = {
2575 // public flags (8 byte connection_id) 2140 // public flags (8 byte connection_id)
2576 0x3C, 2141 0x3C,
2577 // connection_id 2142 // connection_id
2578 0x10, 0x32, 0x54, 0x76, 2143 0x10, 0x32, 0x54, 0x76,
2579 0x98, 0xBA, 0xDC, 0xFE, 2144 0x98, 0xBA, 0xDC, 0xFE,
2580 // packet sequence number 2145 // packet sequence number
2581 0xBC, 0x9A, 0x78, 0x56, 2146 0xBC, 0x9A, 0x78, 0x56,
2582 0x34, 0x12, 2147 0x34, 0x12,
2583 // private flags 2148 // private flags
2584 0x00, 2149 0x00,
2585 2150
2586 // frame type (congestion feedback frame) 2151 // frame type (congestion feedback frame)
2587 0x20, 2152 0x20,
2588 // congestion feedback type (invalid) 2153 // congestion feedback type (invalid)
2589 0x03, 2154 0x03,
2590 }; 2155 };
2591 2156
2592 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2157 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2593 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 2158 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
2594 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2159 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2595 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); 2160 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error());
2596 } 2161 }
2597 2162
2598 TEST_P(QuicFramerTest, StopWaitingFrame) { 2163 TEST_P(QuicFramerTest, StopWaitingFrame) {
2599 if (framer_.version() <= QUIC_VERSION_15) {
2600 return;
2601 }
2602 unsigned char packet[] = { 2164 unsigned char packet[] = {
2603 // public flags (8 byte connection_id) 2165 // public flags (8 byte connection_id)
2604 0x3C, 2166 0x3C,
2605 // connection_id 2167 // connection_id
2606 0x10, 0x32, 0x54, 0x76, 2168 0x10, 0x32, 0x54, 0x76,
2607 0x98, 0xBA, 0xDC, 0xFE, 2169 0x98, 0xBA, 0xDC, 0xFE,
2608 // packet sequence number 2170 // packet sequence number
2609 0xA8, 0x9A, 0x78, 0x56, 2171 0xA8, 0x9A, 0x78, 0x56,
2610 0x34, 0x12, 2172 0x34, 0x12,
2611 // private flags (entropy) 2173 // private flags (entropy)
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
2694 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2256 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2695 2257
2696 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); 2258 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id);
2697 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); 2259 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code);
2698 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); 2260 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details);
2699 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), 2261 EXPECT_EQ(GG_UINT64_C(0x0807060504030201),
2700 visitor_.rst_stream_frame_.byte_offset); 2262 visitor_.rst_stream_frame_.byte_offset);
2701 2263
2702 // Now test framing boundaries 2264 // Now test framing boundaries
2703 for (size_t i = kQuicFrameTypeSize; 2265 for (size_t i = kQuicFrameTypeSize;
2704 i < QuicFramer::GetMinRstStreamFrameSize(version_); ++i) { 2266 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) {
2705 string expected_error; 2267 string expected_error;
2706 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { 2268 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) {
2707 expected_error = "Unable to read stream_id."; 2269 expected_error = "Unable to read stream_id.";
2708 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + 2270 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize +
2709 + kQuicMaxStreamOffsetSize) { 2271 + kQuicMaxStreamOffsetSize) {
2710 expected_error = "Unable to read rst stream sent byte offset."; 2272 expected_error = "Unable to read rst stream sent byte offset.";
2711 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + 2273 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize +
2712 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { 2274 + kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) {
2713 expected_error = "Unable to read rst stream error code."; 2275 expected_error = "Unable to read rst stream error code.";
2714 } else { 2276 } else {
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
3575 versions.push_back(GetParam()); 3137 versions.push_back(GetParam());
3576 scoped_ptr<QuicEncryptedPacket> data( 3138 scoped_ptr<QuicEncryptedPacket> data(
3577 framer_.BuildVersionNegotiationPacket(header, versions)); 3139 framer_.BuildVersionNegotiationPacket(header, versions));
3578 3140
3579 test::CompareCharArraysWithHexError("constructed packet", 3141 test::CompareCharArraysWithHexError("constructed packet",
3580 data->data(), data->length(), 3142 data->data(), data->length(),
3581 AsChars(packet), arraysize(packet)); 3143 AsChars(packet), arraysize(packet));
3582 } 3144 }
3583 3145
3584 TEST_P(QuicFramerTest, BuildAckFramePacket) { 3146 TEST_P(QuicFramerTest, BuildAckFramePacket) {
3585 if (version_ <= QUIC_VERSION_15) {
3586 return;
3587 }
3588 QuicPacketHeader header; 3147 QuicPacketHeader header;
3589 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3148 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3590 header.public_header.reset_flag = false; 3149 header.public_header.reset_flag = false;
3591 header.public_header.version_flag = false;
3592 header.fec_flag = false;
3593 header.entropy_flag = true;
3594 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3595 header.fec_group = 0;
3596
3597 QuicAckFrame ack_frame;
3598 ack_frame.received_info.entropy_hash = 0x43;
3599 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF);
3600 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
3601 ack_frame.received_info.missing_packets.insert(
3602 GG_UINT64_C(0x770123456789ABE));
3603
3604 QuicFrames frames;
3605 frames.push_back(QuicFrame(&ack_frame));
3606
3607 unsigned char packet[] = {
3608 // public flags (8 byte connection_id)
3609 0x3C,
3610 // connection_id
3611 0x10, 0x32, 0x54, 0x76,
3612 0x98, 0xBA, 0xDC, 0xFE,
3613 // packet sequence number
3614 0xA8, 0x9A, 0x78, 0x56,
3615 0x34, 0x12,
3616 // private flags (entropy)
3617 0x01,
3618
3619 // frame type (ack frame)
3620 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3621 0x6C,
3622 // entropy hash of all received packets.
3623 0x43,
3624 // largest observed packet sequence number
3625 0xBF, 0x9A, 0x78, 0x56,
3626 0x34, 0x12,
3627 // Zero delta time.
3628 0x0, 0x0,
3629 // num missing packet ranges
3630 0x01,
3631 // missing packet delta
3632 0x01,
3633 // 0 more missing packets in range.
3634 0x00,
3635 // 0 revived packets.
3636 0x00,
3637 };
3638
3639 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3640 ASSERT_TRUE(data != NULL);
3641
3642 test::CompareCharArraysWithHexError("constructed packet",
3643 data->data(), data->length(),
3644 AsChars(packet), arraysize(packet));
3645 }
3646
3647 TEST_P(QuicFramerTest, BuildAckFramePacket15) {
3648 if (version_ != QUIC_VERSION_15) {
3649 return;
3650 }
3651 QuicPacketHeader header;
3652 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3653 header.public_header.reset_flag = false;
3654 header.public_header.version_flag = false; 3150 header.public_header.version_flag = false;
3655 header.fec_flag = false; 3151 header.fec_flag = false;
3656 header.entropy_flag = true; 3152 header.entropy_flag = true;
3657 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3153 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3658 header.fec_group = 0; 3154 header.fec_group = 0;
3659 3155
3660 QuicAckFrame ack_frame; 3156 QuicAckFrame ack_frame;
3661 ack_frame.received_info.entropy_hash = 0x43; 3157 ack_frame.entropy_hash = 0x43;
3662 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); 3158 ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF);
3663 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 3159 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3664 ack_frame.received_info.missing_packets.insert( 3160 ack_frame.missing_packets.insert(
3665 GG_UINT64_C(0x770123456789ABE)); 3161 GG_UINT64_C(0x770123456789ABE));
3666 ack_frame.sent_info.entropy_hash = 0x14;
3667 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0);
3668 3162
3669 QuicFrames frames; 3163 QuicFrames frames;
3670 frames.push_back(QuicFrame(&ack_frame)); 3164 frames.push_back(QuicFrame(&ack_frame));
3671 3165
3672 unsigned char packet[] = { 3166 unsigned char packet[] = {
3673 // public flags (8 byte connection_id) 3167 // public flags (8 byte connection_id)
3674 0x3C, 3168 0x3C,
3675 // connection_id 3169 // connection_id
3676 0x10, 0x32, 0x54, 0x76, 3170 0x10, 0x32, 0x54, 0x76,
3677 0x98, 0xBA, 0xDC, 0xFE, 3171 0x98, 0xBA, 0xDC, 0xFE,
3678 // packet sequence number 3172 // packet sequence number
3679 0xA8, 0x9A, 0x78, 0x56, 3173 0xA8, 0x9A, 0x78, 0x56,
3680 0x34, 0x12, 3174 0x34, 0x12,
3681 // private flags (entropy) 3175 // private flags (entropy)
3682 0x01, 3176 0x01,
3683 3177
3684 // frame type (ack frame) 3178 // frame type (ack frame)
3685 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 3179 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3686 0x6C, 3180 0x6C,
3687 // entropy hash of sent packets till least awaiting - 1.
3688 0x14,
3689 // least packet sequence number awaiting an ack, delta from sequence number.
3690 0x08, 0x00, 0x00, 0x00,
3691 0x00, 0x00,
3692 // entropy hash of all received packets. 3181 // entropy hash of all received packets.
3693 0x43, 3182 0x43,
3694 // largest observed packet sequence number 3183 // largest observed packet sequence number
3695 0xBF, 0x9A, 0x78, 0x56, 3184 0xBF, 0x9A, 0x78, 0x56,
3696 0x34, 0x12, 3185 0x34, 0x12,
3697 // Zero delta time. 3186 // Zero delta time.
3698 0x0, 0x0, 3187 0x0, 0x0,
3699 // num missing packet ranges 3188 // num missing packet ranges
3700 0x01, 3189 0x01,
3701 // missing packet delta 3190 // missing packet delta
3702 0x01, 3191 0x01,
3703 // 0 more missing packets in range. 3192 // 0 more missing packets in range.
3704 0x00, 3193 0x00,
3705 // 0 revived packets. 3194 // 0 revived packets.
3706 0x00, 3195 0x00,
3707 }; 3196 };
3708 3197
3709 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3198 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3710 ASSERT_TRUE(data != NULL); 3199 ASSERT_TRUE(data != NULL);
3711 3200
3712 test::CompareCharArraysWithHexError("constructed packet", 3201 test::CompareCharArraysWithHexError("constructed packet",
3713 data->data(), data->length(), 3202 data->data(), data->length(),
3714 AsChars(packet), arraysize(packet)); 3203 AsChars(packet), arraysize(packet));
3715 } 3204 }
3716 3205
3717 // TODO(jri): Add test for tuncated packets in which the original ack frame had 3206 // TODO(jri): Add test for tuncated packets in which the original ack frame had
3718 // revived packets. (In both the large and small packet cases below). 3207 // revived packets. (In both the large and small packet cases below).
3719 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 3208 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
3720 if (version_ <= QUIC_VERSION_15) {
3721 return;
3722 }
3723 QuicPacketHeader header; 3209 QuicPacketHeader header;
3724 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3210 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3725 header.public_header.reset_flag = false; 3211 header.public_header.reset_flag = false;
3726 header.public_header.version_flag = false; 3212 header.public_header.version_flag = false;
3727 header.fec_flag = false; 3213 header.fec_flag = false;
3728 header.entropy_flag = true; 3214 header.entropy_flag = true;
3729 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3215 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3730 header.fec_group = 0; 3216 header.fec_group = 0;
3731 3217
3732 QuicAckFrame ack_frame; 3218 QuicAckFrame ack_frame;
3733 // This entropy hash is different from what shows up in the packet below, 3219 // This entropy hash is different from what shows up in the packet below,
3734 // since entropy is recomputed by the framer on ack truncation (by 3220 // since entropy is recomputed by the framer on ack truncation (by
3735 // TestEntropyCalculator for this test.) 3221 // TestEntropyCalculator for this test.)
3736 ack_frame.received_info.entropy_hash = 0x43; 3222 ack_frame.entropy_hash = 0x43;
3737 ack_frame.received_info.largest_observed = 2 * 300; 3223 ack_frame.largest_observed = 2 * 300;
3738 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 3224 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3739 for (size_t i = 1; i < 2 * 300; i += 2) { 3225 for (size_t i = 1; i < 2 * 300; i += 2) {
3740 ack_frame.received_info.missing_packets.insert(i); 3226 ack_frame.missing_packets.insert(i);
3741 } 3227 }
3742 3228
3743 QuicFrames frames; 3229 QuicFrames frames;
3744 frames.push_back(QuicFrame(&ack_frame)); 3230 frames.push_back(QuicFrame(&ack_frame));
3745 3231
3746 unsigned char packet[] = { 3232 unsigned char packet[] = {
3747 // public flags (8 byte connection_id) 3233 // public flags (8 byte connection_id)
3748 0x3C, 3234 0x3C,
3749 // connection_id 3235 // connection_id
3750 0x10, 0x32, 0x54, 0x76, 3236 0x10, 0x32, 0x54, 0x76,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
3826 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); 3312 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
3827 ASSERT_TRUE(data != NULL); 3313 ASSERT_TRUE(data != NULL);
3828 3314
3829 test::CompareCharArraysWithHexError("constructed packet", 3315 test::CompareCharArraysWithHexError("constructed packet",
3830 data->data(), data->length(), 3316 data->data(), data->length(),
3831 AsChars(packet), arraysize(packet)); 3317 AsChars(packet), arraysize(packet));
3832 } 3318 }
3833 3319
3834 3320
3835 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3321 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3836 if (version_ <= QUIC_VERSION_15) {
3837 return;
3838 }
3839 QuicPacketHeader header; 3322 QuicPacketHeader header;
3840 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3323 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3841 header.public_header.reset_flag = false; 3324 header.public_header.reset_flag = false;
3842 header.public_header.version_flag = false; 3325 header.public_header.version_flag = false;
3843 header.fec_flag = false; 3326 header.fec_flag = false;
3844 header.entropy_flag = true; 3327 header.entropy_flag = true;
3845 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3328 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3846 header.fec_group = 0; 3329 header.fec_group = 0;
3847 3330
3848 QuicAckFrame ack_frame; 3331 QuicAckFrame ack_frame;
3849 // This entropy hash is different from what shows up in the packet below, 3332 // This entropy hash is different from what shows up in the packet below,
3850 // since entropy is recomputed by the framer on ack truncation (by 3333 // since entropy is recomputed by the framer on ack truncation (by
3851 // TestEntropyCalculator for this test.) 3334 // TestEntropyCalculator for this test.)
3852 ack_frame.received_info.entropy_hash = 0x43; 3335 ack_frame.entropy_hash = 0x43;
3853 ack_frame.received_info.largest_observed = 2 * 300; 3336 ack_frame.largest_observed = 2 * 300;
3854 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 3337 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3855 for (size_t i = 1; i < 2 * 300; i += 2) { 3338 for (size_t i = 1; i < 2 * 300; i += 2) {
3856 ack_frame.received_info.missing_packets.insert(i); 3339 ack_frame.missing_packets.insert(i);
3857 } 3340 }
3858 3341
3859 QuicFrames frames; 3342 QuicFrames frames;
3860 frames.push_back(QuicFrame(&ack_frame)); 3343 frames.push_back(QuicFrame(&ack_frame));
3861 3344
3862 unsigned char packet[] = { 3345 unsigned char packet[] = {
3863 // public flags (8 byte connection_id) 3346 // public flags (8 byte connection_id)
3864 0x3C, 3347 0x3C,
3865 // connection_id 3348 // connection_id
3866 0x10, 0x32, 0x54, 0x76, 3349 0x10, 0x32, 0x54, 0x76,
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
4009 3492
4010 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3493 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
4011 ASSERT_TRUE(data != NULL); 3494 ASSERT_TRUE(data != NULL);
4012 3495
4013 test::CompareCharArraysWithHexError("constructed packet", 3496 test::CompareCharArraysWithHexError("constructed packet",
4014 data->data(), data->length(), 3497 data->data(), data->length(),
4015 AsChars(packet), arraysize(packet)); 3498 AsChars(packet), arraysize(packet));
4016 } 3499 }
4017 3500
4018 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3501 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
4019 if (version_ <= QUIC_VERSION_15) {
4020 return;
4021 }
4022 QuicPacketHeader header; 3502 QuicPacketHeader header;
4023 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3503 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4024 header.public_header.reset_flag = false; 3504 header.public_header.reset_flag = false;
4025 header.public_header.version_flag = false; 3505 header.public_header.version_flag = false;
4026 header.fec_flag = false; 3506 header.fec_flag = false;
4027 header.entropy_flag = true; 3507 header.entropy_flag = true;
4028 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3508 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
4029 header.fec_group = 0; 3509 header.fec_group = 0;
4030 3510
4031 QuicStopWaitingFrame stop_waiting_frame; 3511 QuicStopWaitingFrame stop_waiting_frame;
(...skipping 25 matching lines...) Expand all
4057 }; 3537 };
4058 3538
4059 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3539 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
4060 ASSERT_TRUE(data != NULL); 3540 ASSERT_TRUE(data != NULL);
4061 3541
4062 test::CompareCharArraysWithHexError("constructed packet", 3542 test::CompareCharArraysWithHexError("constructed packet",
4063 data->data(), data->length(), 3543 data->data(), data->length(),
4064 AsChars(packet), arraysize(packet)); 3544 AsChars(packet), arraysize(packet));
4065 } 3545 }
4066 3546
4067 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) {
4068 QuicPacketHeader header;
4069 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4070 header.public_header.reset_flag = false;
4071 header.public_header.version_flag = false;
4072 header.fec_flag = false;
4073 header.entropy_flag = false;
4074 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4075 header.fec_group = 0;
4076
4077 QuicCongestionFeedbackFrame congestion_feedback_frame;
4078 congestion_feedback_frame.type = kFixRate;
4079 congestion_feedback_frame.fix_rate.bitrate
4080 = QuicBandwidth::FromBytesPerSecond(0x04030201);
4081
4082 QuicFrames frames;
4083 frames.push_back(QuicFrame(&congestion_feedback_frame));
4084
4085 unsigned char packet[] = {
4086 // public flags (8 byte connection_id)
4087 0x3C,
4088 // connection_id
4089 0x10, 0x32, 0x54, 0x76,
4090 0x98, 0xBA, 0xDC, 0xFE,
4091 // packet sequence number
4092 0xBC, 0x9A, 0x78, 0x56,
4093 0x34, 0x12,
4094 // private flags
4095 0x00,
4096
4097 // frame type (congestion feedback frame)
4098 0x20,
4099 // congestion feedback type (fix rate)
4100 0x02,
4101 // bitrate_in_bytes_per_second;
4102 0x01, 0x02, 0x03, 0x04,
4103 };
4104
4105 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
4106 ASSERT_TRUE(data != NULL);
4107
4108 test::CompareCharArraysWithHexError("constructed packet",
4109 data->data(), data->length(),
4110 AsChars(packet), arraysize(packet));
4111 }
4112
4113 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) { 3547 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) {
4114 QuicPacketHeader header; 3548 QuicPacketHeader header;
4115 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3549 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4116 header.public_header.reset_flag = false; 3550 header.public_header.reset_flag = false;
4117 header.public_header.version_flag = false; 3551 header.public_header.version_flag = false;
4118 header.fec_flag = false; 3552 header.fec_flag = false;
4119 header.entropy_flag = false; 3553 header.entropy_flag = false;
4120 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3554 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4121 header.fec_group = 0; 3555 header.fec_group = 0;
4122 3556
4123 QuicCongestionFeedbackFrame congestion_feedback_frame; 3557 QuicCongestionFeedbackFrame congestion_feedback_frame;
4124 congestion_feedback_frame.type = 3558 congestion_feedback_frame.type =
4125 static_cast<CongestionFeedbackType>(kFixRate + 1); 3559 static_cast<CongestionFeedbackType>(kInterArrival + 1);
4126 3560
4127 QuicFrames frames; 3561 QuicFrames frames;
4128 frames.push_back(QuicFrame(&congestion_feedback_frame)); 3562 frames.push_back(QuicFrame(&congestion_feedback_frame));
4129 3563
4130 scoped_ptr<QuicPacket> data; 3564 scoped_ptr<QuicPacket> data;
4131 EXPECT_DFATAL( 3565 EXPECT_DFATAL(
4132 data.reset(BuildDataPacket(header, frames)), 3566 data.reset(BuildDataPacket(header, frames)),
4133 "AppendCongestionFeedbackFrame failed"); 3567 "AppendCongestionFeedbackFrame failed");
4134 ASSERT_TRUE(data == NULL); 3568 ASSERT_TRUE(data == NULL);
4135 } 3569 }
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
4633 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, 4067 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
4634 PACKET_6BYTE_SEQUENCE_NUMBER)); 4068 PACKET_6BYTE_SEQUENCE_NUMBER));
4635 scoped_ptr<QuicEncryptedPacket> encrypted( 4069 scoped_ptr<QuicEncryptedPacket> encrypted(
4636 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 4070 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
4637 4071
4638 ASSERT_TRUE(encrypted.get() != NULL); 4072 ASSERT_TRUE(encrypted.get() != NULL);
4639 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 4073 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
4640 } 4074 }
4641 4075
4642 TEST_P(QuicFramerTest, AckTruncationLargePacket) { 4076 TEST_P(QuicFramerTest, AckTruncationLargePacket) {
4643 if (framer_.version() <= QUIC_VERSION_15) {
4644 return;
4645 }
4646 QuicPacketHeader header; 4077 QuicPacketHeader header;
4647 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4078 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4648 header.public_header.reset_flag = false; 4079 header.public_header.reset_flag = false;
4649 header.public_header.version_flag = false; 4080 header.public_header.version_flag = false;
4650 header.fec_flag = false; 4081 header.fec_flag = false;
4651 header.entropy_flag = false; 4082 header.entropy_flag = false;
4652 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4083 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4653 header.fec_group = 0; 4084 header.fec_group = 0;
4654 4085
4655 // Create a packet with just the ack. 4086 // Create a packet with just the ack.
4656 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4087 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4657 QuicFrame frame; 4088 QuicFrame frame;
4658 frame.type = ACK_FRAME; 4089 frame.type = ACK_FRAME;
4659 frame.ack_frame = &ack_frame; 4090 frame.ack_frame = &ack_frame;
4660 QuicFrames frames; 4091 QuicFrames frames;
4661 frames.push_back(frame); 4092 frames.push_back(frame);
4662 4093
4663 // Build an ack packet with truncation due to limit in number of nack ranges. 4094 // Build an ack packet with truncation due to limit in number of nack ranges.
4664 scoped_ptr<QuicPacket> raw_ack_packet( 4095 scoped_ptr<QuicPacket> raw_ack_packet(
4665 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet); 4096 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
4666 ASSERT_TRUE(raw_ack_packet != NULL); 4097 ASSERT_TRUE(raw_ack_packet != NULL);
4667 scoped_ptr<QuicEncryptedPacket> ack_packet( 4098 scoped_ptr<QuicEncryptedPacket> ack_packet(
4668 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, 4099 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
4669 *raw_ack_packet)); 4100 *raw_ack_packet));
4670 // Now make sure we can turn our ack packet back into an ack frame. 4101 // Now make sure we can turn our ack packet back into an ack frame.
4671 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); 4102 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
4672 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 4103 ASSERT_EQ(1u, visitor_.ack_frames_.size());
4673 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4104 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4674 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); 4105 EXPECT_TRUE(processed_ack_frame.is_truncated);
4675 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed); 4106 EXPECT_EQ(510u, processed_ack_frame.largest_observed);
4676 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size()); 4107 ASSERT_EQ(255u, processed_ack_frame.missing_packets.size());
4677 SequenceNumberSet::const_iterator missing_iter = 4108 SequenceNumberSet::const_iterator missing_iter =
4678 processed_ack_frame.received_info.missing_packets.begin(); 4109 processed_ack_frame.missing_packets.begin();
4679 EXPECT_EQ(1u, *missing_iter); 4110 EXPECT_EQ(1u, *missing_iter);
4680 SequenceNumberSet::const_reverse_iterator last_missing_iter = 4111 SequenceNumberSet::const_reverse_iterator last_missing_iter =
4681 processed_ack_frame.received_info.missing_packets.rbegin(); 4112 processed_ack_frame.missing_packets.rbegin();
4682 EXPECT_EQ(509u, *last_missing_iter); 4113 EXPECT_EQ(509u, *last_missing_iter);
4683 } 4114 }
4684 4115
4685 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { 4116 TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
4686 if (framer_.version() <= QUIC_VERSION_15) {
4687 return;
4688 }
4689 QuicPacketHeader header; 4117 QuicPacketHeader header;
4690 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4118 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4691 header.public_header.reset_flag = false; 4119 header.public_header.reset_flag = false;
4692 header.public_header.version_flag = false; 4120 header.public_header.version_flag = false;
4693 header.fec_flag = false; 4121 header.fec_flag = false;
4694 header.entropy_flag = false; 4122 header.entropy_flag = false;
4695 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4123 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4696 header.fec_group = 0; 4124 header.fec_group = 0;
4697 4125
4698 // Create a packet with just the ack. 4126 // Create a packet with just the ack.
4699 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4127 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4700 QuicFrame frame; 4128 QuicFrame frame;
4701 frame.type = ACK_FRAME; 4129 frame.type = ACK_FRAME;
4702 frame.ack_frame = &ack_frame; 4130 frame.ack_frame = &ack_frame;
4703 QuicFrames frames; 4131 QuicFrames frames;
4704 frames.push_back(frame); 4132 frames.push_back(frame);
4705 4133
4706 // Build an ack packet with truncation due to limit in number of nack ranges. 4134 // Build an ack packet with truncation due to limit in number of nack ranges.
4707 scoped_ptr<QuicPacket> raw_ack_packet( 4135 scoped_ptr<QuicPacket> raw_ack_packet(
4708 framer_.BuildDataPacket(header, frames, 500).packet); 4136 framer_.BuildDataPacket(header, frames, 500).packet);
4709 ASSERT_TRUE(raw_ack_packet != NULL); 4137 ASSERT_TRUE(raw_ack_packet != NULL);
4710 scoped_ptr<QuicEncryptedPacket> ack_packet( 4138 scoped_ptr<QuicEncryptedPacket> ack_packet(
4711 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, 4139 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
4712 *raw_ack_packet)); 4140 *raw_ack_packet));
4713 // Now make sure we can turn our ack packet back into an ack frame. 4141 // Now make sure we can turn our ack packet back into an ack frame.
4714 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); 4142 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
4715 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 4143 ASSERT_EQ(1u, visitor_.ack_frames_.size());
4716 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4144 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4717 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated); 4145 EXPECT_TRUE(processed_ack_frame.is_truncated);
4718 EXPECT_EQ(476u, processed_ack_frame.received_info.largest_observed); 4146 EXPECT_EQ(476u, processed_ack_frame.largest_observed);
4719 ASSERT_EQ(238u, processed_ack_frame.received_info.missing_packets.size()); 4147 ASSERT_EQ(238u, processed_ack_frame.missing_packets.size());
4720 SequenceNumberSet::const_iterator missing_iter = 4148 SequenceNumberSet::const_iterator missing_iter =
4721 processed_ack_frame.received_info.missing_packets.begin(); 4149 processed_ack_frame.missing_packets.begin();
4722 EXPECT_EQ(1u, *missing_iter); 4150 EXPECT_EQ(1u, *missing_iter);
4723 SequenceNumberSet::const_reverse_iterator last_missing_iter = 4151 SequenceNumberSet::const_reverse_iterator last_missing_iter =
4724 processed_ack_frame.received_info.missing_packets.rbegin(); 4152 processed_ack_frame.missing_packets.rbegin();
4725 EXPECT_EQ(475u, *last_missing_iter); 4153 EXPECT_EQ(475u, *last_missing_iter);
4726 } 4154 }
4727 4155
4728 TEST_P(QuicFramerTest, Truncation15) {
4729 if (framer_.version() > QUIC_VERSION_15) {
4730 return;
4731 }
4732 QuicPacketHeader header;
4733 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4734 header.public_header.reset_flag = false;
4735 header.public_header.version_flag = false;
4736 header.fec_flag = false;
4737 header.entropy_flag = false;
4738 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4739 header.fec_group = 0;
4740
4741 QuicAckFrame ack_frame;
4742 ack_frame.received_info.largest_observed = 601;
4743 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1;
4744 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) {
4745 ack_frame.received_info.missing_packets.insert(i);
4746 }
4747
4748 // Create a packet with just the ack.
4749 QuicFrame frame;
4750 frame.type = ACK_FRAME;
4751 frame.ack_frame = &ack_frame;
4752 QuicFrames frames;
4753 frames.push_back(frame);
4754
4755 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames));
4756 ASSERT_TRUE(raw_ack_packet != NULL);
4757
4758 scoped_ptr<QuicEncryptedPacket> ack_packet(
4759 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
4760 *raw_ack_packet));
4761
4762 // Now make sure we can turn our ack packet back into an ack frame.
4763 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
4764 ASSERT_EQ(1u, visitor_.ack_frames_.size());
4765 const QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4766 EXPECT_EQ(header.packet_sequence_number - 1,
4767 processed_ack_frame.sent_info.least_unacked);
4768 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated);
4769 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed);
4770 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size());
4771 SequenceNumberSet::const_iterator missing_iter =
4772 processed_ack_frame.received_info.missing_packets.begin();
4773 EXPECT_EQ(1u, *missing_iter);
4774 SequenceNumberSet::const_reverse_iterator last_missing_iter =
4775 processed_ack_frame.received_info.missing_packets.rbegin();
4776 EXPECT_EQ(509u, *last_missing_iter);
4777 }
4778
4779 TEST_P(QuicFramerTest, CleanTruncation) { 4156 TEST_P(QuicFramerTest, CleanTruncation) {
4780 QuicPacketHeader header; 4157 QuicPacketHeader header;
4781 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4158 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
4782 header.public_header.reset_flag = false; 4159 header.public_header.reset_flag = false;
4783 header.public_header.version_flag = false; 4160 header.public_header.version_flag = false;
4784 header.fec_flag = false; 4161 header.fec_flag = false;
4785 header.entropy_flag = true; 4162 header.entropy_flag = true;
4786 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4163 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4787 header.fec_group = 0; 4164 header.fec_group = 0;
4788 4165
4789 QuicAckFrame ack_frame; 4166 QuicAckFrame ack_frame;
4790 ack_frame.received_info.largest_observed = 201; 4167 ack_frame.largest_observed = 201;
4791 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 2; 4168 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) {
4792 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; ++i) { 4169 ack_frame.missing_packets.insert(i);
4793 ack_frame.received_info.missing_packets.insert(i);
4794 } 4170 }
4795 4171
4796 // Create a packet with just the ack. 4172 // Create a packet with just the ack.
4797 QuicFrame frame; 4173 QuicFrame frame;
4798 frame.type = ACK_FRAME; 4174 frame.type = ACK_FRAME;
4799 frame.ack_frame = &ack_frame; 4175 frame.ack_frame = &ack_frame;
4800 QuicFrames frames; 4176 QuicFrames frames;
4801 frames.push_back(frame); 4177 frames.push_back(frame);
4802 4178
4803 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); 4179 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames));
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
4951 EXPECT_CALL(visitor, OnPacketComplete()); 4327 EXPECT_CALL(visitor, OnPacketComplete());
4952 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); 4328 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true));
4953 4329
4954 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 4330 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4955 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 4331 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4956 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 4332 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4957 } 4333 }
4958 4334
4959 } // namespace test 4335 } // namespace test
4960 } // namespace net 4336 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698