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

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

Issue 157403006: Add QUIC_VERSION_15 to add a revived_packets set to replace the (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_packet_creator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "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 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 1650
1651 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1651 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1652 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1652 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1653 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1653 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1654 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1654 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1655 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1655 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1656 visitor_.stream_frames_[0]->offset); 1656 visitor_.stream_frames_[0]->offset);
1657 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1657 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1658 } 1658 }
1659 1659
1660 TEST_P(QuicFramerTest, AckFrame) { 1660 TEST_P(QuicFramerTest, AckFrameV14) {
1661 if (framer_.version() > QUIC_VERSION_14) {
1662 return;
1663 }
1664
1661 unsigned char packet[] = { 1665 unsigned char packet[] = {
1662 // public flags (8 byte guid) 1666 // public flags (8 byte guid)
1663 0x3C, 1667 0x3C,
1664 // guid 1668 // guid
1665 0x10, 0x32, 0x54, 0x76, 1669 0x10, 0x32, 0x54, 0x76,
1666 0x98, 0xBA, 0xDC, 0xFE, 1670 0x98, 0xBA, 0xDC, 0xFE,
1667 // packet sequence number 1671 // packet sequence number
1668 0xA8, 0x9A, 0x78, 0x56, 1672 0xA8, 0x9A, 0x78, 0x56,
1669 0x34, 0x12, 1673 0x34, 0x12,
1670 // private flags (entropy) 1674 // private flags (entropy)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 expected_error = "Unable to read missing sequence number range."; 1753 expected_error = "Unable to read missing sequence number range.";
1750 } 1754 }
1751 CheckProcessingFails( 1755 CheckProcessingFails(
1752 packet, 1756 packet,
1753 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1757 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1754 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1758 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1755 expected_error, QUIC_INVALID_ACK_DATA); 1759 expected_error, QUIC_INVALID_ACK_DATA);
1756 } 1760 }
1757 } 1761 }
1758 1762
1763 TEST_P(QuicFramerTest, AckFrame) {
1764 if (framer_.version() <= QUIC_VERSION_14) {
1765 return;
1766 }
1767
1768 unsigned char packet[] = {
1769 // public flags (8 byte guid)
1770 0x3C,
1771 // guid
1772 0x10, 0x32, 0x54, 0x76,
1773 0x98, 0xBA, 0xDC, 0xFE,
1774 // packet sequence number
1775 0xA8, 0x9A, 0x78, 0x56,
1776 0x34, 0x12,
1777 // private flags (entropy)
1778 0x01,
1779
1780 // frame type (ack frame)
1781 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
1782 0x6C,
1783 // entropy hash of sent packets till least awaiting - 1.
1784 0xAB,
1785 // least packet sequence number awaiting an ack, delta from sequence number.
1786 0x08, 0x00, 0x00, 0x00,
1787 0x00, 0x00,
1788 // entropy hash of all received packets.
1789 0xBA,
1790 // largest observed packet sequence number
1791 0xBF, 0x9A, 0x78, 0x56,
1792 0x34, 0x12,
1793 // Zero delta time.
1794 0x0, 0x0,
1795 // num missing packets
1796 0x01,
1797 // missing packet delta
1798 0x01,
1799 // 0 more missing packets in range.
1800 0x00,
1801 // Number of revived packets.
1802 0x00,
1803 };
1804
1805 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1806 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1807
1808 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1809 ASSERT_TRUE(visitor_.header_.get());
1810 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1811
1812 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1813 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1814 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1815 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash);
1816 EXPECT_EQ(0xBA, frame.received_info.entropy_hash);
1817 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
1818 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
1819 SequenceNumberSet::const_iterator missing_iter =
1820 frame.received_info.missing_packets.begin();
1821 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1822 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
1823
1824 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
1825 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
1826 const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
1827 PACKET_6BYTE_SEQUENCE_NUMBER;
1828 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1829 kQuicEntropyHashSize;
1830 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1831 PACKET_6BYTE_SEQUENCE_NUMBER;
1832 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1833 kQuicDeltaTimeLargestObservedSize;
1834 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
1835 kNumberOfMissingPacketsSize;
1836 const size_t kMissingPacketsRange = kMissingPacketsOffset +
1837 PACKET_1BYTE_SEQUENCE_NUMBER;
1838 const size_t kRevivedPacketsLength = kMissingPacketsRange +
1839 PACKET_1BYTE_SEQUENCE_NUMBER;
1840 // Now test framing boundaries
1841 const size_t ack_frame_size = kRevivedPacketsLength +
1842 PACKET_1BYTE_SEQUENCE_NUMBER;
1843 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
1844 string expected_error;
1845 if (i < kLeastUnackedOffset) {
1846 expected_error = "Unable to read entropy hash for sent packets.";
1847 } else if (i < kReceivedEntropyOffset) {
1848 expected_error = "Unable to read least unacked delta.";
1849 } else if (i < kLargestObservedOffset) {
1850 expected_error = "Unable to read entropy hash for received packets.";
1851 } else if (i < kMissingDeltaTimeOffset) {
1852 expected_error = "Unable to read largest observed.";
1853 } else if (i < kNumMissingPacketOffset) {
1854 expected_error = "Unable to read delta time largest observed.";
1855 } else if (i < kMissingPacketsOffset) {
1856 expected_error = "Unable to read num missing packet ranges.";
1857 } else if (i < kMissingPacketsRange) {
1858 expected_error = "Unable to read missing sequence number delta.";
1859 } else if (i < kRevivedPacketsLength) {
1860 expected_error = "Unable to read missing sequence number range.";
1861 } else {
1862 expected_error = "Unable to read num revived packets.";
1863 }
1864 CheckProcessingFails(
1865 packet,
1866 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1867 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1868 expected_error, QUIC_INVALID_ACK_DATA);
1869 }
1870 }
1871
1872 TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
1873 if (framer_.version() <= QUIC_VERSION_14) {
1874 return;
1875 }
1876
1877 unsigned char packet[] = {
1878 // public flags (8 byte guid)
1879 0x3C,
1880 // guid
1881 0x10, 0x32, 0x54, 0x76,
1882 0x98, 0xBA, 0xDC, 0xFE,
1883 // packet sequence number
1884 0xA8, 0x9A, 0x78, 0x56,
1885 0x34, 0x12,
1886 // private flags (entropy)
1887 0x01,
1888
1889 // frame type (ack frame)
1890 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
1891 0x6C,
1892 // entropy hash of sent packets till least awaiting - 1.
1893 0xAB,
1894 // least packet sequence number awaiting an ack, delta from sequence number.
1895 0x08, 0x00, 0x00, 0x00,
1896 0x00, 0x00,
1897 // entropy hash of all received packets.
1898 0xBA,
1899 // largest observed packet sequence number
1900 0xBF, 0x9A, 0x78, 0x56,
1901 0x34, 0x12,
1902 // Zero delta time.
1903 0x0, 0x0,
1904 // num missing packets
1905 0x01,
1906 // missing packet delta
1907 0x01,
1908 // 0 more missing packets in range.
1909 0x00,
1910 // Number of revived packets.
1911 0x01,
1912 // Revived packet sequence number.
1913 0xBE, 0x9A, 0x78, 0x56,
1914 0x34, 0x12,
1915 };
1916
1917 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1918 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1919
1920 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1921 ASSERT_TRUE(visitor_.header_.get());
1922 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1923
1924 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1925 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1926 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1927 EXPECT_EQ(0xAB, frame.sent_info.entropy_hash);
1928 EXPECT_EQ(0xBA, frame.received_info.entropy_hash);
1929 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
1930 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
1931 SequenceNumberSet::const_iterator missing_iter =
1932 frame.received_info.missing_packets.begin();
1933 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1934 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
1935
1936 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
1937 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
1938 const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
1939 PACKET_6BYTE_SEQUENCE_NUMBER;
1940 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1941 kQuicEntropyHashSize;
1942 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1943 PACKET_6BYTE_SEQUENCE_NUMBER;
1944 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1945 kQuicDeltaTimeLargestObservedSize;
1946 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
1947 kNumberOfMissingPacketsSize;
1948 const size_t kMissingPacketsRange = kMissingPacketsOffset +
1949 PACKET_1BYTE_SEQUENCE_NUMBER;
1950 const size_t kRevivedPacketsLength = kMissingPacketsRange +
1951 PACKET_1BYTE_SEQUENCE_NUMBER;
1952 const size_t kRevivedPacketSequenceNumberLength = kRevivedPacketsLength +
1953 PACKET_1BYTE_SEQUENCE_NUMBER;
1954 // Now test framing boundaries
1955 const size_t ack_frame_size = kRevivedPacketSequenceNumberLength +
1956 PACKET_6BYTE_SEQUENCE_NUMBER;
1957 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
1958 string expected_error;
1959 if (i < kLeastUnackedOffset) {
1960 expected_error = "Unable to read entropy hash for sent packets.";
1961 } else if (i < kReceivedEntropyOffset) {
1962 expected_error = "Unable to read least unacked delta.";
1963 } else if (i < kLargestObservedOffset) {
1964 expected_error = "Unable to read entropy hash for received packets.";
1965 } else if (i < kMissingDeltaTimeOffset) {
1966 expected_error = "Unable to read largest observed.";
1967 } else if (i < kNumMissingPacketOffset) {
1968 expected_error = "Unable to read delta time largest observed.";
1969 } else if (i < kMissingPacketsOffset) {
1970 expected_error = "Unable to read num missing packet ranges.";
1971 } else if (i < kMissingPacketsRange) {
1972 expected_error = "Unable to read missing sequence number delta.";
1973 } else if (i < kRevivedPacketsLength) {
1974 expected_error = "Unable to read missing sequence number range.";
1975 } else if (i < kRevivedPacketSequenceNumberLength) {
1976 expected_error = "Unable to read num revived packets.";
1977 } else {
1978 expected_error = "Unable to read revived packet.";
1979 }
1980 CheckProcessingFails(
1981 packet,
1982 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1983 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1984 expected_error, QUIC_INVALID_ACK_DATA);
1985 }
1986 }
1987
1759 TEST_P(QuicFramerTest, AckFrameNoNacks) { 1988 TEST_P(QuicFramerTest, AckFrameNoNacks) {
1760 unsigned char packet[] = { 1989 unsigned char packet[] = {
1761 // public flags (8 byte guid) 1990 // public flags (8 byte guid)
1762 0x3C, 1991 0x3C,
1763 // guid 1992 // guid
1764 0x10, 0x32, 0x54, 0x76, 1993 0x10, 0x32, 0x54, 0x76,
1765 0x98, 0xBA, 0xDC, 0xFE, 1994 0x98, 0xBA, 0xDC, 0xFE,
1766 // packet sequence number 1995 // packet sequence number
1767 0xA8, 0x9A, 0x78, 0x56, 1996 0xA8, 0x9A, 0x78, 0x56,
1768 0x34, 0x12, 1997 0x34, 0x12,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 scoped_ptr<QuicPacket> data( 2038 scoped_ptr<QuicPacket> data(
1810 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet); 2039 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
1811 ASSERT_TRUE(data != NULL); 2040 ASSERT_TRUE(data != NULL);
1812 2041
1813 test::CompareCharArraysWithHexError("constructed packet", 2042 test::CompareCharArraysWithHexError("constructed packet",
1814 data->data(), data->length(), 2043 data->data(), data->length(),
1815 AsChars(packet), arraysize(packet)); 2044 AsChars(packet), arraysize(packet));
1816 } 2045 }
1817 2046
1818 TEST_P(QuicFramerTest, AckFrame500Nacks) { 2047 TEST_P(QuicFramerTest, AckFrame500Nacks) {
2048 if (framer_.version() <= QUIC_VERSION_14) {
2049 return;
2050 }
1819 unsigned char packet[] = { 2051 unsigned char packet[] = {
1820 // public flags (8 byte guid) 2052 // public flags (8 byte guid)
1821 0x3C, 2053 0x3C,
2054 // guid
2055 0x10, 0x32, 0x54, 0x76,
2056 0x98, 0xBA, 0xDC, 0xFE,
2057 // packet sequence number
2058 0xA8, 0x9A, 0x78, 0x56,
2059 0x34, 0x12,
2060 // private flags (entropy)
2061 0x01,
2062
2063 // frame type (ack frame)
2064 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2065 0x6C,
2066 // entropy hash of sent packets till least awaiting - 1.
2067 0xAB,
2068 // least packet sequence number awaiting an ack, delta from sequence number.
2069 0x08, 0x00, 0x00, 0x00,
2070 0x00, 0x00,
2071 // entropy hash of all received packets.
2072 0xBA,
2073 // largest observed packet sequence number
2074 0xBF, 0x9A, 0x78, 0x56,
2075 0x34, 0x12,
2076 // Zero delta time.
2077 0x0, 0x0,
2078 // num missing packet ranges
2079 0x02,
2080 // missing packet delta
2081 0x01,
2082 // 243 more missing packets in range.
2083 // The ranges are listed in this order so the re-constructed packet matches.
2084 0xF3,
2085 // No gap between ranges
2086 0x00,
2087 // 255 more missing packets in range.
2088 0xFF,
2089 // No revived packets.
2090 0x00,
2091 };
2092
2093 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2094 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2095
2096 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2097 ASSERT_TRUE(visitor_.header_.get());
2098 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2099
2100 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2101 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2102 QuicAckFrame* frame = visitor_.ack_frames_[0];
2103 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash);
2104 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2105 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2106 frame->received_info.largest_observed);
2107 EXPECT_EQ(0u, frame->received_info.revived_packets.size());
2108 ASSERT_EQ(500u, frame->received_info.missing_packets.size());
2109 SequenceNumberSet::const_iterator first_missing_iter =
2110 frame->received_info.missing_packets.begin();
2111 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
2112 SequenceNumberSet::const_reverse_iterator last_missing_iter =
2113 frame->received_info.missing_packets.rbegin();
2114 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter);
2115 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked);
2116
2117 // Verify that the packet re-serializes identically.
2118 QuicFrames frames;
2119 frames.push_back(QuicFrame(frame));
2120 scoped_ptr<QuicPacket> data(
2121 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
2122 ASSERT_TRUE(data != NULL);
2123
2124 test::CompareCharArraysWithHexError("constructed packet",
2125 data->data(), data->length(),
2126 AsChars(packet), arraysize(packet));
2127 }
2128
2129 TEST_P(QuicFramerTest, AckFrame500NacksV14) {
2130 if (framer_.version() > QUIC_VERSION_14) {
2131 return;
2132 }
2133 unsigned char packet[] = {
2134 // public flags (8 byte guid)
2135 0x3C,
1822 // guid 2136 // guid
1823 0x10, 0x32, 0x54, 0x76, 2137 0x10, 0x32, 0x54, 0x76,
1824 0x98, 0xBA, 0xDC, 0xFE, 2138 0x98, 0xBA, 0xDC, 0xFE,
1825 // packet sequence number 2139 // packet sequence number
1826 0xA8, 0x9A, 0x78, 0x56, 2140 0xA8, 0x9A, 0x78, 0x56,
1827 0x34, 0x12, 2141 0x34, 0x12,
1828 // private flags (entropy) 2142 // private flags (entropy)
1829 0x01, 2143 0x01,
1830 2144
1831 // frame type (ack frame) 2145 // frame type (ack frame)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1885 scoped_ptr<QuicPacket> data( 2199 scoped_ptr<QuicPacket> data(
1886 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet); 2200 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
1887 ASSERT_TRUE(data != NULL); 2201 ASSERT_TRUE(data != NULL);
1888 2202
1889 test::CompareCharArraysWithHexError("constructed packet", 2203 test::CompareCharArraysWithHexError("constructed packet",
1890 data->data(), data->length(), 2204 data->data(), data->length(),
1891 AsChars(packet), arraysize(packet)); 2205 AsChars(packet), arraysize(packet));
1892 } 2206 }
1893 2207
1894 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) { 2208 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) {
2209 if (framer_.version() <= QUIC_VERSION_14) {
2210 return;
2211 }
1895 unsigned char packet[] = { 2212 unsigned char packet[] = {
1896 // public flags (8 byte guid) 2213 // public flags (8 byte guid)
1897 0x3C, 2214 0x3C,
2215 // guid
2216 0x10, 0x32, 0x54, 0x76,
2217 0x98, 0xBA, 0xDC, 0xFE,
2218 // packet sequence number
2219 0xBC, 0x9A, 0x78, 0x56,
2220 0x34, 0x12,
2221 // private flags
2222 0x00,
2223
2224 // frame type (congestion feedback frame)
2225 0x20,
2226 // congestion feedback type (tcp)
2227 0x00,
2228 // ack_frame.feedback.tcp.receive_window
2229 0x03, 0x04,
2230 };
2231
2232 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2233 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2234
2235 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2236 ASSERT_TRUE(visitor_.header_.get());
2237 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2238
2239 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2240 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
2241 const QuicCongestionFeedbackFrame& frame =
2242 *visitor_.congestion_feedback_frames_[0];
2243 ASSERT_EQ(kTCP, frame.type);
2244 EXPECT_EQ(0x4030u, frame.tcp.receive_window);
2245
2246 // Now test framing boundaries
2247 for (size_t i = kQuicFrameTypeSize; i < 4; ++i) {
2248 string expected_error;
2249 if (i < 2) {
2250 expected_error = "Unable to read congestion feedback type.";
2251 } else if (i < 4) {
2252 expected_error = "Unable to read receive window.";
2253 }
2254 CheckProcessingFails(
2255 packet,
2256 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2257 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2258 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2259 }
2260 }
2261
2262 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCPV14) {
2263 if (framer_.version() > QUIC_VERSION_14) {
2264 return;
2265 }
2266 unsigned char packet[] = {
2267 // public flags (8 byte guid)
2268 0x3C,
2269 // guid
2270 0x10, 0x32, 0x54, 0x76,
2271 0x98, 0xBA, 0xDC, 0xFE,
2272 // packet sequence number
2273 0xBC, 0x9A, 0x78, 0x56,
2274 0x34, 0x12,
2275 // private flags
2276 0x00,
2277
2278 // frame type (congestion feedback frame)
2279 0x20,
2280 // congestion feedback type (tcp)
2281 0x00,
2282 // ack_frame.feedback.tcp.accumulated_number_of_lost_packets
2283 0x01, 0x02,
2284 // ack_frame.feedback.tcp.receive_window
2285 0x03, 0x04,
2286 };
2287
2288 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2289 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2290
2291 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2292 ASSERT_TRUE(visitor_.header_.get());
2293 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2294
2295 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2296 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
2297 const QuicCongestionFeedbackFrame& frame =
2298 *visitor_.congestion_feedback_frames_[0];
2299 ASSERT_EQ(kTCP, frame.type);
2300 EXPECT_EQ(0x4030u, frame.tcp.receive_window);
2301
2302 // Now test framing boundaries
2303 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) {
2304 string expected_error;
2305 if (i < 2) {
2306 expected_error = "Unable to read congestion feedback type.";
2307 } else if (i < 4) {
2308 expected_error = "Unable to read accumulated number of lost packets.";
2309 } else if (i < 6) {
2310 expected_error = "Unable to read receive window.";
2311 }
2312 CheckProcessingFails(
2313 packet,
2314 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2315 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2316 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2317 }
2318 }
2319
2320 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
2321 if (framer_.version() <= QUIC_VERSION_14) {
2322 return;
2323 }
2324 unsigned char packet[] = {
2325 // public flags (8 byte guid)
2326 0x3C,
1898 // guid 2327 // guid
1899 0x10, 0x32, 0x54, 0x76, 2328 0x10, 0x32, 0x54, 0x76,
1900 0x98, 0xBA, 0xDC, 0xFE, 2329 0x98, 0xBA, 0xDC, 0xFE,
1901 // packet sequence number 2330 // packet sequence number
1902 0xBC, 0x9A, 0x78, 0x56, 2331 0xBC, 0x9A, 0x78, 0x56,
1903 0x34, 0x12, 2332 0x34, 0x12,
1904 // private flags 2333 // private flags
1905 0x00, 2334 0x00,
1906 2335
1907 // frame type (congestion feedback frame) 2336 // frame type (congestion feedback frame)
1908 0x20, 2337 0x20,
1909 // congestion feedback type (tcp) 2338 // congestion feedback type (inter arrival)
1910 0x00, 2339 0x01,
1911 // ack_frame.feedback.tcp.accumulated_number_of_lost_packets 2340 // num received packets
1912 0x01, 0x02, 2341 0x03,
1913 // ack_frame.feedback.tcp.receive_window 2342 // lowest sequence number
1914 0x03, 0x04, 2343 0xBA, 0x9A, 0x78, 0x56,
2344 0x34, 0x12,
2345 // receive time
2346 0x87, 0x96, 0xA5, 0xB4,
2347 0xC3, 0xD2, 0xE1, 0x07,
2348 // sequence delta
2349 0x01, 0x00,
2350 // time delta
2351 0x01, 0x00, 0x00, 0x00,
2352 // sequence delta (skip one packet)
2353 0x03, 0x00,
2354 // time delta
2355 0x02, 0x00, 0x00, 0x00,
1915 }; 2356 };
1916 2357
1917 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2358 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1918 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2359 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1919 2360
1920 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2361 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1921 ASSERT_TRUE(visitor_.header_.get()); 2362 ASSERT_TRUE(visitor_.header_.get());
1922 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2363 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1923 2364
1924 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2365 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1925 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size()); 2366 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
1926 const QuicCongestionFeedbackFrame& frame = 2367 const QuicCongestionFeedbackFrame& frame =
1927 *visitor_.congestion_feedback_frames_[0]; 2368 *visitor_.congestion_feedback_frames_[0];
1928 ASSERT_EQ(kTCP, frame.type); 2369 ASSERT_EQ(kInterArrival, frame.type);
1929 EXPECT_EQ(0x4030u, frame.tcp.receive_window); 2370 ASSERT_EQ(3u, frame.inter_arrival.received_packet_times.size());
2371 TimeMap::const_iterator iter =
2372 frame.inter_arrival.received_packet_times.begin();
2373 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first);
2374 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59687),
2375 iter->second.Subtract(start_).ToMicroseconds());
2376 ++iter;
2377 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first);
2378 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59688),
2379 iter->second.Subtract(start_).ToMicroseconds());
2380 ++iter;
2381 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first);
2382 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59689),
2383 iter->second.Subtract(start_).ToMicroseconds());
1930 2384
1931 // Now test framing boundaries 2385 // Now test framing boundaries
1932 for (size_t i = kQuicFrameTypeSize; i < 6; ++i) { 2386 for (size_t i = kQuicFrameTypeSize; i < 29; ++i) {
1933 string expected_error; 2387 string expected_error;
1934 if (i < 2) { 2388 if (i < 2) {
1935 expected_error = "Unable to read congestion feedback type."; 2389 expected_error = "Unable to read congestion feedback type.";
1936 } else if (i < 4) { 2390 } else if (i < 3) {
1937 expected_error = "Unable to read accumulated number of lost packets."; 2391 expected_error = "Unable to read num received packets.";
1938 } else if (i < 6) { 2392 } else if (i < 9) {
1939 expected_error = "Unable to read receive window."; 2393 expected_error = "Unable to read smallest received.";
2394 } else if (i < 17) {
2395 expected_error = "Unable to read time received.";
2396 } else if (i < 19) {
2397 expected_error = "Unable to read sequence delta in received packets.";
2398 } else if (i < 23) {
2399 expected_error = "Unable to read time delta in received packets.";
2400 } else if (i < 25) {
2401 expected_error = "Unable to read sequence delta in received packets.";
2402 } else if (i < 29) {
2403 expected_error = "Unable to read time delta in received packets.";
1940 } 2404 }
1941 CheckProcessingFails( 2405 CheckProcessingFails(
1942 packet, 2406 packet,
1943 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 2407 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1944 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2408 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1945 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); 2409 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
1946 } 2410 }
1947 } 2411 }
1948 2412
1949 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) { 2413 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrivalV14) {
2414 if (framer_.version() > QUIC_VERSION_14) {
2415 return;
2416 }
1950 unsigned char packet[] = { 2417 unsigned char packet[] = {
1951 // public flags (8 byte guid) 2418 // public flags (8 byte guid)
1952 0x3C, 2419 0x3C,
1953 // guid 2420 // guid
1954 0x10, 0x32, 0x54, 0x76, 2421 0x10, 0x32, 0x54, 0x76,
1955 0x98, 0xBA, 0xDC, 0xFE, 2422 0x98, 0xBA, 0xDC, 0xFE,
1956 // packet sequence number 2423 // packet sequence number
1957 0xBC, 0x9A, 0x78, 0x56, 2424 0xBC, 0x9A, 0x78, 0x56,
1958 0x34, 0x12, 2425 0x34, 0x12,
1959 // private flags 2426 // private flags
(...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3097 versions.push_back(GetParam()); 3564 versions.push_back(GetParam());
3098 scoped_ptr<QuicEncryptedPacket> data( 3565 scoped_ptr<QuicEncryptedPacket> data(
3099 framer_.BuildVersionNegotiationPacket(header, versions)); 3566 framer_.BuildVersionNegotiationPacket(header, versions));
3100 3567
3101 test::CompareCharArraysWithHexError("constructed packet", 3568 test::CompareCharArraysWithHexError("constructed packet",
3102 data->data(), data->length(), 3569 data->data(), data->length(),
3103 AsChars(packet), arraysize(packet)); 3570 AsChars(packet), arraysize(packet));
3104 } 3571 }
3105 3572
3106 TEST_P(QuicFramerTest, BuildAckFramePacket) { 3573 TEST_P(QuicFramerTest, BuildAckFramePacket) {
3574 if (version_ <= QUIC_VERSION_14) {
3575 return;
3576 }
3107 QuicPacketHeader header; 3577 QuicPacketHeader header;
3108 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 3578 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3109 header.public_header.reset_flag = false; 3579 header.public_header.reset_flag = false;
3580 header.public_header.version_flag = false;
3581 header.fec_flag = false;
3582 header.entropy_flag = true;
3583 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3584 header.fec_group = 0;
3585
3586 QuicAckFrame ack_frame;
3587 ack_frame.received_info.entropy_hash = 0x43;
3588 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF);
3589 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
3590 ack_frame.received_info.missing_packets.insert(
3591 GG_UINT64_C(0x770123456789ABE));
3592 ack_frame.sent_info.entropy_hash = 0x14;
3593 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0);
3594
3595 QuicFrames frames;
3596 frames.push_back(QuicFrame(&ack_frame));
3597
3598 unsigned char packet[] = {
3599 // public flags (8 byte guid)
3600 0x3C,
3601 // guid
3602 0x10, 0x32, 0x54, 0x76,
3603 0x98, 0xBA, 0xDC, 0xFE,
3604 // packet sequence number
3605 0xA8, 0x9A, 0x78, 0x56,
3606 0x34, 0x12,
3607 // private flags (entropy)
3608 0x01,
3609
3610 // frame type (ack frame)
3611 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3612 0x6C,
3613 // entropy hash of sent packets till least awaiting - 1.
3614 0x14,
3615 // least packet sequence number awaiting an ack, delta from sequence number.
3616 0x08, 0x00, 0x00, 0x00,
3617 0x00, 0x00,
3618 // entropy hash of all received packets.
3619 0x43,
3620 // largest observed packet sequence number
3621 0xBF, 0x9A, 0x78, 0x56,
3622 0x34, 0x12,
3623 // Zero delta time.
3624 0x0, 0x0,
3625 // num missing packet ranges
3626 0x01,
3627 // missing packet delta
3628 0x01,
3629 // 0 more missing packets in range.
3630 0x00,
3631 // 0 revived packets.
3632 0x00,
3633 };
3634
3635 scoped_ptr<QuicPacket> data(
3636 framer_.BuildUnsizedDataPacket(header, frames).packet);
3637 ASSERT_TRUE(data != NULL);
3638
3639 test::CompareCharArraysWithHexError("constructed packet",
3640 data->data(), data->length(),
3641 AsChars(packet), arraysize(packet));
3642 }
3643
3644 TEST_P(QuicFramerTest, BuildAckFramePacketV14) {
3645 if (version_ > QUIC_VERSION_14) {
3646 return;
3647 }
3648 QuicPacketHeader header;
3649 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3650 header.public_header.reset_flag = false;
3110 header.public_header.version_flag = false; 3651 header.public_header.version_flag = false;
3111 header.fec_flag = false; 3652 header.fec_flag = false;
3112 header.entropy_flag = true; 3653 header.entropy_flag = true;
3113 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3654 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3114 header.fec_group = 0; 3655 header.fec_group = 0;
3115 3656
3116 QuicAckFrame ack_frame; 3657 QuicAckFrame ack_frame;
3117 ack_frame.received_info.entropy_hash = 0x43; 3658 ack_frame.received_info.entropy_hash = 0x43;
3118 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF); 3659 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF);
3119 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); 3660 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3163 scoped_ptr<QuicPacket> data( 3704 scoped_ptr<QuicPacket> data(
3164 framer_.BuildUnsizedDataPacket(header, frames).packet); 3705 framer_.BuildUnsizedDataPacket(header, frames).packet);
3165 ASSERT_TRUE(data != NULL); 3706 ASSERT_TRUE(data != NULL);
3166 3707
3167 test::CompareCharArraysWithHexError("constructed packet", 3708 test::CompareCharArraysWithHexError("constructed packet",
3168 data->data(), data->length(), 3709 data->data(), data->length(),
3169 AsChars(packet), arraysize(packet)); 3710 AsChars(packet), arraysize(packet));
3170 } 3711 }
3171 3712
3172 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCP) { 3713 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCP) {
3714 if (version_ <= QUIC_VERSION_14) {
3715 return;
3716 }
3173 QuicPacketHeader header; 3717 QuicPacketHeader header;
3174 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 3718 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3175 header.public_header.reset_flag = false; 3719 header.public_header.reset_flag = false;
3720 header.public_header.version_flag = false;
3721 header.fec_flag = false;
3722 header.entropy_flag = false;
3723 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3724 header.fec_group = 0;
3725
3726 QuicCongestionFeedbackFrame congestion_feedback_frame;
3727 congestion_feedback_frame.type = kTCP;
3728 congestion_feedback_frame.tcp.receive_window = 0x4030;
3729
3730 QuicFrames frames;
3731 frames.push_back(QuicFrame(&congestion_feedback_frame));
3732
3733 unsigned char packet[] = {
3734 // public flags (8 byte guid)
3735 0x3C,
3736 // guid
3737 0x10, 0x32, 0x54, 0x76,
3738 0x98, 0xBA, 0xDC, 0xFE,
3739 // packet sequence number
3740 0xBC, 0x9A, 0x78, 0x56,
3741 0x34, 0x12,
3742 // private flags
3743 0x00,
3744
3745 // frame type (congestion feedback frame)
3746 0x20,
3747 // congestion feedback type (TCP)
3748 0x00,
3749 // TCP receive window
3750 0x03, 0x04,
3751 };
3752
3753 scoped_ptr<QuicPacket> data(
3754 framer_.BuildUnsizedDataPacket(header, frames).packet);
3755 ASSERT_TRUE(data != NULL);
3756
3757 test::CompareCharArraysWithHexError("constructed packet",
3758 data->data(), data->length(),
3759 AsChars(packet), arraysize(packet));
3760 }
3761
3762 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCPV14) {
3763 if (version_ > QUIC_VERSION_14) {
3764 return;
3765 }
3766 QuicPacketHeader header;
3767 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3768 header.public_header.reset_flag = false;
3176 header.public_header.version_flag = false; 3769 header.public_header.version_flag = false;
3177 header.fec_flag = false; 3770 header.fec_flag = false;
3178 header.entropy_flag = false; 3771 header.entropy_flag = false;
3179 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3772 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3180 header.fec_group = 0; 3773 header.fec_group = 0;
3181 3774
3182 QuicCongestionFeedbackFrame congestion_feedback_frame; 3775 QuicCongestionFeedbackFrame congestion_feedback_frame;
3183 congestion_feedback_frame.type = kTCP; 3776 congestion_feedback_frame.type = kTCP;
3184 congestion_feedback_frame.tcp.receive_window = 0x4030; 3777 congestion_feedback_frame.tcp.receive_window = 0x4030;
3185 3778
(...skipping 25 matching lines...) Expand all
3211 scoped_ptr<QuicPacket> data( 3804 scoped_ptr<QuicPacket> data(
3212 framer_.BuildUnsizedDataPacket(header, frames).packet); 3805 framer_.BuildUnsizedDataPacket(header, frames).packet);
3213 ASSERT_TRUE(data != NULL); 3806 ASSERT_TRUE(data != NULL);
3214 3807
3215 test::CompareCharArraysWithHexError("constructed packet", 3808 test::CompareCharArraysWithHexError("constructed packet",
3216 data->data(), data->length(), 3809 data->data(), data->length(),
3217 AsChars(packet), arraysize(packet)); 3810 AsChars(packet), arraysize(packet));
3218 } 3811 }
3219 3812
3220 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrival) { 3813 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrival) {
3814 if (version_ <= QUIC_VERSION_14) {
3815 return;
3816 }
3221 QuicPacketHeader header; 3817 QuicPacketHeader header;
3222 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 3818 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3223 header.public_header.reset_flag = false; 3819 header.public_header.reset_flag = false;
3820 header.public_header.version_flag = false;
3821 header.fec_flag = false;
3822 header.entropy_flag = false;
3823 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3824 header.fec_group = 0;
3825
3826 QuicCongestionFeedbackFrame frame;
3827 frame.type = kInterArrival;
3828 frame.inter_arrival.received_packet_times.insert(
3829 make_pair(GG_UINT64_C(0x0123456789ABA),
3830 start_.Add(QuicTime::Delta::FromMicroseconds(
3831 GG_UINT64_C(0x07E1D2C3B4A59687)))));
3832 frame.inter_arrival.received_packet_times.insert(
3833 make_pair(GG_UINT64_C(0x0123456789ABB),
3834 start_.Add(QuicTime::Delta::FromMicroseconds(
3835 GG_UINT64_C(0x07E1D2C3B4A59688)))));
3836 frame.inter_arrival.received_packet_times.insert(
3837 make_pair(GG_UINT64_C(0x0123456789ABD),
3838 start_.Add(QuicTime::Delta::FromMicroseconds(
3839 GG_UINT64_C(0x07E1D2C3B4A59689)))));
3840 QuicFrames frames;
3841 frames.push_back(QuicFrame(&frame));
3842
3843 unsigned char packet[] = {
3844 // public flags (8 byte guid)
3845 0x3C,
3846 // guid
3847 0x10, 0x32, 0x54, 0x76,
3848 0x98, 0xBA, 0xDC, 0xFE,
3849 // packet sequence number
3850 0xBC, 0x9A, 0x78, 0x56,
3851 0x34, 0x12,
3852 // private flags
3853 0x00,
3854
3855 // frame type (congestion feedback frame)
3856 0x20,
3857 // congestion feedback type (inter arrival)
3858 0x01,
3859 // num received packets
3860 0x03,
3861 // lowest sequence number
3862 0xBA, 0x9A, 0x78, 0x56,
3863 0x34, 0x12,
3864 // receive time
3865 0x87, 0x96, 0xA5, 0xB4,
3866 0xC3, 0xD2, 0xE1, 0x07,
3867 // sequence delta
3868 0x01, 0x00,
3869 // time delta
3870 0x01, 0x00, 0x00, 0x00,
3871 // sequence delta (skip one packet)
3872 0x03, 0x00,
3873 // time delta
3874 0x02, 0x00, 0x00, 0x00,
3875 };
3876
3877 scoped_ptr<QuicPacket> data(
3878 framer_.BuildUnsizedDataPacket(header, frames).packet);
3879 ASSERT_TRUE(data != NULL);
3880
3881 test::CompareCharArraysWithHexError("constructed packet",
3882 data->data(), data->length(),
3883 AsChars(packet), arraysize(packet));
3884 }
3885
3886 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInterArrivalV14) {
3887 if (version_ > QUIC_VERSION_14) {
3888 return;
3889 }
3890 QuicPacketHeader header;
3891 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3892 header.public_header.reset_flag = false;
3224 header.public_header.version_flag = false; 3893 header.public_header.version_flag = false;
3225 header.fec_flag = false; 3894 header.fec_flag = false;
3226 header.entropy_flag = false; 3895 header.entropy_flag = false;
3227 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3896 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3228 header.fec_group = 0; 3897 header.fec_group = 0;
3229 3898
3230 QuicCongestionFeedbackFrame frame; 3899 QuicCongestionFeedbackFrame frame;
3231 frame.type = kInterArrival; 3900 frame.type = kInterArrival;
3232 frame.inter_arrival.received_packet_times.insert( 3901 frame.inter_arrival.received_packet_times.insert(
3233 make_pair(GG_UINT64_C(0x0123456789ABA), 3902 make_pair(GG_UINT64_C(0x0123456789ABA),
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
4126 EXPECT_CALL(visitor, OnPacketComplete()); 4795 EXPECT_CALL(visitor, OnPacketComplete());
4127 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); 4796 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true));
4128 4797
4129 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 4798 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4130 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 4799 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4131 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 4800 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4132 } 4801 }
4133 4802
4134 } // namespace test 4803 } // namespace test
4135 } // namespace net 4804 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_packet_creator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698