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

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

Issue 16256017: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix for Android DEBUG builds with DEATH_TEST Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
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 <algorithm> 5 #include <algorithm>
6 #include <map> 6 #include <map>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 (include_version ? kQuicVersionSize : 0); 50 (include_version ? kQuicVersionSize : 0);
51 } 51 }
52 52
53 size_t GetSequenceNumberOffset(bool include_version) { 53 size_t GetSequenceNumberOffset(bool include_version) {
54 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); 54 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version);
55 } 55 }
56 56
57 // Index into the private flags offset in the data packet header. 57 // Index into the private flags offset in the data packet header.
58 size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) { 58 size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) {
59 return GetSequenceNumberOffset(guid_length, include_version) + 59 return GetSequenceNumberOffset(guid_length, include_version) +
60 kSequenceNumberSize; 60 PACKET_6BYTE_SEQUENCE_NUMBER;
61 } 61 }
62 62
63 size_t GetPrivateFlagsOffset(bool include_version) { 63 size_t GetPrivateFlagsOffset(bool include_version) {
64 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version); 64 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version);
65 } 65 }
66 66
67 size_t GetPrivateFlagsOffset(bool include_version,
68 QuicSequenceNumberLength sequence_number_length) {
69 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version) +
70 sequence_number_length;
71 }
72
67 // Index into the fec group offset in the header. 73 // Index into the fec group offset in the header.
68 size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) { 74 size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) {
69 return GetPrivateFlagsOffset(guid_length, include_version) + 75 return GetPrivateFlagsOffset(guid_length, include_version) +
70 kPrivateFlagsSize; 76 kPrivateFlagsSize;
71 } 77 }
72 78
73 size_t GetFecGroupOffset(bool include_version) { 79 size_t GetFecGroupOffset(bool include_version) {
74 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version) + 80 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version) +
75 kPrivateFlagsSize; 81 kPrivateFlagsSize;
76 } 82 }
77 83
84 size_t GetFecGroupOffset(bool include_version,
85 QuicSequenceNumberLength sequence_number_length) {
86 return GetPrivateFlagsOffset(include_version, sequence_number_length) +
87 kPrivateFlagsSize;
88 }
89
78 // Index into the nonce proof of the public reset packet. 90 // Index into the nonce proof of the public reset packet.
79 // Public resets always have full guids. 91 // Public resets always have full guids.
80 const size_t kPublicResetPacketNonceProofOffset = 92 const size_t kPublicResetPacketNonceProofOffset =
81 kGuidOffset + PACKET_8BYTE_GUID; 93 kGuidOffset + PACKET_8BYTE_GUID;
82 94
83 // Index into the rejected sequence number of the public reset packet. 95 // Index into the rejected sequence number of the public reset packet.
84 const size_t kPublicResetPacketRejectedSequenceNumberOffset = 96 const size_t kPublicResetPacketRejectedSequenceNumberOffset =
85 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; 97 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize;
86 98
87 class TestEncrypter : public QuicEncrypter { 99 class TestEncrypter : public QuicEncrypter {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 176 }
165 QuicPacketSequenceNumber sequence_number_; 177 QuicPacketSequenceNumber sequence_number_;
166 string associated_data_; 178 string associated_data_;
167 string ciphertext_; 179 string ciphertext_;
168 }; 180 };
169 181
170 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { 182 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
171 public: 183 public:
172 TestQuicVisitor() 184 TestQuicVisitor()
173 : error_count_(0), 185 : error_count_(0),
186 version_mismatch_(0),
174 packet_count_(0), 187 packet_count_(0),
175 frame_count_(0), 188 frame_count_(0),
176 fec_count_(0), 189 fec_count_(0),
177 complete_packets_(0), 190 complete_packets_(0),
178 revived_packets_(0), 191 revived_packets_(0),
179 accept_packet_(true) { 192 accept_packet_(true) {
180 } 193 }
181 194
182 virtual ~TestQuicVisitor() { 195 virtual ~TestQuicVisitor() {
183 STLDeleteElements(&stream_frames_); 196 STLDeleteElements(&stream_frames_);
(...skipping 18 matching lines...) Expand all
202 virtual void OnVersionNegotiationPacket( 215 virtual void OnVersionNegotiationPacket(
203 const QuicVersionNegotiationPacket& packet) OVERRIDE { 216 const QuicVersionNegotiationPacket& packet) OVERRIDE {
204 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet));
205 } 218 }
206 219
207 virtual void OnRevivedPacket() OVERRIDE { 220 virtual void OnRevivedPacket() OVERRIDE {
208 revived_packets_++; 221 revived_packets_++;
209 } 222 }
210 223
211 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { 224 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE {
212 DCHECK(false); 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version;
226 version_mismatch_++;
213 return true; 227 return true;
214 } 228 }
215 229
216 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE {
217 packet_count_++; 231 packet_count_++;
218 header_.reset(new QuicPacketHeader(header)); 232 header_.reset(new QuicPacketHeader(header));
219 return accept_packet_; 233 return accept_packet_;
220 } 234 }
221 235
222 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { 236 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 return true; 277 return true;
264 } 278 }
265 279
266 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE { 280 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE {
267 goaway_frame_ = frame; 281 goaway_frame_ = frame;
268 return true; 282 return true;
269 } 283 }
270 284
271 // Counters from the visitor_ callbacks. 285 // Counters from the visitor_ callbacks.
272 int error_count_; 286 int error_count_;
287 int version_mismatch_;
273 int packet_count_; 288 int packet_count_;
274 int frame_count_; 289 int frame_count_;
275 int fec_count_; 290 int fec_count_;
276 int complete_packets_; 291 int complete_packets_;
277 int revived_packets_; 292 int revived_packets_;
278 bool accept_packet_; 293 bool accept_packet_;
279 294
280 scoped_ptr<QuicPacketHeader> header_; 295 scoped_ptr<QuicPacketHeader> header_;
281 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; 296 scoped_ptr<QuicPublicResetPacket> public_reset_packet_;
282 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; 297 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 bool CheckDecryption(const QuicEncryptedPacket& encrypted, 344 bool CheckDecryption(const QuicEncryptedPacket& encrypted,
330 bool includes_version) { 345 bool includes_version) {
331 if (visitor_.header_->packet_sequence_number != 346 if (visitor_.header_->packet_sequence_number !=
332 decrypter_->sequence_number_) { 347 decrypter_->sequence_number_) {
333 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected " 348 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected "
334 << visitor_.header_->packet_sequence_number << " actual: " 349 << visitor_.header_->packet_sequence_number << " actual: "
335 << decrypter_->sequence_number_; 350 << decrypter_->sequence_number_;
336 return false; 351 return false;
337 } 352 }
338 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( 353 if (QuicFramer::GetAssociatedDataFromEncryptedPacket(
339 encrypted, PACKET_8BYTE_GUID, includes_version) != 354 encrypted, PACKET_8BYTE_GUID,
340 decrypter_->associated_data_) { 355 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) !=
356 decrypter_->associated_data_) {
341 LOG(ERROR) << "Decrypted incorrect associated data. expected " 357 LOG(ERROR) << "Decrypted incorrect associated data. expected "
342 << QuicFramer::GetAssociatedDataFromEncryptedPacket( 358 << QuicFramer::GetAssociatedDataFromEncryptedPacket(
343 encrypted, PACKET_8BYTE_GUID, includes_version) 359 encrypted, PACKET_8BYTE_GUID,
360 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER)
344 << " actual: " << decrypter_->associated_data_; 361 << " actual: " << decrypter_->associated_data_;
345 return false; 362 return false;
346 } 363 }
347 StringPiece ciphertext(encrypted.AsStringPiece().substr( 364 StringPiece ciphertext(encrypted.AsStringPiece().substr(
348 GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version))); 365 GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version,
366 PACKET_6BYTE_SEQUENCE_NUMBER)));
349 if (ciphertext != decrypter_->ciphertext_) { 367 if (ciphertext != decrypter_->ciphertext_) {
350 LOG(ERROR) << "Decrypted incorrect chipertext data. expected " 368 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected "
351 << ciphertext << " actual: " 369 << ciphertext << " actual: "
352 << decrypter_->ciphertext_; 370 << decrypter_->ciphertext_;
353 return false; 371 return false;
354 } 372 }
355 return true; 373 return true;
356 } 374 }
357 375
358 char* AsChars(unsigned char* data) { 376 char* AsChars(unsigned char* data) {
359 return reinterpret_cast<char*>(data); 377 return reinterpret_cast<char*>(data);
360 } 378 }
(...skipping 16 matching lines...) Expand all
377 } 395 }
378 396
379 void CheckCalculatePacketSequenceNumber( 397 void CheckCalculatePacketSequenceNumber(
380 QuicPacketSequenceNumber expected_sequence_number, 398 QuicPacketSequenceNumber expected_sequence_number,
381 QuicPacketSequenceNumber last_sequence_number) { 399 QuicPacketSequenceNumber last_sequence_number) {
382 QuicPacketSequenceNumber wire_sequence_number = 400 QuicPacketSequenceNumber wire_sequence_number =
383 expected_sequence_number & kMask; 401 expected_sequence_number & kMask;
384 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number); 402 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number);
385 EXPECT_EQ(expected_sequence_number, 403 EXPECT_EQ(expected_sequence_number,
386 QuicFramerPeer::CalculatePacketSequenceNumberFromWire( 404 QuicFramerPeer::CalculatePacketSequenceNumberFromWire(
387 &framer_, wire_sequence_number)) 405 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number))
388 << "last_sequence_number: " << last_sequence_number 406 << "last_sequence_number: " << last_sequence_number
389 << "wire_sequence_number: " << wire_sequence_number; 407 << " wire_sequence_number: " << wire_sequence_number;
390 } 408 }
391 409
392 test::TestEncrypter* encrypter_; 410 test::TestEncrypter* encrypter_;
393 test::TestDecrypter* decrypter_; 411 test::TestDecrypter* decrypter_;
394 QuicTime start_; 412 QuicTime start_;
395 QuicFramer framer_; 413 QuicFramer framer_;
396 test::TestQuicVisitor visitor_; 414 test::TestQuicVisitor visitor_;
397 test::TestEntropyCalculator entropy_calculator_; 415 test::TestEntropyCalculator entropy_calculator_;
398 }; 416 };
399 417
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 492 }
475 } 493 }
476 } 494 }
477 495
478 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { 496 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) {
479 const uint64 max_number = numeric_limits<uint64>::max(); 497 const uint64 max_number = numeric_limits<uint64>::max();
480 const uint64 max_epoch = max_number & ~kMask; 498 const uint64 max_epoch = max_number & ~kMask;
481 499
482 // Cases where the last number was close to the end of the range 500 // Cases where the last number was close to the end of the range
483 for (uint64 i = 0; i < 10; i++) { 501 for (uint64 i = 0; i < 10; i++) {
484 QuicPacketSequenceNumber last = max_number - i; 502 // Subtract 1, because the expected next sequence number is 1 more than the
503 // last sequence number.
504 QuicPacketSequenceNumber last = max_number - i - 1;
485 505
486 // Small numbers should not wrap (because they have nowhere to go. 506 // Small numbers should not wrap, because they have nowhere to go.
487 for (uint64 j = 0; j < 10; j++) { 507 for (uint64 j = 0; j < 10; j++) {
488 CheckCalculatePacketSequenceNumber(max_epoch + j, last); 508 CheckCalculatePacketSequenceNumber(max_epoch + j, last);
489 } 509 }
490 510
491 // Large numbers should not wrap either. 511 // Large numbers should not wrap either.
492 for (uint64 j = 0; j < 10; j++) { 512 for (uint64 j = 0; j < 10; j++) {
493 uint64 num = kEpoch - 1 - j; 513 uint64 num = kEpoch - 1 - j;
494 CheckCalculatePacketSequenceNumber(max_epoch + num, last); 514 CheckCalculatePacketSequenceNumber(max_epoch + num, last);
495 } 515 }
496 } 516 }
497 } 517 }
498 518
499 TEST_F(QuicFramerTest, EmptyPacket) { 519 TEST_F(QuicFramerTest, EmptyPacket) {
500 char packet[] = { 0x00 }; 520 char packet[] = { 0x00 };
501 QuicEncryptedPacket encrypted(packet, 0, false); 521 QuicEncryptedPacket encrypted(packet, 0, false);
502 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 522 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
503 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 523 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
504 } 524 }
505 525
506 TEST_F(QuicFramerTest, LargePacket) { 526 TEST_F(QuicFramerTest, LargePacket) {
507 unsigned char packet[kMaxPacketSize + 1] = { 527 unsigned char packet[kMaxPacketSize + 1] = {
508 // public flags (8 byte guid) 528 // public flags (8 byte guid)
509 0x0C, 529 0x3C,
510 // guid 530 // guid
511 0x10, 0x32, 0x54, 0x76, 531 0x10, 0x32, 0x54, 0x76,
512 0x98, 0xBA, 0xDC, 0xFE, 532 0x98, 0xBA, 0xDC, 0xFE,
513 // packet sequence number 533 // packet sequence number
514 0xBC, 0x9A, 0x78, 0x56, 534 0xBC, 0x9A, 0x78, 0x56,
515 0x34, 0x12, 535 0x34, 0x12,
516 // private flags 536 // private flags
517 0x00, 537 0x00,
518 }; 538 };
519 539
520 memset(packet + GetPacketHeaderSize( 540 memset(packet + GetPacketHeaderSize(
521 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 0, 541 PACKET_8BYTE_GUID, !kIncludeVersion,
542 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0,
522 kMaxPacketSize - GetPacketHeaderSize( 543 kMaxPacketSize - GetPacketHeaderSize(
523 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP) + 1); 544 PACKET_8BYTE_GUID, !kIncludeVersion,
545 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1);
524 546
525 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 547 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
526 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 548 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
527 549
528 ASSERT_TRUE(visitor_.header_.get()); 550 ASSERT_TRUE(visitor_.header_.get());
529 // Make sure we've parsed the packet header, so we can send an error. 551 // Make sure we've parsed the packet header, so we can send an error.
530 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 552 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
531 visitor_.header_->public_header.guid); 553 visitor_.header_->public_header.guid);
532 // Make sure the correct error is propagated. 554 // Make sure the correct error is propagated.
533 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); 555 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error());
534 } 556 }
535 557
536 TEST_F(QuicFramerTest, PacketHeader) { 558 TEST_F(QuicFramerTest, PacketHeader) {
537 unsigned char packet[] = { 559 unsigned char packet[] = {
538 // public flags (8 byte guid) 560 // public flags (8 byte guid)
539 0x0C, 561 0x3C,
540 // guid 562 // guid
541 0x10, 0x32, 0x54, 0x76, 563 0x10, 0x32, 0x54, 0x76,
542 0x98, 0xBA, 0xDC, 0xFE, 564 0x98, 0xBA, 0xDC, 0xFE,
543 // packet sequence number 565 // packet sequence number
544 0xBC, 0x9A, 0x78, 0x56, 566 0xBC, 0x9A, 0x78, 0x56,
545 0x34, 0x12, 567 0x34, 0x12,
546 // private flags 568 // private flags
547 0x00, 569 0x00,
548 }; 570 };
549 571
550 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 572 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
551 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 573 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
552 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 574 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
553 ASSERT_TRUE(visitor_.header_.get()); 575 ASSERT_TRUE(visitor_.header_.get());
554 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 576 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
555 visitor_.header_->public_header.guid); 577 visitor_.header_->public_header.guid);
556 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 578 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
557 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 579 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
558 EXPECT_FALSE(visitor_.header_->fec_flag); 580 EXPECT_FALSE(visitor_.header_->fec_flag);
559 EXPECT_FALSE(visitor_.header_->entropy_flag); 581 EXPECT_FALSE(visitor_.header_->entropy_flag);
560 EXPECT_EQ(0, visitor_.header_->entropy_hash); 582 EXPECT_EQ(0, visitor_.header_->entropy_hash);
561 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 583 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
562 visitor_.header_->packet_sequence_number); 584 visitor_.header_->packet_sequence_number);
563 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 585 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
564 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 586 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
565 587
566 // Now test framing boundaries 588 // Now test framing boundaries
567 for (size_t i = 0; 589 for (size_t i = 0;
568 i < GetPacketHeaderSize( 590 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
569 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { 591 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
592 ++i) {
570 string expected_error; 593 string expected_error;
571 if (i < kGuidOffset) { 594 if (i < kGuidOffset) {
572 expected_error = "Unable to read public flags."; 595 expected_error = "Unable to read public flags.";
573 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { 596 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
574 expected_error = "Unable to read GUID."; 597 expected_error = "Unable to read GUID.";
575 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { 598 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) {
576 expected_error = "Unable to read sequence number."; 599 expected_error = "Unable to read sequence number.";
577 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { 600 } else if (i < GetFecGroupOffset(!kIncludeVersion)) {
578 expected_error = "Unable to read private flags."; 601 expected_error = "Unable to read private flags.";
579 } else { 602 } else {
580 expected_error = "Unable to read first fec protected packet offset."; 603 expected_error = "Unable to read first fec protected packet offset.";
581 } 604 }
582 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 605 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
583 } 606 }
584 } 607 }
585 608
586 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { 609 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) {
587 QuicFramerPeer::SetLastSerializedGuid(&framer_, 610 QuicFramerPeer::SetLastSerializedGuid(&framer_,
588 GG_UINT64_C(0xFEDCBA9876543210)); 611 GG_UINT64_C(0xFEDCBA9876543210));
589 612
590 unsigned char packet[] = { 613 unsigned char packet[] = {
591 // public flags (4 byte guid) 614 // public flags (4 byte guid)
592 0x08, 615 0x38,
593 // guid 616 // guid
594 0x10, 0x32, 0x54, 0x76, 617 0x10, 0x32, 0x54, 0x76,
595 // packet sequence number 618 // packet sequence number
596 0xBC, 0x9A, 0x78, 0x56, 619 0xBC, 0x9A, 0x78, 0x56,
597 0x34, 0x12, 620 0x34, 0x12,
598 // private flags 621 // private flags
599 0x00, 622 0x00,
600 }; 623 };
601 624
602 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 625 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
603 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 626 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
604 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 627 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
605 ASSERT_TRUE(visitor_.header_.get()); 628 ASSERT_TRUE(visitor_.header_.get());
606 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 629 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
607 visitor_.header_->public_header.guid); 630 visitor_.header_->public_header.guid);
608 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 631 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
609 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 632 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
610 EXPECT_FALSE(visitor_.header_->fec_flag); 633 EXPECT_FALSE(visitor_.header_->fec_flag);
611 EXPECT_FALSE(visitor_.header_->entropy_flag); 634 EXPECT_FALSE(visitor_.header_->entropy_flag);
612 EXPECT_EQ(0, visitor_.header_->entropy_hash); 635 EXPECT_EQ(0, visitor_.header_->entropy_hash);
613 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 636 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
614 visitor_.header_->packet_sequence_number); 637 visitor_.header_->packet_sequence_number);
615 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 638 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
616 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 639 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
617 640
618 // Now test framing boundaries 641 // Now test framing boundaries
619 for (size_t i = 0; 642 for (size_t i = 0;
620 i < GetPacketHeaderSize( 643 i < GetPacketHeaderSize(PACKET_4BYTE_GUID, !kIncludeVersion,
621 PACKET_4BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { 644 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
645 ++i) {
622 string expected_error; 646 string expected_error;
623 if (i < kGuidOffset) { 647 if (i < kGuidOffset) {
624 expected_error = "Unable to read public flags."; 648 expected_error = "Unable to read public flags.";
625 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_GUID, 649 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_GUID,
626 !kIncludeVersion)) { 650 !kIncludeVersion)) {
627 expected_error = "Unable to read GUID."; 651 expected_error = "Unable to read GUID.";
628 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_GUID, 652 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_GUID,
629 !kIncludeVersion)) { 653 !kIncludeVersion)) {
630 expected_error = "Unable to read sequence number."; 654 expected_error = "Unable to read sequence number.";
631 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { 655 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) {
632 expected_error = "Unable to read private flags."; 656 expected_error = "Unable to read private flags.";
633 } else { 657 } else {
634 expected_error = "Unable to read first fec protected packet offset."; 658 expected_error = "Unable to read first fec protected packet offset.";
635 } 659 }
636 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 660 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
637 } 661 }
638 } 662 }
639 663
640 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { 664 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) {
641 QuicFramerPeer::SetLastSerializedGuid(&framer_, 665 QuicFramerPeer::SetLastSerializedGuid(&framer_,
642 GG_UINT64_C(0xFEDCBA9876543210)); 666 GG_UINT64_C(0xFEDCBA9876543210));
643 667
644 unsigned char packet[] = { 668 unsigned char packet[] = {
645 // public flags (1 byte guid) 669 // public flags (1 byte guid)
646 0x04, 670 0x34,
647 // guid 671 // guid
648 0x10, 672 0x10,
649 // packet sequence number 673 // packet sequence number
650 0xBC, 0x9A, 0x78, 0x56, 674 0xBC, 0x9A, 0x78, 0x56,
651 0x34, 0x12, 675 0x34, 0x12,
652 // private flags 676 // private flags
653 0x00, 677 0x00,
654 }; 678 };
655 679
656 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 680 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
657 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 681 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
658 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 682 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
659 ASSERT_TRUE(visitor_.header_.get()); 683 ASSERT_TRUE(visitor_.header_.get());
660 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 684 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
661 visitor_.header_->public_header.guid); 685 visitor_.header_->public_header.guid);
662 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 686 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
663 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 687 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
664 EXPECT_FALSE(visitor_.header_->fec_flag); 688 EXPECT_FALSE(visitor_.header_->fec_flag);
665 EXPECT_FALSE(visitor_.header_->entropy_flag); 689 EXPECT_FALSE(visitor_.header_->entropy_flag);
666 EXPECT_EQ(0, visitor_.header_->entropy_hash); 690 EXPECT_EQ(0, visitor_.header_->entropy_hash);
667 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 691 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
668 visitor_.header_->packet_sequence_number); 692 visitor_.header_->packet_sequence_number);
669 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 693 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
670 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 694 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
671 695
672 // Now test framing boundaries 696 // Now test framing boundaries
673 for (size_t i = 0; 697 for (size_t i = 0;
674 i < GetPacketHeaderSize( 698 i < GetPacketHeaderSize(PACKET_1BYTE_GUID, !kIncludeVersion,
675 PACKET_1BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { 699 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
700 ++i) {
676 string expected_error; 701 string expected_error;
677 if (i < kGuidOffset) { 702 if (i < kGuidOffset) {
678 expected_error = "Unable to read public flags."; 703 expected_error = "Unable to read public flags.";
679 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_GUID, 704 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_GUID,
680 !kIncludeVersion)) { 705 !kIncludeVersion)) {
681 expected_error = "Unable to read GUID."; 706 expected_error = "Unable to read GUID.";
682 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { 707 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) {
683 expected_error = "Unable to read sequence number."; 708 expected_error = "Unable to read sequence number.";
684 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { 709 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) {
685 expected_error = "Unable to read private flags."; 710 expected_error = "Unable to read private flags.";
686 } else { 711 } else {
687 expected_error = "Unable to read first fec protected packet offset."; 712 expected_error = "Unable to read first fec protected packet offset.";
688 } 713 }
689 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
690 } 715 }
691 } 716 }
692 717
693 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { 718 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) {
694 QuicFramerPeer::SetLastSerializedGuid(&framer_, 719 QuicFramerPeer::SetLastSerializedGuid(&framer_,
695 GG_UINT64_C(0xFEDCBA9876543210)); 720 GG_UINT64_C(0xFEDCBA9876543210));
696 721
697 unsigned char packet[] = { 722 unsigned char packet[] = {
698 // public flags (0 byte guid) 723 // public flags (0 byte guid)
699 0x00, 724 0x30,
700 // guid 725 // guid
701 // packet sequence number 726 // packet sequence number
702 0xBC, 0x9A, 0x78, 0x56, 727 0xBC, 0x9A, 0x78, 0x56,
703 0x34, 0x12, 728 0x34, 0x12,
704 // private flags 729 // private flags
705 0x00, 730 0x00,
706 }; 731 };
707 732
708 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 733 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
709 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 734 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
710 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 735 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
711 ASSERT_TRUE(visitor_.header_.get()); 736 ASSERT_TRUE(visitor_.header_.get());
712 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 737 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
713 visitor_.header_->public_header.guid); 738 visitor_.header_->public_header.guid);
714 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 739 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
715 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 740 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
716 EXPECT_FALSE(visitor_.header_->fec_flag); 741 EXPECT_FALSE(visitor_.header_->fec_flag);
717 EXPECT_FALSE(visitor_.header_->entropy_flag); 742 EXPECT_FALSE(visitor_.header_->entropy_flag);
718 EXPECT_EQ(0, visitor_.header_->entropy_hash); 743 EXPECT_EQ(0, visitor_.header_->entropy_hash);
719 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 744 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
720 visitor_.header_->packet_sequence_number); 745 visitor_.header_->packet_sequence_number);
721 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 746 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
722 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 747 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
723 748
724 // Now test framing boundaries 749 // Now test framing boundaries
725 for (size_t i = 0; 750 for (size_t i = 0;
726 i < GetPacketHeaderSize( 751 i < GetPacketHeaderSize(PACKET_0BYTE_GUID, !kIncludeVersion,
727 PACKET_0BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { 752 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
753 ++i) {
728 string expected_error; 754 string expected_error;
729 if (i < kGuidOffset) { 755 if (i < kGuidOffset) {
730 expected_error = "Unable to read public flags."; 756 expected_error = "Unable to read public flags.";
731 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_GUID, 757 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_GUID,
732 !kIncludeVersion)) { 758 !kIncludeVersion)) {
733 expected_error = "Unable to read GUID."; 759 expected_error = "Unable to read GUID.";
734 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { 760 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) {
735 expected_error = "Unable to read sequence number."; 761 expected_error = "Unable to read sequence number.";
736 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { 762 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) {
737 expected_error = "Unable to read private flags."; 763 expected_error = "Unable to read private flags.";
738 } else { 764 } else {
739 expected_error = "Unable to read first fec protected packet offset."; 765 expected_error = "Unable to read first fec protected packet offset.";
740 } 766 }
741 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 767 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
742 } 768 }
743 } 769 }
744 770
745 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { 771 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) {
746 unsigned char packet[] = { 772 unsigned char packet[] = {
747 // public flags (version) 773 // public flags (version)
748 0x0D, 774 0x3D,
749 // guid 775 // guid
750 0x10, 0x32, 0x54, 0x76, 776 0x10, 0x32, 0x54, 0x76,
751 0x98, 0xBA, 0xDC, 0xFE, 777 0x98, 0xBA, 0xDC, 0xFE,
752 // version tag 778 // version tag
753 'Q', '0', '0', '5', 779 'Q', '0', '0', '6',
754 // packet sequence number 780 // packet sequence number
755 0xBC, 0x9A, 0x78, 0x56, 781 0xBC, 0x9A, 0x78, 0x56,
756 0x34, 0x12, 782 0x34, 0x12,
757 // private flags 783 // private flags
758 0x00, 784 0x00,
759 }; 785 };
760 786
761 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 787 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
762 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 788 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
763 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 789 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
764 ASSERT_TRUE(visitor_.header_.get()); 790 ASSERT_TRUE(visitor_.header_.get());
765 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 791 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
766 visitor_.header_->public_header.guid); 792 visitor_.header_->public_header.guid);
767 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 793 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
768 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 794 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
769 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); 795 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]);
770 EXPECT_FALSE(visitor_.header_->fec_flag); 796 EXPECT_FALSE(visitor_.header_->fec_flag);
771 EXPECT_FALSE(visitor_.header_->entropy_flag); 797 EXPECT_FALSE(visitor_.header_->entropy_flag);
772 EXPECT_EQ(0, visitor_.header_->entropy_hash); 798 EXPECT_EQ(0, visitor_.header_->entropy_hash);
773 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 799 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
774 visitor_.header_->packet_sequence_number); 800 visitor_.header_->packet_sequence_number);
775 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 801 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
776 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 802 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
777 803
778 // Now test framing boundaries 804 // Now test framing boundaries
779 for (size_t i = 0; 805 for (size_t i = 0;
780 i < GetPacketHeaderSize( 806 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
781 PACKET_8BYTE_GUID, kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { 807 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
808 ++i) {
782 string expected_error; 809 string expected_error;
783 if (i < kGuidOffset) { 810 if (i < kGuidOffset) {
784 expected_error = "Unable to read public flags."; 811 expected_error = "Unable to read public flags.";
785 } else if (i < kVersionOffset) { 812 } else if (i < kVersionOffset) {
786 expected_error = "Unable to read GUID."; 813 expected_error = "Unable to read GUID.";
787 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { 814 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) {
788 expected_error = "Unable to read protocol version."; 815 expected_error = "Unable to read protocol version.";
789 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { 816 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) {
790 expected_error = "Unable to read sequence number."; 817 expected_error = "Unable to read sequence number.";
791 } else if (i < GetFecGroupOffset(kIncludeVersion)) { 818 } else if (i < GetFecGroupOffset(kIncludeVersion)) {
792 expected_error = "Unable to read private flags."; 819 expected_error = "Unable to read private flags.";
793 } else { 820 } else {
794 expected_error = "Unable to read first fec protected packet offset."; 821 expected_error = "Unable to read first fec protected packet offset.";
795 } 822 }
796 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 823 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
797 } 824 }
798 } 825 }
799 826
827 TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) {
828 QuicFramerPeer::SetLastSequenceNumber(&framer_,
829 GG_UINT64_C(0x123456789ABA));
830
831 unsigned char packet[] = {
832 // public flags (8 byte guid and 4 byte sequence number)
833 0x2C,
834 // guid
835 0x10, 0x32, 0x54, 0x76,
836 0x98, 0xBA, 0xDC, 0xFE,
837 // packet sequence number
838 0xBC, 0x9A, 0x78, 0x56,
839 // private flags
840 0x00,
841 };
842
843 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
844 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
845 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
846 ASSERT_TRUE(visitor_.header_.get());
847 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
848 visitor_.header_->public_header.guid);
849 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
850 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
851 EXPECT_FALSE(visitor_.header_->fec_flag);
852 EXPECT_FALSE(visitor_.header_->entropy_flag);
853 EXPECT_EQ(0, visitor_.header_->entropy_hash);
854 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
855 visitor_.header_->packet_sequence_number);
856 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
857 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
858
859 // Now test framing boundaries
860 for (size_t i = 0;
861 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
862 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
863 ++i) {
864 string expected_error;
865 if (i < kGuidOffset) {
866 expected_error = "Unable to read public flags.";
867 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
868 expected_error = "Unable to read GUID.";
869 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
870 PACKET_4BYTE_SEQUENCE_NUMBER)) {
871 expected_error = "Unable to read sequence number.";
872 } else if (i < GetFecGroupOffset(!kIncludeVersion,
873 PACKET_4BYTE_SEQUENCE_NUMBER)) {
874 expected_error = "Unable to read private flags.";
875 } else {
876 expected_error = "Unable to read first fec protected packet offset.";
877 }
878 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
879 }
880 }
881
882 TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) {
883 QuicFramerPeer::SetLastSequenceNumber(&framer_,
884 GG_UINT64_C(0x123456789ABA));
885
886 unsigned char packet[] = {
887 // public flags (8 byte guid and 2 byte sequence number)
888 0x1C,
889 // guid
890 0x10, 0x32, 0x54, 0x76,
891 0x98, 0xBA, 0xDC, 0xFE,
892 // packet sequence number
893 0xBC, 0x9A,
894 // private flags
895 0x00,
896 };
897
898 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
899 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
900 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
901 ASSERT_TRUE(visitor_.header_.get());
902 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
903 visitor_.header_->public_header.guid);
904 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
905 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
906 EXPECT_FALSE(visitor_.header_->fec_flag);
907 EXPECT_FALSE(visitor_.header_->entropy_flag);
908 EXPECT_EQ(0, visitor_.header_->entropy_hash);
909 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
910 visitor_.header_->packet_sequence_number);
911 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
912 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
913
914 // Now test framing boundaries
915 for (size_t i = 0;
916 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
917 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
918 ++i) {
919 string expected_error;
920 if (i < kGuidOffset) {
921 expected_error = "Unable to read public flags.";
922 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
923 expected_error = "Unable to read GUID.";
924 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
925 PACKET_2BYTE_SEQUENCE_NUMBER)) {
926 expected_error = "Unable to read sequence number.";
927 } else if (i < GetFecGroupOffset(!kIncludeVersion,
928 PACKET_2BYTE_SEQUENCE_NUMBER)) {
929 expected_error = "Unable to read private flags.";
930 } else {
931 expected_error = "Unable to read first fec protected packet offset.";
932 }
933 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
934 }
935 }
936
937 TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) {
938 QuicFramerPeer::SetLastSequenceNumber(&framer_,
939 GG_UINT64_C(0x123456789ABA));
940
941 unsigned char packet[] = {
942 // public flags (8 byte guid and 1 byte sequence number)
943 0x0C,
944 // guid
945 0x10, 0x32, 0x54, 0x76,
946 0x98, 0xBA, 0xDC, 0xFE,
947 // packet sequence number
948 0xBC,
949 // private flags
950 0x00,
951 };
952
953 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
954 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
955 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
956 ASSERT_TRUE(visitor_.header_.get());
957 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
958 visitor_.header_->public_header.guid);
959 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
960 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
961 EXPECT_FALSE(visitor_.header_->fec_flag);
962 EXPECT_FALSE(visitor_.header_->entropy_flag);
963 EXPECT_EQ(0, visitor_.header_->entropy_hash);
964 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
965 visitor_.header_->packet_sequence_number);
966 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
967 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
968
969 // Now test framing boundaries
970 for (size_t i = 0;
971 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
972 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
973 ++i) {
974 string expected_error;
975 if (i < kGuidOffset) {
976 expected_error = "Unable to read public flags.";
977 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
978 expected_error = "Unable to read GUID.";
979 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
980 PACKET_1BYTE_SEQUENCE_NUMBER)) {
981 expected_error = "Unable to read sequence number.";
982 } else if (i < GetFecGroupOffset(!kIncludeVersion,
983 PACKET_1BYTE_SEQUENCE_NUMBER)) {
984 expected_error = "Unable to read private flags.";
985 } else {
986 expected_error = "Unable to read first fec protected packet offset.";
987 }
988 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
989 }
990 }
800 991
801 TEST_F(QuicFramerTest, InvalidPublicFlag) { 992 TEST_F(QuicFramerTest, InvalidPublicFlag) {
802 unsigned char packet[] = { 993 unsigned char packet[] = {
803 // public flags (8 byte guid) 994 // public flags
804 0x10, 995 0x40,
805 // guid 996 // guid
806 0x10, 0x32, 0x54, 0x76, 997 0x10, 0x32, 0x54, 0x76,
807 0x98, 0xBA, 0xDC, 0xFE, 998 0x98, 0xBA, 0xDC, 0xFE,
808 // packet sequence number 999 // packet sequence number
809 0xBC, 0x9A, 0x78, 0x56, 1000 0xBC, 0x9A, 0x78, 0x56,
810 0x34, 0x12, 1001 0x34, 0x12,
1002 // private flags
1003 0x00,
1004
1005 // frame count
1006 0x01,
1007 // frame type (stream frame)
1008 0x01,
1009 // stream id
1010 0x04, 0x03, 0x02, 0x01,
1011 // fin
1012 0x01,
1013 // offset
1014 0x54, 0x76, 0x10, 0x32,
1015 0xDC, 0xFE, 0x98, 0xBA,
1016 // data length
1017 0x0c, 0x00,
1018 // data
1019 'h', 'e', 'l', 'l',
1020 'o', ' ', 'w', 'o',
1021 'r', 'l', 'd', '!',
1022 };
1023 CheckProcessingFails(packet,
1024 arraysize(packet),
1025 "Illegal public flags value.",
1026 QUIC_INVALID_PACKET_HEADER);
1027 };
1028
1029 TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) {
1030 unsigned char packet[] = {
1031 // public flags (8 byte guid and version flag and an unknown flag)
1032 0x4D,
1033 // guid
1034 0x10, 0x32, 0x54, 0x76,
1035 0x98, 0xBA, 0xDC, 0xFE,
1036 // version tag
1037 'Q', '0', '0', '6',
1038 // packet sequence number
1039 0xBC, 0x9A, 0x78, 0x56,
1040 0x34, 0x12,
811 // private flags 1041 // private flags
812 0x00, 1042 0x00,
813 1043
814 // frame count 1044 // frame count
815 0x01, 1045 0x01,
816 // frame type (stream frame) 1046 // frame type (stream frame)
817 0x01, 1047 0x01,
818 // stream id 1048 // stream id
819 0x04, 0x03, 0x02, 0x01, 1049 0x04, 0x03, 0x02, 0x01,
820 // fin 1050 // fin
821 0x01, 1051 0x01,
822 // offset 1052 // offset
823 0x54, 0x76, 0x10, 0x32, 1053 0x54, 0x76, 0x10, 0x32,
824 0xDC, 0xFE, 0x98, 0xBA, 1054 0xDC, 0xFE, 0x98, 0xBA,
825 // data length 1055 // data length
826 0x0c, 0x00, 1056 0x0c, 0x00,
827 // data 1057 // data
828 'h', 'e', 'l', 'l', 1058 'h', 'e', 'l', 'l',
829 'o', ' ', 'w', 'o', 1059 'o', ' ', 'w', 'o',
830 'r', 'l', 'd', '!', 1060 'r', 'l', 'd', '!',
831 }; 1061 };
832 CheckProcessingFails(packet, 1062 CheckProcessingFails(packet,
833 arraysize(packet), 1063 arraysize(packet),
834 "Illegal public flags value.", 1064 "Illegal public flags value.",
835 QUIC_INVALID_PACKET_HEADER); 1065 QUIC_INVALID_PACKET_HEADER);
836 }; 1066 };
837 1067
1068 TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
1069 unsigned char packet[] = {
1070 // public flags (8 byte guid, version flag and an unknown flag)
1071 0x7D,
1072 // guid
1073 0x10, 0x32, 0x54, 0x76,
1074 0x98, 0xBA, 0xDC, 0xFE,
1075 // version tag
1076 'Q', '0', '0', '0',
1077 // packet sequence number
1078 0xBC, 0x9A, 0x78, 0x56,
1079 0x34, 0x12,
1080 // private flags
1081 0x00,
1082
1083 // frame type (padding frame)
1084 0x00,
1085 };
1086 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1087 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1088 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1089 ASSERT_TRUE(visitor_.header_.get());
1090 EXPECT_EQ(0, visitor_.frame_count_);
1091 EXPECT_EQ(1, visitor_.version_mismatch_);
1092 };
1093
838 TEST_F(QuicFramerTest, InvalidPrivateFlag) { 1094 TEST_F(QuicFramerTest, InvalidPrivateFlag) {
839 unsigned char packet[] = { 1095 unsigned char packet[] = {
840 // public flags (8 byte guid) 1096 // public flags (8 byte guid)
841 0x0C, 1097 0x3C,
842 // guid 1098 // guid
843 0x10, 0x32, 0x54, 0x76, 1099 0x10, 0x32, 0x54, 0x76,
844 0x98, 0xBA, 0xDC, 0xFE, 1100 0x98, 0xBA, 0xDC, 0xFE,
845 // packet sequence number 1101 // packet sequence number
846 0xBC, 0x9A, 0x78, 0x56, 1102 0xBC, 0x9A, 0x78, 0x56,
847 0x34, 0x12, 1103 0x34, 0x12,
848 // private flags 1104 // private flags
849 0x10, 1105 0x10,
850 1106
851 // frame count 1107 // frame count
(...skipping 16 matching lines...) Expand all
868 }; 1124 };
869 CheckProcessingFails(packet, 1125 CheckProcessingFails(packet,
870 arraysize(packet), 1126 arraysize(packet),
871 "Illegal private flags value.", 1127 "Illegal private flags value.",
872 QUIC_INVALID_PACKET_HEADER); 1128 QUIC_INVALID_PACKET_HEADER);
873 }; 1129 };
874 1130
875 TEST_F(QuicFramerTest, PaddingFrame) { 1131 TEST_F(QuicFramerTest, PaddingFrame) {
876 unsigned char packet[] = { 1132 unsigned char packet[] = {
877 // public flags (8 byte guid) 1133 // public flags (8 byte guid)
878 0x0C, 1134 0x3C,
879 // guid 1135 // guid
880 0x10, 0x32, 0x54, 0x76, 1136 0x10, 0x32, 0x54, 0x76,
881 0x98, 0xBA, 0xDC, 0xFE, 1137 0x98, 0xBA, 0xDC, 0xFE,
882 // packet sequence number 1138 // packet sequence number
883 0xBC, 0x9A, 0x78, 0x56, 1139 0xBC, 0x9A, 0x78, 0x56,
884 0x34, 0x12, 1140 0x34, 0x12,
885 // private flags 1141 // private flags
886 0x00, 1142 0x00,
887 1143
888 // frame type (padding frame) 1144 // frame type (padding frame)
(...skipping 14 matching lines...) Expand all
903 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1159 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
904 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1160 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
905 ASSERT_TRUE(visitor_.header_.get()); 1161 ASSERT_TRUE(visitor_.header_.get());
906 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1162 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
907 1163
908 ASSERT_EQ(0u, visitor_.stream_frames_.size()); 1164 ASSERT_EQ(0u, visitor_.stream_frames_.size());
909 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1165 EXPECT_EQ(0u, visitor_.ack_frames_.size());
910 // A packet with no frames is not acceptable. 1166 // A packet with no frames is not acceptable.
911 CheckProcessingFails( 1167 CheckProcessingFails(
912 packet, 1168 packet,
913 GetPacketHeaderSize( 1169 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
914 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1170 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
915 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); 1171 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA);
916 } 1172 }
917 1173
918 TEST_F(QuicFramerTest, StreamFrame) { 1174 TEST_F(QuicFramerTest, StreamFrame) {
919 unsigned char packet[] = { 1175 unsigned char packet[] = {
920 // public flags (8 byte guid) 1176 // public flags (8 byte guid)
921 0x0C, 1177 0x3C,
922 // guid 1178 // guid
923 0x10, 0x32, 0x54, 0x76, 1179 0x10, 0x32, 0x54, 0x76,
924 0x98, 0xBA, 0xDC, 0xFE, 1180 0x98, 0xBA, 0xDC, 0xFE,
925 // packet sequence number 1181 // packet sequence number
926 0xBC, 0x9A, 0x78, 0x56, 1182 0xBC, 0x9A, 0x78, 0x56,
927 0x34, 0x12, 1183 0x34, 0x12,
928 // private flags 1184 // private flags
929 0x00, 1185 0x00,
930 1186
931 // frame type (stream frame) 1187 // frame type (stream frame)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 kQuicStreamFinSize) { 1228 kQuicStreamFinSize) {
973 expected_error = "Unable to read fin."; 1229 expected_error = "Unable to read fin.";
974 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + 1230 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize +
975 kQuicStreamFinSize + kQuicStreamOffsetSize) { 1231 kQuicStreamFinSize + kQuicStreamOffsetSize) {
976 expected_error = "Unable to read offset."; 1232 expected_error = "Unable to read offset.";
977 } else { 1233 } else {
978 expected_error = "Unable to read frame data."; 1234 expected_error = "Unable to read frame data.";
979 } 1235 }
980 CheckProcessingFails( 1236 CheckProcessingFails(
981 packet, 1237 packet,
982 i + GetPacketHeaderSize( 1238 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
983 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1239 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
984 expected_error, QUIC_INVALID_FRAME_DATA); 1240 expected_error, QUIC_INVALID_FRAME_DATA);
985 } 1241 }
986 } 1242 }
987 1243
988 TEST_F(QuicFramerTest, StreamFrameWithVersion) { 1244 TEST_F(QuicFramerTest, StreamFrameWithVersion) {
989 unsigned char packet[] = { 1245 unsigned char packet[] = {
990 // public flags (version, 8 byte guid) 1246 // public flags (version, 8 byte guid)
991 0x0D, 1247 0x3D,
992 // guid 1248 // guid
993 0x10, 0x32, 0x54, 0x76, 1249 0x10, 0x32, 0x54, 0x76,
994 0x98, 0xBA, 0xDC, 0xFE, 1250 0x98, 0xBA, 0xDC, 0xFE,
995 // version tag 1251 // version tag
996 'Q', '0', '0', '5', 1252 'Q', '0', '0', '6',
997 // packet sequence number 1253 // packet sequence number
998 0xBC, 0x9A, 0x78, 0x56, 1254 0xBC, 0x9A, 0x78, 0x56,
999 0x34, 0x12, 1255 0x34, 0x12,
1000 // private flags 1256 // private flags
1001 0x00, 1257 0x00,
1002 1258
1003 // frame type (stream frame) 1259 // frame type (stream frame)
1004 0x01, 1260 0x01,
1005 // stream id 1261 // stream id
1006 0x04, 0x03, 0x02, 0x01, 1262 0x04, 0x03, 0x02, 0x01,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + 1301 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize +
1046 kQuicStreamFinSize) { 1302 kQuicStreamFinSize) {
1047 expected_error = "Unable to read fin."; 1303 expected_error = "Unable to read fin.";
1048 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + 1304 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize +
1049 kQuicStreamFinSize + kQuicStreamOffsetSize) { 1305 kQuicStreamFinSize + kQuicStreamOffsetSize) {
1050 expected_error = "Unable to read offset."; 1306 expected_error = "Unable to read offset.";
1051 } else { 1307 } else {
1052 expected_error = "Unable to read frame data."; 1308 expected_error = "Unable to read frame data.";
1053 } 1309 }
1054 CheckProcessingFails( 1310 CheckProcessingFails(
1055 packet, i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, 1311 packet,
1056 NOT_IN_FEC_GROUP), 1312 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion,
1313 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1057 expected_error, QUIC_INVALID_FRAME_DATA); 1314 expected_error, QUIC_INVALID_FRAME_DATA);
1058 } 1315 }
1059 } 1316 }
1060 1317
1061 TEST_F(QuicFramerTest, RejectPacket) { 1318 TEST_F(QuicFramerTest, RejectPacket) {
1062 visitor_.accept_packet_ = false; 1319 visitor_.accept_packet_ = false;
1063 1320
1064 unsigned char packet[] = { 1321 unsigned char packet[] = {
1065 // public flags (8 byte guid) 1322 // public flags (8 byte guid)
1066 0x0C, 1323 0x3C,
1067 // guid 1324 // guid
1068 0x10, 0x32, 0x54, 0x76, 1325 0x10, 0x32, 0x54, 0x76,
1069 0x98, 0xBA, 0xDC, 0xFE, 1326 0x98, 0xBA, 0xDC, 0xFE,
1070 // packet sequence number 1327 // packet sequence number
1071 0xBC, 0x9A, 0x78, 0x56, 1328 0xBC, 0x9A, 0x78, 0x56,
1072 0x34, 0x12, 1329 0x34, 0x12,
1073 // private flags 1330 // private flags
1074 0x00, 1331 0x00,
1075 1332
1076 // frame type (stream frame) 1333 // frame type (stream frame)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1412 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1156 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1413 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1157 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1414 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1158 visitor_.stream_frames_[0]->offset); 1415 visitor_.stream_frames_[0]->offset);
1159 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 1416 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
1160 } 1417 }
1161 1418
1162 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { 1419 TEST_F(QuicFramerTest, StreamFrameInFecGroup) {
1163 unsigned char packet[] = { 1420 unsigned char packet[] = {
1164 // public flags (8 byte guid) 1421 // public flags (8 byte guid)
1165 0x0C, 1422 0x3C,
1166 // guid 1423 // guid
1167 0x10, 0x32, 0x54, 0x76, 1424 0x10, 0x32, 0x54, 0x76,
1168 0x98, 0xBA, 0xDC, 0xFE, 1425 0x98, 0xBA, 0xDC, 0xFE,
1169 // packet sequence number 1426 // packet sequence number
1170 0xBC, 0x9A, 0x78, 0x56, 1427 0xBC, 0x9A, 0x78, 0x56,
1171 0x12, 0x34, 1428 0x12, 0x34,
1172 // private flags (fec group) 1429 // private flags (fec group)
1173 0x02, 1430 0x02,
1174 // first fec protected packet offset 1431 // first fec protected packet offset
1175 0x02, 1432 0x02,
(...skipping 17 matching lines...) Expand all
1193 1450
1194 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1451 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1195 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1452 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1196 1453
1197 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1454 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1198 ASSERT_TRUE(visitor_.header_.get()); 1455 ASSERT_TRUE(visitor_.header_.get());
1199 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1456 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1200 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 1457 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
1201 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), 1458 EXPECT_EQ(GG_UINT64_C(0x341256789ABA),
1202 visitor_.header_->fec_group); 1459 visitor_.header_->fec_group);
1460 const size_t fec_offset = GetStartOfFecProtectedData(
1461 PACKET_8BYTE_GUID, !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER);
1203 EXPECT_EQ( 1462 EXPECT_EQ(
1204 string(AsChars(packet) + GetStartOfFecProtectedData(PACKET_8BYTE_GUID, 1463 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset),
1205 !kIncludeVersion),
1206 arraysize(packet) - GetStartOfFecProtectedData(PACKET_8BYTE_GUID,
1207 !kIncludeVersion)),
1208 visitor_.fec_protected_payload_); 1464 visitor_.fec_protected_payload_);
1209 1465
1210 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1466 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1211 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1467 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1212 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1468 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1213 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1469 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1214 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1470 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1215 visitor_.stream_frames_[0]->offset); 1471 visitor_.stream_frames_[0]->offset);
1216 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 1472 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
1217 } 1473 }
1218 1474
1219 TEST_F(QuicFramerTest, AckFrame) { 1475 TEST_F(QuicFramerTest, AckFrame) {
1220 unsigned char packet[] = { 1476 unsigned char packet[] = {
1221 // public flags (8 byte guid) 1477 // public flags (8 byte guid)
1222 0x0C, 1478 0x3C,
1223 // guid 1479 // guid
1224 0x10, 0x32, 0x54, 0x76, 1480 0x10, 0x32, 0x54, 0x76,
1225 0x98, 0xBA, 0xDC, 0xFE, 1481 0x98, 0xBA, 0xDC, 0xFE,
1226 // packet sequence number 1482 // packet sequence number
1227 0xBC, 0x9A, 0x78, 0x56, 1483 0xBC, 0x9A, 0x78, 0x56,
1228 0x34, 0x12, 1484 0x34, 0x12,
1229 // private flags 1485 // private flags
1230 0x00, 1486 0x00,
1231 1487
1232 // frame type (ack frame) 1488 // frame type (ack frame)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); 1521 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed);
1266 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); 1522 ASSERT_EQ(1u, frame.received_info.missing_packets.size());
1267 SequenceNumberSet::const_iterator missing_iter = 1523 SequenceNumberSet::const_iterator missing_iter =
1268 frame.received_info.missing_packets.begin(); 1524 frame.received_info.missing_packets.begin();
1269 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1525 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
1270 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); 1526 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked);
1271 1527
1272 const size_t kSentEntropyOffset = kQuicFrameTypeSize; 1528 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
1273 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; 1529 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
1274 const size_t kReceivedEntropyOffset = kLeastUnackedOffset + 1530 const size_t kReceivedEntropyOffset = kLeastUnackedOffset +
1275 kSequenceNumberSize; 1531 PACKET_6BYTE_SEQUENCE_NUMBER;
1276 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1532 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1277 kQuicEntropyHashSize; 1533 kQuicEntropyHashSize;
1278 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1534 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1279 kSequenceNumberSize; 1535 PACKET_6BYTE_SEQUENCE_NUMBER;
1280 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + 1536 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
1281 kQuicDeltaTimeLargestObservedSize; 1537 kQuicDeltaTimeLargestObservedSize;
1282 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + 1538 const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
1283 kNumberOfMissingPacketsSize; 1539 kNumberOfMissingPacketsSize;
1284 // Now test framing boundaries 1540 // Now test framing boundaries
1285 const size_t missing_packets_size = 1 * kSequenceNumberSize; 1541 const size_t missing_packets_size = 1 * PACKET_6BYTE_SEQUENCE_NUMBER;
1286 for (size_t i = 0; 1542 for (size_t i = 0;
1287 i < QuicFramer::GetMinAckFrameSize() + missing_packets_size; ++i) { 1543 i < QuicFramer::GetMinAckFrameSize() + missing_packets_size; ++i) {
1288 string expected_error; 1544 string expected_error;
1289 if (i < kSentEntropyOffset) { 1545 if (i < kSentEntropyOffset) {
1290 expected_error = "Unable to read frame type."; 1546 expected_error = "Unable to read frame type.";
1291 } else if (i < kLeastUnackedOffset) { 1547 } else if (i < kLeastUnackedOffset) {
1292 expected_error = "Unable to read entropy hash for sent packets."; 1548 expected_error = "Unable to read entropy hash for sent packets.";
1293 } else if (i < kReceivedEntropyOffset) { 1549 } else if (i < kReceivedEntropyOffset) {
1294 expected_error = "Unable to read least unacked."; 1550 expected_error = "Unable to read least unacked.";
1295 } else if (i < kLargestObservedOffset) { 1551 } else if (i < kLargestObservedOffset) {
1296 expected_error = "Unable to read entropy hash for received packets."; 1552 expected_error = "Unable to read entropy hash for received packets.";
1297 } else if (i < kMissingDeltaTimeOffset) { 1553 } else if (i < kMissingDeltaTimeOffset) {
1298 expected_error = "Unable to read largest observed."; 1554 expected_error = "Unable to read largest observed.";
1299 } else if (i < kNumMissingPacketOffset) { 1555 } else if (i < kNumMissingPacketOffset) {
1300 expected_error = "Unable to read delta time largest observed."; 1556 expected_error = "Unable to read delta time largest observed.";
1301 } else if (i < kMissingPacketsOffset) { 1557 } else if (i < kMissingPacketsOffset) {
1302 expected_error = "Unable to read num missing packets."; 1558 expected_error = "Unable to read num missing packets.";
1303 } else { 1559 } else {
1304 expected_error = "Unable to read sequence number in missing packets."; 1560 expected_error = "Unable to read sequence number in missing packets.";
1305 } 1561 }
1306 CheckProcessingFails( 1562 CheckProcessingFails(
1307 packet, 1563 packet,
1308 i + GetPacketHeaderSize( 1564 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1309 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1565 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1310 expected_error, QUIC_INVALID_FRAME_DATA); 1566 expected_error, QUIC_INVALID_FRAME_DATA);
1311 } 1567 }
1312 } 1568 }
1313 1569
1314 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { 1570 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) {
1315 unsigned char packet[] = { 1571 unsigned char packet[] = {
1316 // public flags (8 byte guid) 1572 // public flags (8 byte guid)
1317 0x0C, 1573 0x3C,
1318 // guid 1574 // guid
1319 0x10, 0x32, 0x54, 0x76, 1575 0x10, 0x32, 0x54, 0x76,
1320 0x98, 0xBA, 0xDC, 0xFE, 1576 0x98, 0xBA, 0xDC, 0xFE,
1321 // packet sequence number 1577 // packet sequence number
1322 0xBC, 0x9A, 0x78, 0x56, 1578 0xBC, 0x9A, 0x78, 0x56,
1323 0x34, 0x12, 1579 0x34, 0x12,
1324 // private flags 1580 // private flags
1325 0x00, 1581 0x00,
1326 1582
1327 // frame type (congestion feedback frame) 1583 // frame type (congestion feedback frame)
(...skipping 29 matching lines...) Expand all
1357 expected_error = "Unable to read frame type."; 1613 expected_error = "Unable to read frame type.";
1358 } else if (i < 2) { 1614 } else if (i < 2) {
1359 expected_error = "Unable to read congestion feedback type."; 1615 expected_error = "Unable to read congestion feedback type.";
1360 } else if (i < 4) { 1616 } else if (i < 4) {
1361 expected_error = "Unable to read accumulated number of lost packets."; 1617 expected_error = "Unable to read accumulated number of lost packets.";
1362 } else if (i < 6) { 1618 } else if (i < 6) {
1363 expected_error = "Unable to read receive window."; 1619 expected_error = "Unable to read receive window.";
1364 } 1620 }
1365 CheckProcessingFails( 1621 CheckProcessingFails(
1366 packet, 1622 packet,
1367 i + GetPacketHeaderSize( 1623 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1368 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1624 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1369 expected_error, QUIC_INVALID_FRAME_DATA); 1625 expected_error, QUIC_INVALID_FRAME_DATA);
1370 } 1626 }
1371 } 1627 }
1372 1628
1373 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { 1629 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) {
1374 unsigned char packet[] = { 1630 unsigned char packet[] = {
1375 // public flags (8 byte guid) 1631 // public flags (8 byte guid)
1376 0x0C, 1632 0x3C,
1377 // guid 1633 // guid
1378 0x10, 0x32, 0x54, 0x76, 1634 0x10, 0x32, 0x54, 0x76,
1379 0x98, 0xBA, 0xDC, 0xFE, 1635 0x98, 0xBA, 0xDC, 0xFE,
1380 // packet sequence number 1636 // packet sequence number
1381 0xBC, 0x9A, 0x78, 0x56, 1637 0xBC, 0x9A, 0x78, 0x56,
1382 0x34, 0x12, 1638 0x34, 0x12,
1383 // private flags 1639 // private flags
1384 0x00, 1640 0x00,
1385 1641
1386 // frame type (congestion feedback frame) 1642 // frame type (congestion feedback frame)
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 expected_error = "Unable to read sequence delta in received packets."; 1711 expected_error = "Unable to read sequence delta in received packets.";
1456 } else if (i < 25) { 1712 } else if (i < 25) {
1457 expected_error = "Unable to read time delta in received packets."; 1713 expected_error = "Unable to read time delta in received packets.";
1458 } else if (i < 27) { 1714 } else if (i < 27) {
1459 expected_error = "Unable to read sequence delta in received packets."; 1715 expected_error = "Unable to read sequence delta in received packets.";
1460 } else if (i < 31) { 1716 } else if (i < 31) {
1461 expected_error = "Unable to read time delta in received packets."; 1717 expected_error = "Unable to read time delta in received packets.";
1462 } 1718 }
1463 CheckProcessingFails( 1719 CheckProcessingFails(
1464 packet, 1720 packet,
1465 i + GetPacketHeaderSize( 1721 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1466 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1722 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1467 expected_error, QUIC_INVALID_FRAME_DATA); 1723 expected_error, QUIC_INVALID_FRAME_DATA);
1468 } 1724 }
1469 } 1725 }
1470 1726
1471 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { 1727 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) {
1472 unsigned char packet[] = { 1728 unsigned char packet[] = {
1473 // public flags (8 byte guid) 1729 // public flags (8 byte guid)
1474 0x0C, 1730 0x3C,
1475 // guid 1731 // guid
1476 0x10, 0x32, 0x54, 0x76, 1732 0x10, 0x32, 0x54, 0x76,
1477 0x98, 0xBA, 0xDC, 0xFE, 1733 0x98, 0xBA, 0xDC, 0xFE,
1478 // packet sequence number 1734 // packet sequence number
1479 0xBC, 0x9A, 0x78, 0x56, 1735 0xBC, 0x9A, 0x78, 0x56,
1480 0x34, 0x12, 1736 0x34, 0x12,
1481 // private flags 1737 // private flags
1482 0x00, 1738 0x00,
1483 1739
1484 // frame type (congestion feedback frame) 1740 // frame type (congestion feedback frame)
(...skipping 24 matching lines...) Expand all
1509 string expected_error; 1765 string expected_error;
1510 if (i < 1) { 1766 if (i < 1) {
1511 expected_error = "Unable to read frame type."; 1767 expected_error = "Unable to read frame type.";
1512 } else if (i < 2) { 1768 } else if (i < 2) {
1513 expected_error = "Unable to read congestion feedback type."; 1769 expected_error = "Unable to read congestion feedback type.";
1514 } else if (i < 6) { 1770 } else if (i < 6) {
1515 expected_error = "Unable to read bitrate."; 1771 expected_error = "Unable to read bitrate.";
1516 } 1772 }
1517 CheckProcessingFails( 1773 CheckProcessingFails(
1518 packet, 1774 packet,
1519 i + GetPacketHeaderSize( 1775 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1520 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1776 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1521 expected_error, QUIC_INVALID_FRAME_DATA); 1777 expected_error, QUIC_INVALID_FRAME_DATA);
1522 } 1778 }
1523 } 1779 }
1524 1780
1525 1781
1526 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { 1782 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
1527 unsigned char packet[] = { 1783 unsigned char packet[] = {
1528 // public flags (8 byte guid) 1784 // public flags (8 byte guid)
1529 0x0C, 1785 0x3C,
1530 // guid 1786 // guid
1531 0x10, 0x32, 0x54, 0x76, 1787 0x10, 0x32, 0x54, 0x76,
1532 0x98, 0xBA, 0xDC, 0xFE, 1788 0x98, 0xBA, 0xDC, 0xFE,
1533 // packet sequence number 1789 // packet sequence number
1534 0xBC, 0x9A, 0x78, 0x56, 1790 0xBC, 0x9A, 0x78, 0x56,
1535 0x34, 0x12, 1791 0x34, 0x12,
1536 // private flags 1792 // private flags
1537 0x00, 1793 0x00,
1538 1794
1539 // frame type (congestion feedback frame) 1795 // frame type (congestion feedback frame)
1540 0x03, 1796 0x03,
1541 // congestion feedback type (invalid) 1797 // congestion feedback type (invalid)
1542 0x03, 1798 0x03,
1543 }; 1799 };
1544 1800
1545 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1546 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1802 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1547 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1803 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1548 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 1804 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
1549 } 1805 }
1550 1806
1551 TEST_F(QuicFramerTest, RstStreamFrame) { 1807 TEST_F(QuicFramerTest, RstStreamFrame) {
1552 unsigned char packet[] = { 1808 unsigned char packet[] = {
1553 // public flags (8 byte guid) 1809 // public flags (8 byte guid)
1554 0x0C, 1810 0x3C,
1555 // guid 1811 // guid
1556 0x10, 0x32, 0x54, 0x76, 1812 0x10, 0x32, 0x54, 0x76,
1557 0x98, 0xBA, 0xDC, 0xFE, 1813 0x98, 0xBA, 0xDC, 0xFE,
1558 // packet sequence number 1814 // packet sequence number
1559 0xBC, 0x9A, 0x78, 0x56, 1815 0xBC, 0x9A, 0x78, 0x56,
1560 0x34, 0x12, 1816 0x34, 0x12,
1561 // private flags 1817 // private flags
1562 0x00, 1818 0x00,
1563 1819
1564 // frame type (rst stream frame) 1820 // frame type (rst stream frame)
(...skipping 29 matching lines...) Expand all
1594 if (i < kQuicFrameTypeSize + kQuicStreamIdSize) { 1850 if (i < kQuicFrameTypeSize + kQuicStreamIdSize) {
1595 expected_error = "Unable to read stream_id."; 1851 expected_error = "Unable to read stream_id.";
1596 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + 1852 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize +
1597 kQuicErrorCodeSize) { 1853 kQuicErrorCodeSize) {
1598 expected_error = "Unable to read rst stream error code."; 1854 expected_error = "Unable to read rst stream error code.";
1599 } else { 1855 } else {
1600 expected_error = "Unable to read rst stream error details."; 1856 expected_error = "Unable to read rst stream error details.";
1601 } 1857 }
1602 CheckProcessingFails( 1858 CheckProcessingFails(
1603 packet, 1859 packet,
1604 i + GetPacketHeaderSize( 1860 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1605 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1861 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1606 expected_error, QUIC_INVALID_RST_STREAM_DATA); 1862 expected_error, QUIC_INVALID_RST_STREAM_DATA);
1607 } 1863 }
1608 } 1864 }
1609 1865
1610 TEST_F(QuicFramerTest, ConnectionCloseFrame) { 1866 TEST_F(QuicFramerTest, ConnectionCloseFrame) {
1611 unsigned char packet[] = { 1867 unsigned char packet[] = {
1612 // public flags (8 byte guid) 1868 // public flags (8 byte guid)
1613 0x0C, 1869 0x3C,
1614 // guid 1870 // guid
1615 0x10, 0x32, 0x54, 0x76, 1871 0x10, 0x32, 0x54, 0x76,
1616 0x98, 0xBA, 0xDC, 0xFE, 1872 0x98, 0xBA, 0xDC, 0xFE,
1617 // packet sequence number 1873 // packet sequence number
1618 0xBC, 0x9A, 0x78, 0x56, 1874 0xBC, 0x9A, 0x78, 0x56,
1619 0x34, 0x12, 1875 0x34, 0x12,
1620 // private flags 1876 // private flags
1621 0x00, 1877 0x00,
1622 1878
1623 // frame type (connection close frame) 1879 // frame type (connection close frame)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 i < QuicFramer::GetMinConnectionCloseFrameSize() - 1937 i < QuicFramer::GetMinConnectionCloseFrameSize() -
1682 QuicFramer::GetMinAckFrameSize(); ++i) { 1938 QuicFramer::GetMinAckFrameSize(); ++i) {
1683 string expected_error; 1939 string expected_error;
1684 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { 1940 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) {
1685 expected_error = "Unable to read connection close error code."; 1941 expected_error = "Unable to read connection close error code.";
1686 } else { 1942 } else {
1687 expected_error = "Unable to read connection close error details."; 1943 expected_error = "Unable to read connection close error details.";
1688 } 1944 }
1689 CheckProcessingFails( 1945 CheckProcessingFails(
1690 packet, 1946 packet,
1691 i + GetPacketHeaderSize( 1947 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1692 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 1948 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1693 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); 1949 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA);
1694 } 1950 }
1695 } 1951 }
1696 1952
1697 TEST_F(QuicFramerTest, GoAwayFrame) { 1953 TEST_F(QuicFramerTest, GoAwayFrame) {
1698 unsigned char packet[] = { 1954 unsigned char packet[] = {
1699 // public flags (8 byte guid) 1955 // public flags (8 byte guid)
1700 0x0C, 1956 0x3C,
1701 // guid 1957 // guid
1702 0x10, 0x32, 0x54, 0x76, 1958 0x10, 0x32, 0x54, 0x76,
1703 0x98, 0xBA, 0xDC, 0xFE, 1959 0x98, 0xBA, 0xDC, 0xFE,
1704 // packet sequence number 1960 // packet sequence number
1705 0xBC, 0x9A, 0x78, 0x56, 1961 0xBC, 0x9A, 0x78, 0x56,
1706 0x34, 0x12, 1962 0x34, 0x12,
1707 // private flags 1963 // private flags
1708 0x00, 1964 0x00,
1709 1965
1710 // frame type (go away frame) 1966 // frame type (go away frame)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1742 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { 1998 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) {
1743 expected_error = "Unable to read go away error code."; 1999 expected_error = "Unable to read go away error code.";
1744 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + 2000 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize +
1745 kQuicStreamIdSize) { 2001 kQuicStreamIdSize) {
1746 expected_error = "Unable to read last good stream id."; 2002 expected_error = "Unable to read last good stream id.";
1747 } else { 2003 } else {
1748 expected_error = "Unable to read goaway reason."; 2004 expected_error = "Unable to read goaway reason.";
1749 } 2005 }
1750 CheckProcessingFails( 2006 CheckProcessingFails(
1751 packet, 2007 packet,
1752 i + GetPacketHeaderSize( 2008 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
1753 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 2009 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
1754 expected_error, QUIC_INVALID_GOAWAY_DATA); 2010 expected_error, QUIC_INVALID_GOAWAY_DATA);
1755 } 2011 }
1756 } 2012 }
1757 2013
1758 TEST_F(QuicFramerTest, PublicResetPacket) { 2014 TEST_F(QuicFramerTest, PublicResetPacket) {
1759 unsigned char packet[] = { 2015 unsigned char packet[] = {
1760 // public flags (public reset, 8 byte guid) 2016 // public flags (public reset, 8 byte guid)
1761 0x0E, 2017 0x3E,
1762 // guid 2018 // guid
1763 0x10, 0x32, 0x54, 0x76, 2019 0x10, 0x32, 0x54, 0x76,
1764 0x98, 0xBA, 0xDC, 0xFE, 2020 0x98, 0xBA, 0xDC, 0xFE,
1765 // nonce proof 2021 // nonce proof
1766 0x89, 0x67, 0x45, 0x23, 2022 0x89, 0x67, 0x45, 0x23,
1767 0x01, 0xEF, 0xCD, 0xAB, 2023 0x01, 0xEF, 0xCD, 0xAB,
1768 // rejected sequence number 2024 // rejected sequence number
1769 0xBC, 0x9A, 0x78, 0x56, 2025 0xBC, 0x9A, 0x78, 0x56,
1770 0x34, 0x12, 2026 0x34, 0x12,
1771 }; 2027 };
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1803 expected_error = "Unable to read rejected sequence number."; 2059 expected_error = "Unable to read rejected sequence number.";
1804 CheckProcessingFails(packet, i, expected_error, 2060 CheckProcessingFails(packet, i, expected_error,
1805 QUIC_INVALID_PUBLIC_RST_PACKET); 2061 QUIC_INVALID_PUBLIC_RST_PACKET);
1806 } 2062 }
1807 } 2063 }
1808 } 2064 }
1809 2065
1810 TEST_F(QuicFramerTest, VersionNegotiationPacket) { 2066 TEST_F(QuicFramerTest, VersionNegotiationPacket) {
1811 unsigned char packet[] = { 2067 unsigned char packet[] = {
1812 // public flags (version, 8 byte guid) 2068 // public flags (version, 8 byte guid)
1813 0x0D, 2069 0x3D,
1814 // guid 2070 // guid
1815 0x10, 0x32, 0x54, 0x76, 2071 0x10, 0x32, 0x54, 0x76,
1816 0x98, 0xBA, 0xDC, 0xFE, 2072 0x98, 0xBA, 0xDC, 0xFE,
1817 // version tag 2073 // version tag
1818 'Q', '0', '0', '5', 2074 'Q', '0', '0', '6',
1819 'Q', '2', '.', '0', 2075 'Q', '2', '.', '0',
1820 }; 2076 };
1821 2077
1822 QuicFramerPeer::SetIsServer(&framer_, false); 2078 QuicFramerPeer::SetIsServer(&framer_, false);
1823 2079
1824 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2080 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1825 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2081 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1826 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); 2082 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
1827 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); 2083 ASSERT_TRUE(visitor_.version_negotiation_packet_.get());
1828 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); 2084 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size());
(...skipping 11 matching lines...) Expand all
1840 expected_error = "Unable to read supported version in negotiation."; 2096 expected_error = "Unable to read supported version in negotiation.";
1841 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; 2097 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET;
1842 } 2098 }
1843 CheckProcessingFails(packet, i, expected_error, error_code); 2099 CheckProcessingFails(packet, i, expected_error, error_code);
1844 } 2100 }
1845 } 2101 }
1846 2102
1847 TEST_F(QuicFramerTest, FecPacket) { 2103 TEST_F(QuicFramerTest, FecPacket) {
1848 unsigned char packet[] = { 2104 unsigned char packet[] = {
1849 // public flags (8 byte guid) 2105 // public flags (8 byte guid)
1850 0x0C, 2106 0x3C,
1851 // guid 2107 // guid
1852 0x10, 0x32, 0x54, 0x76, 2108 0x10, 0x32, 0x54, 0x76,
1853 0x98, 0xBA, 0xDC, 0xFE, 2109 0x98, 0xBA, 0xDC, 0xFE,
1854 // packet sequence number 2110 // packet sequence number
1855 0xBC, 0x9A, 0x78, 0x56, 2111 0xBC, 0x9A, 0x78, 0x56,
1856 0x34, 0x12, 2112 0x34, 0x12,
1857 // private flags (fec group & FEC) 2113 // private flags (fec group & FEC)
1858 0x06, 2114 0x06,
1859 // first fec protected packet offset 2115 // first fec protected packet offset
1860 0x01, 2116 0x01,
(...skipping 30 matching lines...) Expand all
1891 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2147 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
1892 header.fec_group = 0; 2148 header.fec_group = 0;
1893 2149
1894 QuicPaddingFrame padding_frame; 2150 QuicPaddingFrame padding_frame;
1895 2151
1896 QuicFrames frames; 2152 QuicFrames frames;
1897 frames.push_back(QuicFrame(&padding_frame)); 2153 frames.push_back(QuicFrame(&padding_frame));
1898 2154
1899 unsigned char packet[kMaxPacketSize] = { 2155 unsigned char packet[kMaxPacketSize] = {
1900 // public flags (8 byte guid) 2156 // public flags (8 byte guid)
1901 0x0C, 2157 0x3C,
1902 // guid 2158 // guid
1903 0x10, 0x32, 0x54, 0x76, 2159 0x10, 0x32, 0x54, 0x76,
1904 0x98, 0xBA, 0xDC, 0xFE, 2160 0x98, 0xBA, 0xDC, 0xFE,
1905 // packet sequence number 2161 // packet sequence number
1906 0xBC, 0x9A, 0x78, 0x56, 2162 0xBC, 0x9A, 0x78, 0x56,
1907 0x34, 0x12, 2163 0x34, 0x12,
1908 // private flags 2164 // private flags
1909 0x00, 2165 0x00,
1910 2166
1911 // frame type (padding frame) 2167 // frame type (padding frame)
1912 0x00, 2168 0x00,
1913 }; 2169 };
1914 2170
1915 uint64 header_size = GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 2171 uint64 header_size =
1916 NOT_IN_FEC_GROUP); 2172 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2173 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
1917 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); 2174 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
1918 2175
1919 scoped_ptr<QuicPacket> data( 2176 scoped_ptr<QuicPacket> data(
2177 framer_.ConstructFrameDataPacket(header, frames).packet);
2178 ASSERT_TRUE(data != NULL);
2179
2180 test::CompareCharArraysWithHexError("constructed packet",
2181 data->data(), data->length(),
2182 AsChars(packet), arraysize(packet));
2183 }
2184
2185 TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) {
2186 QuicPacketHeader header;
2187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2188 header.public_header.reset_flag = false;
2189 header.public_header.version_flag = false;
2190 header.fec_flag = false;
2191 header.entropy_flag = false;
2192 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER;
2193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2194 header.fec_group = 0;
2195
2196 QuicPaddingFrame padding_frame;
2197
2198 QuicFrames frames;
2199 frames.push_back(QuicFrame(&padding_frame));
2200
2201 unsigned char packet[kMaxPacketSize] = {
2202 // public flags (8 byte guid and 4 byte sequence number)
2203 0x2C,
2204 // guid
2205 0x10, 0x32, 0x54, 0x76,
2206 0x98, 0xBA, 0xDC, 0xFE,
2207 // packet sequence number
2208 0xBC, 0x9A, 0x78, 0x56,
2209 // private flags
2210 0x00,
2211
2212 // frame type (padding frame)
2213 0x00,
2214 };
2215
2216 uint64 header_size =
2217 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2218 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
2219 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2220
2221 scoped_ptr<QuicPacket> data(
2222 framer_.ConstructFrameDataPacket(header, frames).packet);
2223 ASSERT_TRUE(data != NULL);
2224
2225 test::CompareCharArraysWithHexError("constructed packet",
2226 data->data(), data->length(),
2227 AsChars(packet), arraysize(packet));
2228 }
2229
2230 TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) {
2231 QuicPacketHeader header;
2232 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2233 header.public_header.reset_flag = false;
2234 header.public_header.version_flag = false;
2235 header.fec_flag = false;
2236 header.entropy_flag = false;
2237 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER;
2238 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2239 header.fec_group = 0;
2240
2241 QuicPaddingFrame padding_frame;
2242
2243 QuicFrames frames;
2244 frames.push_back(QuicFrame(&padding_frame));
2245
2246 unsigned char packet[kMaxPacketSize] = {
2247 // public flags (8 byte guid and 2 byte sequence number)
2248 0x1C,
2249 // guid
2250 0x10, 0x32, 0x54, 0x76,
2251 0x98, 0xBA, 0xDC, 0xFE,
2252 // packet sequence number
2253 0xBC, 0x9A,
2254 // private flags
2255 0x00,
2256
2257 // frame type (padding frame)
2258 0x00,
2259 };
2260
2261 uint64 header_size =
2262 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2263 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
2264 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2265
2266 scoped_ptr<QuicPacket> data(
2267 framer_.ConstructFrameDataPacket(header, frames).packet);
2268 ASSERT_TRUE(data != NULL);
2269
2270 test::CompareCharArraysWithHexError("constructed packet",
2271 data->data(), data->length(),
2272 AsChars(packet), arraysize(packet));
2273 }
2274
2275 TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) {
2276 QuicPacketHeader header;
2277 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2278 header.public_header.reset_flag = false;
2279 header.public_header.version_flag = false;
2280 header.fec_flag = false;
2281 header.entropy_flag = false;
2282 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
2283 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2284 header.fec_group = 0;
2285
2286 QuicPaddingFrame padding_frame;
2287
2288 QuicFrames frames;
2289 frames.push_back(QuicFrame(&padding_frame));
2290
2291 unsigned char packet[kMaxPacketSize] = {
2292 // public flags (8 byte guid and 1 byte sequence number)
2293 0x0C,
2294 // guid
2295 0x10, 0x32, 0x54, 0x76,
2296 0x98, 0xBA, 0xDC, 0xFE,
2297 // packet sequence number
2298 0xBC,
2299 // private flags
2300 0x00,
2301
2302 // frame type (padding frame)
2303 0x00,
2304 };
2305
2306 uint64 header_size =
2307 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
2308 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
2309 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1);
2310
2311 scoped_ptr<QuicPacket> data(
1920 framer_.ConstructFrameDataPacket(header, frames).packet); 2312 framer_.ConstructFrameDataPacket(header, frames).packet);
1921 ASSERT_TRUE(data != NULL); 2313 ASSERT_TRUE(data != NULL);
1922 2314
1923 test::CompareCharArraysWithHexError("constructed packet", 2315 test::CompareCharArraysWithHexError("constructed packet",
1924 data->data(), data->length(), 2316 data->data(), data->length(),
1925 AsChars(packet), arraysize(packet)); 2317 AsChars(packet), arraysize(packet));
1926 } 2318 }
1927 2319
1928 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { 2320 TEST_F(QuicFramerTest, ConstructStreamFramePacket) {
1929 QuicPacketHeader header; 2321 QuicPacketHeader header;
1930 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2322 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1931 header.public_header.reset_flag = false; 2323 header.public_header.reset_flag = false;
1932 header.public_header.version_flag = false; 2324 header.public_header.version_flag = false;
1933 header.fec_flag = false; 2325 header.fec_flag = false;
1934 header.entropy_flag = true; 2326 header.entropy_flag = true;
1935 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 2327 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC);
1936 header.fec_group = 0; 2328 header.fec_group = 0;
1937 2329
1938 QuicStreamFrame stream_frame; 2330 QuicStreamFrame stream_frame;
1939 stream_frame.stream_id = 0x01020304; 2331 stream_frame.stream_id = 0x01020304;
1940 stream_frame.fin = true; 2332 stream_frame.fin = true;
1941 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 2333 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654);
1942 stream_frame.data = "hello world!"; 2334 stream_frame.data = "hello world!";
1943 2335
1944 QuicFrames frames; 2336 QuicFrames frames;
1945 frames.push_back(QuicFrame(&stream_frame)); 2337 frames.push_back(QuicFrame(&stream_frame));
1946 2338
1947 unsigned char packet[] = { 2339 unsigned char packet[] = {
1948 // public flags (8 byte guid) 2340 // public flags (8 byte guid)
1949 0x0C, 2341 0x3C,
1950 // guid 2342 // guid
1951 0x10, 0x32, 0x54, 0x76, 2343 0x10, 0x32, 0x54, 0x76,
1952 0x98, 0xBA, 0xDC, 0xFE, 2344 0x98, 0xBA, 0xDC, 0xFE,
1953 // packet sequence number 2345 // packet sequence number
1954 0xBC, 0x9A, 0x78, 0x56, 2346 0xBC, 0x9A, 0x78, 0x56,
1955 0x34, 0x12, 2347 0x34, 0x12,
1956 // private flags (entropy) 2348 // private flags (entropy)
1957 0x01, 2349 0x01,
1958 2350
1959 // frame type (stream frame) 2351 // frame type (stream frame)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1996 stream_frame.stream_id = 0x01020304; 2388 stream_frame.stream_id = 0x01020304;
1997 stream_frame.fin = true; 2389 stream_frame.fin = true;
1998 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 2390 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654);
1999 stream_frame.data = "hello world!"; 2391 stream_frame.data = "hello world!";
2000 2392
2001 QuicFrames frames; 2393 QuicFrames frames;
2002 frames.push_back(QuicFrame(&stream_frame)); 2394 frames.push_back(QuicFrame(&stream_frame));
2003 2395
2004 unsigned char packet[] = { 2396 unsigned char packet[] = {
2005 // public flags (version, 8 byte guid) 2397 // public flags (version, 8 byte guid)
2006 0x0D, 2398 0x3D,
2007 // guid 2399 // guid
2008 0x10, 0x32, 0x54, 0x76, 2400 0x10, 0x32, 0x54, 0x76,
2009 0x98, 0xBA, 0xDC, 0xFE, 2401 0x98, 0xBA, 0xDC, 0xFE,
2010 // version tag 2402 // version tag
2011 'Q', '0', '0', '5', 2403 'Q', '0', '0', '6',
2012 // packet sequence number 2404 // packet sequence number
2013 0xBC, 0x9A, 0x78, 0x56, 2405 0xBC, 0x9A, 0x78, 0x56,
2014 0x34, 0x12, 2406 0x34, 0x12,
2015 // private flags (entropy) 2407 // private flags (entropy)
2016 0x01, 2408 0x01,
2017 2409
2018 // frame type (stream frame) 2410 // frame type (stream frame)
2019 0x01, 2411 0x01,
2020 // stream id 2412 // stream id
2021 0x04, 0x03, 0x02, 0x01, 2413 0x04, 0x03, 0x02, 0x01,
(...skipping 21 matching lines...) Expand all
2043 } 2435 }
2044 2436
2045 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { 2437 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) {
2046 QuicPacketPublicHeader header; 2438 QuicPacketPublicHeader header;
2047 header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2439 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2048 header.reset_flag = false; 2440 header.reset_flag = false;
2049 header.version_flag = true; 2441 header.version_flag = true;
2050 2442
2051 unsigned char packet[] = { 2443 unsigned char packet[] = {
2052 // public flags (version, 8 byte guid) 2444 // public flags (version, 8 byte guid)
2053 0x0D, 2445 0x3D,
2054 // guid 2446 // guid
2055 0x10, 0x32, 0x54, 0x76, 2447 0x10, 0x32, 0x54, 0x76,
2056 0x98, 0xBA, 0xDC, 0xFE, 2448 0x98, 0xBA, 0xDC, 0xFE,
2057 // version tag 2449 // version tag
2058 'Q', '0', '0', '5', 2450 'Q', '0', '0', '6',
2059 'Q', '2', '.', '0', 2451 'Q', '2', '.', '0',
2060 }; 2452 };
2061 2453
2062 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); 2454 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0');
2063 QuicTagVector versions; 2455 QuicTagVector versions;
2064 versions.push_back(kQuicVersion1); 2456 versions.push_back(kQuicVersion1);
2065 versions.push_back(kQuicVersion2); 2457 versions.push_back(kQuicVersion2);
2066 scoped_ptr<QuicEncryptedPacket> data( 2458 scoped_ptr<QuicEncryptedPacket> data(
2067 framer_.ConstructVersionNegotiationPacket(header, versions)); 2459 framer_.ConstructVersionNegotiationPacket(header, versions));
2068 2460
(...skipping 19 matching lines...) Expand all
2088 ack_frame.received_info.missing_packets.insert( 2480 ack_frame.received_info.missing_packets.insert(
2089 GG_UINT64_C(0x770123456789ABE)); 2481 GG_UINT64_C(0x770123456789ABE));
2090 ack_frame.sent_info.entropy_hash = 0x14; 2482 ack_frame.sent_info.entropy_hash = 0x14;
2091 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); 2483 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0);
2092 2484
2093 QuicFrames frames; 2485 QuicFrames frames;
2094 frames.push_back(QuicFrame(&ack_frame)); 2486 frames.push_back(QuicFrame(&ack_frame));
2095 2487
2096 unsigned char packet[] = { 2488 unsigned char packet[] = {
2097 // public flags (8 byte guid) 2489 // public flags (8 byte guid)
2098 0x0C, 2490 0x3C,
2099 // guid 2491 // guid
2100 0x10, 0x32, 0x54, 0x76, 2492 0x10, 0x32, 0x54, 0x76,
2101 0x98, 0xBA, 0xDC, 0xFE, 2493 0x98, 0xBA, 0xDC, 0xFE,
2102 // packet sequence number 2494 // packet sequence number
2103 0xBC, 0x9A, 0x78, 0x56, 2495 0xBC, 0x9A, 0x78, 0x56,
2104 0x34, 0x12, 2496 0x34, 0x12,
2105 // private flags (entropy) 2497 // private flags (entropy)
2106 0x01, 2498 0x01,
2107 2499
2108 // frame type (ack frame) 2500 // frame type (ack frame)
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 QuicCongestionFeedbackFrame congestion_feedback_frame; 2540 QuicCongestionFeedbackFrame congestion_feedback_frame;
2149 congestion_feedback_frame.type = kTCP; 2541 congestion_feedback_frame.type = kTCP;
2150 congestion_feedback_frame.tcp.accumulated_number_of_lost_packets = 0x0201; 2542 congestion_feedback_frame.tcp.accumulated_number_of_lost_packets = 0x0201;
2151 congestion_feedback_frame.tcp.receive_window = 0x4030; 2543 congestion_feedback_frame.tcp.receive_window = 0x4030;
2152 2544
2153 QuicFrames frames; 2545 QuicFrames frames;
2154 frames.push_back(QuicFrame(&congestion_feedback_frame)); 2546 frames.push_back(QuicFrame(&congestion_feedback_frame));
2155 2547
2156 unsigned char packet[] = { 2548 unsigned char packet[] = {
2157 // public flags (8 byte guid) 2549 // public flags (8 byte guid)
2158 0x0C, 2550 0x3C,
2159 // guid 2551 // guid
2160 0x10, 0x32, 0x54, 0x76, 2552 0x10, 0x32, 0x54, 0x76,
2161 0x98, 0xBA, 0xDC, 0xFE, 2553 0x98, 0xBA, 0xDC, 0xFE,
2162 // packet sequence number 2554 // packet sequence number
2163 0xBC, 0x9A, 0x78, 0x56, 2555 0xBC, 0x9A, 0x78, 0x56,
2164 0x34, 0x12, 2556 0x34, 0x12,
2165 // private flags 2557 // private flags
2166 0x00, 2558 0x00,
2167 2559
2168 // frame type (congestion feedback frame) 2560 // frame type (congestion feedback frame)
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2207 GG_UINT64_C(0x07E1D2C3B4A59688))))); 2599 GG_UINT64_C(0x07E1D2C3B4A59688)))));
2208 frame.inter_arrival.received_packet_times.insert( 2600 frame.inter_arrival.received_packet_times.insert(
2209 make_pair(GG_UINT64_C(0x0123456789ABD), 2601 make_pair(GG_UINT64_C(0x0123456789ABD),
2210 start_.Add(QuicTime::Delta::FromMicroseconds( 2602 start_.Add(QuicTime::Delta::FromMicroseconds(
2211 GG_UINT64_C(0x07E1D2C3B4A59689))))); 2603 GG_UINT64_C(0x07E1D2C3B4A59689)))));
2212 QuicFrames frames; 2604 QuicFrames frames;
2213 frames.push_back(QuicFrame(&frame)); 2605 frames.push_back(QuicFrame(&frame));
2214 2606
2215 unsigned char packet[] = { 2607 unsigned char packet[] = {
2216 // public flags (8 byte guid) 2608 // public flags (8 byte guid)
2217 0x0C, 2609 0x3C,
2218 // guid 2610 // guid
2219 0x10, 0x32, 0x54, 0x76, 2611 0x10, 0x32, 0x54, 0x76,
2220 0x98, 0xBA, 0xDC, 0xFE, 2612 0x98, 0xBA, 0xDC, 0xFE,
2221 // packet sequence number 2613 // packet sequence number
2222 0xBC, 0x9A, 0x78, 0x56, 2614 0xBC, 0x9A, 0x78, 0x56,
2223 0x34, 0x12, 2615 0x34, 0x12,
2224 // private flags 2616 // private flags
2225 0x00, 2617 0x00,
2226 2618
2227 // frame type (congestion feedback frame) 2619 // frame type (congestion feedback frame)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2270 QuicCongestionFeedbackFrame congestion_feedback_frame; 2662 QuicCongestionFeedbackFrame congestion_feedback_frame;
2271 congestion_feedback_frame.type = kFixRate; 2663 congestion_feedback_frame.type = kFixRate;
2272 congestion_feedback_frame.fix_rate.bitrate 2664 congestion_feedback_frame.fix_rate.bitrate
2273 = QuicBandwidth::FromBytesPerSecond(0x04030201); 2665 = QuicBandwidth::FromBytesPerSecond(0x04030201);
2274 2666
2275 QuicFrames frames; 2667 QuicFrames frames;
2276 frames.push_back(QuicFrame(&congestion_feedback_frame)); 2668 frames.push_back(QuicFrame(&congestion_feedback_frame));
2277 2669
2278 unsigned char packet[] = { 2670 unsigned char packet[] = {
2279 // public flags (8 byte guid) 2671 // public flags (8 byte guid)
2280 0x0C, 2672 0x3C,
2281 // guid 2673 // guid
2282 0x10, 0x32, 0x54, 0x76, 2674 0x10, 0x32, 0x54, 0x76,
2283 0x98, 0xBA, 0xDC, 0xFE, 2675 0x98, 0xBA, 0xDC, 0xFE,
2284 // packet sequence number 2676 // packet sequence number
2285 0xBC, 0x9A, 0x78, 0x56, 2677 0xBC, 0x9A, 0x78, 0x56,
2286 0x34, 0x12, 2678 0x34, 0x12,
2287 // private flags 2679 // private flags
2288 0x00, 2680 0x00,
2289 2681
2290 // frame type (congestion feedback frame) 2682 // frame type (congestion feedback frame)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2336 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2728 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
2337 header.fec_group = 0; 2729 header.fec_group = 0;
2338 2730
2339 QuicRstStreamFrame rst_frame; 2731 QuicRstStreamFrame rst_frame;
2340 rst_frame.stream_id = 0x01020304; 2732 rst_frame.stream_id = 0x01020304;
2341 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); 2733 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708);
2342 rst_frame.error_details = "because I can"; 2734 rst_frame.error_details = "because I can";
2343 2735
2344 unsigned char packet[] = { 2736 unsigned char packet[] = {
2345 // public flags (8 byte guid) 2737 // public flags (8 byte guid)
2346 0x0C, 2738 0x3C,
2347 // guid 2739 // guid
2348 0x10, 0x32, 0x54, 0x76, 2740 0x10, 0x32, 0x54, 0x76,
2349 0x98, 0xBA, 0xDC, 0xFE, 2741 0x98, 0xBA, 0xDC, 0xFE,
2350 // packet sequence number 2742 // packet sequence number
2351 0xBC, 0x9A, 0x78, 0x56, 2743 0xBC, 0x9A, 0x78, 0x56,
2352 0x34, 0x12, 2744 0x34, 0x12,
2353 // private flags 2745 // private flags
2354 0x00, 2746 0x00,
2355 2747
2356 // frame type (rst stream frame) 2748 // frame type (rst stream frame)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2399 ack_frame->received_info.largest_observed = GG_UINT64_C(0x0123456789ABF); 2791 ack_frame->received_info.largest_observed = GG_UINT64_C(0x0123456789ABF);
2400 ack_frame->received_info.missing_packets.insert(GG_UINT64_C(0x0123456789ABE)); 2792 ack_frame->received_info.missing_packets.insert(GG_UINT64_C(0x0123456789ABE));
2401 ack_frame->sent_info.entropy_hash = 0xE0; 2793 ack_frame->sent_info.entropy_hash = 0xE0;
2402 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); 2794 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0);
2403 2795
2404 QuicFrames frames; 2796 QuicFrames frames;
2405 frames.push_back(QuicFrame(&close_frame)); 2797 frames.push_back(QuicFrame(&close_frame));
2406 2798
2407 unsigned char packet[] = { 2799 unsigned char packet[] = {
2408 // public flags (8 byte guid) 2800 // public flags (8 byte guid)
2409 0x0C, 2801 0x3C,
2410 // guid 2802 // guid
2411 0x10, 0x32, 0x54, 0x76, 2803 0x10, 0x32, 0x54, 0x76,
2412 0x98, 0xBA, 0xDC, 0xFE, 2804 0x98, 0xBA, 0xDC, 0xFE,
2413 // packet sequence number 2805 // packet sequence number
2414 0xBC, 0x9A, 0x78, 0x56, 2806 0xBC, 0x9A, 0x78, 0x56,
2415 0x34, 0x12, 2807 0x34, 0x12,
2416 // private flags (entropy) 2808 // private flags (entropy)
2417 0x01, 2809 0x01,
2418 2810
2419 // frame type (connection close frame) 2811 // frame type (connection close frame)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2470 QuicGoAwayFrame goaway_frame; 2862 QuicGoAwayFrame goaway_frame;
2471 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 2863 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
2472 goaway_frame.last_good_stream_id = 0x01020304; 2864 goaway_frame.last_good_stream_id = 0x01020304;
2473 goaway_frame.reason_phrase = "because I can"; 2865 goaway_frame.reason_phrase = "because I can";
2474 2866
2475 QuicFrames frames; 2867 QuicFrames frames;
2476 frames.push_back(QuicFrame(&goaway_frame)); 2868 frames.push_back(QuicFrame(&goaway_frame));
2477 2869
2478 unsigned char packet[] = { 2870 unsigned char packet[] = {
2479 // public flags (8 byte guid) 2871 // public flags (8 byte guid)
2480 0x0C, 2872 0x3C,
2481 // guid 2873 // guid
2482 0x10, 0x32, 0x54, 0x76, 2874 0x10, 0x32, 0x54, 0x76,
2483 0x98, 0xBA, 0xDC, 0xFE, 2875 0x98, 0xBA, 0xDC, 0xFE,
2484 // packet sequence number 2876 // packet sequence number
2485 0xBC, 0x9A, 0x78, 0x56, 2877 0xBC, 0x9A, 0x78, 0x56,
2486 0x34, 0x12, 2878 0x34, 0x12,
2487 // private flags(entropy) 2879 // private flags(entropy)
2488 0x01, 2880 0x01,
2489 2881
2490 // frame type (go away frame) 2882 // frame type (go away frame)
(...skipping 23 matching lines...) Expand all
2514 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { 2906 TEST_F(QuicFramerTest, ConstructPublicResetPacket) {
2515 QuicPublicResetPacket reset_packet; 2907 QuicPublicResetPacket reset_packet;
2516 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 2908 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
2517 reset_packet.public_header.reset_flag = true; 2909 reset_packet.public_header.reset_flag = true;
2518 reset_packet.public_header.version_flag = false; 2910 reset_packet.public_header.version_flag = false;
2519 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); 2911 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC);
2520 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); 2912 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789);
2521 2913
2522 unsigned char packet[] = { 2914 unsigned char packet[] = {
2523 // public flags (public reset, 8 byte GUID) 2915 // public flags (public reset, 8 byte GUID)
2524 0x0E, 2916 0x3E,
2525 // guid 2917 // guid
2526 0x10, 0x32, 0x54, 0x76, 2918 0x10, 0x32, 0x54, 0x76,
2527 0x98, 0xBA, 0xDC, 0xFE, 2919 0x98, 0xBA, 0xDC, 0xFE,
2528 // nonce proof 2920 // nonce proof
2529 0x89, 0x67, 0x45, 0x23, 2921 0x89, 0x67, 0x45, 0x23,
2530 0x01, 0xEF, 0xCD, 0xAB, 2922 0x01, 0xEF, 0xCD, 0xAB,
2531 // rejected sequence number 2923 // rejected sequence number
2532 0xBC, 0x9A, 0x78, 0x56, 2924 0xBC, 0x9A, 0x78, 0x56,
2533 0x34, 0x12, 2925 0x34, 0x12,
2534 }; 2926 };
(...skipping 17 matching lines...) Expand all
2552 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); 2944 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC));
2553 header.is_in_fec_group = IN_FEC_GROUP; 2945 header.is_in_fec_group = IN_FEC_GROUP;
2554 header.fec_group = GG_UINT64_C(0x123456789ABB);; 2946 header.fec_group = GG_UINT64_C(0x123456789ABB);;
2555 2947
2556 QuicFecData fec_data; 2948 QuicFecData fec_data;
2557 fec_data.fec_group = 1; 2949 fec_data.fec_group = 1;
2558 fec_data.redundancy = "abcdefghijklmnop"; 2950 fec_data.redundancy = "abcdefghijklmnop";
2559 2951
2560 unsigned char packet[] = { 2952 unsigned char packet[] = {
2561 // public flags (8 byte guid) 2953 // public flags (8 byte guid)
2562 0x0C, 2954 0x3C,
2563 // guid 2955 // guid
2564 0x10, 0x32, 0x54, 0x76, 2956 0x10, 0x32, 0x54, 0x76,
2565 0x98, 0xBA, 0xDC, 0xFE, 2957 0x98, 0xBA, 0xDC, 0xFE,
2566 // packet sequence number 2958 // packet sequence number
2567 0xBC, 0x9A, 0x78, 0x56, 2959 0xBC, 0x9A, 0x78, 0x56,
2568 0x34, 0x12, 2960 0x34, 0x12,
2569 // private flags (entropy & fec group & fec packet) 2961 // private flags (entropy & fec group & fec packet)
2570 0x07, 2962 0x07,
2571 // first fec protected packet offset 2963 // first fec protected packet offset
2572 0x01, 2964 0x01,
(...skipping 11 matching lines...) Expand all
2584 2976
2585 test::CompareCharArraysWithHexError("constructed packet", 2977 test::CompareCharArraysWithHexError("constructed packet",
2586 data->data(), data->length(), 2978 data->data(), data->length(),
2587 AsChars(packet), arraysize(packet)); 2979 AsChars(packet), arraysize(packet));
2588 } 2980 }
2589 2981
2590 TEST_F(QuicFramerTest, EncryptPacket) { 2982 TEST_F(QuicFramerTest, EncryptPacket) {
2591 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 2983 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
2592 unsigned char packet[] = { 2984 unsigned char packet[] = {
2593 // public flags (8 byte guid) 2985 // public flags (8 byte guid)
2594 0x0C, 2986 0x3C,
2595 // guid 2987 // guid
2596 0x10, 0x32, 0x54, 0x76, 2988 0x10, 0x32, 0x54, 0x76,
2597 0x98, 0xBA, 0xDC, 0xFE, 2989 0x98, 0xBA, 0xDC, 0xFE,
2598 // packet sequence number 2990 // packet sequence number
2599 0xBC, 0x9A, 0x78, 0x56, 2991 0xBC, 0x9A, 0x78, 0x56,
2600 0x34, 0x12, 2992 0x34, 0x12,
2601 // private flags (fec group & fec packet) 2993 // private flags (fec group & fec packet)
2602 0x06, 2994 0x06,
2603 // first fec protected packet offset 2995 // first fec protected packet offset
2604 0x01, 2996 0x01,
2605 2997
2606 // redundancy 2998 // redundancy
2607 'a', 'b', 'c', 'd', 2999 'a', 'b', 'c', 'd',
2608 'e', 'f', 'g', 'h', 3000 'e', 'f', 'g', 'h',
2609 'i', 'j', 'k', 'l', 3001 'i', 'j', 'k', 'l',
2610 'm', 'n', 'o', 'p', 3002 'm', 'n', 'o', 'p',
2611 }; 3003 };
2612 3004
2613 scoped_ptr<QuicPacket> raw( 3005 scoped_ptr<QuicPacket> raw(
2614 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, 3006 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
2615 PACKET_8BYTE_GUID, !kIncludeVersion)); 3007 PACKET_8BYTE_GUID, !kIncludeVersion,
3008 PACKET_6BYTE_SEQUENCE_NUMBER));
2616 scoped_ptr<QuicEncryptedPacket> encrypted( 3009 scoped_ptr<QuicEncryptedPacket> encrypted(
2617 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 3010 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
2618 3011
2619 ASSERT_TRUE(encrypted.get() != NULL); 3012 ASSERT_TRUE(encrypted.get() != NULL);
2620 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 3013 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
2621 } 3014 }
2622 3015
2623 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { 3016 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) {
2624 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 3017 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
2625 unsigned char packet[] = { 3018 unsigned char packet[] = {
2626 // public flags (version, 8 byte guid) 3019 // public flags (version, 8 byte guid)
2627 0x0D, 3020 0x3D,
2628 // guid 3021 // guid
2629 0x10, 0x32, 0x54, 0x76, 3022 0x10, 0x32, 0x54, 0x76,
2630 0x98, 0xBA, 0xDC, 0xFE, 3023 0x98, 0xBA, 0xDC, 0xFE,
2631 // version tag 3024 // version tag
2632 'Q', '.', '1', '0', 3025 'Q', '.', '1', '0',
2633 // packet sequence number 3026 // packet sequence number
2634 0xBC, 0x9A, 0x78, 0x56, 3027 0xBC, 0x9A, 0x78, 0x56,
2635 0x34, 0x12, 3028 0x34, 0x12,
2636 // private flags (fec group & fec flags) 3029 // private flags (fec group & fec flags)
2637 0x06, 3030 0x06,
2638 // first fec protected packet offset 3031 // first fec protected packet offset
2639 0x01, 3032 0x01,
2640 3033
2641 // redundancy 3034 // redundancy
2642 'a', 'b', 'c', 'd', 3035 'a', 'b', 'c', 'd',
2643 'e', 'f', 'g', 'h', 3036 'e', 'f', 'g', 'h',
2644 'i', 'j', 'k', 'l', 3037 'i', 'j', 'k', 'l',
2645 'm', 'n', 'o', 'p', 3038 'm', 'n', 'o', 'p',
2646 }; 3039 };
2647 3040
2648 scoped_ptr<QuicPacket> raw( 3041 scoped_ptr<QuicPacket> raw(
2649 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, 3042 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false,
2650 PACKET_8BYTE_GUID, kIncludeVersion)); 3043 PACKET_8BYTE_GUID, kIncludeVersion,
3044 PACKET_6BYTE_SEQUENCE_NUMBER));
2651 scoped_ptr<QuicEncryptedPacket> encrypted( 3045 scoped_ptr<QuicEncryptedPacket> encrypted(
2652 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 3046 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
2653 3047
2654 ASSERT_TRUE(encrypted.get() != NULL); 3048 ASSERT_TRUE(encrypted.get() != NULL);
2655 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 3049 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
2656 } 3050 }
2657 3051
2658 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ 3052 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/
2659 // lands. Currently this is causing valgrind problems, but it should be 3053 // lands. Currently this is causing valgrind problems, but it should be
2660 // fixed in the followup CL. 3054 // fixed in the followup CL.
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2809 original_raw_length = raw_close_packet->length(); 3203 original_raw_length = raw_close_packet->length();
2810 raw_close_packet.reset( 3204 raw_close_packet.reset(
2811 framer_.ConstructFrameDataPacket(header, frames).packet); 3205 framer_.ConstructFrameDataPacket(header, frames).packet);
2812 ASSERT_TRUE(raw_ack_packet != NULL); 3206 ASSERT_TRUE(raw_ack_packet != NULL);
2813 EXPECT_EQ(original_raw_length, raw_close_packet->length()); 3207 EXPECT_EQ(original_raw_length, raw_close_packet->length());
2814 } 3208 }
2815 3209
2816 TEST_F(QuicFramerTest, EntropyFlagTest) { 3210 TEST_F(QuicFramerTest, EntropyFlagTest) {
2817 unsigned char packet[] = { 3211 unsigned char packet[] = {
2818 // public flags (8 byte guid) 3212 // public flags (8 byte guid)
2819 0x0C, 3213 0x3C,
2820 // guid 3214 // guid
2821 0x10, 0x32, 0x54, 0x76, 3215 0x10, 0x32, 0x54, 0x76,
2822 0x98, 0xBA, 0xDC, 0xFE, 3216 0x98, 0xBA, 0xDC, 0xFE,
2823 // packet sequence number 3217 // packet sequence number
2824 0xBC, 0x9A, 0x78, 0x56, 3218 0xBC, 0x9A, 0x78, 0x56,
2825 0x34, 0x12, 3219 0x34, 0x12,
2826 // private flags (Entropy) 3220 // private flags (Entropy)
2827 0x01, 3221 0x01,
2828 3222
2829 // frame type (stream frame) 3223 // frame type (stream frame)
(...skipping 18 matching lines...) Expand all
2848 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2849 ASSERT_TRUE(visitor_.header_.get()); 3243 ASSERT_TRUE(visitor_.header_.get());
2850 EXPECT_TRUE(visitor_.header_->entropy_flag); 3244 EXPECT_TRUE(visitor_.header_->entropy_flag);
2851 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 3245 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
2852 EXPECT_FALSE(visitor_.header_->fec_flag); 3246 EXPECT_FALSE(visitor_.header_->fec_flag);
2853 }; 3247 };
2854 3248
2855 TEST_F(QuicFramerTest, FecEntropyTest) { 3249 TEST_F(QuicFramerTest, FecEntropyTest) {
2856 unsigned char packet[] = { 3250 unsigned char packet[] = {
2857 // public flags (8 byte guid) 3251 // public flags (8 byte guid)
2858 0x0C, 3252 0x3C,
2859 // guid 3253 // guid
2860 0x10, 0x32, 0x54, 0x76, 3254 0x10, 0x32, 0x54, 0x76,
2861 0x98, 0xBA, 0xDC, 0xFE, 3255 0x98, 0xBA, 0xDC, 0xFE,
2862 // packet sequence number 3256 // packet sequence number
2863 0xBC, 0x9A, 0x78, 0x56, 3257 0xBC, 0x9A, 0x78, 0x56,
2864 0x34, 0x12, 3258 0x34, 0x12,
2865 // private flags (Entropy & fec group & FEC) 3259 // private flags (Entropy & fec group & FEC)
2866 0x07, 3260 0x07,
2867 // first fec protected packet offset 3261 // first fec protected packet offset
2868 0xFF, 3262 0xFF,
(...skipping 20 matching lines...) Expand all
2889 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3283 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2890 ASSERT_TRUE(visitor_.header_.get()); 3284 ASSERT_TRUE(visitor_.header_.get());
2891 EXPECT_TRUE(visitor_.header_->fec_flag); 3285 EXPECT_TRUE(visitor_.header_->fec_flag);
2892 EXPECT_TRUE(visitor_.header_->entropy_flag); 3286 EXPECT_TRUE(visitor_.header_->entropy_flag);
2893 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 3287 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
2894 }; 3288 };
2895 3289
2896 TEST_F(QuicFramerTest, StopPacketProcessing) { 3290 TEST_F(QuicFramerTest, StopPacketProcessing) {
2897 unsigned char packet[] = { 3291 unsigned char packet[] = {
2898 // public flags (8 byte guid) 3292 // public flags (8 byte guid)
2899 0x0C, 3293 0x3C,
2900 // guid 3294 // guid
2901 0x10, 0x32, 0x54, 0x76, 3295 0x10, 0x32, 0x54, 0x76,
2902 0x98, 0xBA, 0xDC, 0xFE, 3296 0x98, 0xBA, 0xDC, 0xFE,
2903 // packet sequence number 3297 // packet sequence number
2904 0xBC, 0x9A, 0x78, 0x56, 3298 0xBC, 0x9A, 0x78, 0x56,
2905 0x34, 0x12, 3299 0x34, 0x12,
2906 // Entropy 3300 // Entropy
2907 0x01, 3301 0x01,
2908 3302
2909 // frame type (stream frame) 3303 // frame type (stream frame)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2950 EXPECT_CALL(visitor, OnPacketComplete()); 3344 EXPECT_CALL(visitor, OnPacketComplete());
2951 3345
2952 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3346 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2953 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3347 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2954 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2955 } 3349 }
2956 3350
2957 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { 3351 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) {
2958 unsigned char packet[] = { 3352 unsigned char packet[] = {
2959 // public flags (8 byte guid) 3353 // public flags (8 byte guid)
2960 0x0C, 3354 0x3C,
2961 // guid 3355 // guid
2962 0x10, 0x32, 0x54, 0x76, 3356 0x10, 0x32, 0x54, 0x76,
2963 0x98, 0xBA, 0xDC, 0xFE, 3357 0x98, 0xBA, 0xDC, 0xFE,
2964 // packet sequence number 3358 // packet sequence number
2965 0xBC, 0x9A, 0x78, 0x56, 3359 0xBC, 0x9A, 0x78, 0x56,
2966 0x34, 0x12, 3360 0x34, 0x12,
2967 // private flags 3361 // private flags
2968 0x00, 3362 0x00,
2969 3363
2970 // frame type (connection close frame) 3364 // frame type (connection close frame)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3007 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); 3401 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0);
3008 EXPECT_CALL(visitor, OnPacketComplete()); 3402 EXPECT_CALL(visitor, OnPacketComplete());
3009 3403
3010 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3011 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3405 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3012 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 3406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3013 } 3407 }
3014 3408
3015 } // namespace test 3409 } // namespace test
3016 } // namespace net 3410 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698