OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |