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

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

Issue 1470713003: Landing Recent QUIC changes until and including Mon Nov 16 14:15:48 2015 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review feedback fixes in quic_connection.cc, quic_connection_test.cc and quic_server_bin.cc. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // Size in bytes of the stream frame fields for an arbitrary StreamID and 59 // Size in bytes of the stream frame fields for an arbitrary StreamID and
60 // offset and the last frame in a packet. 60 // offset and the last frame in a packet.
61 size_t GetMinStreamFrameSize() { 61 size_t GetMinStreamFrameSize() {
62 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; 62 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize;
63 } 63 }
64 64
65 // Index into the packet number offset in the header. 65 // Index into the packet number offset in the header.
66 size_t GetPacketNumberOffset(QuicConnectionIdLength connection_id_length, 66 size_t GetPacketNumberOffset(QuicConnectionIdLength connection_id_length,
67 bool include_version) { 67 bool include_version) {
68 return kConnectionIdOffset + connection_id_length + 68 return kConnectionIdOffset + connection_id_length +
69 (include_version ? kQuicVersionSize : 0); 69 (include_version ? kQuicVersionSize : 0);
70 } 70 }
71 71
72 size_t GetPacketNumberOffset(bool include_version) { 72 size_t GetPacketNumberOffset(bool include_version) {
73 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version); 73 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version);
74 } 74 }
75 75
76 // Index into the private flags offset in the data packet header. 76 // Index into the private flags offset in the data packet header.
77 size_t GetPrivateFlagsOffset(QuicConnectionIdLength connection_id_length, 77 size_t GetPrivateFlagsOffset(QuicConnectionIdLength connection_id_length,
78 bool include_version) { 78 bool include_version) {
79 return GetPacketNumberOffset(connection_id_length, include_version) + 79 return GetPacketNumberOffset(connection_id_length, include_version) +
80 PACKET_6BYTE_PACKET_NUMBER; 80 PACKET_6BYTE_PACKET_NUMBER;
81 } 81 }
82 82
83 size_t GetPrivateFlagsOffset(bool include_version) { 83 size_t GetPrivateFlagsOffset(bool include_version) {
84 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version); 84 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version);
85 } 85 }
86 86
87 size_t GetPrivateFlagsOffset(bool include_version, 87 size_t GetPrivateFlagsOffset(bool include_version,
88 QuicPacketNumberLength packet_number_length) { 88 QuicPacketNumberLength packet_number_length) {
89 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + 89 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version) +
90 packet_number_length; 90 packet_number_length;
91 } 91 }
92 92
93 // Index into the fec group offset in the header. 93 // Index into the fec group offset in the header.
94 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, 94 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length,
95 bool include_version) { 95 bool include_version) {
96 return GetPrivateFlagsOffset(connection_id_length, include_version) + 96 return GetPrivateFlagsOffset(connection_id_length, include_version) +
97 kPrivateFlagsSize; 97 kPrivateFlagsSize;
98 } 98 }
99 99
100 size_t GetFecGroupOffset(bool include_version) { 100 size_t GetFecGroupOffset(bool include_version) {
101 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + 101 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version) +
102 kPrivateFlagsSize; 102 kPrivateFlagsSize;
103 } 103 }
104 104
105 size_t GetFecGroupOffset(bool include_version, 105 size_t GetFecGroupOffset(bool include_version,
106 QuicPacketNumberLength packet_number_length) { 106 QuicPacketNumberLength packet_number_length) {
107 return GetPrivateFlagsOffset(include_version, packet_number_length) + 107 return GetPrivateFlagsOffset(include_version, packet_number_length) +
108 kPrivateFlagsSize; 108 kPrivateFlagsSize;
109 } 109 }
110 110
111 // Index into the message tag of the public reset packet. 111 // Index into the message tag of the public reset packet.
112 // Public resets always have full connection_ids. 112 // Public resets always have full connection_ids.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 public: 178 public:
179 TestQuicVisitor() 179 TestQuicVisitor()
180 : error_count_(0), 180 : error_count_(0),
181 version_mismatch_(0), 181 version_mismatch_(0),
182 packet_count_(0), 182 packet_count_(0),
183 frame_count_(0), 183 frame_count_(0),
184 fec_count_(0), 184 fec_count_(0),
185 complete_packets_(0), 185 complete_packets_(0),
186 revived_packets_(0), 186 revived_packets_(0),
187 accept_packet_(true), 187 accept_packet_(true),
188 accept_public_header_(true) { 188 accept_public_header_(true) {}
189 }
190 189
191 ~TestQuicVisitor() override { 190 ~TestQuicVisitor() override {
192 STLDeleteElements(&stream_frames_); 191 STLDeleteElements(&stream_frames_);
193 STLDeleteElements(&ack_frames_); 192 STLDeleteElements(&ack_frames_);
194 STLDeleteElements(&stop_waiting_frames_); 193 STLDeleteElements(&stop_waiting_frames_);
195 STLDeleteElements(&ping_frames_); 194 STLDeleteElements(&ping_frames_);
196 STLDeleteElements(&stream_data_); 195 STLDeleteElements(&stream_data_);
197 } 196 }
198 197
199 void OnError(QuicFramer* f) override { 198 void OnError(QuicFramer* f) override {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 framer_.set_version(version_); 345 framer_.set_version(version_);
347 framer_.SetDecrypter(ENCRYPTION_NONE, decrypter_); 346 framer_.SetDecrypter(ENCRYPTION_NONE, decrypter_);
348 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); 347 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_);
349 framer_.set_visitor(&visitor_); 348 framer_.set_visitor(&visitor_);
350 framer_.set_received_entropy_calculator(&entropy_calculator_); 349 framer_.set_received_entropy_calculator(&entropy_calculator_);
351 } 350 }
352 351
353 // Helper function to get unsigned char representation of digit in the 352 // Helper function to get unsigned char representation of digit in the
354 // units place of the current QUIC version number. 353 // units place of the current QUIC version number.
355 unsigned char GetQuicVersionDigitOnes() { 354 unsigned char GetQuicVersionDigitOnes() {
356 return static_cast<unsigned char> ('0' + version_%10); 355 return static_cast<unsigned char>('0' + version_ % 10);
357 } 356 }
358 357
359 // Helper function to get unsigned char representation of digit in the 358 // Helper function to get unsigned char representation of digit in the
360 // tens place of the current QUIC version number. 359 // tens place of the current QUIC version number.
361 unsigned char GetQuicVersionDigitTens() { 360 unsigned char GetQuicVersionDigitTens() {
362 return static_cast<unsigned char> ('0' + (version_/10)%10); 361 return static_cast<unsigned char>('0' + (version_ / 10) % 10);
363 } 362 }
364 363
365 bool CheckEncryption(QuicPacketNumber packet_number, QuicPacket* packet) { 364 bool CheckEncryption(QuicPacketNumber packet_number, QuicPacket* packet) {
366 if (packet_number != encrypter_->packet_number_) { 365 if (packet_number != encrypter_->packet_number_) {
367 LOG(ERROR) << "Encrypted incorrect packet number. expected " 366 LOG(ERROR) << "Encrypted incorrect packet number. expected "
368 << packet_number << " actual: " << encrypter_->packet_number_; 367 << packet_number << " actual: " << encrypter_->packet_number_;
369 return false; 368 return false;
370 } 369 }
371 if (packet->AssociatedData() != encrypter_->associated_data_) { 370 if (packet->AssociatedData() != encrypter_->associated_data_) {
372 LOG(ERROR) << "Encrypted incorrect associated data. expected " 371 LOG(ERROR) << "Encrypted incorrect associated data. expected "
373 << packet->AssociatedData() << " actual: " 372 << packet->AssociatedData()
374 << encrypter_->associated_data_; 373 << " actual: " << encrypter_->associated_data_;
375 return false; 374 return false;
376 } 375 }
377 if (packet->Plaintext() != encrypter_->plaintext_) { 376 if (packet->Plaintext() != encrypter_->plaintext_) {
378 LOG(ERROR) << "Encrypted incorrect plaintext data. expected " 377 LOG(ERROR) << "Encrypted incorrect plaintext data. expected "
379 << packet->Plaintext() << " actual: " 378 << packet->Plaintext()
380 << encrypter_->plaintext_; 379 << " actual: " << encrypter_->plaintext_;
381 return false; 380 return false;
382 } 381 }
383 return true; 382 return true;
384 } 383 }
385 384
386 bool CheckDecryption(const QuicEncryptedPacket& encrypted, 385 bool CheckDecryption(const QuicEncryptedPacket& encrypted,
387 bool includes_version) { 386 bool includes_version) {
388 if (visitor_.header_->packet_number != decrypter_->packet_number_) { 387 if (visitor_.header_->packet_number != decrypter_->packet_number_) {
389 LOG(ERROR) << "Decrypted incorrect packet number. expected " 388 LOG(ERROR) << "Decrypted incorrect packet number. expected "
390 << visitor_.header_->packet_number 389 << visitor_.header_->packet_number
391 << " actual: " << decrypter_->packet_number_; 390 << " actual: " << decrypter_->packet_number_;
392 return false; 391 return false;
393 } 392 }
394 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( 393 if (QuicFramer::GetAssociatedDataFromEncryptedPacket(
395 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, 394 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version,
396 PACKET_6BYTE_PACKET_NUMBER) != decrypter_->associated_data_) { 395 PACKET_6BYTE_PACKET_NUMBER) != decrypter_->associated_data_) {
397 LOG(ERROR) << "Decrypted incorrect associated data. expected " 396 LOG(ERROR) << "Decrypted incorrect associated data. expected "
398 << QuicFramer::GetAssociatedDataFromEncryptedPacket( 397 << QuicFramer::GetAssociatedDataFromEncryptedPacket(
399 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, 398 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version,
400 PACKET_6BYTE_PACKET_NUMBER) 399 PACKET_6BYTE_PACKET_NUMBER)
401 << " actual: " << decrypter_->associated_data_; 400 << " actual: " << decrypter_->associated_data_;
402 return false; 401 return false;
403 } 402 }
404 StringPiece ciphertext(encrypted.AsStringPiece().substr( 403 StringPiece ciphertext(encrypted.AsStringPiece().substr(
405 GetStartOfEncryptedData(PACKET_8BYTE_CONNECTION_ID, includes_version, 404 GetStartOfEncryptedData(PACKET_8BYTE_CONNECTION_ID, includes_version,
406 PACKET_6BYTE_PACKET_NUMBER))); 405 PACKET_6BYTE_PACKET_NUMBER)));
407 if (ciphertext != decrypter_->ciphertext_) { 406 if (ciphertext != decrypter_->ciphertext_) {
408 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " 407 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected "
409 << ciphertext << " actual: " 408 << ciphertext << " actual: " << decrypter_->ciphertext_;
410 << decrypter_->ciphertext_;
411 return false; 409 return false;
412 } 410 }
413 return true; 411 return true;
414 } 412 }
415 413
416 char* AsChars(unsigned char* data) { 414 char* AsChars(unsigned char* data) { return reinterpret_cast<char*>(data); }
417 return reinterpret_cast<char*>(data);
418 }
419 415
420 void CheckProcessingFails(unsigned char* packet, 416 void CheckProcessingFails(unsigned char* packet,
421 size_t len, 417 size_t len,
422 string expected_error, 418 string expected_error,
423 QuicErrorCode error_code) { 419 QuicErrorCode error_code) {
424 QuicEncryptedPacket encrypted(AsChars(packet), len, false); 420 QuicEncryptedPacket encrypted(AsChars(packet), len, false);
425 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len; 421 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len;
426 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len; 422 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len;
427 EXPECT_EQ(error_code, framer_.error()) << "len: " << len; 423 EXPECT_EQ(error_code, framer_.error()) << "len: " << len;
428 } 424 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 581
586 // Large numbers should not wrap either. 582 // Large numbers should not wrap either.
587 for (uint64 j = 0; j < 10; j++) { 583 for (uint64 j = 0; j < 10; j++) {
588 uint64 num = kEpoch - 1 - j; 584 uint64 num = kEpoch - 1 - j;
589 CheckCalculatePacketNumber(max_epoch + num, last); 585 CheckCalculatePacketNumber(max_epoch + num, last);
590 } 586 }
591 } 587 }
592 } 588 }
593 589
594 TEST_P(QuicFramerTest, EmptyPacket) { 590 TEST_P(QuicFramerTest, EmptyPacket) {
595 char packet[] = { 0x00 }; 591 char packet[] = {0x00};
596 QuicEncryptedPacket encrypted(packet, 0, false); 592 QuicEncryptedPacket encrypted(packet, 0, false);
597 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 593 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
598 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 594 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
599 } 595 }
600 596
601 TEST_P(QuicFramerTest, LargePacket) { 597 TEST_P(QuicFramerTest, LargePacket) {
602 // clang-format off 598 // clang-format off
603 unsigned char packet[kMaxPacketSize + 1] = { 599 unsigned char packet[kMaxPacketSize + 1] = {
604 // public flags (8 byte connection_id) 600 // public flags (8 byte connection_id)
605 0x3C, 601 0x3C,
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 1060 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
1065 // private flags 1061 // private flags
1066 0x00, 1062 0x00,
1067 1063
1068 // frame type (padding) 1064 // frame type (padding)
1069 0x00, 1065 0x00,
1070 0x00, 0x00, 0x00, 0x00 1066 0x00, 0x00, 0x00, 0x00
1071 }; 1067 };
1072 // clang-format on 1068 // clang-format on
1073 1069
1074 CheckProcessingFails(packet, 1070 CheckProcessingFails(packet, arraysize(packet), "Illegal public flags value.",
1075 arraysize(packet),
1076 "Illegal public flags value.",
1077 QUIC_INVALID_PACKET_HEADER); 1071 QUIC_INVALID_PACKET_HEADER);
1078 1072
1079 // Now turn off validation. 1073 // Now turn off validation.
1080 framer_.set_validate_flags(false); 1074 framer_.set_validate_flags(false);
1081 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1075 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1082 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1076 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1083 }; 1077 };
1084 1078
1085 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { 1079 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) {
1086 // clang-format off 1080 // clang-format off
1087 unsigned char packet[] = { 1081 unsigned char packet[] = {
1088 // public flags (8 byte connection_id and version flag and an unknown flag) 1082 // public flags (8 byte connection_id and version flag and an unknown flag)
1089 0x4D, 1083 0x4D,
1090 // connection_id 1084 // connection_id
1091 0x10, 0x32, 0x54, 0x76, 1085 0x10, 0x32, 0x54, 0x76,
1092 0x98, 0xBA, 0xDC, 0xFE, 1086 0x98, 0xBA, 0xDC, 0xFE,
1093 // version tag 1087 // version tag
1094 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), 1088 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
1095 // packet number 1089 // packet number
1096 0xBC, 0x9A, 0x78, 0x56, 1090 0xBC, 0x9A, 0x78, 0x56,
1097 0x34, 0x12, 1091 0x34, 0x12,
1098 // private flags 1092 // private flags
1099 0x00, 1093 0x00,
1100 1094
1101 // frame type (padding) 1095 // frame type (padding)
1102 0x00, 1096 0x00,
1103 0x00, 0x00, 0x00, 0x00 1097 0x00, 0x00, 0x00, 0x00
1104 }; 1098 };
1105 // clang-format on 1099 // clang-format on
1106 CheckProcessingFails(packet, 1100 CheckProcessingFails(packet, arraysize(packet), "Illegal public flags value.",
1107 arraysize(packet),
1108 "Illegal public flags value.",
1109 QUIC_INVALID_PACKET_HEADER); 1101 QUIC_INVALID_PACKET_HEADER);
1110 }; 1102 };
1111 1103
1112 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { 1104 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
1113 // clang-format off 1105 // clang-format off
1114 unsigned char packet[] = { 1106 unsigned char packet[] = {
1115 // public flags (8 byte connection_id, version flag and an unknown flag) 1107 // public flags (8 byte connection_id, version flag and an unknown flag)
1116 0x7D, 1108 0x7D,
1117 // connection_id 1109 // connection_id
1118 0x10, 0x32, 0x54, 0x76, 1110 0x10, 0x32, 0x54, 0x76,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 0xBC, 0x9A, 0x78, 0x56, 1142 0xBC, 0x9A, 0x78, 0x56,
1151 0x34, 0x12, 1143 0x34, 0x12,
1152 // private flags 1144 // private flags
1153 0x10, 1145 0x10,
1154 1146
1155 // frame type (padding) 1147 // frame type (padding)
1156 0x00, 1148 0x00,
1157 0x00, 0x00, 0x00, 0x00 1149 0x00, 0x00, 0x00, 0x00
1158 }; 1150 };
1159 // clang-format on 1151 // clang-format on
1160 CheckProcessingFails(packet, 1152 CheckProcessingFails(packet, arraysize(packet),
1161 arraysize(packet),
1162 "Illegal private flags value.", 1153 "Illegal private flags value.",
1163 QUIC_INVALID_PACKET_HEADER); 1154 QUIC_INVALID_PACKET_HEADER);
1164 }; 1155 };
1165 1156
1166 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { 1157 TEST_P(QuicFramerTest, InvalidFECGroupOffset) {
1167 // clang-format off 1158 // clang-format off
1168 unsigned char packet[] = { 1159 unsigned char packet[] = {
1169 // public flags (8 byte connection_id) 1160 // public flags (8 byte connection_id)
1170 0x3C, 1161 0x3C,
1171 // connection_id 1162 // connection_id
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 QuicPacketHeader header; 1561 QuicPacketHeader header;
1571 header.public_header.connection_id = kConnectionId; 1562 header.public_header.connection_id = kConnectionId;
1572 header.public_header.reset_flag = false; 1563 header.public_header.reset_flag = false;
1573 header.public_header.version_flag = false; 1564 header.public_header.version_flag = false;
1574 header.fec_flag = true; 1565 header.fec_flag = true;
1575 header.entropy_flag = true; 1566 header.entropy_flag = true;
1576 header.packet_number = kPacketNumber; 1567 header.packet_number = kPacketNumber;
1577 header.fec_group = 0; 1568 header.fec_group = 0;
1578 1569
1579 // Do not encrypt the payload because the revived payload is post-encryption. 1570 // Do not encrypt the payload because the revived payload is post-encryption.
1580 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, 1571 EXPECT_TRUE(framer_.ProcessRevivedPacket(
1581 StringPiece(AsChars(payload), 1572 &header, StringPiece(AsChars(payload), arraysize(payload))));
1582 arraysize(payload))));
1583 1573
1584 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1574 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1585 ASSERT_EQ(1, visitor_.revived_packets_); 1575 ASSERT_EQ(1, visitor_.revived_packets_);
1586 ASSERT_TRUE(visitor_.header_.get()); 1576 ASSERT_TRUE(visitor_.header_.get());
1587 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1577 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1588 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1578 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1589 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1579 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1590 EXPECT_TRUE(visitor_.header_->fec_flag); 1580 EXPECT_TRUE(visitor_.header_->fec_flag);
1591 EXPECT_TRUE(visitor_.header_->entropy_flag); 1581 EXPECT_TRUE(visitor_.header_->entropy_flag);
1592 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); 1582 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1708 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1698 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1709 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1699 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1710 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1700 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1711 EXPECT_EQ(0xBA, frame.entropy_hash); 1701 EXPECT_EQ(0xBA, frame.entropy_hash);
1712 EXPECT_EQ(kLargestObserved, frame.largest_observed); 1702 EXPECT_EQ(kLargestObserved, frame.largest_observed);
1713 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); 1703 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow());
1714 ASSERT_EQ(2u, frame.received_packet_times.size()); 1704 ASSERT_EQ(2u, frame.received_packet_times.size());
1715 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); 1705 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min());
1716 1706
1717 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1707 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1718 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1708 const size_t kLargestObservedOffset =
1719 kQuicEntropyHashSize; 1709 kReceivedEntropyOffset + kQuicEntropyHashSize;
1720 const size_t kMissingDeltaTimeOffset = 1710 const size_t kMissingDeltaTimeOffset =
1721 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 1711 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
1722 const size_t kNumTimestampsOffset = 1712 const size_t kNumTimestampsOffset =
1723 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 1713 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
1724 const size_t kTimestampDeltaLargestObserved1 = 1714 const size_t kTimestampDeltaLargestObserved1 =
1725 kNumTimestampsOffset + kQuicNumTimestampsSize; 1715 kNumTimestampsOffset + kQuicNumTimestampsSize;
1726 const size_t kTimestampTimeDeltaLargestObserved1 = 1716 const size_t kTimestampTimeDeltaLargestObserved1 =
1727 kTimestampDeltaLargestObserved1 + 1; 1717 kTimestampDeltaLargestObserved1 + 1;
1728 const size_t kTimestampDeltaLargestObserved2 = 1718 const size_t kTimestampDeltaLargestObserved2 =
1729 kTimestampTimeDeltaLargestObserved1 + 4; 1719 kTimestampTimeDeltaLargestObserved1 + 4;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1823 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1834 const size_t kLargestObservedOffset = 1824 const size_t kLargestObservedOffset =
1835 kReceivedEntropyOffset + kQuicEntropyHashSize; 1825 kReceivedEntropyOffset + kQuicEntropyHashSize;
1836 const size_t kMissingDeltaTimeOffset = 1826 const size_t kMissingDeltaTimeOffset =
1837 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 1827 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
1838 const size_t kNumTimestampsOffset = 1828 const size_t kNumTimestampsOffset =
1839 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 1829 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
1840 const size_t kTimestampDeltaLargestObserved = 1830 const size_t kTimestampDeltaLargestObserved =
1841 kNumTimestampsOffset + kQuicNumTimestampsSize; 1831 kNumTimestampsOffset + kQuicNumTimestampsSize;
1842 const size_t kTimestampTimeDeltaLargestObserved = 1832 const size_t kTimestampTimeDeltaLargestObserved =
1843 kTimestampDeltaLargestObserved + 1; 1833 kTimestampDeltaLargestObserved + 1;
1844 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; 1834 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4;
1845 const size_t kMissingPacketsOffset = 1835 const size_t kMissingPacketsOffset =
1846 kNumMissingPacketOffset + kNumberOfNackRangesSize; 1836 kNumMissingPacketOffset + kNumberOfNackRangesSize;
1847 const size_t kMissingPacketsRange = 1837 const size_t kMissingPacketsRange =
1848 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; 1838 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
1849 const size_t kRevivedPacketsLength = 1839 const size_t kRevivedPacketsLength =
1850 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; 1840 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
1851 // Now test framing boundaries. 1841 // Now test framing boundaries.
1852 const size_t ack_frame_size = 1842 const size_t ack_frame_size =
1853 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; 1843 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 1915
1926 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1916 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1927 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1917 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1928 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1918 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1929 EXPECT_EQ(0xBA, frame.entropy_hash); 1919 EXPECT_EQ(0xBA, frame.entropy_hash);
1930 EXPECT_EQ(kLargestObserved, frame.largest_observed); 1920 EXPECT_EQ(kLargestObserved, frame.largest_observed);
1931 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); 1921 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow());
1932 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); 1922 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min());
1933 1923
1934 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1924 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1935 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1925 const size_t kLargestObservedOffset =
1936 kQuicEntropyHashSize; 1926 kReceivedEntropyOffset + kQuicEntropyHashSize;
1937 const size_t kMissingDeltaTimeOffset = 1927 const size_t kMissingDeltaTimeOffset =
1938 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 1928 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
1939 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 1929 const size_t kNumTimestampsOffset =
1940 kQuicDeltaTimeLargestObservedSize; 1930 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
1941 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + 1931 const size_t kNumMissingPacketOffset =
1942 kQuicNumTimestampsSize; 1932 kNumTimestampsOffset + kQuicNumTimestampsSize;
1943 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + 1933 const size_t kMissingPacketsOffset =
1944 kNumberOfNackRangesSize; 1934 kNumMissingPacketOffset + kNumberOfNackRangesSize;
1945 const size_t kMissingPacketsRange = 1935 const size_t kMissingPacketsRange =
1946 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; 1936 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
1947 const size_t kRevivedPacketsLength = 1937 const size_t kRevivedPacketsLength =
1948 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; 1938 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
1949 // Now test framing boundaries. 1939 // Now test framing boundaries.
1950 const size_t ack_frame_size = 1940 const size_t ack_frame_size =
1951 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; 1941 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
1952 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { 1942 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
1953 string expected_error; 1943 string expected_error;
1954 if (i < kLargestObservedOffset) { 1944 if (i < kLargestObservedOffset) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2023 2013
2024 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2014 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2025 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2015 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2026 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 2016 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2027 EXPECT_EQ(0xBA, frame.entropy_hash); 2017 EXPECT_EQ(0xBA, frame.entropy_hash);
2028 EXPECT_EQ(kLargestObserved, frame.largest_observed); 2018 EXPECT_EQ(kLargestObserved, frame.largest_observed);
2029 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); 2019 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow());
2030 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); 2020 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min());
2031 2021
2032 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 2022 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
2033 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 2023 const size_t kLargestObservedOffset =
2034 kQuicEntropyHashSize; 2024 kReceivedEntropyOffset + kQuicEntropyHashSize;
2035 const size_t kMissingDeltaTimeOffset = 2025 const size_t kMissingDeltaTimeOffset =
2036 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 2026 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
2037 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 2027 const size_t kNumTimestampsOffset =
2038 kQuicDeltaTimeLargestObservedSize; 2028 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2039 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + 2029 const size_t kNumMissingPacketOffset =
2040 kQuicNumTimestampsSize; 2030 kNumTimestampsOffset + kQuicNumTimestampsSize;
2041 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + 2031 const size_t kMissingPacketsOffset =
2042 kNumberOfNackRangesSize; 2032 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2043 const size_t kMissingPacketsRange = 2033 const size_t kMissingPacketsRange =
2044 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; 2034 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
2045 const size_t kRevivedPacketsLength = 2035 const size_t kRevivedPacketsLength =
2046 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; 2036 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
2047 const size_t kRevivedPacketSequenceNumberLength = 2037 const size_t kRevivedPacketSequenceNumberLength =
2048 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; 2038 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
2049 // Now test framing boundaries. 2039 // Now test framing boundaries.
2050 const size_t ack_frame_size = 2040 const size_t ack_frame_size =
2051 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER; 2041 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER;
2052 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { 2042 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2187 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); 2177 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow());
2188 EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min()); 2178 EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min());
2189 EXPECT_EQ(kMissingPacket, frame->missing_packets.Max()); 2179 EXPECT_EQ(kMissingPacket, frame->missing_packets.Max());
2190 2180
2191 // Verify that the packet re-serializes identically. 2181 // Verify that the packet re-serializes identically.
2192 QuicFrames frames; 2182 QuicFrames frames;
2193 frames.push_back(QuicFrame(frame)); 2183 frames.push_back(QuicFrame(frame));
2194 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 2184 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2195 ASSERT_TRUE(data != nullptr); 2185 ASSERT_TRUE(data != nullptr);
2196 2186
2197 test::CompareCharArraysWithHexError("constructed packet", 2187 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2198 data->data(), data->length(), 2188 data->length(), AsChars(packet),
2199 AsChars(packet), arraysize(packet)); 2189 arraysize(packet));
2200 } 2190 }
2201 2191
2202 TEST_P(QuicFramerTest, StopWaitingFrame) { 2192 TEST_P(QuicFramerTest, StopWaitingFrame) {
2203 // clang-format off 2193 // clang-format off
2204 unsigned char packet[] = { 2194 unsigned char packet[] = {
2205 // public flags (8 byte connection_id) 2195 // public flags (8 byte connection_id)
2206 0x3C, 2196 0x3C,
2207 // connection_id 2197 // connection_id
2208 0x10, 0x32, 0x54, 0x76, 2198 0x10, 0x32, 0x54, 0x76,
2209 0x98, 0xBA, 0xDC, 0xFE, 2199 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2416 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); 2406 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code);
2417 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); 2407 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase);
2418 2408
2419 const size_t reason_size = arraysize("because I can") - 1; 2409 const size_t reason_size = arraysize("because I can") - 1;
2420 // Now test framing boundaries. 2410 // Now test framing boundaries.
2421 for (size_t i = kQuicFrameTypeSize; 2411 for (size_t i = kQuicFrameTypeSize;
2422 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { 2412 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) {
2423 string expected_error; 2413 string expected_error;
2424 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { 2414 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) {
2425 expected_error = "Unable to read go away error code."; 2415 expected_error = "Unable to read go away error code.";
2426 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + 2416 } else if (i <
2427 kQuicMaxStreamIdSize) { 2417 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) {
2428 expected_error = "Unable to read last good stream id."; 2418 expected_error = "Unable to read last good stream id.";
2429 } else { 2419 } else {
2430 expected_error = "Unable to read goaway reason."; 2420 expected_error = "Unable to read goaway reason.";
2431 } 2421 }
2432 CheckProcessingFails( 2422 CheckProcessingFails(
2433 packet, 2423 packet,
2434 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2424 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2435 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 2425 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP),
2436 expected_error, QUIC_INVALID_GOAWAY_DATA); 2426 expected_error, QUIC_INVALID_GOAWAY_DATA);
2437 } 2427 }
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2596 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2586 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2597 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); 2587 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
2598 ASSERT_TRUE(visitor_.public_reset_packet_.get()); 2588 ASSERT_TRUE(visitor_.public_reset_packet_.get());
2599 EXPECT_EQ(kConnectionId, 2589 EXPECT_EQ(kConnectionId,
2600 visitor_.public_reset_packet_->public_header.connection_id); 2590 visitor_.public_reset_packet_->public_header.connection_id);
2601 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); 2591 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
2602 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); 2592 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
2603 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); 2593 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
2604 EXPECT_EQ(kPacketNumber, 2594 EXPECT_EQ(kPacketNumber,
2605 visitor_.public_reset_packet_->rejected_packet_number); 2595 visitor_.public_reset_packet_->rejected_packet_number);
2606 EXPECT_TRUE( 2596 EXPECT_EQ(
2607 visitor_.public_reset_packet_->client_address.address().empty()); 2597 ADDRESS_FAMILY_UNSPECIFIED,
2598 visitor_.public_reset_packet_->client_address.GetFamily());
2608 2599
2609 // Now test framing boundaries. 2600 // Now test framing boundaries.
2610 for (size_t i = 0; i < arraysize(packet); ++i) { 2601 for (size_t i = 0; i < arraysize(packet); ++i) {
2611 string expected_error; 2602 string expected_error;
2612 DVLOG(1) << "iteration: " << i; 2603 DVLOG(1) << "iteration: " << i;
2613 if (i < kConnectionIdOffset) { 2604 if (i < kConnectionIdOffset) {
2614 expected_error = "Unable to read public flags."; 2605 expected_error = "Unable to read public flags.";
2615 CheckProcessingFails(packet, i, expected_error, 2606 CheckProcessingFails(packet, i, expected_error,
2616 QUIC_INVALID_PACKET_HEADER); 2607 QUIC_INVALID_PACKET_HEADER);
2617 } else if (i < kPublicResetPacketMessageTagOffset) { 2608 } else if (i < kPublicResetPacketMessageTagOffset) {
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
2845 // clang-format on 2836 // clang-format on
2846 2837
2847 uint64 header_size = 2838 uint64 header_size =
2848 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2839 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2849 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2840 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2850 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2841 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2851 2842
2852 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2843 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2853 ASSERT_TRUE(data != nullptr); 2844 ASSERT_TRUE(data != nullptr);
2854 2845
2855 test::CompareCharArraysWithHexError("constructed packet", 2846 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2856 data->data(), data->length(), 2847 data->length(), AsChars(packet),
2857 AsChars(packet),
2858 arraysize(packet)); 2848 arraysize(packet));
2859 } 2849 }
2860 2850
2861 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { 2851 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
2862 QuicPacketHeader header; 2852 QuicPacketHeader header;
2863 header.public_header.connection_id = kConnectionId; 2853 header.public_header.connection_id = kConnectionId;
2864 header.public_header.reset_flag = false; 2854 header.public_header.reset_flag = false;
2865 header.public_header.version_flag = false; 2855 header.public_header.version_flag = false;
2866 header.fec_flag = false; 2856 header.fec_flag = false;
2867 header.entropy_flag = false; 2857 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2893 // clang-format on 2883 // clang-format on
2894 2884
2895 uint64 header_size = 2885 uint64 header_size =
2896 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2886 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2897 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2887 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2898 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2888 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2899 2889
2900 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2890 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2901 ASSERT_TRUE(data != nullptr); 2891 ASSERT_TRUE(data != nullptr);
2902 2892
2903 test::CompareCharArraysWithHexError("constructed packet", 2893 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2904 data->data(), data->length(), 2894 data->length(), AsChars(packet),
2905 AsChars(packet),
2906 arraysize(packet)); 2895 arraysize(packet));
2907 } 2896 }
2908 2897
2909 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { 2898 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
2910 QuicPacketHeader header; 2899 QuicPacketHeader header;
2911 header.public_header.connection_id = kConnectionId; 2900 header.public_header.connection_id = kConnectionId;
2912 header.public_header.reset_flag = false; 2901 header.public_header.reset_flag = false;
2913 header.public_header.version_flag = false; 2902 header.public_header.version_flag = false;
2914 header.fec_flag = false; 2903 header.fec_flag = false;
2915 header.entropy_flag = false; 2904 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2941 // clang-format on 2930 // clang-format on
2942 2931
2943 uint64 header_size = 2932 uint64 header_size =
2944 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2933 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2945 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2934 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2946 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2935 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2947 2936
2948 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2937 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2949 ASSERT_TRUE(data != nullptr); 2938 ASSERT_TRUE(data != nullptr);
2950 2939
2951 test::CompareCharArraysWithHexError("constructed packet", 2940 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2952 data->data(), data->length(), 2941 data->length(), AsChars(packet),
2953 AsChars(packet),
2954 arraysize(packet)); 2942 arraysize(packet));
2955 } 2943 }
2956 2944
2957 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { 2945 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
2958 QuicPacketHeader header; 2946 QuicPacketHeader header;
2959 header.public_header.connection_id = kConnectionId; 2947 header.public_header.connection_id = kConnectionId;
2960 header.public_header.reset_flag = false; 2948 header.public_header.reset_flag = false;
2961 header.public_header.version_flag = false; 2949 header.public_header.version_flag = false;
2962 header.fec_flag = false; 2950 header.fec_flag = false;
2963 header.entropy_flag = false; 2951 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2989 // clang-format on 2977 // clang-format on
2990 2978
2991 uint64 header_size = 2979 uint64 header_size =
2992 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2980 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2993 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2981 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2994 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2982 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2995 2983
2996 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2984 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2997 ASSERT_TRUE(data != nullptr); 2985 ASSERT_TRUE(data != nullptr);
2998 2986
2999 test::CompareCharArraysWithHexError("constructed packet", 2987 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3000 data->data(), data->length(), 2988 data->length(), AsChars(packet),
3001 AsChars(packet),
3002 arraysize(packet)); 2989 arraysize(packet));
3003 } 2990 }
3004 2991
3005 TEST_P(QuicFramerTest, BuildStreamFramePacket) { 2992 TEST_P(QuicFramerTest, BuildStreamFramePacket) {
3006 QuicPacketHeader header; 2993 QuicPacketHeader header;
3007 header.public_header.connection_id = kConnectionId; 2994 header.public_header.connection_id = kConnectionId;
3008 header.public_header.reset_flag = false; 2995 header.public_header.reset_flag = false;
3009 header.public_header.version_flag = false; 2996 header.public_header.version_flag = false;
3010 header.fec_flag = false; 2997 header.fec_flag = false;
3011 header.entropy_flag = true; 2998 header.entropy_flag = true;
(...skipping 29 matching lines...) Expand all
3041 // data 3028 // data
3042 'h', 'e', 'l', 'l', 3029 'h', 'e', 'l', 'l',
3043 'o', ' ', 'w', 'o', 3030 'o', ' ', 'w', 'o',
3044 'r', 'l', 'd', '!', 3031 'r', 'l', 'd', '!',
3045 }; 3032 };
3046 // clang-format on 3033 // clang-format on
3047 3034
3048 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3035 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3049 ASSERT_TRUE(data != nullptr); 3036 ASSERT_TRUE(data != nullptr);
3050 3037
3051 test::CompareCharArraysWithHexError("constructed packet", 3038 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3052 data->data(), data->length(), 3039 data->length(), AsChars(packet),
3053 AsChars(packet), arraysize(packet)); 3040 arraysize(packet));
3054 } 3041 }
3055 3042
3056 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { 3043 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) {
3057 QuicPacketHeader header; 3044 QuicPacketHeader header;
3058 header.public_header.connection_id = kConnectionId; 3045 header.public_header.connection_id = kConnectionId;
3059 header.public_header.reset_flag = false; 3046 header.public_header.reset_flag = false;
3060 header.public_header.version_flag = false; 3047 header.public_header.version_flag = false;
3061 header.fec_flag = false; 3048 header.fec_flag = false;
3062 header.entropy_flag = true; 3049 header.entropy_flag = true;
3063 header.packet_number = kPacketNumber; 3050 header.packet_number = kPacketNumber;
(...skipping 26 matching lines...) Expand all
3090 // data length (since packet is in an FEC group) 3077 // data length (since packet is in an FEC group)
3091 0x0C, 0x00, 3078 0x0C, 0x00,
3092 // data 3079 // data
3093 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', 3080 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
3094 }; 3081 };
3095 // clang-format on 3082 // clang-format on
3096 3083
3097 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3084 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3098 ASSERT_TRUE(data != nullptr); 3085 ASSERT_TRUE(data != nullptr);
3099 3086
3100 test::CompareCharArraysWithHexError("constructed packet", 3087 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3101 data->data(), data->length(), 3088 data->length(), AsChars(packet),
3102 AsChars(packet), arraysize(packet)); 3089 arraysize(packet));
3103 } 3090 }
3104 3091
3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { 3092 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
3106 QuicPacketHeader header; 3093 QuicPacketHeader header;
3107 header.public_header.connection_id = kConnectionId; 3094 header.public_header.connection_id = kConnectionId;
3108 header.public_header.reset_flag = false; 3095 header.public_header.reset_flag = false;
3109 header.public_header.version_flag = true; 3096 header.public_header.version_flag = true;
3110 header.fec_flag = false; 3097 header.fec_flag = false;
3111 header.entropy_flag = true; 3098 header.entropy_flag = true;
3112 header.packet_number = kPacketNumber; 3099 header.packet_number = kPacketNumber;
3113 header.fec_group = 0; 3100 header.fec_group = 0;
3114 3101
3115 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 3102 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
3116 StringPiece("hello world!")); 3103 StringPiece("hello world!"));
3117 3104
3118 QuicFrames frames; 3105 QuicFrames frames;
3119 frames.push_back(QuicFrame(&stream_frame)); 3106 frames.push_back(QuicFrame(&stream_frame));
3120 3107
3121 // clang-format off 3108 // clang-format off
3122 unsigned char packet[] = { 3109 unsigned char packet[] = {
3123 // public flags (version, 8 byte connection_id) 3110 // public flags (version, 8 byte connection_id)
3124 0x3D, 3111 0x3D,
3125 // connection_id 3112 // connection_id
3126 0x10, 3113 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3127 0x32,
3128 0x54,
3129 0x76,
3130 0x98,
3131 0xBA,
3132 0xDC,
3133 0xFE,
3134 // version tag 3114 // version tag
3135 'Q', 3115 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
3136 '0',
3137 GetQuicVersionDigitTens(),
3138 GetQuicVersionDigitOnes(),
3139 // packet number 3116 // packet number
3140 0xBC, 3117 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3141 0x9A,
3142 0x78,
3143 0x56,
3144 0x34,
3145 0x12,
3146 // private flags (entropy) 3118 // private flags (entropy)
3147 0x01, 3119 0x01,
3148 3120
3149 // frame type (stream frame with fin and no length) 3121 // frame type (stream frame with fin and no length)
3150 0xDF, 3122 0xDF,
3151 // stream id 3123 // stream id
3152 0x04, 3124 0x04, 0x03, 0x02, 0x01,
3153 0x03,
3154 0x02,
3155 0x01,
3156 // offset 3125 // offset
3157 0x54, 3126 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA,
3158 0x76,
3159 0x10,
3160 0x32,
3161 0xDC,
3162 0xFE,
3163 0x98,
3164 0xBA,
3165 // data 3127 // data
3166 'h', 3128 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
3167 'e',
3168 'l',
3169 'l',
3170 'o',
3171 ' ',
3172 'w',
3173 'o',
3174 'r',
3175 'l',
3176 'd',
3177 '!',
3178 }; 3129 };
3179 // clang-format on 3130 // clang-format on
3180 3131
3181 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); 3132 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3133 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3183 ASSERT_TRUE(data != nullptr); 3134 ASSERT_TRUE(data != nullptr);
3184 3135
3185 test::CompareCharArraysWithHexError("constructed packet", 3136 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3186 data->data(), data->length(), 3137 data->length(), AsChars(packet),
3187 AsChars(packet), arraysize(packet)); 3138 arraysize(packet));
3188 } 3139 }
3189 3140
3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { 3141 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
3191 // clang-format off 3142 // clang-format off
3192 unsigned char packet[] = { 3143 unsigned char packet[] = {
3193 // public flags (version, 8 byte connection_id) 3144 // public flags (version, 8 byte connection_id)
3194 0x0D, 3145 0x0D,
3195 // connection_id 3146 // connection_id
3196 0x10, 3147 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3197 0x32,
3198 0x54,
3199 0x76,
3200 0x98,
3201 0xBA,
3202 0xDC,
3203 0xFE,
3204 // version tag 3148 // version tag
3205 'Q', 3149 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
3206 '0',
3207 GetQuicVersionDigitTens(),
3208 GetQuicVersionDigitOnes(),
3209 }; 3150 };
3210 // clang-format on 3151 // clang-format on
3211 3152
3212 QuicConnectionId connection_id = kConnectionId; 3153 QuicConnectionId connection_id = kConnectionId;
3213 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket( 3154 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket(
3214 connection_id, SupportedVersions(GetParam()))); 3155 connection_id, SupportedVersions(GetParam())));
3215 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3156 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3216 data->length(), AsChars(packet), 3157 data->length(), AsChars(packet),
3217 arraysize(packet)); 3158 arraysize(packet));
3218 } 3159 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3265 // 0 more missing packets in range. 3206 // 0 more missing packets in range.
3266 0x00, 3207 0x00,
3267 // 0 revived packets. 3208 // 0 revived packets.
3268 0x00, 3209 0x00,
3269 }; 3210 };
3270 // clang-format on 3211 // clang-format on
3271 3212
3272 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3213 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3273 ASSERT_TRUE(data != nullptr); 3214 ASSERT_TRUE(data != nullptr);
3274 3215
3275 test::CompareCharArraysWithHexError("constructed packet", 3216 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3276 data->data(), data->length(), 3217 data->length(), AsChars(packet),
3277 AsChars(packet), arraysize(packet)); 3218 arraysize(packet));
3278 } 3219 }
3279 3220
3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had 3221 // TODO(jri): Add test for tuncated packets in which the original ack frame had
3281 // revived packets. (In both the large and small packet cases below). 3222 // revived packets. (In both the large and small packet cases below).
3282 3223
3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 3224 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
3284 QuicPacketHeader header; 3225 QuicPacketHeader header;
3285 header.public_header.connection_id = kConnectionId; 3226 header.public_header.connection_id = kConnectionId;
3286 header.public_header.reset_flag = false; 3227 header.public_header.reset_flag = false;
3287 header.public_header.version_flag = false; 3228 header.public_header.version_flag = false;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
3379 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3320 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3380 3321
3381 // 0 revived packets. 3322 // 0 revived packets.
3382 0x00, 3323 0x00,
3383 }; 3324 };
3384 // clang-format on 3325 // clang-format on
3385 3326
3386 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3327 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3387 ASSERT_TRUE(data != nullptr); 3328 ASSERT_TRUE(data != nullptr);
3388 3329
3389 test::CompareCharArraysWithHexError("constructed packet", 3330 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3390 data->data(), data->length(), 3331 data->length(), AsChars(packet),
3391 AsChars(packet), arraysize(packet)); 3332 arraysize(packet));
3392 } 3333 }
3393 3334
3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3335 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3395 QuicPacketHeader header; 3336 QuicPacketHeader header;
3396 header.public_header.connection_id = kConnectionId; 3337 header.public_header.connection_id = kConnectionId;
3397 header.public_header.reset_flag = false; 3338 header.public_header.reset_flag = false;
3398 header.public_header.version_flag = false; 3339 header.public_header.version_flag = false;
3399 header.fec_flag = false; 3340 header.fec_flag = false;
3400 header.entropy_flag = true; 3341 header.entropy_flag = true;
3401 header.packet_number = kPacketNumber; 3342 header.packet_number = kPacketNumber;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
3444 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3385 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3445 // 0 revived packets. 3386 // 0 revived packets.
3446 0x00, 3387 0x00,
3447 }; 3388 };
3448 // clang-format on 3389 // clang-format on
3449 3390
3450 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); 3391 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u));
3451 ASSERT_TRUE(data != nullptr); 3392 ASSERT_TRUE(data != nullptr);
3452 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 3393 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
3453 EXPECT_EQ(36u, data->length()); 3394 EXPECT_EQ(36u, data->length());
3454 test::CompareCharArraysWithHexError("constructed packet", 3395 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3455 data->data(), data->length(), 3396 data->length(), AsChars(packet),
3456 AsChars(packet), arraysize(packet)); 3397 arraysize(packet));
3457 } 3398 }
3458 3399
3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3400 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3460 QuicPacketHeader header; 3401 QuicPacketHeader header;
3461 header.public_header.connection_id = kConnectionId; 3402 header.public_header.connection_id = kConnectionId;
3462 header.public_header.reset_flag = false; 3403 header.public_header.reset_flag = false;
3463 header.public_header.version_flag = false; 3404 header.public_header.version_flag = false;
3464 header.fec_flag = false; 3405 header.fec_flag = false;
3465 header.entropy_flag = true; 3406 header.entropy_flag = true;
3466 header.packet_number = kPacketNumber; 3407 header.packet_number = kPacketNumber;
(...skipping 24 matching lines...) Expand all
3491 0x14, 3432 0x14,
3492 // least packet number awaiting an ack, delta from packet number. 3433 // least packet number awaiting an ack, delta from packet number.
3493 0x1C, 0x00, 0x00, 0x00, 3434 0x1C, 0x00, 0x00, 0x00,
3494 0x00, 0x00, 3435 0x00, 0x00,
3495 }; 3436 };
3496 // clang-format on 3437 // clang-format on
3497 3438
3498 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3439 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3499 ASSERT_TRUE(data != nullptr); 3440 ASSERT_TRUE(data != nullptr);
3500 3441
3501 test::CompareCharArraysWithHexError("constructed packet", 3442 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3502 data->data(), data->length(), 3443 data->length(), AsChars(packet),
3503 AsChars(packet), arraysize(packet)); 3444 arraysize(packet));
3504 } 3445 }
3505 3446
3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { 3447 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
3507 QuicPacketHeader header; 3448 QuicPacketHeader header;
3508 header.public_header.connection_id = kConnectionId; 3449 header.public_header.connection_id = kConnectionId;
3509 header.public_header.reset_flag = false; 3450 header.public_header.reset_flag = false;
3510 header.public_header.version_flag = false; 3451 header.public_header.version_flag = false;
3511 header.fec_flag = false; 3452 header.fec_flag = false;
3512 header.entropy_flag = false; 3453 header.entropy_flag = false;
3513 header.packet_number = kPacketNumber; 3454 header.packet_number = kPacketNumber;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
3594 'b', 'e', 'c', 'a', 3535 'b', 'e', 'c', 'a',
3595 'u', 's', 'e', ' ', 3536 'u', 's', 'e', ' ',
3596 'I', ' ', 'c', 'a', 3537 'I', ' ', 'c', 'a',
3597 'n', 3538 'n',
3598 }; 3539 };
3599 // clang-format on 3540 // clang-format on
3600 3541
3601 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3542 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3602 ASSERT_TRUE(data != nullptr); 3543 ASSERT_TRUE(data != nullptr);
3603 3544
3604 test::CompareCharArraysWithHexError("constructed packet", 3545 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3605 data->data(), data->length(), 3546 data->length(), AsChars(packet),
3606 AsChars(packet), arraysize(packet)); 3547 arraysize(packet));
3607 } 3548 }
3608 3549
3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) { 3550 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
3610 QuicPacketHeader header; 3551 QuicPacketHeader header;
3611 header.public_header.connection_id = kConnectionId; 3552 header.public_header.connection_id = kConnectionId;
3612 header.public_header.reset_flag = false; 3553 header.public_header.reset_flag = false;
3613 header.public_header.version_flag = false; 3554 header.public_header.version_flag = false;
3614 header.fec_flag = false; 3555 header.fec_flag = false;
3615 header.entropy_flag = true; 3556 header.entropy_flag = true;
3616 header.packet_number = kPacketNumber; 3557 header.packet_number = kPacketNumber;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3649 'b', 'e', 'c', 'a', 3590 'b', 'e', 'c', 'a',
3650 'u', 's', 'e', ' ', 3591 'u', 's', 'e', ' ',
3651 'I', ' ', 'c', 'a', 3592 'I', ' ', 'c', 'a',
3652 'n', 3593 'n',
3653 }; 3594 };
3654 // clang-format on 3595 // clang-format on
3655 3596
3656 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3597 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3657 ASSERT_TRUE(data != nullptr); 3598 ASSERT_TRUE(data != nullptr);
3658 3599
3659 test::CompareCharArraysWithHexError("constructed packet", 3600 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3660 data->data(), data->length(), 3601 data->length(), AsChars(packet),
3661 AsChars(packet), arraysize(packet)); 3602 arraysize(packet));
3662 } 3603 }
3663 3604
3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { 3605 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
3665 QuicPacketHeader header; 3606 QuicPacketHeader header;
3666 header.public_header.connection_id = kConnectionId; 3607 header.public_header.connection_id = kConnectionId;
3667 header.public_header.reset_flag = false; 3608 header.public_header.reset_flag = false;
3668 header.public_header.version_flag = false; 3609 header.public_header.version_flag = false;
3669 header.fec_flag = false; 3610 header.fec_flag = false;
3670 header.entropy_flag = true; 3611 header.entropy_flag = true;
3671 header.packet_number = kPacketNumber; 3612 header.packet_number = kPacketNumber;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
3869 // rejected packet number 3810 // rejected packet number
3870 0xBC, 0x9A, 0x78, 0x56, 3811 0xBC, 0x9A, 0x78, 0x56,
3871 0x34, 0x12, 0x00, 0x00, 3812 0x34, 0x12, 0x00, 0x00,
3872 }; 3813 };
3873 // clang-format on 3814 // clang-format on
3874 3815
3875 scoped_ptr<QuicEncryptedPacket> data( 3816 scoped_ptr<QuicEncryptedPacket> data(
3876 framer_.BuildPublicResetPacket(reset_packet)); 3817 framer_.BuildPublicResetPacket(reset_packet));
3877 ASSERT_TRUE(data != nullptr); 3818 ASSERT_TRUE(data != nullptr);
3878 3819
3879 test::CompareCharArraysWithHexError("constructed packet", 3820 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3880 data->data(), data->length(), 3821 data->length(), AsChars(packet),
3881 AsChars(packet), arraysize(packet)); 3822 arraysize(packet));
3882 } 3823 }
3883 3824
3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { 3825 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
3885 QuicPublicResetPacket reset_packet; 3826 QuicPublicResetPacket reset_packet;
3886 reset_packet.public_header.connection_id = kConnectionId; 3827 reset_packet.public_header.connection_id = kConnectionId;
3887 reset_packet.public_header.reset_flag = true; 3828 reset_packet.public_header.reset_flag = true;
3888 reset_packet.public_header.version_flag = false; 3829 reset_packet.public_header.version_flag = false;
3889 reset_packet.rejected_packet_number = kPacketNumber; 3830 reset_packet.rejected_packet_number = kPacketNumber;
3890 reset_packet.nonce_proof = kNonceProof; 3831 reset_packet.nonce_proof = kNonceProof;
3891 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); 3832 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3923 0x02, 0x00, 3864 0x02, 0x00,
3924 0x7F, 0x00, 0x00, 0x01, 3865 0x7F, 0x00, 0x00, 0x01,
3925 0x34, 0x12, 3866 0x34, 0x12,
3926 }; 3867 };
3927 // clang-format on 3868 // clang-format on
3928 3869
3929 scoped_ptr<QuicEncryptedPacket> data( 3870 scoped_ptr<QuicEncryptedPacket> data(
3930 framer_.BuildPublicResetPacket(reset_packet)); 3871 framer_.BuildPublicResetPacket(reset_packet));
3931 ASSERT_TRUE(data != nullptr); 3872 ASSERT_TRUE(data != nullptr);
3932 3873
3933 test::CompareCharArraysWithHexError("constructed packet", 3874 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3934 data->data(), data->length(), 3875 data->length(), AsChars(packet),
3935 AsChars(packet), arraysize(packet)); 3876 arraysize(packet));
3936 } 3877 }
3937 3878
3938 TEST_P(QuicFramerTest, BuildFecPacket) { 3879 TEST_P(QuicFramerTest, BuildFecPacket) {
3939 QuicPacketHeader header; 3880 QuicPacketHeader header;
3940 header.public_header.connection_id = kConnectionId; 3881 header.public_header.connection_id = kConnectionId;
3941 header.public_header.reset_flag = false; 3882 header.public_header.reset_flag = false;
3942 header.public_header.version_flag = false; 3883 header.public_header.version_flag = false;
3943 header.fec_flag = true; 3884 header.fec_flag = true;
3944 header.entropy_flag = true; 3885 header.entropy_flag = true;
3945 header.packet_number = kPacketNumber; 3886 header.packet_number = kPacketNumber;
(...skipping 21 matching lines...) Expand all
3967 'a', 'b', 'c', 'd', 3908 'a', 'b', 'c', 'd',
3968 'e', 'f', 'g', 'h', 3909 'e', 'f', 'g', 'h',
3969 'i', 'j', 'k', 'l', 3910 'i', 'j', 'k', 'l',
3970 'm', 'n', 'o', 'p', 3911 'm', 'n', 'o', 'p',
3971 }; 3912 };
3972 // clang-format on 3913 // clang-format on
3973 3914
3974 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); 3915 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy));
3975 ASSERT_TRUE(data != nullptr); 3916 ASSERT_TRUE(data != nullptr);
3976 3917
3977 test::CompareCharArraysWithHexError("constructed packet", 3918 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3978 data->data(), data->length(), 3919 data->length(), AsChars(packet),
3979 AsChars(packet), arraysize(packet)); 3920 arraysize(packet));
3980 } 3921 }
3981 3922
3982 TEST_P(QuicFramerTest, EncryptPacket) { 3923 TEST_P(QuicFramerTest, EncryptPacket) {
3983 QuicPacketNumber packet_number = kPacketNumber; 3924 QuicPacketNumber packet_number = kPacketNumber;
3984 // clang-format off 3925 // clang-format off
3985 unsigned char packet[] = { 3926 unsigned char packet[] = {
3986 // public flags (8 byte connection_id) 3927 // public flags (8 byte connection_id)
3987 0x3C, 3928 0x3C,
3988 // connection_id 3929 // connection_id
3989 0x10, 0x32, 0x54, 0x76, 3930 0x10, 0x32, 0x54, 0x76,
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
4386 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); 4327 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0);
4387 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); 4328 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0);
4388 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); 4329 EXPECT_CALL(visitor, OnPacketComplete()).Times(0);
4389 4330
4390 EXPECT_FALSE(framer_.ProcessPacket(*packet)); 4331 EXPECT_FALSE(framer_.ProcessPacket(*packet));
4391 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 4332 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
4392 } 4333 }
4393 4334
4394 } // namespace test 4335 } // namespace test
4395 } // namespace net 4336 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698