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

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

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

Powered by Google App Engine
This is Rietveld 408576698