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

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: Adding NET_EXPORT_PRIVATE to DelegateInterface. Created 5 years 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(ADDRESS_FAMILY_UNSPECIFIED,
2607 visitor_.public_reset_packet_->client_address.address().empty()); 2597 visitor_.public_reset_packet_->client_address.GetFamily());
2608 2598
2609 // Now test framing boundaries. 2599 // Now test framing boundaries.
2610 for (size_t i = 0; i < arraysize(packet); ++i) { 2600 for (size_t i = 0; i < arraysize(packet); ++i) {
2611 string expected_error; 2601 string expected_error;
2612 DVLOG(1) << "iteration: " << i; 2602 DVLOG(1) << "iteration: " << i;
2613 if (i < kConnectionIdOffset) { 2603 if (i < kConnectionIdOffset) {
2614 expected_error = "Unable to read public flags."; 2604 expected_error = "Unable to read public flags.";
2615 CheckProcessingFails(packet, i, expected_error, 2605 CheckProcessingFails(packet, i, expected_error,
2616 QUIC_INVALID_PACKET_HEADER); 2606 QUIC_INVALID_PACKET_HEADER);
2617 } else if (i < kPublicResetPacketMessageTagOffset) { 2607 } else if (i < kPublicResetPacketMessageTagOffset) {
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
2845 // clang-format on 2835 // clang-format on
2846 2836
2847 uint64 header_size = 2837 uint64 header_size =
2848 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2838 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2849 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2839 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2850 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2840 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2851 2841
2852 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2842 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2853 ASSERT_TRUE(data != nullptr); 2843 ASSERT_TRUE(data != nullptr);
2854 2844
2855 test::CompareCharArraysWithHexError("constructed packet", 2845 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2856 data->data(), data->length(), 2846 data->length(), AsChars(packet),
2857 AsChars(packet),
2858 arraysize(packet)); 2847 arraysize(packet));
2859 } 2848 }
2860 2849
2861 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { 2850 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
2862 QuicPacketHeader header; 2851 QuicPacketHeader header;
2863 header.public_header.connection_id = kConnectionId; 2852 header.public_header.connection_id = kConnectionId;
2864 header.public_header.reset_flag = false; 2853 header.public_header.reset_flag = false;
2865 header.public_header.version_flag = false; 2854 header.public_header.version_flag = false;
2866 header.fec_flag = false; 2855 header.fec_flag = false;
2867 header.entropy_flag = false; 2856 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2893 // clang-format on 2882 // clang-format on
2894 2883
2895 uint64 header_size = 2884 uint64 header_size =
2896 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2885 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2897 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2886 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2898 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2887 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2899 2888
2900 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2889 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2901 ASSERT_TRUE(data != nullptr); 2890 ASSERT_TRUE(data != nullptr);
2902 2891
2903 test::CompareCharArraysWithHexError("constructed packet", 2892 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2904 data->data(), data->length(), 2893 data->length(), AsChars(packet),
2905 AsChars(packet),
2906 arraysize(packet)); 2894 arraysize(packet));
2907 } 2895 }
2908 2896
2909 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { 2897 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
2910 QuicPacketHeader header; 2898 QuicPacketHeader header;
2911 header.public_header.connection_id = kConnectionId; 2899 header.public_header.connection_id = kConnectionId;
2912 header.public_header.reset_flag = false; 2900 header.public_header.reset_flag = false;
2913 header.public_header.version_flag = false; 2901 header.public_header.version_flag = false;
2914 header.fec_flag = false; 2902 header.fec_flag = false;
2915 header.entropy_flag = false; 2903 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2941 // clang-format on 2929 // clang-format on
2942 2930
2943 uint64 header_size = 2931 uint64 header_size =
2944 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2932 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2945 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2933 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2946 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2934 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2947 2935
2948 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2936 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2949 ASSERT_TRUE(data != nullptr); 2937 ASSERT_TRUE(data != nullptr);
2950 2938
2951 test::CompareCharArraysWithHexError("constructed packet", 2939 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2952 data->data(), data->length(), 2940 data->length(), AsChars(packet),
2953 AsChars(packet),
2954 arraysize(packet)); 2941 arraysize(packet));
2955 } 2942 }
2956 2943
2957 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { 2944 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
2958 QuicPacketHeader header; 2945 QuicPacketHeader header;
2959 header.public_header.connection_id = kConnectionId; 2946 header.public_header.connection_id = kConnectionId;
2960 header.public_header.reset_flag = false; 2947 header.public_header.reset_flag = false;
2961 header.public_header.version_flag = false; 2948 header.public_header.version_flag = false;
2962 header.fec_flag = false; 2949 header.fec_flag = false;
2963 header.entropy_flag = false; 2950 header.entropy_flag = false;
(...skipping 25 matching lines...) Expand all
2989 // clang-format on 2976 // clang-format on
2990 2977
2991 uint64 header_size = 2978 uint64 header_size =
2992 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2979 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2993 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); 2980 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP);
2994 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2981 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2995 2982
2996 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 2983 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
2997 ASSERT_TRUE(data != nullptr); 2984 ASSERT_TRUE(data != nullptr);
2998 2985
2999 test::CompareCharArraysWithHexError("constructed packet", 2986 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3000 data->data(), data->length(), 2987 data->length(), AsChars(packet),
3001 AsChars(packet),
3002 arraysize(packet)); 2988 arraysize(packet));
3003 } 2989 }
3004 2990
3005 TEST_P(QuicFramerTest, BuildStreamFramePacket) { 2991 TEST_P(QuicFramerTest, BuildStreamFramePacket) {
3006 QuicPacketHeader header; 2992 QuicPacketHeader header;
3007 header.public_header.connection_id = kConnectionId; 2993 header.public_header.connection_id = kConnectionId;
3008 header.public_header.reset_flag = false; 2994 header.public_header.reset_flag = false;
3009 header.public_header.version_flag = false; 2995 header.public_header.version_flag = false;
3010 header.fec_flag = false; 2996 header.fec_flag = false;
3011 header.entropy_flag = true; 2997 header.entropy_flag = true;
(...skipping 29 matching lines...) Expand all
3041 // data 3027 // data
3042 'h', 'e', 'l', 'l', 3028 'h', 'e', 'l', 'l',
3043 'o', ' ', 'w', 'o', 3029 'o', ' ', 'w', 'o',
3044 'r', 'l', 'd', '!', 3030 'r', 'l', 'd', '!',
3045 }; 3031 };
3046 // clang-format on 3032 // clang-format on
3047 3033
3048 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3034 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3049 ASSERT_TRUE(data != nullptr); 3035 ASSERT_TRUE(data != nullptr);
3050 3036
3051 test::CompareCharArraysWithHexError("constructed packet", 3037 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3052 data->data(), data->length(), 3038 data->length(), AsChars(packet),
3053 AsChars(packet), arraysize(packet)); 3039 arraysize(packet));
3054 } 3040 }
3055 3041
3056 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { 3042 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) {
3057 QuicPacketHeader header; 3043 QuicPacketHeader header;
3058 header.public_header.connection_id = kConnectionId; 3044 header.public_header.connection_id = kConnectionId;
3059 header.public_header.reset_flag = false; 3045 header.public_header.reset_flag = false;
3060 header.public_header.version_flag = false; 3046 header.public_header.version_flag = false;
3061 header.fec_flag = false; 3047 header.fec_flag = false;
3062 header.entropy_flag = true; 3048 header.entropy_flag = true;
3063 header.packet_number = kPacketNumber; 3049 header.packet_number = kPacketNumber;
(...skipping 26 matching lines...) Expand all
3090 // data length (since packet is in an FEC group) 3076 // data length (since packet is in an FEC group)
3091 0x0C, 0x00, 3077 0x0C, 0x00,
3092 // data 3078 // data
3093 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', 3079 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
3094 }; 3080 };
3095 // clang-format on 3081 // clang-format on
3096 3082
3097 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3083 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3098 ASSERT_TRUE(data != nullptr); 3084 ASSERT_TRUE(data != nullptr);
3099 3085
3100 test::CompareCharArraysWithHexError("constructed packet", 3086 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3101 data->data(), data->length(), 3087 data->length(), AsChars(packet),
3102 AsChars(packet), arraysize(packet)); 3088 arraysize(packet));
3103 } 3089 }
3104 3090
3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { 3091 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
3106 QuicPacketHeader header; 3092 QuicPacketHeader header;
3107 header.public_header.connection_id = kConnectionId; 3093 header.public_header.connection_id = kConnectionId;
3108 header.public_header.reset_flag = false; 3094 header.public_header.reset_flag = false;
3109 header.public_header.version_flag = true; 3095 header.public_header.version_flag = true;
3110 header.fec_flag = false; 3096 header.fec_flag = false;
3111 header.entropy_flag = true; 3097 header.entropy_flag = true;
3112 header.packet_number = kPacketNumber; 3098 header.packet_number = kPacketNumber;
3113 header.fec_group = 0; 3099 header.fec_group = 0;
3114 3100
3115 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 3101 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
3116 StringPiece("hello world!")); 3102 StringPiece("hello world!"));
3117 3103
3118 QuicFrames frames; 3104 QuicFrames frames;
3119 frames.push_back(QuicFrame(&stream_frame)); 3105 frames.push_back(QuicFrame(&stream_frame));
3120 3106
3121 // clang-format off 3107 // clang-format off
3122 unsigned char packet[] = { 3108 unsigned char packet[] = {
3123 // public flags (version, 8 byte connection_id) 3109 // public flags (version, 8 byte connection_id)
3124 0x3D, 3110 0x3D,
3125 // connection_id 3111 // connection_id
3126 0x10, 3112 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 3113 // version tag
3135 'Q', 3114 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
3136 '0',
3137 GetQuicVersionDigitTens(),
3138 GetQuicVersionDigitOnes(),
3139 // packet number 3115 // packet number
3140 0xBC, 3116 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3141 0x9A,
3142 0x78,
3143 0x56,
3144 0x34,
3145 0x12,
3146 // private flags (entropy) 3117 // private flags (entropy)
3147 0x01, 3118 0x01,
3148 3119
3149 // frame type (stream frame with fin and no length) 3120 // frame type (stream frame with fin and no length)
3150 0xDF, 3121 0xDF,
3151 // stream id 3122 // stream id
3152 0x04, 3123 0x04, 0x03, 0x02, 0x01,
3153 0x03,
3154 0x02,
3155 0x01,
3156 // offset 3124 // offset
3157 0x54, 3125 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA,
3158 0x76,
3159 0x10,
3160 0x32,
3161 0xDC,
3162 0xFE,
3163 0x98,
3164 0xBA,
3165 // data 3126 // data
3166 'h', 3127 '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 }; 3128 };
3179 // clang-format on 3129 // clang-format on
3180 3130
3181 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); 3131 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3132 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3183 ASSERT_TRUE(data != nullptr); 3133 ASSERT_TRUE(data != nullptr);
3184 3134
3185 test::CompareCharArraysWithHexError("constructed packet", 3135 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3186 data->data(), data->length(), 3136 data->length(), AsChars(packet),
3187 AsChars(packet), arraysize(packet)); 3137 arraysize(packet));
3188 } 3138 }
3189 3139
3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { 3140 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
3191 // clang-format off 3141 // clang-format off
3192 unsigned char packet[] = { 3142 unsigned char packet[] = {
3193 // public flags (version, 8 byte connection_id) 3143 // public flags (version, 8 byte connection_id)
3194 0x0D, 3144 0x0D,
3195 // connection_id 3145 // connection_id
3196 0x10, 3146 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 3147 // version tag
3205 'Q', 3148 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
3206 '0',
3207 GetQuicVersionDigitTens(),
3208 GetQuicVersionDigitOnes(),
3209 }; 3149 };
3210 // clang-format on 3150 // clang-format on
3211 3151
3212 QuicConnectionId connection_id = kConnectionId; 3152 QuicConnectionId connection_id = kConnectionId;
3213 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket( 3153 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket(
3214 connection_id, SupportedVersions(GetParam()))); 3154 connection_id, SupportedVersions(GetParam())));
3215 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3155 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3216 data->length(), AsChars(packet), 3156 data->length(), AsChars(packet),
3217 arraysize(packet)); 3157 arraysize(packet));
3218 } 3158 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3265 // 0 more missing packets in range. 3205 // 0 more missing packets in range.
3266 0x00, 3206 0x00,
3267 // 0 revived packets. 3207 // 0 revived packets.
3268 0x00, 3208 0x00,
3269 }; 3209 };
3270 // clang-format on 3210 // clang-format on
3271 3211
3272 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3212 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3273 ASSERT_TRUE(data != nullptr); 3213 ASSERT_TRUE(data != nullptr);
3274 3214
3275 test::CompareCharArraysWithHexError("constructed packet", 3215 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3276 data->data(), data->length(), 3216 data->length(), AsChars(packet),
3277 AsChars(packet), arraysize(packet)); 3217 arraysize(packet));
3278 } 3218 }
3279 3219
3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had 3220 // 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). 3221 // revived packets. (In both the large and small packet cases below).
3282 3222
3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 3223 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
3284 QuicPacketHeader header; 3224 QuicPacketHeader header;
3285 header.public_header.connection_id = kConnectionId; 3225 header.public_header.connection_id = kConnectionId;
3286 header.public_header.reset_flag = false; 3226 header.public_header.reset_flag = false;
3287 header.public_header.version_flag = false; 3227 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, 3319 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3380 3320
3381 // 0 revived packets. 3321 // 0 revived packets.
3382 0x00, 3322 0x00,
3383 }; 3323 };
3384 // clang-format on 3324 // clang-format on
3385 3325
3386 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3326 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3387 ASSERT_TRUE(data != nullptr); 3327 ASSERT_TRUE(data != nullptr);
3388 3328
3389 test::CompareCharArraysWithHexError("constructed packet", 3329 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3390 data->data(), data->length(), 3330 data->length(), AsChars(packet),
3391 AsChars(packet), arraysize(packet)); 3331 arraysize(packet));
3392 } 3332 }
3393 3333
3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3334 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3395 QuicPacketHeader header; 3335 QuicPacketHeader header;
3396 header.public_header.connection_id = kConnectionId; 3336 header.public_header.connection_id = kConnectionId;
3397 header.public_header.reset_flag = false; 3337 header.public_header.reset_flag = false;
3398 header.public_header.version_flag = false; 3338 header.public_header.version_flag = false;
3399 header.fec_flag = false; 3339 header.fec_flag = false;
3400 header.entropy_flag = true; 3340 header.entropy_flag = true;
3401 header.packet_number = kPacketNumber; 3341 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, 3384 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3445 // 0 revived packets. 3385 // 0 revived packets.
3446 0x00, 3386 0x00,
3447 }; 3387 };
3448 // clang-format on 3388 // clang-format on
3449 3389
3450 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); 3390 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u));
3451 ASSERT_TRUE(data != nullptr); 3391 ASSERT_TRUE(data != nullptr);
3452 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 3392 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
3453 EXPECT_EQ(36u, data->length()); 3393 EXPECT_EQ(36u, data->length());
3454 test::CompareCharArraysWithHexError("constructed packet", 3394 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3455 data->data(), data->length(), 3395 data->length(), AsChars(packet),
3456 AsChars(packet), arraysize(packet)); 3396 arraysize(packet));
3457 } 3397 }
3458 3398
3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3399 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3460 QuicPacketHeader header; 3400 QuicPacketHeader header;
3461 header.public_header.connection_id = kConnectionId; 3401 header.public_header.connection_id = kConnectionId;
3462 header.public_header.reset_flag = false; 3402 header.public_header.reset_flag = false;
3463 header.public_header.version_flag = false; 3403 header.public_header.version_flag = false;
3464 header.fec_flag = false; 3404 header.fec_flag = false;
3465 header.entropy_flag = true; 3405 header.entropy_flag = true;
3466 header.packet_number = kPacketNumber; 3406 header.packet_number = kPacketNumber;
(...skipping 24 matching lines...) Expand all
3491 0x14, 3431 0x14,
3492 // least packet number awaiting an ack, delta from packet number. 3432 // least packet number awaiting an ack, delta from packet number.
3493 0x1C, 0x00, 0x00, 0x00, 3433 0x1C, 0x00, 0x00, 0x00,
3494 0x00, 0x00, 3434 0x00, 0x00,
3495 }; 3435 };
3496 // clang-format on 3436 // clang-format on
3497 3437
3498 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3438 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3499 ASSERT_TRUE(data != nullptr); 3439 ASSERT_TRUE(data != nullptr);
3500 3440
3501 test::CompareCharArraysWithHexError("constructed packet", 3441 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3502 data->data(), data->length(), 3442 data->length(), AsChars(packet),
3503 AsChars(packet), arraysize(packet)); 3443 arraysize(packet));
3504 } 3444 }
3505 3445
3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { 3446 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
3507 QuicPacketHeader header; 3447 QuicPacketHeader header;
3508 header.public_header.connection_id = kConnectionId; 3448 header.public_header.connection_id = kConnectionId;
3509 header.public_header.reset_flag = false; 3449 header.public_header.reset_flag = false;
3510 header.public_header.version_flag = false; 3450 header.public_header.version_flag = false;
3511 header.fec_flag = false; 3451 header.fec_flag = false;
3512 header.entropy_flag = false; 3452 header.entropy_flag = false;
3513 header.packet_number = kPacketNumber; 3453 header.packet_number = kPacketNumber;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
3594 'b', 'e', 'c', 'a', 3534 'b', 'e', 'c', 'a',
3595 'u', 's', 'e', ' ', 3535 'u', 's', 'e', ' ',
3596 'I', ' ', 'c', 'a', 3536 'I', ' ', 'c', 'a',
3597 'n', 3537 'n',
3598 }; 3538 };
3599 // clang-format on 3539 // clang-format on
3600 3540
3601 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3541 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3602 ASSERT_TRUE(data != nullptr); 3542 ASSERT_TRUE(data != nullptr);
3603 3543
3604 test::CompareCharArraysWithHexError("constructed packet", 3544 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3605 data->data(), data->length(), 3545 data->length(), AsChars(packet),
3606 AsChars(packet), arraysize(packet)); 3546 arraysize(packet));
3607 } 3547 }
3608 3548
3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) { 3549 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
3610 QuicPacketHeader header; 3550 QuicPacketHeader header;
3611 header.public_header.connection_id = kConnectionId; 3551 header.public_header.connection_id = kConnectionId;
3612 header.public_header.reset_flag = false; 3552 header.public_header.reset_flag = false;
3613 header.public_header.version_flag = false; 3553 header.public_header.version_flag = false;
3614 header.fec_flag = false; 3554 header.fec_flag = false;
3615 header.entropy_flag = true; 3555 header.entropy_flag = true;
3616 header.packet_number = kPacketNumber; 3556 header.packet_number = kPacketNumber;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3649 'b', 'e', 'c', 'a', 3589 'b', 'e', 'c', 'a',
3650 'u', 's', 'e', ' ', 3590 'u', 's', 'e', ' ',
3651 'I', ' ', 'c', 'a', 3591 'I', ' ', 'c', 'a',
3652 'n', 3592 'n',
3653 }; 3593 };
3654 // clang-format on 3594 // clang-format on
3655 3595
3656 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3596 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3657 ASSERT_TRUE(data != nullptr); 3597 ASSERT_TRUE(data != nullptr);
3658 3598
3659 test::CompareCharArraysWithHexError("constructed packet", 3599 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3660 data->data(), data->length(), 3600 data->length(), AsChars(packet),
3661 AsChars(packet), arraysize(packet)); 3601 arraysize(packet));
3662 } 3602 }
3663 3603
3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { 3604 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
3665 QuicPacketHeader header; 3605 QuicPacketHeader header;
3666 header.public_header.connection_id = kConnectionId; 3606 header.public_header.connection_id = kConnectionId;
3667 header.public_header.reset_flag = false; 3607 header.public_header.reset_flag = false;
3668 header.public_header.version_flag = false; 3608 header.public_header.version_flag = false;
3669 header.fec_flag = false; 3609 header.fec_flag = false;
3670 header.entropy_flag = true; 3610 header.entropy_flag = true;
3671 header.packet_number = kPacketNumber; 3611 header.packet_number = kPacketNumber;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
3869 // rejected packet number 3809 // rejected packet number
3870 0xBC, 0x9A, 0x78, 0x56, 3810 0xBC, 0x9A, 0x78, 0x56,
3871 0x34, 0x12, 0x00, 0x00, 3811 0x34, 0x12, 0x00, 0x00,
3872 }; 3812 };
3873 // clang-format on 3813 // clang-format on
3874 3814
3875 scoped_ptr<QuicEncryptedPacket> data( 3815 scoped_ptr<QuicEncryptedPacket> data(
3876 framer_.BuildPublicResetPacket(reset_packet)); 3816 framer_.BuildPublicResetPacket(reset_packet));
3877 ASSERT_TRUE(data != nullptr); 3817 ASSERT_TRUE(data != nullptr);
3878 3818
3879 test::CompareCharArraysWithHexError("constructed packet", 3819 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3880 data->data(), data->length(), 3820 data->length(), AsChars(packet),
3881 AsChars(packet), arraysize(packet)); 3821 arraysize(packet));
3882 } 3822 }
3883 3823
3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { 3824 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
3885 QuicPublicResetPacket reset_packet; 3825 QuicPublicResetPacket reset_packet;
3886 reset_packet.public_header.connection_id = kConnectionId; 3826 reset_packet.public_header.connection_id = kConnectionId;
3887 reset_packet.public_header.reset_flag = true; 3827 reset_packet.public_header.reset_flag = true;
3888 reset_packet.public_header.version_flag = false; 3828 reset_packet.public_header.version_flag = false;
3889 reset_packet.rejected_packet_number = kPacketNumber; 3829 reset_packet.rejected_packet_number = kPacketNumber;
3890 reset_packet.nonce_proof = kNonceProof; 3830 reset_packet.nonce_proof = kNonceProof;
3891 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); 3831 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3923 0x02, 0x00, 3863 0x02, 0x00,
3924 0x7F, 0x00, 0x00, 0x01, 3864 0x7F, 0x00, 0x00, 0x01,
3925 0x34, 0x12, 3865 0x34, 0x12,
3926 }; 3866 };
3927 // clang-format on 3867 // clang-format on
3928 3868
3929 scoped_ptr<QuicEncryptedPacket> data( 3869 scoped_ptr<QuicEncryptedPacket> data(
3930 framer_.BuildPublicResetPacket(reset_packet)); 3870 framer_.BuildPublicResetPacket(reset_packet));
3931 ASSERT_TRUE(data != nullptr); 3871 ASSERT_TRUE(data != nullptr);
3932 3872
3933 test::CompareCharArraysWithHexError("constructed packet", 3873 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3934 data->data(), data->length(), 3874 data->length(), AsChars(packet),
3935 AsChars(packet), arraysize(packet)); 3875 arraysize(packet));
3936 } 3876 }
3937 3877
3938 TEST_P(QuicFramerTest, BuildFecPacket) { 3878 TEST_P(QuicFramerTest, BuildFecPacket) {
3939 QuicPacketHeader header; 3879 QuicPacketHeader header;
3940 header.public_header.connection_id = kConnectionId; 3880 header.public_header.connection_id = kConnectionId;
3941 header.public_header.reset_flag = false; 3881 header.public_header.reset_flag = false;
3942 header.public_header.version_flag = false; 3882 header.public_header.version_flag = false;
3943 header.fec_flag = true; 3883 header.fec_flag = true;
3944 header.entropy_flag = true; 3884 header.entropy_flag = true;
3945 header.packet_number = kPacketNumber; 3885 header.packet_number = kPacketNumber;
(...skipping 21 matching lines...) Expand all
3967 'a', 'b', 'c', 'd', 3907 'a', 'b', 'c', 'd',
3968 'e', 'f', 'g', 'h', 3908 'e', 'f', 'g', 'h',
3969 'i', 'j', 'k', 'l', 3909 'i', 'j', 'k', 'l',
3970 'm', 'n', 'o', 'p', 3910 'm', 'n', 'o', 'p',
3971 }; 3911 };
3972 // clang-format on 3912 // clang-format on
3973 3913
3974 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); 3914 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy));
3975 ASSERT_TRUE(data != nullptr); 3915 ASSERT_TRUE(data != nullptr);
3976 3916
3977 test::CompareCharArraysWithHexError("constructed packet", 3917 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3978 data->data(), data->length(), 3918 data->length(), AsChars(packet),
3979 AsChars(packet), arraysize(packet)); 3919 arraysize(packet));
3980 } 3920 }
3981 3921
3982 TEST_P(QuicFramerTest, EncryptPacket) { 3922 TEST_P(QuicFramerTest, EncryptPacket) {
3983 QuicPacketNumber packet_number = kPacketNumber; 3923 QuicPacketNumber packet_number = kPacketNumber;
3984 // clang-format off 3924 // clang-format off
3985 unsigned char packet[] = { 3925 unsigned char packet[] = {
3986 // public flags (8 byte connection_id) 3926 // public flags (8 byte connection_id)
3987 0x3C, 3927 0x3C,
3988 // connection_id 3928 // connection_id
3989 0x10, 0x32, 0x54, 0x76, 3929 0x10, 0x32, 0x54, 0x76,
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
4386 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); 4326 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0);
4387 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); 4327 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0);
4388 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); 4328 EXPECT_CALL(visitor, OnPacketComplete()).Times(0);
4389 4329
4390 EXPECT_FALSE(framer_.ProcessPacket(*packet)); 4330 EXPECT_FALSE(framer_.ProcessPacket(*packet));
4391 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 4331 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
4392 } 4332 }
4393 4333
4394 } // namespace test 4334 } // namespace test
4395 } // namespace net 4335 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698