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

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

Issue 180723003: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unintialized memory error Created 6 years, 9 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_headers_stream_test.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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 complete_packets_(0), 204 complete_packets_(0),
205 revived_packets_(0), 205 revived_packets_(0),
206 accept_packet_(true), 206 accept_packet_(true),
207 accept_public_header_(true) { 207 accept_public_header_(true) {
208 } 208 }
209 209
210 virtual ~TestQuicVisitor() { 210 virtual ~TestQuicVisitor() {
211 STLDeleteElements(&stream_frames_); 211 STLDeleteElements(&stream_frames_);
212 STLDeleteElements(&ack_frames_); 212 STLDeleteElements(&ack_frames_);
213 STLDeleteElements(&congestion_feedback_frames_); 213 STLDeleteElements(&congestion_feedback_frames_);
214 STLDeleteElements(&stop_waiting_frames_);
214 STLDeleteElements(&fec_data_); 215 STLDeleteElements(&fec_data_);
215 } 216 }
216 217
217 virtual void OnError(QuicFramer* f) OVERRIDE { 218 virtual void OnError(QuicFramer* f) OVERRIDE {
218 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) 219 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error())
219 << " (" << f->error() << ")"; 220 << " (" << f->error() << ")";
220 error_count_++; 221 ++error_count_;
221 } 222 }
222 223
223 virtual void OnPacket() OVERRIDE {} 224 virtual void OnPacket() OVERRIDE {}
224 225
225 virtual void OnPublicResetPacket( 226 virtual void OnPublicResetPacket(
226 const QuicPublicResetPacket& packet) OVERRIDE { 227 const QuicPublicResetPacket& packet) OVERRIDE {
227 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); 228 public_reset_packet_.reset(new QuicPublicResetPacket(packet));
228 } 229 }
229 230
230 virtual void OnVersionNegotiationPacket( 231 virtual void OnVersionNegotiationPacket(
231 const QuicVersionNegotiationPacket& packet) OVERRIDE { 232 const QuicVersionNegotiationPacket& packet) OVERRIDE {
232 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); 233 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet));
233 } 234 }
234 235
235 virtual void OnRevivedPacket() OVERRIDE { 236 virtual void OnRevivedPacket() OVERRIDE {
236 revived_packets_++; 237 ++revived_packets_;
237 } 238 }
238 239
239 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE { 240 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE {
240 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; 241 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version;
241 version_mismatch_++; 242 ++version_mismatch_;
242 return true; 243 return true;
243 } 244 }
244 245
245 virtual bool OnUnauthenticatedPublicHeader( 246 virtual bool OnUnauthenticatedPublicHeader(
246 const QuicPacketPublicHeader& header) OVERRIDE { 247 const QuicPacketPublicHeader& header) OVERRIDE {
247 public_header_.reset(new QuicPacketPublicHeader(header)); 248 public_header_.reset(new QuicPacketPublicHeader(header));
248 return accept_public_header_; 249 return accept_public_header_;
249 } 250 }
250 251
251 virtual bool OnUnauthenticatedHeader( 252 virtual bool OnUnauthenticatedHeader(
252 const QuicPacketHeader& header) OVERRIDE { 253 const QuicPacketHeader& header) OVERRIDE {
253 return true; 254 return true;
254 } 255 }
255 256
256 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { 257 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE {
257 packet_count_++; 258 ++packet_count_;
258 header_.reset(new QuicPacketHeader(header)); 259 header_.reset(new QuicPacketHeader(header));
259 return accept_packet_; 260 return accept_packet_;
260 } 261 }
261 262
262 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { 263 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE {
263 frame_count_++; 264 ++frame_count_;
264 stream_frames_.push_back(new QuicStreamFrame(frame)); 265 stream_frames_.push_back(new QuicStreamFrame(frame));
265 return true; 266 return true;
266 } 267 }
267 268
268 virtual void OnFecProtectedPayload(StringPiece payload) OVERRIDE { 269 virtual void OnFecProtectedPayload(StringPiece payload) OVERRIDE {
269 fec_protected_payload_ = payload.as_string(); 270 fec_protected_payload_ = payload.as_string();
270 } 271 }
271 272
272 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE { 273 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE {
273 frame_count_++; 274 ++frame_count_;
274 ack_frames_.push_back(new QuicAckFrame(frame)); 275 ack_frames_.push_back(new QuicAckFrame(frame));
275 return true; 276 return true;
276 } 277 }
277 278
278 virtual bool OnCongestionFeedbackFrame( 279 virtual bool OnCongestionFeedbackFrame(
279 const QuicCongestionFeedbackFrame& frame) OVERRIDE { 280 const QuicCongestionFeedbackFrame& frame) OVERRIDE {
280 frame_count_++; 281 ++frame_count_;
281 congestion_feedback_frames_.push_back( 282 congestion_feedback_frames_.push_back(
282 new QuicCongestionFeedbackFrame(frame)); 283 new QuicCongestionFeedbackFrame(frame));
283 return true; 284 return true;
284 } 285 }
285 286
287 virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) OVERRIDE {
288 ++frame_count_;
289 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame));
290 return true;
291 }
292
286 virtual void OnFecData(const QuicFecData& fec) OVERRIDE { 293 virtual void OnFecData(const QuicFecData& fec) OVERRIDE {
287 fec_count_++; 294 ++fec_count_;
288 fec_data_.push_back(new QuicFecData(fec)); 295 fec_data_.push_back(new QuicFecData(fec));
289 } 296 }
290 297
291 virtual void OnPacketComplete() OVERRIDE { 298 virtual void OnPacketComplete() OVERRIDE {
292 complete_packets_++; 299 ++complete_packets_;
293 } 300 }
294 301
295 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE { 302 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE {
296 rst_stream_frame_ = frame; 303 rst_stream_frame_ = frame;
297 return true; 304 return true;
298 } 305 }
299 306
300 virtual bool OnConnectionCloseFrame( 307 virtual bool OnConnectionCloseFrame(
301 const QuicConnectionCloseFrame& frame) OVERRIDE { 308 const QuicConnectionCloseFrame& frame) OVERRIDE {
302 connection_close_frame_ = frame; 309 connection_close_frame_ = frame;
(...skipping 27 matching lines...) Expand all
330 bool accept_packet_; 337 bool accept_packet_;
331 bool accept_public_header_; 338 bool accept_public_header_;
332 339
333 scoped_ptr<QuicPacketHeader> header_; 340 scoped_ptr<QuicPacketHeader> header_;
334 scoped_ptr<QuicPacketPublicHeader> public_header_; 341 scoped_ptr<QuicPacketPublicHeader> public_header_;
335 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; 342 scoped_ptr<QuicPublicResetPacket> public_reset_packet_;
336 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; 343 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
337 vector<QuicStreamFrame*> stream_frames_; 344 vector<QuicStreamFrame*> stream_frames_;
338 vector<QuicAckFrame*> ack_frames_; 345 vector<QuicAckFrame*> ack_frames_;
339 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; 346 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_;
347 vector<QuicStopWaitingFrame*> stop_waiting_frames_;
340 vector<QuicFecData*> fec_data_; 348 vector<QuicFecData*> fec_data_;
341 string fec_protected_payload_; 349 string fec_protected_payload_;
342 QuicRstStreamFrame rst_stream_frame_; 350 QuicRstStreamFrame rst_stream_frame_;
343 QuicConnectionCloseFrame connection_close_frame_; 351 QuicConnectionCloseFrame connection_close_frame_;
344 QuicGoAwayFrame goaway_frame_; 352 QuicGoAwayFrame goaway_frame_;
345 QuicWindowUpdateFrame window_update_frame_; 353 QuicWindowUpdateFrame window_update_frame_;
346 QuicBlockedFrame blocked_frame_; 354 QuicBlockedFrame blocked_frame_;
347 }; 355 };
348 356
349 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { 357 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
(...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 expected_error = "Unable to read missing sequence number range."; 1761 expected_error = "Unable to read missing sequence number range.";
1754 } 1762 }
1755 CheckProcessingFails( 1763 CheckProcessingFails(
1756 packet, 1764 packet,
1757 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1765 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1758 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1766 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1759 expected_error, QUIC_INVALID_ACK_DATA); 1767 expected_error, QUIC_INVALID_ACK_DATA);
1760 } 1768 }
1761 } 1769 }
1762 1770
1763 TEST_P(QuicFramerTest, AckFrame) { 1771 TEST_P(QuicFramerTest, AckFrame15) {
1764 if (framer_.version() <= QUIC_VERSION_14) { 1772 if (framer_.version() != QUIC_VERSION_15) {
1765 return; 1773 return;
1766 } 1774 }
1767 1775
1768 unsigned char packet[] = { 1776 unsigned char packet[] = {
1769 // public flags (8 byte guid) 1777 // public flags (8 byte guid)
1770 0x3C, 1778 0x3C,
1771 // guid 1779 // guid
1772 0x10, 0x32, 0x54, 0x76, 1780 0x10, 0x32, 0x54, 0x76,
1773 0x98, 0xBA, 0xDC, 0xFE, 1781 0x98, 0xBA, 0xDC, 0xFE,
1774 // packet sequence number 1782 // packet sequence number
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1862 expected_error = "Unable to read num revived packets."; 1870 expected_error = "Unable to read num revived packets.";
1863 } 1871 }
1864 CheckProcessingFails( 1872 CheckProcessingFails(
1865 packet, 1873 packet,
1866 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 1874 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1867 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 1875 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1868 expected_error, QUIC_INVALID_ACK_DATA); 1876 expected_error, QUIC_INVALID_ACK_DATA);
1869 } 1877 }
1870 } 1878 }
1871 1879
1880 TEST_P(QuicFramerTest, AckFrame) {
1881 if (framer_.version() <= QUIC_VERSION_15) {
1882 return;
1883 }
1884
1885 unsigned char packet[] = {
1886 // public flags (8 byte guid)
1887 0x3C,
1888 // guid
1889 0x10, 0x32, 0x54, 0x76,
1890 0x98, 0xBA, 0xDC, 0xFE,
1891 // packet sequence number
1892 0xA8, 0x9A, 0x78, 0x56,
1893 0x34, 0x12,
1894 // private flags (entropy)
1895 0x01,
1896
1897 // frame type (ack frame)
1898 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
1899 0x6C,
1900 // entropy hash of all received packets.
1901 0xBA,
1902 // largest observed packet sequence number
1903 0xBF, 0x9A, 0x78, 0x56,
1904 0x34, 0x12,
1905 // Zero delta time.
1906 0x0, 0x0,
1907 // num missing packets
1908 0x01,
1909 // missing packet delta
1910 0x01,
1911 // 0 more missing packets in range.
1912 0x00,
1913 // Number of revived packets.
1914 0x00,
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(0xBA, frame.received_info.entropy_hash);
1928 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
1929 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
1930 SequenceNumberSet::const_iterator missing_iter =
1931 frame.received_info.missing_packets.begin();
1932 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1933
1934 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1935 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1936 kQuicEntropyHashSize;
1937 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1938 PACKET_6BYTE_SEQUENCE_NUMBER;
1939 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1940 kQuicDeltaTimeLargestObservedSize;
1941 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
1942 kNumberOfMissingPacketsSize;
1943 const size_t kMissingPacketsRange = kMissingPacketsOffset +
1944 PACKET_1BYTE_SEQUENCE_NUMBER;
1945 const size_t kRevivedPacketsLength = kMissingPacketsRange +
1946 PACKET_1BYTE_SEQUENCE_NUMBER;
1947 // Now test framing boundaries
1948 const size_t ack_frame_size = kRevivedPacketsLength +
1949 PACKET_1BYTE_SEQUENCE_NUMBER;
1950 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
1951 string expected_error;
1952 if (i < kLargestObservedOffset) {
1953 expected_error = "Unable to read entropy hash for received packets.";
1954 } else if (i < kMissingDeltaTimeOffset) {
1955 expected_error = "Unable to read largest observed.";
1956 } else if (i < kNumMissingPacketOffset) {
1957 expected_error = "Unable to read delta time largest observed.";
1958 } else if (i < kMissingPacketsOffset) {
1959 expected_error = "Unable to read num missing packet ranges.";
1960 } else if (i < kMissingPacketsRange) {
1961 expected_error = "Unable to read missing sequence number delta.";
1962 } else if (i < kRevivedPacketsLength) {
1963 expected_error = "Unable to read missing sequence number range.";
1964 } else {
1965 expected_error = "Unable to read num revived packets.";
1966 }
1967 CheckProcessingFails(
1968 packet,
1969 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1970 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1971 expected_error, QUIC_INVALID_ACK_DATA);
1972 }
1973 }
1974
1872 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { 1975 TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
1873 if (framer_.version() <= QUIC_VERSION_14) { 1976 if (framer_.version() <= QUIC_VERSION_15) {
1874 return; 1977 return;
1875 } 1978 }
1876 1979
1980 unsigned char packet[] = {
1981 // public flags (8 byte guid)
1982 0x3C,
1983 // guid
1984 0x10, 0x32, 0x54, 0x76,
1985 0x98, 0xBA, 0xDC, 0xFE,
1986 // packet sequence number
1987 0xA8, 0x9A, 0x78, 0x56,
1988 0x34, 0x12,
1989 // private flags (entropy)
1990 0x01,
1991
1992 // frame type (ack frame)
1993 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
1994 0x6C,
1995 // entropy hash of all received packets.
1996 0xBA,
1997 // largest observed packet sequence number
1998 0xBF, 0x9A, 0x78, 0x56,
1999 0x34, 0x12,
2000 // Zero delta time.
2001 0x0, 0x0,
2002 // num missing packets
2003 0x01,
2004 // missing packet delta
2005 0x01,
2006 // 0 more missing packets in range.
2007 0x00,
2008 // Number of revived packets.
2009 0x01,
2010 // Revived packet sequence number.
2011 0xBE, 0x9A, 0x78, 0x56,
2012 0x34, 0x12,
2013 };
2014
2015 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2016 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2017
2018 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2019 ASSERT_TRUE(visitor_.header_.get());
2020 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2021
2022 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2023 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2024 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2025 EXPECT_EQ(0xBA, frame.received_info.entropy_hash);
2026 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
2027 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
2028 SequenceNumberSet::const_iterator missing_iter =
2029 frame.received_info.missing_packets.begin();
2030 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
2031
2032 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
2033 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
2034 kQuicEntropyHashSize;
2035 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
2036 PACKET_6BYTE_SEQUENCE_NUMBER;
2037 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
2038 kQuicDeltaTimeLargestObservedSize;
2039 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
2040 kNumberOfMissingPacketsSize;
2041 const size_t kMissingPacketsRange = kMissingPacketsOffset +
2042 PACKET_1BYTE_SEQUENCE_NUMBER;
2043 const size_t kRevivedPacketsLength = kMissingPacketsRange +
2044 PACKET_1BYTE_SEQUENCE_NUMBER;
2045 const size_t kRevivedPacketSequenceNumberLength = kRevivedPacketsLength +
2046 PACKET_1BYTE_SEQUENCE_NUMBER;
2047 // Now test framing boundaries
2048 const size_t ack_frame_size = kRevivedPacketSequenceNumberLength +
2049 PACKET_6BYTE_SEQUENCE_NUMBER;
2050 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2051 string expected_error;
2052 if (i < kReceivedEntropyOffset) {
2053 expected_error = "Unable to read least unacked delta.";
2054 } else if (i < kLargestObservedOffset) {
2055 expected_error = "Unable to read entropy hash for received packets.";
2056 } else if (i < kMissingDeltaTimeOffset) {
2057 expected_error = "Unable to read largest observed.";
2058 } else if (i < kNumMissingPacketOffset) {
2059 expected_error = "Unable to read delta time largest observed.";
2060 } else if (i < kMissingPacketsOffset) {
2061 expected_error = "Unable to read num missing packet ranges.";
2062 } else if (i < kMissingPacketsRange) {
2063 expected_error = "Unable to read missing sequence number delta.";
2064 } else if (i < kRevivedPacketsLength) {
2065 expected_error = "Unable to read missing sequence number range.";
2066 } else if (i < kRevivedPacketSequenceNumberLength) {
2067 expected_error = "Unable to read num revived packets.";
2068 } else {
2069 expected_error = "Unable to read revived packet.";
2070 }
2071 CheckProcessingFails(
2072 packet,
2073 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2074 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2075 expected_error, QUIC_INVALID_ACK_DATA);
2076 }
2077 }
2078
2079 TEST_P(QuicFramerTest, AckFrameRevivedPackets15) {
2080 if (framer_.version() != QUIC_VERSION_15) {
2081 return;
2082 }
2083
1877 unsigned char packet[] = { 2084 unsigned char packet[] = {
1878 // public flags (8 byte guid) 2085 // public flags (8 byte guid)
1879 0x3C, 2086 0x3C,
1880 // guid 2087 // guid
1881 0x10, 0x32, 0x54, 0x76, 2088 0x10, 0x32, 0x54, 0x76,
1882 0x98, 0xBA, 0xDC, 0xFE, 2089 0x98, 0xBA, 0xDC, 0xFE,
1883 // packet sequence number 2090 // packet sequence number
1884 0xA8, 0x9A, 0x78, 0x56, 2091 0xA8, 0x9A, 0x78, 0x56,
1885 0x34, 0x12, 2092 0x34, 0x12,
1886 // private flags (entropy) 2093 // private flags (entropy)
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 } 2186 }
1980 CheckProcessingFails( 2187 CheckProcessingFails(
1981 packet, 2188 packet,
1982 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 2189 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1983 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2190 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1984 expected_error, QUIC_INVALID_ACK_DATA); 2191 expected_error, QUIC_INVALID_ACK_DATA);
1985 } 2192 }
1986 } 2193 }
1987 2194
1988 TEST_P(QuicFramerTest, AckFrameNoNacks) { 2195 TEST_P(QuicFramerTest, AckFrameNoNacks) {
2196 if (framer_.version() <= QUIC_VERSION_15) {
2197 return;
2198 }
1989 unsigned char packet[] = { 2199 unsigned char packet[] = {
1990 // public flags (8 byte guid) 2200 // public flags (8 byte guid)
1991 0x3C, 2201 0x3C,
2202 // guid
2203 0x10, 0x32, 0x54, 0x76,
2204 0x98, 0xBA, 0xDC, 0xFE,
2205 // packet sequence number
2206 0xA8, 0x9A, 0x78, 0x56,
2207 0x34, 0x12,
2208 // private flags (entropy)
2209 0x01,
2210
2211 // frame type (ack frame)
2212 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
2213 0x4C,
2214 // entropy hash of all received packets.
2215 0xBA,
2216 // largest observed packet sequence number
2217 0xBF, 0x9A, 0x78, 0x56,
2218 0x34, 0x12,
2219 // Zero delta time.
2220 0x0, 0x0,
2221 };
2222
2223 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2224 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2225
2226 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2227 ASSERT_TRUE(visitor_.header_.get());
2228 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2229
2230 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2231 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2232 QuicAckFrame* frame = visitor_.ack_frames_[0];
2233 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2234 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2235 frame->received_info.largest_observed);
2236 ASSERT_EQ(0u, frame->received_info.missing_packets.size());
2237
2238 // Verify that the packet re-serializes identically.
2239 QuicFrames frames;
2240 frames.push_back(QuicFrame(frame));
2241 scoped_ptr<QuicPacket> data(
2242 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
2243 ASSERT_TRUE(data != NULL);
2244
2245 test::CompareCharArraysWithHexError("constructed packet",
2246 data->data(), data->length(),
2247 AsChars(packet), arraysize(packet));
2248 }
2249
2250 TEST_P(QuicFramerTest, AckFrameNoNacks15) {
2251 if (framer_.version() > QUIC_VERSION_15) {
2252 return;
2253 }
2254 unsigned char packet[] = {
2255 // public flags (8 byte guid)
2256 0x3C,
2257 // guid
2258 0x10, 0x32, 0x54, 0x76,
2259 0x98, 0xBA, 0xDC, 0xFE,
2260 // packet sequence number
2261 0xA8, 0x9A, 0x78, 0x56,
2262 0x34, 0x12,
2263 // private flags (entropy)
2264 0x01,
2265
2266 // frame type (ack frame)
2267 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
2268 0x4C,
2269 // entropy hash of sent packets till least awaiting - 1.
2270 0xAB,
2271 // least packet sequence number awaiting an ack, delta from sequence number.
2272 0x08, 0x00, 0x00, 0x00,
2273 0x00, 0x00,
2274 // entropy hash of all received packets.
2275 0xBA,
2276 // largest observed packet sequence number
2277 0xBF, 0x9A, 0x78, 0x56,
2278 0x34, 0x12,
2279 // Zero delta time.
2280 0x0, 0x0,
2281 };
2282
2283 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2284 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2285
2286 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2287 ASSERT_TRUE(visitor_.header_.get());
2288 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2289
2290 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2291 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2292 QuicAckFrame* frame = visitor_.ack_frames_[0];
2293 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash);
2294 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2295 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2296 frame->received_info.largest_observed);
2297 ASSERT_EQ(0u, frame->received_info.missing_packets.size());
2298 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked);
2299
2300 // Verify that the packet re-serializes identically.
2301 QuicFrames frames;
2302 frames.push_back(QuicFrame(frame));
2303 scoped_ptr<QuicPacket> data(
2304 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
2305 ASSERT_TRUE(data != NULL);
2306
2307 test::CompareCharArraysWithHexError("constructed packet",
2308 data->data(), data->length(),
2309 AsChars(packet), arraysize(packet));
2310 }
2311
2312 TEST_P(QuicFramerTest, AckFrame500Nacks) {
2313 if (framer_.version() <= QUIC_VERSION_15) {
2314 return;
2315 }
2316 unsigned char packet[] = {
2317 // public flags (8 byte guid)
2318 0x3C,
1992 // guid 2319 // guid
1993 0x10, 0x32, 0x54, 0x76, 2320 0x10, 0x32, 0x54, 0x76,
1994 0x98, 0xBA, 0xDC, 0xFE, 2321 0x98, 0xBA, 0xDC, 0xFE,
1995 // packet sequence number 2322 // packet sequence number
1996 0xA8, 0x9A, 0x78, 0x56, 2323 0xA8, 0x9A, 0x78, 0x56,
1997 0x34, 0x12, 2324 0x34, 0x12,
1998 // private flags (entropy) 2325 // private flags (entropy)
1999 0x01, 2326 0x01,
2000 2327
2001 // frame type (ack frame) 2328 // frame type (ack frame)
2002 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta) 2329 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2003 0x4C, 2330 0x6C,
2004 // entropy hash of sent packets till least awaiting - 1.
2005 0xAB,
2006 // least packet sequence number awaiting an ack, delta from sequence number.
2007 0x08, 0x00, 0x00, 0x00,
2008 0x00, 0x00,
2009 // entropy hash of all received packets. 2331 // entropy hash of all received packets.
2010 0xBA, 2332 0xBA,
2011 // largest observed packet sequence number 2333 // largest observed packet sequence number
2012 0xBF, 0x9A, 0x78, 0x56, 2334 0xBF, 0x9A, 0x78, 0x56,
2013 0x34, 0x12, 2335 0x34, 0x12,
2014 // Zero delta time. 2336 // Zero delta time.
2015 0x0, 0x0, 2337 0x0, 0x0,
2338 // num missing packet ranges
2339 0x02,
2340 // missing packet delta
2341 0x01,
2342 // 243 more missing packets in range.
2343 // The ranges are listed in this order so the re-constructed packet matches.
2344 0xF3,
2345 // No gap between ranges
2346 0x00,
2347 // 255 more missing packets in range.
2348 0xFF,
2349 // No revived packets.
2350 0x00,
2016 }; 2351 };
2017 2352
2018 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2353 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2019 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2354 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2020 2355
2021 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2356 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2022 ASSERT_TRUE(visitor_.header_.get()); 2357 ASSERT_TRUE(visitor_.header_.get());
2023 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2358 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2024 2359
2025 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2360 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2026 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2361 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2027 QuicAckFrame* frame = visitor_.ack_frames_[0]; 2362 QuicAckFrame* frame = visitor_.ack_frames_[0];
2028 EXPECT_EQ(0xAB, frame->sent_info.entropy_hash);
2029 EXPECT_EQ(0xBA, frame->received_info.entropy_hash); 2363 EXPECT_EQ(0xBA, frame->received_info.entropy_hash);
2030 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), 2364 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF),
2031 frame->received_info.largest_observed); 2365 frame->received_info.largest_observed);
2032 ASSERT_EQ(0u, frame->received_info.missing_packets.size()); 2366 EXPECT_EQ(0u, frame->received_info.revived_packets.size());
2033 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame->sent_info.least_unacked); 2367 ASSERT_EQ(500u, frame->received_info.missing_packets.size());
2368 SequenceNumberSet::const_iterator first_missing_iter =
2369 frame->received_info.missing_packets.begin();
2370 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
2371 SequenceNumberSet::const_reverse_iterator last_missing_iter =
2372 frame->received_info.missing_packets.rbegin();
2373 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter);
2034 2374
2035 // Verify that the packet re-serializes identically. 2375 // Verify that the packet re-serializes identically.
2036 QuicFrames frames; 2376 QuicFrames frames;
2037 frames.push_back(QuicFrame(frame)); 2377 frames.push_back(QuicFrame(frame));
2038 scoped_ptr<QuicPacket> data( 2378 scoped_ptr<QuicPacket> data(
2039 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet); 2379 framer_.BuildUnsizedDataPacket(*visitor_.header_, frames).packet);
2040 ASSERT_TRUE(data != NULL); 2380 ASSERT_TRUE(data != NULL);
2041 2381
2042 test::CompareCharArraysWithHexError("constructed packet", 2382 test::CompareCharArraysWithHexError("constructed packet",
2043 data->data(), data->length(), 2383 data->data(), data->length(),
2044 AsChars(packet), arraysize(packet)); 2384 AsChars(packet), arraysize(packet));
2045 } 2385 }
2046 2386
2047 TEST_P(QuicFramerTest, AckFrame500Nacks) { 2387 TEST_P(QuicFramerTest, AckFrame500Nacks15) {
2048 if (framer_.version() <= QUIC_VERSION_14) { 2388 if (framer_.version() != QUIC_VERSION_15) {
2049 return; 2389 return;
2050 } 2390 }
2051 unsigned char packet[] = { 2391 unsigned char packet[] = {
2052 // public flags (8 byte guid) 2392 // public flags (8 byte guid)
2053 0x3C, 2393 0x3C,
2054 // guid 2394 // guid
2055 0x10, 0x32, 0x54, 0x76, 2395 0x10, 0x32, 0x54, 0x76,
2056 0x98, 0xBA, 0xDC, 0xFE, 2396 0x98, 0xBA, 0xDC, 0xFE,
2057 // packet sequence number 2397 // packet sequence number
2058 0xA8, 0x9A, 0x78, 0x56, 2398 0xA8, 0x9A, 0x78, 0x56,
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2577 // congestion feedback type (invalid) 2917 // congestion feedback type (invalid)
2578 0x03, 2918 0x03,
2579 }; 2919 };
2580 2920
2581 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2921 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2582 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 2922 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
2583 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2923 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2584 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error()); 2924 EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error());
2585 } 2925 }
2586 2926
2927 TEST_P(QuicFramerTest, StopWaitingFrame) {
2928 if (framer_.version() <= QUIC_VERSION_15) {
2929 return;
2930 }
2931 unsigned char packet[] = {
2932 // public flags (8 byte guid)
2933 0x3C,
2934 // guid
2935 0x10, 0x32, 0x54, 0x76,
2936 0x98, 0xBA, 0xDC, 0xFE,
2937 // packet sequence number
2938 0xA8, 0x9A, 0x78, 0x56,
2939 0x34, 0x12,
2940 // private flags (entropy)
2941 0x01,
2942
2943 // frame type (ack frame)
2944 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2945 0x06,
2946 // entropy hash of sent packets till least awaiting - 1.
2947 0xAB,
2948 // least packet sequence number awaiting an ack, delta from sequence number.
2949 0x08, 0x00, 0x00, 0x00,
2950 0x00, 0x00,
2951 };
2952
2953 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2954 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2955
2956 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2957 ASSERT_TRUE(visitor_.header_.get());
2958 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2959
2960 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2961 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size());
2962 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0];
2963 EXPECT_EQ(0xAB, frame.entropy_hash);
2964 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.least_unacked);
2965
2966 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
2967 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
2968 const size_t frame_size = 7;
2969 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) {
2970 string expected_error;
2971 if (i < kLeastUnackedOffset) {
2972 expected_error = "Unable to read entropy hash for sent packets.";
2973 } else {
2974 expected_error = "Unable to read least unacked delta.";
2975 }
2976 CheckProcessingFails(
2977 packet,
2978 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2979 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2980 expected_error, QUIC_INVALID_STOP_WAITING_DATA);
2981 }
2982 }
2983
2587 TEST_P(QuicFramerTest, RstStreamFrameVersion13) { 2984 TEST_P(QuicFramerTest, RstStreamFrameVersion13) {
2588 if (version_ > QUIC_VERSION_13) { 2985 if (version_ > QUIC_VERSION_13) {
2589 return; 2986 return;
2590 } 2987 }
2591 2988
2592 unsigned char packet[] = { 2989 unsigned char packet[] = {
2593 // public flags (8 byte guid) 2990 // public flags (8 byte guid)
2594 0x3C, 2991 0x3C,
2595 // guid 2992 // guid
2596 0x10, 0x32, 0x54, 0x76, 2993 0x10, 0x32, 0x54, 0x76,
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
3564 versions.push_back(GetParam()); 3961 versions.push_back(GetParam());
3565 scoped_ptr<QuicEncryptedPacket> data( 3962 scoped_ptr<QuicEncryptedPacket> data(
3566 framer_.BuildVersionNegotiationPacket(header, versions)); 3963 framer_.BuildVersionNegotiationPacket(header, versions));
3567 3964
3568 test::CompareCharArraysWithHexError("constructed packet", 3965 test::CompareCharArraysWithHexError("constructed packet",
3569 data->data(), data->length(), 3966 data->data(), data->length(),
3570 AsChars(packet), arraysize(packet)); 3967 AsChars(packet), arraysize(packet));
3571 } 3968 }
3572 3969
3573 TEST_P(QuicFramerTest, BuildAckFramePacket) { 3970 TEST_P(QuicFramerTest, BuildAckFramePacket) {
3574 if (version_ <= QUIC_VERSION_14) { 3971 if (version_ <= QUIC_VERSION_15) {
3575 return; 3972 return;
3576 } 3973 }
3577 QuicPacketHeader header; 3974 QuicPacketHeader header;
3975 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3976 header.public_header.reset_flag = false;
3977 header.public_header.version_flag = false;
3978 header.fec_flag = false;
3979 header.entropy_flag = true;
3980 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3981 header.fec_group = 0;
3982
3983 QuicAckFrame ack_frame;
3984 ack_frame.received_info.entropy_hash = 0x43;
3985 ack_frame.received_info.largest_observed = GG_UINT64_C(0x770123456789ABF);
3986 ack_frame.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
3987 ack_frame.received_info.missing_packets.insert(
3988 GG_UINT64_C(0x770123456789ABE));
3989
3990 QuicFrames frames;
3991 frames.push_back(QuicFrame(&ack_frame));
3992
3993 unsigned char packet[] = {
3994 // public flags (8 byte guid)
3995 0x3C,
3996 // guid
3997 0x10, 0x32, 0x54, 0x76,
3998 0x98, 0xBA, 0xDC, 0xFE,
3999 // packet sequence number
4000 0xA8, 0x9A, 0x78, 0x56,
4001 0x34, 0x12,
4002 // private flags (entropy)
4003 0x01,
4004
4005 // frame type (ack frame)
4006 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
4007 0x6C,
4008 // entropy hash of all received packets.
4009 0x43,
4010 // largest observed packet sequence number
4011 0xBF, 0x9A, 0x78, 0x56,
4012 0x34, 0x12,
4013 // Zero delta time.
4014 0x0, 0x0,
4015 // num missing packet ranges
4016 0x01,
4017 // missing packet delta
4018 0x01,
4019 // 0 more missing packets in range.
4020 0x00,
4021 // 0 revived packets.
4022 0x00,
4023 };
4024
4025 scoped_ptr<QuicPacket> data(
4026 framer_.BuildUnsizedDataPacket(header, frames).packet);
4027 ASSERT_TRUE(data != NULL);
4028
4029 test::CompareCharArraysWithHexError("constructed packet",
4030 data->data(), data->length(),
4031 AsChars(packet), arraysize(packet));
4032 }
4033
4034 TEST_P(QuicFramerTest, BuildAckFramePacket15) {
4035 if (version_ != QUIC_VERSION_15) {
4036 return;
4037 }
4038 QuicPacketHeader header;
3578 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 4039 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3579 header.public_header.reset_flag = false; 4040 header.public_header.reset_flag = false;
3580 header.public_header.version_flag = false; 4041 header.public_header.version_flag = false;
3581 header.fec_flag = false; 4042 header.fec_flag = false;
3582 header.entropy_flag = true; 4043 header.entropy_flag = true;
3583 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 4044 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3584 header.fec_group = 0; 4045 header.fec_group = 0;
3585 4046
3586 QuicAckFrame ack_frame; 4047 QuicAckFrame ack_frame;
3587 ack_frame.received_info.entropy_hash = 0x43; 4048 ack_frame.received_info.entropy_hash = 0x43;
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
3951 4412
3952 scoped_ptr<QuicPacket> data( 4413 scoped_ptr<QuicPacket> data(
3953 framer_.BuildUnsizedDataPacket(header, frames).packet); 4414 framer_.BuildUnsizedDataPacket(header, frames).packet);
3954 ASSERT_TRUE(data != NULL); 4415 ASSERT_TRUE(data != NULL);
3955 4416
3956 test::CompareCharArraysWithHexError("constructed packet", 4417 test::CompareCharArraysWithHexError("constructed packet",
3957 data->data(), data->length(), 4418 data->data(), data->length(),
3958 AsChars(packet), arraysize(packet)); 4419 AsChars(packet), arraysize(packet));
3959 } 4420 }
3960 4421
4422 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
4423 if (version_ <= QUIC_VERSION_15) {
4424 return;
4425 }
4426 QuicPacketHeader header;
4427 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
4428 header.public_header.reset_flag = false;
4429 header.public_header.version_flag = false;
4430 header.fec_flag = false;
4431 header.entropy_flag = true;
4432 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
4433 header.fec_group = 0;
4434
4435 QuicStopWaitingFrame stop_waiting_frame;
4436 stop_waiting_frame.entropy_hash = 0x14;
4437 stop_waiting_frame.least_unacked = GG_UINT64_C(0x770123456789AA0);
4438
4439 QuicFrames frames;
4440 frames.push_back(QuicFrame(&stop_waiting_frame));
4441
4442 unsigned char packet[] = {
4443 // public flags (8 byte guid)
4444 0x3C,
4445 // guid
4446 0x10, 0x32, 0x54, 0x76,
4447 0x98, 0xBA, 0xDC, 0xFE,
4448 // packet sequence number
4449 0xA8, 0x9A, 0x78, 0x56,
4450 0x34, 0x12,
4451 // private flags (entropy)
4452 0x01,
4453
4454 // frame type (stop waiting frame)
4455 0x06,
4456 // entropy hash of sent packets till least awaiting - 1.
4457 0x14,
4458 // least packet sequence number awaiting an ack, delta from sequence number.
4459 0x08, 0x00, 0x00, 0x00,
4460 0x00, 0x00,
4461 };
4462
4463 scoped_ptr<QuicPacket> data(
4464 framer_.BuildUnsizedDataPacket(header, frames).packet);
4465 ASSERT_TRUE(data != NULL);
4466
4467 test::CompareCharArraysWithHexError("constructed packet",
4468 data->data(), data->length(),
4469 AsChars(packet), arraysize(packet));
4470 }
4471
3961 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) { 4472 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketFixRate) {
3962 QuicPacketHeader header; 4473 QuicPacketHeader header;
3963 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 4474 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
3964 header.public_header.reset_flag = false; 4475 header.public_header.reset_flag = false;
3965 header.public_header.version_flag = false; 4476 header.public_header.version_flag = false;
3966 header.fec_flag = false; 4477 header.fec_flag = false;
3967 header.entropy_flag = false; 4478 header.entropy_flag = false;
3968 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4479 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3969 header.fec_group = 0; 4480 header.fec_group = 0;
3970 4481
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
4018 QuicCongestionFeedbackFrame congestion_feedback_frame; 4529 QuicCongestionFeedbackFrame congestion_feedback_frame;
4019 congestion_feedback_frame.type = 4530 congestion_feedback_frame.type =
4020 static_cast<CongestionFeedbackType>(kFixRate + 1); 4531 static_cast<CongestionFeedbackType>(kFixRate + 1);
4021 4532
4022 QuicFrames frames; 4533 QuicFrames frames;
4023 frames.push_back(QuicFrame(&congestion_feedback_frame)); 4534 frames.push_back(QuicFrame(&congestion_feedback_frame));
4024 4535
4025 scoped_ptr<QuicPacket> data; 4536 scoped_ptr<QuicPacket> data;
4026 EXPECT_DFATAL( 4537 EXPECT_DFATAL(
4027 data.reset(framer_.BuildUnsizedDataPacket(header, frames).packet), 4538 data.reset(framer_.BuildUnsizedDataPacket(header, frames).packet),
4028 "AppendQuicCongestionFeedbackFrame failed"); 4539 "AppendCongestionFeedbackFrame failed");
4029 ASSERT_TRUE(data == NULL); 4540 ASSERT_TRUE(data == NULL);
4030 } 4541 }
4031 4542
4032 TEST_P(QuicFramerTest, BuildRstFramePacketVersion13) { 4543 TEST_P(QuicFramerTest, BuildRstFramePacketVersion13) {
4033 if (version_ > QUIC_VERSION_13) { 4544 if (version_ > QUIC_VERSION_13) {
4034 return; 4545 return;
4035 } 4546 }
4036 4547
4037 QuicPacketHeader header; 4548 QuicPacketHeader header;
4038 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 4549 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
4564 PACKET_8BYTE_GUID, kIncludeVersion, 5075 PACKET_8BYTE_GUID, kIncludeVersion,
4565 PACKET_6BYTE_SEQUENCE_NUMBER)); 5076 PACKET_6BYTE_SEQUENCE_NUMBER));
4566 scoped_ptr<QuicEncryptedPacket> encrypted( 5077 scoped_ptr<QuicEncryptedPacket> encrypted(
4567 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 5078 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
4568 5079
4569 ASSERT_TRUE(encrypted.get() != NULL); 5080 ASSERT_TRUE(encrypted.get() != NULL);
4570 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 5081 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
4571 } 5082 }
4572 5083
4573 TEST_P(QuicFramerTest, Truncation) { 5084 TEST_P(QuicFramerTest, Truncation) {
5085 if (framer_.version() <= QUIC_VERSION_15) {
5086 return;
5087 }
4574 QuicPacketHeader header; 5088 QuicPacketHeader header;
4575 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 5089 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
4576 header.public_header.reset_flag = false; 5090 header.public_header.reset_flag = false;
5091 header.public_header.version_flag = false;
5092 header.fec_flag = false;
5093 header.entropy_flag = false;
5094 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
5095 header.fec_group = 0;
5096
5097 QuicAckFrame ack_frame;
5098 ack_frame.received_info.largest_observed = 601;
5099 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) {
5100 ack_frame.received_info.missing_packets.insert(i);
5101 }
5102
5103 // Create a packet with just the ack
5104 QuicFrame frame;
5105 frame.type = ACK_FRAME;
5106 frame.ack_frame = &ack_frame;
5107 QuicFrames frames;
5108 frames.push_back(frame);
5109
5110 scoped_ptr<QuicPacket> raw_ack_packet(
5111 framer_.BuildUnsizedDataPacket(header, frames).packet);
5112 ASSERT_TRUE(raw_ack_packet != NULL);
5113
5114 scoped_ptr<QuicEncryptedPacket> ack_packet(
5115 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
5116 *raw_ack_packet));
5117
5118 // Now make sure we can turn our ack packet back into an ack frame
5119 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
5120 ASSERT_EQ(1u, visitor_.ack_frames_.size());
5121 const QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
5122 EXPECT_TRUE(processed_ack_frame.received_info.is_truncated);
5123 EXPECT_EQ(510u, processed_ack_frame.received_info.largest_observed);
5124 ASSERT_EQ(255u, processed_ack_frame.received_info.missing_packets.size());
5125 SequenceNumberSet::const_iterator missing_iter =
5126 processed_ack_frame.received_info.missing_packets.begin();
5127 EXPECT_EQ(1u, *missing_iter);
5128 SequenceNumberSet::const_reverse_iterator last_missing_iter =
5129 processed_ack_frame.received_info.missing_packets.rbegin();
5130 EXPECT_EQ(509u, *last_missing_iter);
5131 }
5132
5133 TEST_P(QuicFramerTest, Truncation15) {
5134 if (framer_.version() > QUIC_VERSION_15) {
5135 return;
5136 }
5137 QuicPacketHeader header;
5138 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
5139 header.public_header.reset_flag = false;
4577 header.public_header.version_flag = false; 5140 header.public_header.version_flag = false;
4578 header.fec_flag = false; 5141 header.fec_flag = false;
4579 header.entropy_flag = false; 5142 header.entropy_flag = false;
4580 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 5143 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
4581 header.fec_group = 0; 5144 header.fec_group = 0;
4582 5145
4583 QuicAckFrame ack_frame; 5146 QuicAckFrame ack_frame;
4584 ack_frame.received_info.largest_observed = 601; 5147 ack_frame.received_info.largest_observed = 601;
4585 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1; 5148 ack_frame.sent_info.least_unacked = header.packet_sequence_number - 1;
4586 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) { 5149 for (uint64 i = 1; i < ack_frame.received_info.largest_observed; i += 2) {
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
4796 EXPECT_CALL(visitor, OnPacketComplete()); 5359 EXPECT_CALL(visitor, OnPacketComplete());
4797 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); 5360 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true));
4798 5361
4799 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 5362 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4800 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 5363 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4801 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 5364 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4802 } 5365 }
4803 5366
4804 } // namespace test 5367 } // namespace test
4805 } // namespace net 5368 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_headers_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698