| OLD | NEW |
| 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/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 | 214 |
| 215 virtual void OnVersionNegotiationPacket( | 215 virtual void OnVersionNegotiationPacket( |
| 216 const QuicVersionNegotiationPacket& packet) OVERRIDE { | 216 const QuicVersionNegotiationPacket& packet) OVERRIDE { |
| 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
| 218 } | 218 } |
| 219 | 219 |
| 220 virtual void OnRevivedPacket() OVERRIDE { | 220 virtual void OnRevivedPacket() OVERRIDE { |
| 221 revived_packets_++; | 221 revived_packets_++; |
| 222 } | 222 } |
| 223 | 223 |
| 224 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { | 224 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE { |
| 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; | 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; |
| 226 version_mismatch_++; | 226 version_mismatch_++; |
| 227 return true; | 227 return true; |
| 228 } | 228 } |
| 229 | 229 |
| 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { | 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { |
| 231 packet_count_++; | 231 packet_count_++; |
| 232 header_.reset(new QuicPacketHeader(header)); | 232 header_.reset(new QuicPacketHeader(header)); |
| 233 return accept_packet_; | 233 return accept_packet_; |
| 234 } | 234 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 vector<QuicStreamFrame*> stream_frames_; | 298 vector<QuicStreamFrame*> stream_frames_; |
| 299 vector<QuicAckFrame*> ack_frames_; | 299 vector<QuicAckFrame*> ack_frames_; |
| 300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; | 300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; |
| 301 vector<QuicFecData*> fec_data_; | 301 vector<QuicFecData*> fec_data_; |
| 302 string fec_protected_payload_; | 302 string fec_protected_payload_; |
| 303 QuicRstStreamFrame rst_stream_frame_; | 303 QuicRstStreamFrame rst_stream_frame_; |
| 304 QuicConnectionCloseFrame connection_close_frame_; | 304 QuicConnectionCloseFrame connection_close_frame_; |
| 305 QuicGoAwayFrame goaway_frame_; | 305 QuicGoAwayFrame goaway_frame_; |
| 306 }; | 306 }; |
| 307 | 307 |
| 308 class QuicFramerTest : public ::testing::Test { | 308 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { |
| 309 public: | 309 public: |
| 310 QuicFramerTest() | 310 QuicFramerTest() |
| 311 : encrypter_(new test::TestEncrypter()), | 311 : encrypter_(new test::TestEncrypter()), |
| 312 decrypter_(new test::TestDecrypter()), | 312 decrypter_(new test::TestDecrypter()), |
| 313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
| 314 framer_(kQuicVersion1, start_, true) { | 314 framer_(QuicVersionMax(), start_, true) { |
| 315 framer_.SetDecrypter(decrypter_); | 315 framer_.SetDecrypter(decrypter_); |
| 316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); | 316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); |
| 317 framer_.set_visitor(&visitor_); | 317 framer_.set_visitor(&visitor_); |
| 318 framer_.set_entropy_calculator(&entropy_calculator_); | 318 framer_.set_received_entropy_calculator(&entropy_calculator_); |
| 319 |
| 320 QuicVersion version = GetParam(); |
| 321 framer_.set_version(version); |
| 319 } | 322 } |
| 320 | 323 |
| 321 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, | 324 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, |
| 322 QuicPacket* packet) { | 325 QuicPacket* packet) { |
| 323 if (sequence_number != encrypter_->sequence_number_) { | 326 if (sequence_number != encrypter_->sequence_number_) { |
| 324 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " | 327 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " |
| 325 << sequence_number << " actual: " | 328 << sequence_number << " actual: " |
| 326 << encrypter_->sequence_number_; | 329 << encrypter_->sequence_number_; |
| 327 return false; | 330 return false; |
| 328 } | 331 } |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 } | 411 } |
| 409 | 412 |
| 410 test::TestEncrypter* encrypter_; | 413 test::TestEncrypter* encrypter_; |
| 411 test::TestDecrypter* decrypter_; | 414 test::TestDecrypter* decrypter_; |
| 412 QuicTime start_; | 415 QuicTime start_; |
| 413 QuicFramer framer_; | 416 QuicFramer framer_; |
| 414 test::TestQuicVisitor visitor_; | 417 test::TestQuicVisitor visitor_; |
| 415 test::TestEntropyCalculator entropy_calculator_; | 418 test::TestEntropyCalculator entropy_calculator_; |
| 416 }; | 419 }; |
| 417 | 420 |
| 418 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { | 421 // Run all framer tests with QUIC version 6. |
| 422 INSTANTIATE_TEST_CASE_P(QuicFramerTests, |
| 423 QuicFramerTest, |
| 424 ::testing::Values(QUIC_VERSION_6)); |
| 425 |
| 426 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { |
| 419 // A few quick manual sanity checks | 427 // A few quick manual sanity checks |
| 420 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); | 428 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); |
| 421 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); | 429 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); |
| 422 CheckCalculatePacketSequenceNumber(kEpoch, kMask); | 430 CheckCalculatePacketSequenceNumber(kEpoch, kMask); |
| 423 | 431 |
| 424 // Cases where the last number was close to the start of the range | 432 // Cases where the last number was close to the start of the range |
| 425 for (uint64 last = 0; last < 10; last++) { | 433 for (uint64 last = 0; last < 10; last++) { |
| 426 // Small numbers should not wrap (even if they're out of order). | 434 // Small numbers should not wrap (even if they're out of order). |
| 427 for (uint64 j = 0; j < 10; j++) { | 435 for (uint64 j = 0; j < 10; j++) { |
| 428 CheckCalculatePacketSequenceNumber(j, last); | 436 CheckCalculatePacketSequenceNumber(j, last); |
| 429 } | 437 } |
| 430 | 438 |
| 431 // Large numbers should not wrap either (because we're near 0 already). | 439 // Large numbers should not wrap either (because we're near 0 already). |
| 432 for (uint64 j = 0; j < 10; j++) { | 440 for (uint64 j = 0; j < 10; j++) { |
| 433 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); | 441 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); |
| 434 } | 442 } |
| 435 } | 443 } |
| 436 } | 444 } |
| 437 | 445 |
| 438 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) { | 446 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) { |
| 439 // Cases where the last number was close to the end of the range | 447 // Cases where the last number was close to the end of the range |
| 440 for (uint64 i = 0; i < 10; i++) { | 448 for (uint64 i = 0; i < 10; i++) { |
| 441 QuicPacketSequenceNumber last = kEpoch - i; | 449 QuicPacketSequenceNumber last = kEpoch - i; |
| 442 | 450 |
| 443 // Small numbers should wrap. | 451 // Small numbers should wrap. |
| 444 for (uint64 j = 0; j < 10; j++) { | 452 for (uint64 j = 0; j < 10; j++) { |
| 445 CheckCalculatePacketSequenceNumber(kEpoch + j, last); | 453 CheckCalculatePacketSequenceNumber(kEpoch + j, last); |
| 446 } | 454 } |
| 447 | 455 |
| 448 // Large numbers should not (even if they're out of order). | 456 // Large numbers should not (even if they're out of order). |
| 449 for (uint64 j = 0; j < 10; j++) { | 457 for (uint64 j = 0; j < 10; j++) { |
| 450 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); | 458 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); |
| 451 } | 459 } |
| 452 } | 460 } |
| 453 } | 461 } |
| 454 | 462 |
| 455 // Next check where we're in a non-zero epoch to verify we handle | 463 // Next check where we're in a non-zero epoch to verify we handle |
| 456 // reverse wrapping, too. | 464 // reverse wrapping, too. |
| 457 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) { | 465 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) { |
| 458 const uint64 prev_epoch = 1 * kEpoch; | 466 const uint64 prev_epoch = 1 * kEpoch; |
| 459 const uint64 cur_epoch = 2 * kEpoch; | 467 const uint64 cur_epoch = 2 * kEpoch; |
| 460 // Cases where the last number was close to the start of the range | 468 // Cases where the last number was close to the start of the range |
| 461 for (uint64 i = 0; i < 10; i++) { | 469 for (uint64 i = 0; i < 10; i++) { |
| 462 uint64 last = cur_epoch + i; | 470 uint64 last = cur_epoch + i; |
| 463 // Small number should not wrap (even if they're out of order). | 471 // Small number should not wrap (even if they're out of order). |
| 464 for (uint64 j = 0; j < 10; j++) { | 472 for (uint64 j = 0; j < 10; j++) { |
| 465 CheckCalculatePacketSequenceNumber(cur_epoch + j, last); | 473 CheckCalculatePacketSequenceNumber(cur_epoch + j, last); |
| 466 } | 474 } |
| 467 | 475 |
| 468 // But large numbers should reverse wrap. | 476 // But large numbers should reverse wrap. |
| 469 for (uint64 j = 0; j < 10; j++) { | 477 for (uint64 j = 0; j < 10; j++) { |
| 470 uint64 num = kEpoch - 1 - j; | 478 uint64 num = kEpoch - 1 - j; |
| 471 CheckCalculatePacketSequenceNumber(prev_epoch + num, last); | 479 CheckCalculatePacketSequenceNumber(prev_epoch + num, last); |
| 472 } | 480 } |
| 473 } | 481 } |
| 474 } | 482 } |
| 475 | 483 |
| 476 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) { | 484 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) { |
| 477 const uint64 cur_epoch = 2 * kEpoch; | 485 const uint64 cur_epoch = 2 * kEpoch; |
| 478 const uint64 next_epoch = 3 * kEpoch; | 486 const uint64 next_epoch = 3 * kEpoch; |
| 479 // Cases where the last number was close to the end of the range | 487 // Cases where the last number was close to the end of the range |
| 480 for (uint64 i = 0; i < 10; i++) { | 488 for (uint64 i = 0; i < 10; i++) { |
| 481 QuicPacketSequenceNumber last = next_epoch - 1 - i; | 489 QuicPacketSequenceNumber last = next_epoch - 1 - i; |
| 482 | 490 |
| 483 // Small numbers should wrap. | 491 // Small numbers should wrap. |
| 484 for (uint64 j = 0; j < 10; j++) { | 492 for (uint64 j = 0; j < 10; j++) { |
| 485 CheckCalculatePacketSequenceNumber(next_epoch + j, last); | 493 CheckCalculatePacketSequenceNumber(next_epoch + j, last); |
| 486 } | 494 } |
| 487 | 495 |
| 488 // but large numbers should not (even if they're out of order). | 496 // but large numbers should not (even if they're out of order). |
| 489 for (uint64 j = 0; j < 10; j++) { | 497 for (uint64 j = 0; j < 10; j++) { |
| 490 uint64 num = kEpoch - 1 - j; | 498 uint64 num = kEpoch - 1 - j; |
| 491 CheckCalculatePacketSequenceNumber(cur_epoch + num, last); | 499 CheckCalculatePacketSequenceNumber(cur_epoch + num, last); |
| 492 } | 500 } |
| 493 } | 501 } |
| 494 } | 502 } |
| 495 | 503 |
| 496 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { | 504 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { |
| 497 const uint64 max_number = numeric_limits<uint64>::max(); | 505 const uint64 max_number = numeric_limits<uint64>::max(); |
| 498 const uint64 max_epoch = max_number & ~kMask; | 506 const uint64 max_epoch = max_number & ~kMask; |
| 499 | 507 |
| 500 // Cases where the last number was close to the end of the range | 508 // Cases where the last number was close to the end of the range |
| 501 for (uint64 i = 0; i < 10; i++) { | 509 for (uint64 i = 0; i < 10; i++) { |
| 502 // Subtract 1, because the expected next sequence number is 1 more than the | 510 // Subtract 1, because the expected next sequence number is 1 more than the |
| 503 // last sequence number. | 511 // last sequence number. |
| 504 QuicPacketSequenceNumber last = max_number - i - 1; | 512 QuicPacketSequenceNumber last = max_number - i - 1; |
| 505 | 513 |
| 506 // Small numbers should not wrap, because they have nowhere to go. | 514 // Small numbers should not wrap, because they have nowhere to go. |
| 507 for (uint64 j = 0; j < 10; j++) { | 515 for (uint64 j = 0; j < 10; j++) { |
| 508 CheckCalculatePacketSequenceNumber(max_epoch + j, last); | 516 CheckCalculatePacketSequenceNumber(max_epoch + j, last); |
| 509 } | 517 } |
| 510 | 518 |
| 511 // Large numbers should not wrap either. | 519 // Large numbers should not wrap either. |
| 512 for (uint64 j = 0; j < 10; j++) { | 520 for (uint64 j = 0; j < 10; j++) { |
| 513 uint64 num = kEpoch - 1 - j; | 521 uint64 num = kEpoch - 1 - j; |
| 514 CheckCalculatePacketSequenceNumber(max_epoch + num, last); | 522 CheckCalculatePacketSequenceNumber(max_epoch + num, last); |
| 515 } | 523 } |
| 516 } | 524 } |
| 517 } | 525 } |
| 518 | 526 |
| 519 TEST_F(QuicFramerTest, EmptyPacket) { | 527 TEST_P(QuicFramerTest, EmptyPacket) { |
| 520 char packet[] = { 0x00 }; | 528 char packet[] = { 0x00 }; |
| 521 QuicEncryptedPacket encrypted(packet, 0, false); | 529 QuicEncryptedPacket encrypted(packet, 0, false); |
| 522 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 530 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 523 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 531 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
| 524 } | 532 } |
| 525 | 533 |
| 526 TEST_F(QuicFramerTest, LargePacket) { | 534 TEST_P(QuicFramerTest, LargePacket) { |
| 527 unsigned char packet[kMaxPacketSize + 1] = { | 535 unsigned char packet[kMaxPacketSize + 1] = { |
| 528 // public flags (8 byte guid) | 536 // public flags (8 byte guid) |
| 529 0x3C, | 537 0x3C, |
| 530 // guid | 538 // guid |
| 531 0x10, 0x32, 0x54, 0x76, | 539 0x10, 0x32, 0x54, 0x76, |
| 532 0x98, 0xBA, 0xDC, 0xFE, | 540 0x98, 0xBA, 0xDC, 0xFE, |
| 533 // packet sequence number | 541 // packet sequence number |
| 534 0xBC, 0x9A, 0x78, 0x56, | 542 0xBC, 0x9A, 0x78, 0x56, |
| 535 0x34, 0x12, | 543 0x34, 0x12, |
| 536 // private flags | 544 // private flags |
| (...skipping 11 matching lines...) Expand all Loading... |
| 548 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 556 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 549 | 557 |
| 550 ASSERT_TRUE(visitor_.header_.get()); | 558 ASSERT_TRUE(visitor_.header_.get()); |
| 551 // Make sure we've parsed the packet header, so we can send an error. | 559 // Make sure we've parsed the packet header, so we can send an error. |
| 552 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 560 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
| 553 visitor_.header_->public_header.guid); | 561 visitor_.header_->public_header.guid); |
| 554 // Make sure the correct error is propagated. | 562 // Make sure the correct error is propagated. |
| 555 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 563 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
| 556 } | 564 } |
| 557 | 565 |
| 558 TEST_F(QuicFramerTest, PacketHeader) { | 566 TEST_P(QuicFramerTest, PacketHeader) { |
| 559 unsigned char packet[] = { | 567 unsigned char packet[] = { |
| 560 // public flags (8 byte guid) | 568 // public flags (8 byte guid) |
| 561 0x3C, | 569 0x3C, |
| 562 // guid | 570 // guid |
| 563 0x10, 0x32, 0x54, 0x76, | 571 0x10, 0x32, 0x54, 0x76, |
| 564 0x98, 0xBA, 0xDC, 0xFE, | 572 0x98, 0xBA, 0xDC, 0xFE, |
| 565 // packet sequence number | 573 // packet sequence number |
| 566 0xBC, 0x9A, 0x78, 0x56, | 574 0xBC, 0x9A, 0x78, 0x56, |
| 567 0x34, 0x12, | 575 0x34, 0x12, |
| 568 // private flags | 576 // private flags |
| (...skipping 30 matching lines...) Expand all Loading... |
| 599 expected_error = "Unable to read sequence number."; | 607 expected_error = "Unable to read sequence number."; |
| 600 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 608 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
| 601 expected_error = "Unable to read private flags."; | 609 expected_error = "Unable to read private flags."; |
| 602 } else { | 610 } else { |
| 603 expected_error = "Unable to read first fec protected packet offset."; | 611 expected_error = "Unable to read first fec protected packet offset."; |
| 604 } | 612 } |
| 605 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 613 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 606 } | 614 } |
| 607 } | 615 } |
| 608 | 616 |
| 609 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { | 617 TEST_P(QuicFramerTest, PacketHeaderWith4ByteGuid) { |
| 610 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 618 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
| 611 GG_UINT64_C(0xFEDCBA9876543210)); | 619 GG_UINT64_C(0xFEDCBA9876543210)); |
| 612 | 620 |
| 613 unsigned char packet[] = { | 621 unsigned char packet[] = { |
| 614 // public flags (4 byte guid) | 622 // public flags (4 byte guid) |
| 615 0x38, | 623 0x38, |
| 616 // guid | 624 // guid |
| 617 0x10, 0x32, 0x54, 0x76, | 625 0x10, 0x32, 0x54, 0x76, |
| 618 // packet sequence number | 626 // packet sequence number |
| 619 0xBC, 0x9A, 0x78, 0x56, | 627 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 expected_error = "Unable to read sequence number."; | 662 expected_error = "Unable to read sequence number."; |
| 655 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { | 663 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { |
| 656 expected_error = "Unable to read private flags."; | 664 expected_error = "Unable to read private flags."; |
| 657 } else { | 665 } else { |
| 658 expected_error = "Unable to read first fec protected packet offset."; | 666 expected_error = "Unable to read first fec protected packet offset."; |
| 659 } | 667 } |
| 660 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 668 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 661 } | 669 } |
| 662 } | 670 } |
| 663 | 671 |
| 664 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { | 672 TEST_P(QuicFramerTest, PacketHeader1ByteGuid) { |
| 665 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 673 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
| 666 GG_UINT64_C(0xFEDCBA9876543210)); | 674 GG_UINT64_C(0xFEDCBA9876543210)); |
| 667 | 675 |
| 668 unsigned char packet[] = { | 676 unsigned char packet[] = { |
| 669 // public flags (1 byte guid) | 677 // public flags (1 byte guid) |
| 670 0x34, | 678 0x34, |
| 671 // guid | 679 // guid |
| 672 0x10, | 680 0x10, |
| 673 // packet sequence number | 681 // packet sequence number |
| 674 0xBC, 0x9A, 0x78, 0x56, | 682 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 expected_error = "Unable to read sequence number."; | 716 expected_error = "Unable to read sequence number."; |
| 709 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 717 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { |
| 710 expected_error = "Unable to read private flags."; | 718 expected_error = "Unable to read private flags."; |
| 711 } else { | 719 } else { |
| 712 expected_error = "Unable to read first fec protected packet offset."; | 720 expected_error = "Unable to read first fec protected packet offset."; |
| 713 } | 721 } |
| 714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 722 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 715 } | 723 } |
| 716 } | 724 } |
| 717 | 725 |
| 718 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { | 726 TEST_P(QuicFramerTest, PacketHeaderWith0ByteGuid) { |
| 719 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 727 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
| 720 GG_UINT64_C(0xFEDCBA9876543210)); | 728 GG_UINT64_C(0xFEDCBA9876543210)); |
| 721 | 729 |
| 722 unsigned char packet[] = { | 730 unsigned char packet[] = { |
| 723 // public flags (0 byte guid) | 731 // public flags (0 byte guid) |
| 724 0x30, | 732 0x30, |
| 725 // guid | 733 // guid |
| 726 // packet sequence number | 734 // packet sequence number |
| 727 0xBC, 0x9A, 0x78, 0x56, | 735 0xBC, 0x9A, 0x78, 0x56, |
| 728 0x34, 0x12, | 736 0x34, 0x12, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 expected_error = "Unable to read sequence number."; | 769 expected_error = "Unable to read sequence number."; |
| 762 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 770 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { |
| 763 expected_error = "Unable to read private flags."; | 771 expected_error = "Unable to read private flags."; |
| 764 } else { | 772 } else { |
| 765 expected_error = "Unable to read first fec protected packet offset."; | 773 expected_error = "Unable to read first fec protected packet offset."; |
| 766 } | 774 } |
| 767 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 775 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 768 } | 776 } |
| 769 } | 777 } |
| 770 | 778 |
| 771 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { | 779 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
| 780 // Set a specific version. |
| 781 framer_.set_version(QUIC_VERSION_6); |
| 782 |
| 772 unsigned char packet[] = { | 783 unsigned char packet[] = { |
| 773 // public flags (version) | 784 // public flags (version) |
| 774 0x3D, | 785 0x3D, |
| 775 // guid | 786 // guid |
| 776 0x10, 0x32, 0x54, 0x76, | 787 0x10, 0x32, 0x54, 0x76, |
| 777 0x98, 0xBA, 0xDC, 0xFE, | 788 0x98, 0xBA, 0xDC, 0xFE, |
| 778 // version tag | 789 // version tag |
| 779 'Q', '0', '0', '6', | 790 'Q', '0', '0', '6', |
| 780 // packet sequence number | 791 // packet sequence number |
| 781 0xBC, 0x9A, 0x78, 0x56, | 792 0xBC, 0x9A, 0x78, 0x56, |
| 782 0x34, 0x12, | 793 0x34, 0x12, |
| 783 // private flags | 794 // private flags |
| 784 0x00, | 795 0x00, |
| 785 }; | 796 }; |
| 786 | 797 |
| 787 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 798 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 788 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 799 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 789 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 800 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
| 790 ASSERT_TRUE(visitor_.header_.get()); | 801 ASSERT_TRUE(visitor_.header_.get()); |
| 791 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 802 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
| 792 visitor_.header_->public_header.guid); | 803 visitor_.header_->public_header.guid); |
| 793 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 804 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 794 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 805 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
| 795 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); | 806 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_->public_header.versions[0]); |
| 796 EXPECT_FALSE(visitor_.header_->fec_flag); | 807 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 797 EXPECT_FALSE(visitor_.header_->entropy_flag); | 808 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 798 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 809 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 799 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 810 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
| 800 visitor_.header_->packet_sequence_number); | 811 visitor_.header_->packet_sequence_number); |
| 801 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 812 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 802 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 813 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 803 | 814 |
| 804 // Now test framing boundaries | 815 // Now test framing boundaries |
| 805 for (size_t i = 0; | 816 for (size_t i = 0; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 817 expected_error = "Unable to read sequence number."; | 828 expected_error = "Unable to read sequence number."; |
| 818 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 829 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
| 819 expected_error = "Unable to read private flags."; | 830 expected_error = "Unable to read private flags."; |
| 820 } else { | 831 } else { |
| 821 expected_error = "Unable to read first fec protected packet offset."; | 832 expected_error = "Unable to read first fec protected packet offset."; |
| 822 } | 833 } |
| 823 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 834 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 824 } | 835 } |
| 825 } | 836 } |
| 826 | 837 |
| 827 TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { | 838 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { |
| 828 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 839 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 829 GG_UINT64_C(0x123456789ABA)); | 840 GG_UINT64_C(0x123456789ABA)); |
| 830 | 841 |
| 831 unsigned char packet[] = { | 842 unsigned char packet[] = { |
| 832 // public flags (8 byte guid and 4 byte sequence number) | 843 // public flags (8 byte guid and 4 byte sequence number) |
| 833 0x2C, | 844 0x2C, |
| 834 // guid | 845 // guid |
| 835 0x10, 0x32, 0x54, 0x76, | 846 0x10, 0x32, 0x54, 0x76, |
| 836 0x98, 0xBA, 0xDC, 0xFE, | 847 0x98, 0xBA, 0xDC, 0xFE, |
| 837 // packet sequence number | 848 // packet sequence number |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 883 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 873 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 884 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
| 874 expected_error = "Unable to read private flags."; | 885 expected_error = "Unable to read private flags."; |
| 875 } else { | 886 } else { |
| 876 expected_error = "Unable to read first fec protected packet offset."; | 887 expected_error = "Unable to read first fec protected packet offset."; |
| 877 } | 888 } |
| 878 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 889 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 879 } | 890 } |
| 880 } | 891 } |
| 881 | 892 |
| 882 TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { | 893 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { |
| 883 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 894 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 884 GG_UINT64_C(0x123456789ABA)); | 895 GG_UINT64_C(0x123456789ABA)); |
| 885 | 896 |
| 886 unsigned char packet[] = { | 897 unsigned char packet[] = { |
| 887 // public flags (8 byte guid and 2 byte sequence number) | 898 // public flags (8 byte guid and 2 byte sequence number) |
| 888 0x1C, | 899 0x1C, |
| 889 // guid | 900 // guid |
| 890 0x10, 0x32, 0x54, 0x76, | 901 0x10, 0x32, 0x54, 0x76, |
| 891 0x98, 0xBA, 0xDC, 0xFE, | 902 0x98, 0xBA, 0xDC, 0xFE, |
| 892 // packet sequence number | 903 // packet sequence number |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 938 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 928 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 939 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
| 929 expected_error = "Unable to read private flags."; | 940 expected_error = "Unable to read private flags."; |
| 930 } else { | 941 } else { |
| 931 expected_error = "Unable to read first fec protected packet offset."; | 942 expected_error = "Unable to read first fec protected packet offset."; |
| 932 } | 943 } |
| 933 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 944 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 934 } | 945 } |
| 935 } | 946 } |
| 936 | 947 |
| 937 TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { | 948 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { |
| 938 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 949 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 939 GG_UINT64_C(0x123456789ABA)); | 950 GG_UINT64_C(0x123456789ABA)); |
| 940 | 951 |
| 941 unsigned char packet[] = { | 952 unsigned char packet[] = { |
| 942 // public flags (8 byte guid and 1 byte sequence number) | 953 // public flags (8 byte guid and 1 byte sequence number) |
| 943 0x0C, | 954 0x0C, |
| 944 // guid | 955 // guid |
| 945 0x10, 0x32, 0x54, 0x76, | 956 0x10, 0x32, 0x54, 0x76, |
| 946 0x98, 0xBA, 0xDC, 0xFE, | 957 0x98, 0xBA, 0xDC, 0xFE, |
| 947 // packet sequence number | 958 // packet sequence number |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 982 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 993 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 983 PACKET_1BYTE_SEQUENCE_NUMBER)) { | 994 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
| 984 expected_error = "Unable to read private flags."; | 995 expected_error = "Unable to read private flags."; |
| 985 } else { | 996 } else { |
| 986 expected_error = "Unable to read first fec protected packet offset."; | 997 expected_error = "Unable to read first fec protected packet offset."; |
| 987 } | 998 } |
| 988 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 999 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 989 } | 1000 } |
| 990 } | 1001 } |
| 991 | 1002 |
| 992 TEST_F(QuicFramerTest, InvalidPublicFlag) { | 1003 TEST_P(QuicFramerTest, InvalidPublicFlag) { |
| 993 unsigned char packet[] = { | 1004 unsigned char packet[] = { |
| 994 // public flags | 1005 // public flags, unknown flag at bit 6 |
| 995 0x40, | 1006 0x40, |
| 996 // guid | 1007 // guid |
| 997 0x10, 0x32, 0x54, 0x76, | 1008 0x10, 0x32, 0x54, 0x76, |
| 998 0x98, 0xBA, 0xDC, 0xFE, | 1009 0x98, 0xBA, 0xDC, 0xFE, |
| 999 // packet sequence number | 1010 // packet sequence number |
| 1000 0xBC, 0x9A, 0x78, 0x56, | 1011 0xBC, 0x9A, 0x78, 0x56, |
| 1001 0x34, 0x12, | 1012 0x34, 0x12, |
| 1002 // private flags | 1013 // private flags |
| 1003 0x00, | 1014 0x00, |
| 1004 | 1015 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1019 'h', 'e', 'l', 'l', | 1030 'h', 'e', 'l', 'l', |
| 1020 'o', ' ', 'w', 'o', | 1031 'o', ' ', 'w', 'o', |
| 1021 'r', 'l', 'd', '!', | 1032 'r', 'l', 'd', '!', |
| 1022 }; | 1033 }; |
| 1023 CheckProcessingFails(packet, | 1034 CheckProcessingFails(packet, |
| 1024 arraysize(packet), | 1035 arraysize(packet), |
| 1025 "Illegal public flags value.", | 1036 "Illegal public flags value.", |
| 1026 QUIC_INVALID_PACKET_HEADER); | 1037 QUIC_INVALID_PACKET_HEADER); |
| 1027 }; | 1038 }; |
| 1028 | 1039 |
| 1029 TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { | 1040 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { |
| 1041 // Set a specific version. |
| 1042 framer_.set_version(QUIC_VERSION_6); |
| 1043 |
| 1030 unsigned char packet[] = { | 1044 unsigned char packet[] = { |
| 1031 // public flags (8 byte guid and version flag and an unknown flag) | 1045 // public flags (8 byte guid and version flag and an unknown flag) |
| 1032 0x4D, | 1046 0x4D, |
| 1033 // guid | 1047 // guid |
| 1034 0x10, 0x32, 0x54, 0x76, | 1048 0x10, 0x32, 0x54, 0x76, |
| 1035 0x98, 0xBA, 0xDC, 0xFE, | 1049 0x98, 0xBA, 0xDC, 0xFE, |
| 1036 // version tag | 1050 // version tag |
| 1037 'Q', '0', '0', '6', | 1051 'Q', '0', '0', '6', |
| 1038 // packet sequence number | 1052 // packet sequence number |
| 1039 0xBC, 0x9A, 0x78, 0x56, | 1053 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1058 'h', 'e', 'l', 'l', | 1072 'h', 'e', 'l', 'l', |
| 1059 'o', ' ', 'w', 'o', | 1073 'o', ' ', 'w', 'o', |
| 1060 'r', 'l', 'd', '!', | 1074 'r', 'l', 'd', '!', |
| 1061 }; | 1075 }; |
| 1062 CheckProcessingFails(packet, | 1076 CheckProcessingFails(packet, |
| 1063 arraysize(packet), | 1077 arraysize(packet), |
| 1064 "Illegal public flags value.", | 1078 "Illegal public flags value.", |
| 1065 QUIC_INVALID_PACKET_HEADER); | 1079 QUIC_INVALID_PACKET_HEADER); |
| 1066 }; | 1080 }; |
| 1067 | 1081 |
| 1068 TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { | 1082 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
| 1069 unsigned char packet[] = { | 1083 unsigned char packet[] = { |
| 1070 // public flags (8 byte guid, version flag and an unknown flag) | 1084 // public flags (8 byte guid, version flag and an unknown flag) |
| 1071 0x7D, | 1085 0x7D, |
| 1072 // guid | 1086 // guid |
| 1073 0x10, 0x32, 0x54, 0x76, | 1087 0x10, 0x32, 0x54, 0x76, |
| 1074 0x98, 0xBA, 0xDC, 0xFE, | 1088 0x98, 0xBA, 0xDC, 0xFE, |
| 1075 // version tag | 1089 // version tag |
| 1076 'Q', '0', '0', '0', | 1090 'Q', '0', '0', '0', |
| 1077 // packet sequence number | 1091 // packet sequence number |
| 1078 0xBC, 0x9A, 0x78, 0x56, | 1092 0xBC, 0x9A, 0x78, 0x56, |
| 1079 0x34, 0x12, | 1093 0x34, 0x12, |
| 1080 // private flags | 1094 // private flags |
| 1081 0x00, | 1095 0x00, |
| 1082 | 1096 |
| 1083 // frame type (padding frame) | 1097 // frame type (padding frame) |
| 1084 0x00, | 1098 0x00, |
| 1085 }; | 1099 }; |
| 1086 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1087 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1101 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1088 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1102 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1089 ASSERT_TRUE(visitor_.header_.get()); | 1103 ASSERT_TRUE(visitor_.header_.get()); |
| 1090 EXPECT_EQ(0, visitor_.frame_count_); | 1104 EXPECT_EQ(0, visitor_.frame_count_); |
| 1091 EXPECT_EQ(1, visitor_.version_mismatch_); | 1105 EXPECT_EQ(1, visitor_.version_mismatch_); |
| 1092 }; | 1106 }; |
| 1093 | 1107 |
| 1094 TEST_F(QuicFramerTest, InvalidPrivateFlag) { | 1108 TEST_P(QuicFramerTest, InvalidPrivateFlag) { |
| 1095 unsigned char packet[] = { | 1109 unsigned char packet[] = { |
| 1096 // public flags (8 byte guid) | 1110 // public flags (8 byte guid) |
| 1097 0x3C, | 1111 0x3C, |
| 1098 // guid | 1112 // guid |
| 1099 0x10, 0x32, 0x54, 0x76, | 1113 0x10, 0x32, 0x54, 0x76, |
| 1100 0x98, 0xBA, 0xDC, 0xFE, | 1114 0x98, 0xBA, 0xDC, 0xFE, |
| 1101 // packet sequence number | 1115 // packet sequence number |
| 1102 0xBC, 0x9A, 0x78, 0x56, | 1116 0xBC, 0x9A, 0x78, 0x56, |
| 1103 0x34, 0x12, | 1117 0x34, 0x12, |
| 1104 // private flags | 1118 // private flags |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1121 'h', 'e', 'l', 'l', | 1135 'h', 'e', 'l', 'l', |
| 1122 'o', ' ', 'w', 'o', | 1136 'o', ' ', 'w', 'o', |
| 1123 'r', 'l', 'd', '!', | 1137 'r', 'l', 'd', '!', |
| 1124 }; | 1138 }; |
| 1125 CheckProcessingFails(packet, | 1139 CheckProcessingFails(packet, |
| 1126 arraysize(packet), | 1140 arraysize(packet), |
| 1127 "Illegal private flags value.", | 1141 "Illegal private flags value.", |
| 1128 QUIC_INVALID_PACKET_HEADER); | 1142 QUIC_INVALID_PACKET_HEADER); |
| 1129 }; | 1143 }; |
| 1130 | 1144 |
| 1131 TEST_F(QuicFramerTest, PaddingFrame) { | 1145 TEST_P(QuicFramerTest, PaddingFrame) { |
| 1132 unsigned char packet[] = { | 1146 unsigned char packet[] = { |
| 1133 // public flags (8 byte guid) | 1147 // public flags (8 byte guid) |
| 1134 0x3C, | 1148 0x3C, |
| 1135 // guid | 1149 // guid |
| 1136 0x10, 0x32, 0x54, 0x76, | 1150 0x10, 0x32, 0x54, 0x76, |
| 1137 0x98, 0xBA, 0xDC, 0xFE, | 1151 0x98, 0xBA, 0xDC, 0xFE, |
| 1138 // packet sequence number | 1152 // packet sequence number |
| 1139 0xBC, 0x9A, 0x78, 0x56, | 1153 0xBC, 0x9A, 0x78, 0x56, |
| 1140 0x34, 0x12, | 1154 0x34, 0x12, |
| 1141 // private flags | 1155 // private flags |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1164 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1178 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
| 1165 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1179 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1166 // A packet with no frames is not acceptable. | 1180 // A packet with no frames is not acceptable. |
| 1167 CheckProcessingFails( | 1181 CheckProcessingFails( |
| 1168 packet, | 1182 packet, |
| 1169 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1183 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1170 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1184 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1171 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); | 1185 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); |
| 1172 } | 1186 } |
| 1173 | 1187 |
| 1174 TEST_F(QuicFramerTest, StreamFrame) { | 1188 TEST_P(QuicFramerTest, StreamFrame) { |
| 1175 unsigned char packet[] = { | 1189 unsigned char packet[] = { |
| 1176 // public flags (8 byte guid) | 1190 // public flags (8 byte guid) |
| 1177 0x3C, | 1191 0x3C, |
| 1178 // guid | 1192 // guid |
| 1179 0x10, 0x32, 0x54, 0x76, | 1193 0x10, 0x32, 0x54, 0x76, |
| 1180 0x98, 0xBA, 0xDC, 0xFE, | 1194 0x98, 0xBA, 0xDC, 0xFE, |
| 1181 // packet sequence number | 1195 // packet sequence number |
| 1182 0xBC, 0x9A, 0x78, 0x56, | 1196 0xBC, 0x9A, 0x78, 0x56, |
| 1183 0x34, 0x12, | 1197 0x34, 0x12, |
| 1184 // private flags | 1198 // private flags |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1234 expected_error = "Unable to read frame data."; | 1248 expected_error = "Unable to read frame data."; |
| 1235 } | 1249 } |
| 1236 CheckProcessingFails( | 1250 CheckProcessingFails( |
| 1237 packet, | 1251 packet, |
| 1238 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1252 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1239 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1253 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1240 expected_error, QUIC_INVALID_FRAME_DATA); | 1254 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1241 } | 1255 } |
| 1242 } | 1256 } |
| 1243 | 1257 |
| 1244 TEST_F(QuicFramerTest, StreamFrameWithVersion) { | 1258 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
| 1259 // Set a specific version. |
| 1260 framer_.set_version(QUIC_VERSION_6); |
| 1261 |
| 1245 unsigned char packet[] = { | 1262 unsigned char packet[] = { |
| 1246 // public flags (version, 8 byte guid) | 1263 // public flags (version, 8 byte guid) |
| 1247 0x3D, | 1264 0x3D, |
| 1248 // guid | 1265 // guid |
| 1249 0x10, 0x32, 0x54, 0x76, | 1266 0x10, 0x32, 0x54, 0x76, |
| 1250 0x98, 0xBA, 0xDC, 0xFE, | 1267 0x98, 0xBA, 0xDC, 0xFE, |
| 1251 // version tag | 1268 // version tag |
| 1252 'Q', '0', '0', '6', | 1269 'Q', '0', '0', '6', |
| 1253 // packet sequence number | 1270 // packet sequence number |
| 1254 0xBC, 0x9A, 0x78, 0x56, | 1271 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1272 'o', ' ', 'w', 'o', | 1289 'o', ' ', 'w', 'o', |
| 1273 'r', 'l', 'd', '!', | 1290 'r', 'l', 'd', '!', |
| 1274 }; | 1291 }; |
| 1275 | 1292 |
| 1276 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1293 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1277 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1294 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1278 | 1295 |
| 1279 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1296 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1280 ASSERT_TRUE(visitor_.header_.get()); | 1297 ASSERT_TRUE(visitor_.header_.get()); |
| 1281 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); | 1298 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); |
| 1282 EXPECT_EQ(kQuicVersion1, visitor_.header_.get()->public_header.versions[0]); | 1299 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_.get()->public_header.versions[0]); |
| 1283 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1300 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); |
| 1284 | 1301 |
| 1285 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1302 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1286 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1303 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1287 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1304 EXPECT_EQ(static_cast<uint64>(0x01020304), |
| 1288 visitor_.stream_frames_[0]->stream_id); | 1305 visitor_.stream_frames_[0]->stream_id); |
| 1289 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1306 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1290 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1307 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
| 1291 visitor_.stream_frames_[0]->offset); | 1308 visitor_.stream_frames_[0]->offset); |
| 1292 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1309 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1308 expected_error = "Unable to read frame data."; | 1325 expected_error = "Unable to read frame data."; |
| 1309 } | 1326 } |
| 1310 CheckProcessingFails( | 1327 CheckProcessingFails( |
| 1311 packet, | 1328 packet, |
| 1312 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, | 1329 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, |
| 1313 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1330 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1314 expected_error, QUIC_INVALID_FRAME_DATA); | 1331 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1315 } | 1332 } |
| 1316 } | 1333 } |
| 1317 | 1334 |
| 1318 TEST_F(QuicFramerTest, RejectPacket) { | 1335 TEST_P(QuicFramerTest, RejectPacket) { |
| 1319 visitor_.accept_packet_ = false; | 1336 visitor_.accept_packet_ = false; |
| 1320 | 1337 |
| 1321 unsigned char packet[] = { | 1338 unsigned char packet[] = { |
| 1322 // public flags (8 byte guid) | 1339 // public flags (8 byte guid) |
| 1323 0x3C, | 1340 0x3C, |
| 1324 // guid | 1341 // guid |
| 1325 0x10, 0x32, 0x54, 0x76, | 1342 0x10, 0x32, 0x54, 0x76, |
| 1326 0x98, 0xBA, 0xDC, 0xFE, | 1343 0x98, 0xBA, 0xDC, 0xFE, |
| 1327 // packet sequence number | 1344 // packet sequence number |
| 1328 0xBC, 0x9A, 0x78, 0x56, | 1345 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1351 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1368 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1352 | 1369 |
| 1353 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1370 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1354 ASSERT_TRUE(visitor_.header_.get()); | 1371 ASSERT_TRUE(visitor_.header_.get()); |
| 1355 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1372 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1356 | 1373 |
| 1357 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1374 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
| 1358 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1375 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1359 } | 1376 } |
| 1360 | 1377 |
| 1361 TEST_F(QuicFramerTest, RevivedStreamFrame) { | 1378 TEST_P(QuicFramerTest, RevivedStreamFrame) { |
| 1362 unsigned char payload[] = { | 1379 unsigned char payload[] = { |
| 1363 // frame type (stream frame) | 1380 // frame type (stream frame) |
| 1364 0x01, | 1381 0x01, |
| 1365 // stream id | 1382 // stream id |
| 1366 0x04, 0x03, 0x02, 0x01, | 1383 0x04, 0x03, 0x02, 0x01, |
| 1367 // fin | 1384 // fin |
| 1368 0x01, | 1385 0x01, |
| 1369 // offset | 1386 // offset |
| 1370 0x54, 0x76, 0x10, 0x32, | 1387 0x54, 0x76, 0x10, 0x32, |
| 1371 0xDC, 0xFE, 0x98, 0xBA, | 1388 0xDC, 0xFE, 0x98, 0xBA, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1409 | 1426 |
| 1410 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1427 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1411 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1428 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1412 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1429 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
| 1413 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1430 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1414 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1431 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
| 1415 visitor_.stream_frames_[0]->offset); | 1432 visitor_.stream_frames_[0]->offset); |
| 1416 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1433 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
| 1417 } | 1434 } |
| 1418 | 1435 |
| 1419 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { | 1436 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
| 1420 unsigned char packet[] = { | 1437 unsigned char packet[] = { |
| 1421 // public flags (8 byte guid) | 1438 // public flags (8 byte guid) |
| 1422 0x3C, | 1439 0x3C, |
| 1423 // guid | 1440 // guid |
| 1424 0x10, 0x32, 0x54, 0x76, | 1441 0x10, 0x32, 0x54, 0x76, |
| 1425 0x98, 0xBA, 0xDC, 0xFE, | 1442 0x98, 0xBA, 0xDC, 0xFE, |
| 1426 // packet sequence number | 1443 // packet sequence number |
| 1427 0xBC, 0x9A, 0x78, 0x56, | 1444 0xBC, 0x9A, 0x78, 0x56, |
| 1428 0x12, 0x34, | 1445 0x12, 0x34, |
| 1429 // private flags (fec group) | 1446 // private flags (fec group) |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1465 | 1482 |
| 1466 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1483 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1467 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1484 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1468 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1485 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
| 1469 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1486 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1470 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1487 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
| 1471 visitor_.stream_frames_[0]->offset); | 1488 visitor_.stream_frames_[0]->offset); |
| 1472 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1489 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
| 1473 } | 1490 } |
| 1474 | 1491 |
| 1475 TEST_F(QuicFramerTest, AckFrame) { | 1492 TEST_P(QuicFramerTest, AckFrame) { |
| 1476 unsigned char packet[] = { | 1493 unsigned char packet[] = { |
| 1477 // public flags (8 byte guid) | 1494 // public flags (8 byte guid) |
| 1478 0x3C, | 1495 0x3C, |
| 1479 // guid | 1496 // guid |
| 1480 0x10, 0x32, 0x54, 0x76, | 1497 0x10, 0x32, 0x54, 0x76, |
| 1481 0x98, 0xBA, 0xDC, 0xFE, | 1498 0x98, 0xBA, 0xDC, 0xFE, |
| 1482 // packet sequence number | 1499 // packet sequence number |
| 1483 0xBC, 0x9A, 0x78, 0x56, | 1500 0xBC, 0x9A, 0x78, 0x56, |
| 1484 0x34, 0x12, | 1501 0x34, 0x12, |
| 1485 // private flags | 1502 // private flags |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1560 expected_error = "Unable to read sequence number in missing packets."; | 1577 expected_error = "Unable to read sequence number in missing packets."; |
| 1561 } | 1578 } |
| 1562 CheckProcessingFails( | 1579 CheckProcessingFails( |
| 1563 packet, | 1580 packet, |
| 1564 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1581 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1565 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1582 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1566 expected_error, QUIC_INVALID_FRAME_DATA); | 1583 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1567 } | 1584 } |
| 1568 } | 1585 } |
| 1569 | 1586 |
| 1570 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { | 1587 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) { |
| 1571 unsigned char packet[] = { | 1588 unsigned char packet[] = { |
| 1572 // public flags (8 byte guid) | 1589 // public flags (8 byte guid) |
| 1573 0x3C, | 1590 0x3C, |
| 1574 // guid | 1591 // guid |
| 1575 0x10, 0x32, 0x54, 0x76, | 1592 0x10, 0x32, 0x54, 0x76, |
| 1576 0x98, 0xBA, 0xDC, 0xFE, | 1593 0x98, 0xBA, 0xDC, 0xFE, |
| 1577 // packet sequence number | 1594 // packet sequence number |
| 1578 0xBC, 0x9A, 0x78, 0x56, | 1595 0xBC, 0x9A, 0x78, 0x56, |
| 1579 0x34, 0x12, | 1596 0x34, 0x12, |
| 1580 // private flags | 1597 // private flags |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1619 expected_error = "Unable to read receive window."; | 1636 expected_error = "Unable to read receive window."; |
| 1620 } | 1637 } |
| 1621 CheckProcessingFails( | 1638 CheckProcessingFails( |
| 1622 packet, | 1639 packet, |
| 1623 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1640 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1624 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1641 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1625 expected_error, QUIC_INVALID_FRAME_DATA); | 1642 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1626 } | 1643 } |
| 1627 } | 1644 } |
| 1628 | 1645 |
| 1629 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { | 1646 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) { |
| 1630 unsigned char packet[] = { | 1647 unsigned char packet[] = { |
| 1631 // public flags (8 byte guid) | 1648 // public flags (8 byte guid) |
| 1632 0x3C, | 1649 0x3C, |
| 1633 // guid | 1650 // guid |
| 1634 0x10, 0x32, 0x54, 0x76, | 1651 0x10, 0x32, 0x54, 0x76, |
| 1635 0x98, 0xBA, 0xDC, 0xFE, | 1652 0x98, 0xBA, 0xDC, 0xFE, |
| 1636 // packet sequence number | 1653 // packet sequence number |
| 1637 0xBC, 0x9A, 0x78, 0x56, | 1654 0xBC, 0x9A, 0x78, 0x56, |
| 1638 0x34, 0x12, | 1655 0x34, 0x12, |
| 1639 // private flags | 1656 // private flags |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1717 expected_error = "Unable to read time delta in received packets."; | 1734 expected_error = "Unable to read time delta in received packets."; |
| 1718 } | 1735 } |
| 1719 CheckProcessingFails( | 1736 CheckProcessingFails( |
| 1720 packet, | 1737 packet, |
| 1721 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1738 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1722 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1739 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1723 expected_error, QUIC_INVALID_FRAME_DATA); | 1740 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1724 } | 1741 } |
| 1725 } | 1742 } |
| 1726 | 1743 |
| 1727 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { | 1744 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) { |
| 1728 unsigned char packet[] = { | 1745 unsigned char packet[] = { |
| 1729 // public flags (8 byte guid) | 1746 // public flags (8 byte guid) |
| 1730 0x3C, | 1747 0x3C, |
| 1731 // guid | 1748 // guid |
| 1732 0x10, 0x32, 0x54, 0x76, | 1749 0x10, 0x32, 0x54, 0x76, |
| 1733 0x98, 0xBA, 0xDC, 0xFE, | 1750 0x98, 0xBA, 0xDC, 0xFE, |
| 1734 // packet sequence number | 1751 // packet sequence number |
| 1735 0xBC, 0x9A, 0x78, 0x56, | 1752 0xBC, 0x9A, 0x78, 0x56, |
| 1736 0x34, 0x12, | 1753 0x34, 0x12, |
| 1737 // private flags | 1754 // private flags |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1772 } | 1789 } |
| 1773 CheckProcessingFails( | 1790 CheckProcessingFails( |
| 1774 packet, | 1791 packet, |
| 1775 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1792 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1776 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1793 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1777 expected_error, QUIC_INVALID_FRAME_DATA); | 1794 expected_error, QUIC_INVALID_FRAME_DATA); |
| 1778 } | 1795 } |
| 1779 } | 1796 } |
| 1780 | 1797 |
| 1781 | 1798 |
| 1782 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { | 1799 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { |
| 1783 unsigned char packet[] = { | 1800 unsigned char packet[] = { |
| 1784 // public flags (8 byte guid) | 1801 // public flags (8 byte guid) |
| 1785 0x3C, | 1802 0x3C, |
| 1786 // guid | 1803 // guid |
| 1787 0x10, 0x32, 0x54, 0x76, | 1804 0x10, 0x32, 0x54, 0x76, |
| 1788 0x98, 0xBA, 0xDC, 0xFE, | 1805 0x98, 0xBA, 0xDC, 0xFE, |
| 1789 // packet sequence number | 1806 // packet sequence number |
| 1790 0xBC, 0x9A, 0x78, 0x56, | 1807 0xBC, 0x9A, 0x78, 0x56, |
| 1791 0x34, 0x12, | 1808 0x34, 0x12, |
| 1792 // private flags | 1809 // private flags |
| 1793 0x00, | 1810 0x00, |
| 1794 | 1811 |
| 1795 // frame type (congestion feedback frame) | 1812 // frame type (congestion feedback frame) |
| 1796 0x03, | 1813 0x03, |
| 1797 // congestion feedback type (invalid) | 1814 // congestion feedback type (invalid) |
| 1798 0x03, | 1815 0x03, |
| 1799 }; | 1816 }; |
| 1800 | 1817 |
| 1801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1818 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1802 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1819 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 1803 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1820 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1804 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 1821 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
| 1805 } | 1822 } |
| 1806 | 1823 |
| 1807 TEST_F(QuicFramerTest, RstStreamFrame) { | 1824 TEST_P(QuicFramerTest, RstStreamFrame) { |
| 1808 unsigned char packet[] = { | 1825 unsigned char packet[] = { |
| 1809 // public flags (8 byte guid) | 1826 // public flags (8 byte guid) |
| 1810 0x3C, | 1827 0x3C, |
| 1811 // guid | 1828 // guid |
| 1812 0x10, 0x32, 0x54, 0x76, | 1829 0x10, 0x32, 0x54, 0x76, |
| 1813 0x98, 0xBA, 0xDC, 0xFE, | 1830 0x98, 0xBA, 0xDC, 0xFE, |
| 1814 // packet sequence number | 1831 // packet sequence number |
| 1815 0xBC, 0x9A, 0x78, 0x56, | 1832 0xBC, 0x9A, 0x78, 0x56, |
| 1816 0x34, 0x12, | 1833 0x34, 0x12, |
| 1817 // private flags | 1834 // private flags |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1856 expected_error = "Unable to read rst stream error details."; | 1873 expected_error = "Unable to read rst stream error details."; |
| 1857 } | 1874 } |
| 1858 CheckProcessingFails( | 1875 CheckProcessingFails( |
| 1859 packet, | 1876 packet, |
| 1860 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1877 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1861 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1878 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1862 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 1879 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
| 1863 } | 1880 } |
| 1864 } | 1881 } |
| 1865 | 1882 |
| 1866 TEST_F(QuicFramerTest, ConnectionCloseFrame) { | 1883 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
| 1867 unsigned char packet[] = { | 1884 unsigned char packet[] = { |
| 1868 // public flags (8 byte guid) | 1885 // public flags (8 byte guid) |
| 1869 0x3C, | 1886 0x3C, |
| 1870 // guid | 1887 // guid |
| 1871 0x10, 0x32, 0x54, 0x76, | 1888 0x10, 0x32, 0x54, 0x76, |
| 1872 0x98, 0xBA, 0xDC, 0xFE, | 1889 0x98, 0xBA, 0xDC, 0xFE, |
| 1873 // packet sequence number | 1890 // packet sequence number |
| 1874 0xBC, 0x9A, 0x78, 0x56, | 1891 0xBC, 0x9A, 0x78, 0x56, |
| 1875 0x34, 0x12, | 1892 0x34, 0x12, |
| 1876 // private flags | 1893 // private flags |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 expected_error = "Unable to read connection close error details."; | 1960 expected_error = "Unable to read connection close error details."; |
| 1944 } | 1961 } |
| 1945 CheckProcessingFails( | 1962 CheckProcessingFails( |
| 1946 packet, | 1963 packet, |
| 1947 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1964 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 1948 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1965 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 1949 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 1966 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
| 1950 } | 1967 } |
| 1951 } | 1968 } |
| 1952 | 1969 |
| 1953 TEST_F(QuicFramerTest, GoAwayFrame) { | 1970 TEST_P(QuicFramerTest, GoAwayFrame) { |
| 1954 unsigned char packet[] = { | 1971 unsigned char packet[] = { |
| 1955 // public flags (8 byte guid) | 1972 // public flags (8 byte guid) |
| 1956 0x3C, | 1973 0x3C, |
| 1957 // guid | 1974 // guid |
| 1958 0x10, 0x32, 0x54, 0x76, | 1975 0x10, 0x32, 0x54, 0x76, |
| 1959 0x98, 0xBA, 0xDC, 0xFE, | 1976 0x98, 0xBA, 0xDC, 0xFE, |
| 1960 // packet sequence number | 1977 // packet sequence number |
| 1961 0xBC, 0x9A, 0x78, 0x56, | 1978 0xBC, 0x9A, 0x78, 0x56, |
| 1962 0x34, 0x12, | 1979 0x34, 0x12, |
| 1963 // private flags | 1980 // private flags |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2004 expected_error = "Unable to read goaway reason."; | 2021 expected_error = "Unable to read goaway reason."; |
| 2005 } | 2022 } |
| 2006 CheckProcessingFails( | 2023 CheckProcessingFails( |
| 2007 packet, | 2024 packet, |
| 2008 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2025 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 2009 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2026 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
| 2010 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2027 expected_error, QUIC_INVALID_GOAWAY_DATA); |
| 2011 } | 2028 } |
| 2012 } | 2029 } |
| 2013 | 2030 |
| 2014 TEST_F(QuicFramerTest, PublicResetPacket) { | 2031 TEST_P(QuicFramerTest, PublicResetPacket) { |
| 2015 unsigned char packet[] = { | 2032 unsigned char packet[] = { |
| 2016 // public flags (public reset, 8 byte guid) | 2033 // public flags (public reset, 8 byte guid) |
| 2017 0x3E, | 2034 0x3E, |
| 2018 // guid | 2035 // guid |
| 2019 0x10, 0x32, 0x54, 0x76, | 2036 0x10, 0x32, 0x54, 0x76, |
| 2020 0x98, 0xBA, 0xDC, 0xFE, | 2037 0x98, 0xBA, 0xDC, 0xFE, |
| 2021 // nonce proof | 2038 // nonce proof |
| 2022 0x89, 0x67, 0x45, 0x23, | 2039 0x89, 0x67, 0x45, 0x23, |
| 2023 0x01, 0xEF, 0xCD, 0xAB, | 2040 0x01, 0xEF, 0xCD, 0xAB, |
| 2024 // rejected sequence number | 2041 // rejected sequence number |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2056 CheckProcessingFails(packet, i, expected_error, | 2073 CheckProcessingFails(packet, i, expected_error, |
| 2057 QUIC_INVALID_PUBLIC_RST_PACKET); | 2074 QUIC_INVALID_PUBLIC_RST_PACKET); |
| 2058 } else { | 2075 } else { |
| 2059 expected_error = "Unable to read rejected sequence number."; | 2076 expected_error = "Unable to read rejected sequence number."; |
| 2060 CheckProcessingFails(packet, i, expected_error, | 2077 CheckProcessingFails(packet, i, expected_error, |
| 2061 QUIC_INVALID_PUBLIC_RST_PACKET); | 2078 QUIC_INVALID_PUBLIC_RST_PACKET); |
| 2062 } | 2079 } |
| 2063 } | 2080 } |
| 2064 } | 2081 } |
| 2065 | 2082 |
| 2066 TEST_F(QuicFramerTest, VersionNegotiationPacket) { | 2083 TEST_P(QuicFramerTest, VersionNegotiationPacket) { |
| 2084 // Set a specific version. |
| 2085 framer_.set_version(QUIC_VERSION_6); |
| 2086 |
| 2067 unsigned char packet[] = { | 2087 unsigned char packet[] = { |
| 2068 // public flags (version, 8 byte guid) | 2088 // public flags (version, 8 byte guid) |
| 2069 0x3D, | 2089 0x3D, |
| 2070 // guid | 2090 // guid |
| 2071 0x10, 0x32, 0x54, 0x76, | 2091 0x10, 0x32, 0x54, 0x76, |
| 2072 0x98, 0xBA, 0xDC, 0xFE, | 2092 0x98, 0xBA, 0xDC, 0xFE, |
| 2073 // version tag | 2093 // version tag |
| 2074 'Q', '0', '0', '6', | 2094 'Q', '0', '0', '6', |
| 2075 'Q', '2', '.', '0', | 2095 'Q', '2', '.', '0', |
| 2076 }; | 2096 }; |
| 2077 | 2097 |
| 2078 QuicFramerPeer::SetIsServer(&framer_, false); | 2098 QuicFramerPeer::SetIsServer(&framer_, false); |
| 2079 | 2099 |
| 2080 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2081 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2101 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2082 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2102 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2083 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 2103 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
| 2084 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 2104 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
| 2085 EXPECT_EQ(kQuicVersion1, | 2105 EXPECT_EQ(QUIC_VERSION_6, |
| 2086 visitor_.version_negotiation_packet_->versions[0]); | 2106 visitor_.version_negotiation_packet_->versions[0]); |
| 2087 | 2107 |
| 2088 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { | 2108 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { |
| 2089 string expected_error; | 2109 string expected_error; |
| 2090 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; | 2110 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; |
| 2091 if (i < kGuidOffset) { | 2111 if (i < kGuidOffset) { |
| 2092 expected_error = "Unable to read public flags."; | 2112 expected_error = "Unable to read public flags."; |
| 2093 } else if (i < kVersionOffset) { | 2113 } else if (i < kVersionOffset) { |
| 2094 expected_error = "Unable to read GUID."; | 2114 expected_error = "Unable to read GUID."; |
| 2095 } else { | 2115 } else { |
| 2096 expected_error = "Unable to read supported version in negotiation."; | 2116 expected_error = "Unable to read supported version in negotiation."; |
| 2097 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 2117 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
| 2098 } | 2118 } |
| 2099 CheckProcessingFails(packet, i, expected_error, error_code); | 2119 CheckProcessingFails(packet, i, expected_error, error_code); |
| 2100 } | 2120 } |
| 2101 } | 2121 } |
| 2102 | 2122 |
| 2103 TEST_F(QuicFramerTest, FecPacket) { | 2123 TEST_P(QuicFramerTest, FecPacket) { |
| 2104 unsigned char packet[] = { | 2124 unsigned char packet[] = { |
| 2105 // public flags (8 byte guid) | 2125 // public flags (8 byte guid) |
| 2106 0x3C, | 2126 0x3C, |
| 2107 // guid | 2127 // guid |
| 2108 0x10, 0x32, 0x54, 0x76, | 2128 0x10, 0x32, 0x54, 0x76, |
| 2109 0x98, 0xBA, 0xDC, 0xFE, | 2129 0x98, 0xBA, 0xDC, 0xFE, |
| 2110 // packet sequence number | 2130 // packet sequence number |
| 2111 0xBC, 0x9A, 0x78, 0x56, | 2131 0xBC, 0x9A, 0x78, 0x56, |
| 2112 0x34, 0x12, | 2132 0x34, 0x12, |
| 2113 // private flags (fec group & FEC) | 2133 // private flags (fec group & FEC) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2130 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2150 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2131 | 2151 |
| 2132 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2152 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2133 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 2153 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 2134 ASSERT_EQ(1, visitor_.fec_count_); | 2154 ASSERT_EQ(1, visitor_.fec_count_); |
| 2135 const QuicFecData& fec_data = *visitor_.fec_data_[0]; | 2155 const QuicFecData& fec_data = *visitor_.fec_data_[0]; |
| 2136 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); | 2156 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); |
| 2137 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); | 2157 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); |
| 2138 } | 2158 } |
| 2139 | 2159 |
| 2140 TEST_F(QuicFramerTest, ConstructPaddingFramePacket) { | 2160 TEST_P(QuicFramerTest, ConstructPaddingFramePacket) { |
| 2141 QuicPacketHeader header; | 2161 QuicPacketHeader header; |
| 2142 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2162 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2143 header.public_header.reset_flag = false; | 2163 header.public_header.reset_flag = false; |
| 2144 header.public_header.version_flag = false; | 2164 header.public_header.version_flag = false; |
| 2145 header.fec_flag = false; | 2165 header.fec_flag = false; |
| 2146 header.entropy_flag = false; | 2166 header.entropy_flag = false; |
| 2147 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2167 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2148 header.fec_group = 0; | 2168 header.fec_group = 0; |
| 2149 | 2169 |
| 2150 QuicPaddingFrame padding_frame; | 2170 QuicPaddingFrame padding_frame; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2175 | 2195 |
| 2176 scoped_ptr<QuicPacket> data( | 2196 scoped_ptr<QuicPacket> data( |
| 2177 framer_.ConstructFrameDataPacket(header, frames).packet); | 2197 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2178 ASSERT_TRUE(data != NULL); | 2198 ASSERT_TRUE(data != NULL); |
| 2179 | 2199 |
| 2180 test::CompareCharArraysWithHexError("constructed packet", | 2200 test::CompareCharArraysWithHexError("constructed packet", |
| 2181 data->data(), data->length(), | 2201 data->data(), data->length(), |
| 2182 AsChars(packet), arraysize(packet)); | 2202 AsChars(packet), arraysize(packet)); |
| 2183 } | 2203 } |
| 2184 | 2204 |
| 2185 TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { | 2205 TEST_P(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { |
| 2186 QuicPacketHeader header; | 2206 QuicPacketHeader header; |
| 2187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2207 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2188 header.public_header.reset_flag = false; | 2208 header.public_header.reset_flag = false; |
| 2189 header.public_header.version_flag = false; | 2209 header.public_header.version_flag = false; |
| 2190 header.fec_flag = false; | 2210 header.fec_flag = false; |
| 2191 header.entropy_flag = false; | 2211 header.entropy_flag = false; |
| 2192 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; | 2212 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; |
| 2193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2213 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2194 header.fec_group = 0; | 2214 header.fec_group = 0; |
| 2195 | 2215 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2220 | 2240 |
| 2221 scoped_ptr<QuicPacket> data( | 2241 scoped_ptr<QuicPacket> data( |
| 2222 framer_.ConstructFrameDataPacket(header, frames).packet); | 2242 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2223 ASSERT_TRUE(data != NULL); | 2243 ASSERT_TRUE(data != NULL); |
| 2224 | 2244 |
| 2225 test::CompareCharArraysWithHexError("constructed packet", | 2245 test::CompareCharArraysWithHexError("constructed packet", |
| 2226 data->data(), data->length(), | 2246 data->data(), data->length(), |
| 2227 AsChars(packet), arraysize(packet)); | 2247 AsChars(packet), arraysize(packet)); |
| 2228 } | 2248 } |
| 2229 | 2249 |
| 2230 TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { | 2250 TEST_P(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { |
| 2231 QuicPacketHeader header; | 2251 QuicPacketHeader header; |
| 2232 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2252 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2233 header.public_header.reset_flag = false; | 2253 header.public_header.reset_flag = false; |
| 2234 header.public_header.version_flag = false; | 2254 header.public_header.version_flag = false; |
| 2235 header.fec_flag = false; | 2255 header.fec_flag = false; |
| 2236 header.entropy_flag = false; | 2256 header.entropy_flag = false; |
| 2237 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; | 2257 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; |
| 2238 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2258 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2239 header.fec_group = 0; | 2259 header.fec_group = 0; |
| 2240 | 2260 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2265 | 2285 |
| 2266 scoped_ptr<QuicPacket> data( | 2286 scoped_ptr<QuicPacket> data( |
| 2267 framer_.ConstructFrameDataPacket(header, frames).packet); | 2287 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2268 ASSERT_TRUE(data != NULL); | 2288 ASSERT_TRUE(data != NULL); |
| 2269 | 2289 |
| 2270 test::CompareCharArraysWithHexError("constructed packet", | 2290 test::CompareCharArraysWithHexError("constructed packet", |
| 2271 data->data(), data->length(), | 2291 data->data(), data->length(), |
| 2272 AsChars(packet), arraysize(packet)); | 2292 AsChars(packet), arraysize(packet)); |
| 2273 } | 2293 } |
| 2274 | 2294 |
| 2275 TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { | 2295 TEST_P(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { |
| 2276 QuicPacketHeader header; | 2296 QuicPacketHeader header; |
| 2277 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2297 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2278 header.public_header.reset_flag = false; | 2298 header.public_header.reset_flag = false; |
| 2279 header.public_header.version_flag = false; | 2299 header.public_header.version_flag = false; |
| 2280 header.fec_flag = false; | 2300 header.fec_flag = false; |
| 2281 header.entropy_flag = false; | 2301 header.entropy_flag = false; |
| 2282 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 2302 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 2283 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2303 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2284 header.fec_group = 0; | 2304 header.fec_group = 0; |
| 2285 | 2305 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2310 | 2330 |
| 2311 scoped_ptr<QuicPacket> data( | 2331 scoped_ptr<QuicPacket> data( |
| 2312 framer_.ConstructFrameDataPacket(header, frames).packet); | 2332 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2313 ASSERT_TRUE(data != NULL); | 2333 ASSERT_TRUE(data != NULL); |
| 2314 | 2334 |
| 2315 test::CompareCharArraysWithHexError("constructed packet", | 2335 test::CompareCharArraysWithHexError("constructed packet", |
| 2316 data->data(), data->length(), | 2336 data->data(), data->length(), |
| 2317 AsChars(packet), arraysize(packet)); | 2337 AsChars(packet), arraysize(packet)); |
| 2318 } | 2338 } |
| 2319 | 2339 |
| 2320 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { | 2340 TEST_P(QuicFramerTest, ConstructStreamFramePacket) { |
| 2321 QuicPacketHeader header; | 2341 QuicPacketHeader header; |
| 2322 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2342 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2323 header.public_header.reset_flag = false; | 2343 header.public_header.reset_flag = false; |
| 2324 header.public_header.version_flag = false; | 2344 header.public_header.version_flag = false; |
| 2325 header.fec_flag = false; | 2345 header.fec_flag = false; |
| 2326 header.entropy_flag = true; | 2346 header.entropy_flag = true; |
| 2327 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 2347 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
| 2328 header.fec_group = 0; | 2348 header.fec_group = 0; |
| 2329 | 2349 |
| 2330 QuicStreamFrame stream_frame; | 2350 QuicStreamFrame stream_frame; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2367 | 2387 |
| 2368 scoped_ptr<QuicPacket> data( | 2388 scoped_ptr<QuicPacket> data( |
| 2369 framer_.ConstructFrameDataPacket(header, frames).packet); | 2389 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2370 ASSERT_TRUE(data != NULL); | 2390 ASSERT_TRUE(data != NULL); |
| 2371 | 2391 |
| 2372 test::CompareCharArraysWithHexError("constructed packet", | 2392 test::CompareCharArraysWithHexError("constructed packet", |
| 2373 data->data(), data->length(), | 2393 data->data(), data->length(), |
| 2374 AsChars(packet), arraysize(packet)); | 2394 AsChars(packet), arraysize(packet)); |
| 2375 } | 2395 } |
| 2376 | 2396 |
| 2377 TEST_F(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) { | 2397 TEST_P(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) { |
| 2378 QuicPacketHeader header; | 2398 QuicPacketHeader header; |
| 2379 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2399 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2380 header.public_header.reset_flag = false; | 2400 header.public_header.reset_flag = false; |
| 2381 header.public_header.version_flag = true; | 2401 header.public_header.version_flag = true; |
| 2382 header.fec_flag = false; | 2402 header.fec_flag = false; |
| 2383 header.entropy_flag = true; | 2403 header.entropy_flag = true; |
| 2384 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 2404 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
| 2385 header.fec_group = 0; | 2405 header.fec_group = 0; |
| 2386 | 2406 |
| 2387 QuicStreamFrame stream_frame; | 2407 QuicStreamFrame stream_frame; |
| 2388 stream_frame.stream_id = 0x01020304; | 2408 stream_frame.stream_id = 0x01020304; |
| 2389 stream_frame.fin = true; | 2409 stream_frame.fin = true; |
| 2390 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 2410 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
| 2391 stream_frame.data = "hello world!"; | 2411 stream_frame.data = "hello world!"; |
| 2392 | 2412 |
| 2393 QuicFrames frames; | 2413 QuicFrames frames; |
| 2394 frames.push_back(QuicFrame(&stream_frame)); | 2414 frames.push_back(QuicFrame(&stream_frame)); |
| 2395 | 2415 |
| 2416 // Set a specific version. |
| 2417 framer_.set_version(QUIC_VERSION_6); |
| 2396 unsigned char packet[] = { | 2418 unsigned char packet[] = { |
| 2397 // public flags (version, 8 byte guid) | 2419 // public flags (version, 8 byte guid) |
| 2398 0x3D, | 2420 0x3D, |
| 2399 // guid | 2421 // guid |
| 2400 0x10, 0x32, 0x54, 0x76, | 2422 0x10, 0x32, 0x54, 0x76, |
| 2401 0x98, 0xBA, 0xDC, 0xFE, | 2423 0x98, 0xBA, 0xDC, 0xFE, |
| 2402 // version tag | 2424 // version tag |
| 2403 'Q', '0', '0', '6', | 2425 'Q', '0', '0', '6', |
| 2404 // packet sequence number | 2426 // packet sequence number |
| 2405 0xBC, 0x9A, 0x78, 0x56, | 2427 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2427 QuicFramerPeer::SetIsServer(&framer_, false); | 2449 QuicFramerPeer::SetIsServer(&framer_, false); |
| 2428 scoped_ptr<QuicPacket> data( | 2450 scoped_ptr<QuicPacket> data( |
| 2429 framer_.ConstructFrameDataPacket(header, frames).packet); | 2451 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2430 ASSERT_TRUE(data != NULL); | 2452 ASSERT_TRUE(data != NULL); |
| 2431 | 2453 |
| 2432 test::CompareCharArraysWithHexError("constructed packet", | 2454 test::CompareCharArraysWithHexError("constructed packet", |
| 2433 data->data(), data->length(), | 2455 data->data(), data->length(), |
| 2434 AsChars(packet), arraysize(packet)); | 2456 AsChars(packet), arraysize(packet)); |
| 2435 } | 2457 } |
| 2436 | 2458 |
| 2437 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { | 2459 TEST_P(QuicFramerTest, ConstructVersionNegotiationPacket) { |
| 2438 QuicPacketPublicHeader header; | 2460 QuicPacketPublicHeader header; |
| 2439 header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2461 header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2440 header.reset_flag = false; | 2462 header.reset_flag = false; |
| 2441 header.version_flag = true; | 2463 header.version_flag = true; |
| 2442 | 2464 |
| 2443 unsigned char packet[] = { | 2465 unsigned char packet[] = { |
| 2444 // public flags (version, 8 byte guid) | 2466 // public flags (version, 8 byte guid) |
| 2445 0x3D, | 2467 0x3D, |
| 2446 // guid | 2468 // guid |
| 2447 0x10, 0x32, 0x54, 0x76, | 2469 0x10, 0x32, 0x54, 0x76, |
| 2448 0x98, 0xBA, 0xDC, 0xFE, | 2470 0x98, 0xBA, 0xDC, 0xFE, |
| 2449 // version tag | 2471 // version tag |
| 2450 'Q', '0', '0', '6', | 2472 'Q', '0', '0', '6', |
| 2451 'Q', '2', '.', '0', | 2473 // 'Q', '0', '0', '7', |
| 2452 }; | 2474 }; |
| 2453 | 2475 |
| 2454 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); | 2476 QuicVersionVector versions; |
| 2455 QuicTagVector versions; | 2477 versions.push_back(QUIC_VERSION_6); |
| 2456 versions.push_back(kQuicVersion1); | 2478 // versions.push_back(QUIC_VERSION_7); |
| 2457 versions.push_back(kQuicVersion2); | |
| 2458 scoped_ptr<QuicEncryptedPacket> data( | 2479 scoped_ptr<QuicEncryptedPacket> data( |
| 2459 framer_.ConstructVersionNegotiationPacket(header, versions)); | 2480 framer_.ConstructVersionNegotiationPacket(header, versions)); |
| 2460 | 2481 |
| 2461 test::CompareCharArraysWithHexError("constructed packet", | 2482 test::CompareCharArraysWithHexError("constructed packet", |
| 2462 data->data(), data->length(), | 2483 data->data(), data->length(), |
| 2463 AsChars(packet), arraysize(packet)); | 2484 AsChars(packet), arraysize(packet)); |
| 2464 } | 2485 } |
| 2465 | 2486 |
| 2466 TEST_F(QuicFramerTest, ConstructAckFramePacket) { | 2487 TEST_P(QuicFramerTest, ConstructAckFramePacket) { |
| 2467 QuicPacketHeader header; | 2488 QuicPacketHeader header; |
| 2468 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2489 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2469 header.public_header.reset_flag = false; | 2490 header.public_header.reset_flag = false; |
| 2470 header.public_header.version_flag = false; | 2491 header.public_header.version_flag = false; |
| 2471 header.fec_flag = false; | 2492 header.fec_flag = false; |
| 2472 header.entropy_flag = true; | 2493 header.entropy_flag = true; |
| 2473 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2494 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2474 header.fec_group = 0; | 2495 header.fec_group = 0; |
| 2475 | 2496 |
| 2476 QuicAckFrame ack_frame; | 2497 QuicAckFrame ack_frame; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2520 | 2541 |
| 2521 scoped_ptr<QuicPacket> data( | 2542 scoped_ptr<QuicPacket> data( |
| 2522 framer_.ConstructFrameDataPacket(header, frames).packet); | 2543 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2523 ASSERT_TRUE(data != NULL); | 2544 ASSERT_TRUE(data != NULL); |
| 2524 | 2545 |
| 2525 test::CompareCharArraysWithHexError("constructed packet", | 2546 test::CompareCharArraysWithHexError("constructed packet", |
| 2526 data->data(), data->length(), | 2547 data->data(), data->length(), |
| 2527 AsChars(packet), arraysize(packet)); | 2548 AsChars(packet), arraysize(packet)); |
| 2528 } | 2549 } |
| 2529 | 2550 |
| 2530 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) { | 2551 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) { |
| 2531 QuicPacketHeader header; | 2552 QuicPacketHeader header; |
| 2532 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2553 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2533 header.public_header.reset_flag = false; | 2554 header.public_header.reset_flag = false; |
| 2534 header.public_header.version_flag = false; | 2555 header.public_header.version_flag = false; |
| 2535 header.fec_flag = false; | 2556 header.fec_flag = false; |
| 2536 header.entropy_flag = false; | 2557 header.entropy_flag = false; |
| 2537 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2558 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2538 header.fec_group = 0; | 2559 header.fec_group = 0; |
| 2539 | 2560 |
| 2540 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2561 QuicCongestionFeedbackFrame congestion_feedback_frame; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2569 | 2590 |
| 2570 scoped_ptr<QuicPacket> data( | 2591 scoped_ptr<QuicPacket> data( |
| 2571 framer_.ConstructFrameDataPacket(header, frames).packet); | 2592 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2572 ASSERT_TRUE(data != NULL); | 2593 ASSERT_TRUE(data != NULL); |
| 2573 | 2594 |
| 2574 test::CompareCharArraysWithHexError("constructed packet", | 2595 test::CompareCharArraysWithHexError("constructed packet", |
| 2575 data->data(), data->length(), | 2596 data->data(), data->length(), |
| 2576 AsChars(packet), arraysize(packet)); | 2597 AsChars(packet), arraysize(packet)); |
| 2577 } | 2598 } |
| 2578 | 2599 |
| 2579 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) { | 2600 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) { |
| 2580 QuicPacketHeader header; | 2601 QuicPacketHeader header; |
| 2581 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2602 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2582 header.public_header.reset_flag = false; | 2603 header.public_header.reset_flag = false; |
| 2583 header.public_header.version_flag = false; | 2604 header.public_header.version_flag = false; |
| 2584 header.fec_flag = false; | 2605 header.fec_flag = false; |
| 2585 header.entropy_flag = false; | 2606 header.entropy_flag = false; |
| 2586 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2607 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2587 header.fec_group = 0; | 2608 header.fec_group = 0; |
| 2588 | 2609 |
| 2589 QuicCongestionFeedbackFrame frame; | 2610 QuicCongestionFeedbackFrame frame; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2642 | 2663 |
| 2643 scoped_ptr<QuicPacket> data( | 2664 scoped_ptr<QuicPacket> data( |
| 2644 framer_.ConstructFrameDataPacket(header, frames).packet); | 2665 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2645 ASSERT_TRUE(data != NULL); | 2666 ASSERT_TRUE(data != NULL); |
| 2646 | 2667 |
| 2647 test::CompareCharArraysWithHexError("constructed packet", | 2668 test::CompareCharArraysWithHexError("constructed packet", |
| 2648 data->data(), data->length(), | 2669 data->data(), data->length(), |
| 2649 AsChars(packet), arraysize(packet)); | 2670 AsChars(packet), arraysize(packet)); |
| 2650 } | 2671 } |
| 2651 | 2672 |
| 2652 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) { | 2673 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) { |
| 2653 QuicPacketHeader header; | 2674 QuicPacketHeader header; |
| 2654 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2675 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2655 header.public_header.reset_flag = false; | 2676 header.public_header.reset_flag = false; |
| 2656 header.public_header.version_flag = false; | 2677 header.public_header.version_flag = false; |
| 2657 header.fec_flag = false; | 2678 header.fec_flag = false; |
| 2658 header.entropy_flag = false; | 2679 header.entropy_flag = false; |
| 2659 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2680 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2660 header.fec_group = 0; | 2681 header.fec_group = 0; |
| 2661 | 2682 |
| 2662 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2683 QuicCongestionFeedbackFrame congestion_feedback_frame; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2689 | 2710 |
| 2690 scoped_ptr<QuicPacket> data( | 2711 scoped_ptr<QuicPacket> data( |
| 2691 framer_.ConstructFrameDataPacket(header, frames).packet); | 2712 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2692 ASSERT_TRUE(data != NULL); | 2713 ASSERT_TRUE(data != NULL); |
| 2693 | 2714 |
| 2694 test::CompareCharArraysWithHexError("constructed packet", | 2715 test::CompareCharArraysWithHexError("constructed packet", |
| 2695 data->data(), data->length(), | 2716 data->data(), data->length(), |
| 2696 AsChars(packet), arraysize(packet)); | 2717 AsChars(packet), arraysize(packet)); |
| 2697 } | 2718 } |
| 2698 | 2719 |
| 2699 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) { | 2720 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) { |
| 2700 QuicPacketHeader header; | 2721 QuicPacketHeader header; |
| 2701 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2722 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2702 header.public_header.reset_flag = false; | 2723 header.public_header.reset_flag = false; |
| 2703 header.public_header.version_flag = false; | 2724 header.public_header.version_flag = false; |
| 2704 header.fec_flag = false; | 2725 header.fec_flag = false; |
| 2705 header.entropy_flag = false; | 2726 header.entropy_flag = false; |
| 2706 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2727 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2707 header.fec_group = 0; | 2728 header.fec_group = 0; |
| 2708 | 2729 |
| 2709 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2730 QuicCongestionFeedbackFrame congestion_feedback_frame; |
| 2710 congestion_feedback_frame.type = | 2731 congestion_feedback_frame.type = |
| 2711 static_cast<CongestionFeedbackType>(kFixRate + 1); | 2732 static_cast<CongestionFeedbackType>(kFixRate + 1); |
| 2712 | 2733 |
| 2713 QuicFrames frames; | 2734 QuicFrames frames; |
| 2714 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 2735 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
| 2715 | 2736 |
| 2716 scoped_ptr<QuicPacket> data( | 2737 scoped_ptr<QuicPacket> data( |
| 2717 framer_.ConstructFrameDataPacket(header, frames).packet); | 2738 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2718 ASSERT_TRUE(data == NULL); | 2739 ASSERT_TRUE(data == NULL); |
| 2719 } | 2740 } |
| 2720 | 2741 |
| 2721 TEST_F(QuicFramerTest, ConstructRstFramePacket) { | 2742 TEST_P(QuicFramerTest, ConstructRstFramePacket) { |
| 2722 QuicPacketHeader header; | 2743 QuicPacketHeader header; |
| 2723 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2744 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2724 header.public_header.reset_flag = false; | 2745 header.public_header.reset_flag = false; |
| 2725 header.public_header.version_flag = false; | 2746 header.public_header.version_flag = false; |
| 2726 header.fec_flag = false; | 2747 header.fec_flag = false; |
| 2727 header.entropy_flag = false; | 2748 header.entropy_flag = false; |
| 2728 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2749 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2729 header.fec_group = 0; | 2750 header.fec_group = 0; |
| 2730 | 2751 |
| 2731 QuicRstStreamFrame rst_frame; | 2752 QuicRstStreamFrame rst_frame; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2765 | 2786 |
| 2766 scoped_ptr<QuicPacket> data( | 2787 scoped_ptr<QuicPacket> data( |
| 2767 framer_.ConstructFrameDataPacket(header, frames).packet); | 2788 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2768 ASSERT_TRUE(data != NULL); | 2789 ASSERT_TRUE(data != NULL); |
| 2769 | 2790 |
| 2770 test::CompareCharArraysWithHexError("constructed packet", | 2791 test::CompareCharArraysWithHexError("constructed packet", |
| 2771 data->data(), data->length(), | 2792 data->data(), data->length(), |
| 2772 AsChars(packet), arraysize(packet)); | 2793 AsChars(packet), arraysize(packet)); |
| 2773 } | 2794 } |
| 2774 | 2795 |
| 2775 TEST_F(QuicFramerTest, ConstructCloseFramePacket) { | 2796 TEST_P(QuicFramerTest, ConstructCloseFramePacket) { |
| 2776 QuicPacketHeader header; | 2797 QuicPacketHeader header; |
| 2777 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2798 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2778 header.public_header.reset_flag = false; | 2799 header.public_header.reset_flag = false; |
| 2779 header.public_header.version_flag = false; | 2800 header.public_header.version_flag = false; |
| 2780 header.fec_flag = false; | 2801 header.fec_flag = false; |
| 2781 header.entropy_flag = true; | 2802 header.entropy_flag = true; |
| 2782 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2803 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2783 header.fec_group = 0; | 2804 header.fec_group = 0; |
| 2784 | 2805 |
| 2785 QuicConnectionCloseFrame close_frame; | 2806 QuicConnectionCloseFrame close_frame; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2842 | 2863 |
| 2843 scoped_ptr<QuicPacket> data( | 2864 scoped_ptr<QuicPacket> data( |
| 2844 framer_.ConstructFrameDataPacket(header, frames).packet); | 2865 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2845 ASSERT_TRUE(data != NULL); | 2866 ASSERT_TRUE(data != NULL); |
| 2846 | 2867 |
| 2847 test::CompareCharArraysWithHexError("constructed packet", | 2868 test::CompareCharArraysWithHexError("constructed packet", |
| 2848 data->data(), data->length(), | 2869 data->data(), data->length(), |
| 2849 AsChars(packet), arraysize(packet)); | 2870 AsChars(packet), arraysize(packet)); |
| 2850 } | 2871 } |
| 2851 | 2872 |
| 2852 TEST_F(QuicFramerTest, ConstructGoAwayPacket) { | 2873 TEST_P(QuicFramerTest, ConstructGoAwayPacket) { |
| 2853 QuicPacketHeader header; | 2874 QuicPacketHeader header; |
| 2854 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2875 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2855 header.public_header.reset_flag = false; | 2876 header.public_header.reset_flag = false; |
| 2856 header.public_header.version_flag = false; | 2877 header.public_header.version_flag = false; |
| 2857 header.fec_flag = false; | 2878 header.fec_flag = false; |
| 2858 header.entropy_flag = true; | 2879 header.entropy_flag = true; |
| 2859 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2880 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2860 header.fec_group = 0; | 2881 header.fec_group = 0; |
| 2861 | 2882 |
| 2862 QuicGoAwayFrame goaway_frame; | 2883 QuicGoAwayFrame goaway_frame; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2896 | 2917 |
| 2897 scoped_ptr<QuicPacket> data( | 2918 scoped_ptr<QuicPacket> data( |
| 2898 framer_.ConstructFrameDataPacket(header, frames).packet); | 2919 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2899 ASSERT_TRUE(data != NULL); | 2920 ASSERT_TRUE(data != NULL); |
| 2900 | 2921 |
| 2901 test::CompareCharArraysWithHexError("constructed packet", | 2922 test::CompareCharArraysWithHexError("constructed packet", |
| 2902 data->data(), data->length(), | 2923 data->data(), data->length(), |
| 2903 AsChars(packet), arraysize(packet)); | 2924 AsChars(packet), arraysize(packet)); |
| 2904 } | 2925 } |
| 2905 | 2926 |
| 2906 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { | 2927 TEST_P(QuicFramerTest, ConstructPublicResetPacket) { |
| 2907 QuicPublicResetPacket reset_packet; | 2928 QuicPublicResetPacket reset_packet; |
| 2908 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2929 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2909 reset_packet.public_header.reset_flag = true; | 2930 reset_packet.public_header.reset_flag = true; |
| 2910 reset_packet.public_header.version_flag = false; | 2931 reset_packet.public_header.version_flag = false; |
| 2911 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 2932 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2912 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 2933 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); |
| 2913 | 2934 |
| 2914 unsigned char packet[] = { | 2935 unsigned char packet[] = { |
| 2915 // public flags (public reset, 8 byte GUID) | 2936 // public flags (public reset, 8 byte GUID) |
| 2916 0x3E, | 2937 0x3E, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2927 | 2948 |
| 2928 scoped_ptr<QuicEncryptedPacket> data( | 2949 scoped_ptr<QuicEncryptedPacket> data( |
| 2929 framer_.ConstructPublicResetPacket(reset_packet)); | 2950 framer_.ConstructPublicResetPacket(reset_packet)); |
| 2930 ASSERT_TRUE(data != NULL); | 2951 ASSERT_TRUE(data != NULL); |
| 2931 | 2952 |
| 2932 test::CompareCharArraysWithHexError("constructed packet", | 2953 test::CompareCharArraysWithHexError("constructed packet", |
| 2933 data->data(), data->length(), | 2954 data->data(), data->length(), |
| 2934 AsChars(packet), arraysize(packet)); | 2955 AsChars(packet), arraysize(packet)); |
| 2935 } | 2956 } |
| 2936 | 2957 |
| 2937 TEST_F(QuicFramerTest, ConstructFecPacket) { | 2958 TEST_P(QuicFramerTest, ConstructFecPacket) { |
| 2938 QuicPacketHeader header; | 2959 QuicPacketHeader header; |
| 2939 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2960 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2940 header.public_header.reset_flag = false; | 2961 header.public_header.reset_flag = false; |
| 2941 header.public_header.version_flag = false; | 2962 header.public_header.version_flag = false; |
| 2942 header.fec_flag = true; | 2963 header.fec_flag = true; |
| 2943 header.entropy_flag = true; | 2964 header.entropy_flag = true; |
| 2944 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); | 2965 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); |
| 2945 header.is_in_fec_group = IN_FEC_GROUP; | 2966 header.is_in_fec_group = IN_FEC_GROUP; |
| 2946 header.fec_group = GG_UINT64_C(0x123456789ABB);; | 2967 header.fec_group = GG_UINT64_C(0x123456789ABB);; |
| 2947 | 2968 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2972 | 2993 |
| 2973 scoped_ptr<QuicPacket> data( | 2994 scoped_ptr<QuicPacket> data( |
| 2974 framer_.ConstructFecPacket(header, fec_data).packet); | 2995 framer_.ConstructFecPacket(header, fec_data).packet); |
| 2975 ASSERT_TRUE(data != NULL); | 2996 ASSERT_TRUE(data != NULL); |
| 2976 | 2997 |
| 2977 test::CompareCharArraysWithHexError("constructed packet", | 2998 test::CompareCharArraysWithHexError("constructed packet", |
| 2978 data->data(), data->length(), | 2999 data->data(), data->length(), |
| 2979 AsChars(packet), arraysize(packet)); | 3000 AsChars(packet), arraysize(packet)); |
| 2980 } | 3001 } |
| 2981 | 3002 |
| 2982 TEST_F(QuicFramerTest, EncryptPacket) { | 3003 TEST_P(QuicFramerTest, EncryptPacket) { |
| 2983 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3004 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2984 unsigned char packet[] = { | 3005 unsigned char packet[] = { |
| 2985 // public flags (8 byte guid) | 3006 // public flags (8 byte guid) |
| 2986 0x3C, | 3007 0x3C, |
| 2987 // guid | 3008 // guid |
| 2988 0x10, 0x32, 0x54, 0x76, | 3009 0x10, 0x32, 0x54, 0x76, |
| 2989 0x98, 0xBA, 0xDC, 0xFE, | 3010 0x98, 0xBA, 0xDC, 0xFE, |
| 2990 // packet sequence number | 3011 // packet sequence number |
| 2991 0xBC, 0x9A, 0x78, 0x56, | 3012 0xBC, 0x9A, 0x78, 0x56, |
| 2992 0x34, 0x12, | 3013 0x34, 0x12, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3006 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3027 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
| 3007 PACKET_8BYTE_GUID, !kIncludeVersion, | 3028 PACKET_8BYTE_GUID, !kIncludeVersion, |
| 3008 PACKET_6BYTE_SEQUENCE_NUMBER)); | 3029 PACKET_6BYTE_SEQUENCE_NUMBER)); |
| 3009 scoped_ptr<QuicEncryptedPacket> encrypted( | 3030 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 3010 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3031 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
| 3011 | 3032 |
| 3012 ASSERT_TRUE(encrypted.get() != NULL); | 3033 ASSERT_TRUE(encrypted.get() != NULL); |
| 3013 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3034 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 3014 } | 3035 } |
| 3015 | 3036 |
| 3016 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { | 3037 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
| 3017 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3038 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
| 3018 unsigned char packet[] = { | 3039 unsigned char packet[] = { |
| 3019 // public flags (version, 8 byte guid) | 3040 // public flags (version, 8 byte guid) |
| 3020 0x3D, | 3041 0x3D, |
| 3021 // guid | 3042 // guid |
| 3022 0x10, 0x32, 0x54, 0x76, | 3043 0x10, 0x32, 0x54, 0x76, |
| 3023 0x98, 0xBA, 0xDC, 0xFE, | 3044 0x98, 0xBA, 0xDC, 0xFE, |
| 3024 // version tag | 3045 // version tag |
| 3025 'Q', '.', '1', '0', | 3046 'Q', '.', '1', '0', |
| 3026 // packet sequence number | 3047 // packet sequence number |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3045 scoped_ptr<QuicEncryptedPacket> encrypted( | 3066 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 3046 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3067 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
| 3047 | 3068 |
| 3048 ASSERT_TRUE(encrypted.get() != NULL); | 3069 ASSERT_TRUE(encrypted.get() != NULL); |
| 3049 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3070 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
| 3050 } | 3071 } |
| 3051 | 3072 |
| 3052 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ | 3073 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ |
| 3053 // lands. Currently this is causing valgrind problems, but it should be | 3074 // lands. Currently this is causing valgrind problems, but it should be |
| 3054 // fixed in the followup CL. | 3075 // fixed in the followup CL. |
| 3055 TEST_F(QuicFramerTest, DISABLED_CalculateLargestReceived) { | 3076 TEST_P(QuicFramerTest, DISABLED_CalculateLargestReceived) { |
| 3056 SequenceNumberSet missing; | 3077 SequenceNumberSet missing; |
| 3057 missing.insert(1); | 3078 missing.insert(1); |
| 3058 missing.insert(5); | 3079 missing.insert(5); |
| 3059 missing.insert(7); | 3080 missing.insert(7); |
| 3060 | 3081 |
| 3061 // These two we just walk to the next gap, and return the largest seen. | 3082 // These two we just walk to the next gap, and return the largest seen. |
| 3062 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); | 3083 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); |
| 3063 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5))); | 3084 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5))); |
| 3064 | 3085 |
| 3065 missing.insert(2); | 3086 missing.insert(2); |
| 3066 // For 1, we can't go forward as 2 would be implicitly acked so we return the | 3087 // For 1, we can't go forward as 2 would be implicitly acked so we return the |
| 3067 // largest missing packet. | 3088 // largest missing packet. |
| 3068 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); | 3089 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); |
| 3069 // For 2, we've seen 3 and 4, so can admit to a largest observed. | 3090 // For 2, we've seen 3 and 4, so can admit to a largest observed. |
| 3070 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2))); | 3091 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2))); |
| 3071 } | 3092 } |
| 3072 | 3093 |
| 3073 // TODO(rch) enable after landing the revised truncation CL. | 3094 // TODO(rch) enable after landing the revised truncation CL. |
| 3074 TEST_F(QuicFramerTest, DISABLED_Truncation) { | 3095 TEST_P(QuicFramerTest, DISABLED_Truncation) { |
| 3075 QuicPacketHeader header; | 3096 QuicPacketHeader header; |
| 3076 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3097 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 3077 header.public_header.reset_flag = false; | 3098 header.public_header.reset_flag = false; |
| 3078 header.public_header.version_flag = false; | 3099 header.public_header.version_flag = false; |
| 3079 header.fec_flag = false; | 3100 header.fec_flag = false; |
| 3080 header.entropy_flag = false; | 3101 header.entropy_flag = false; |
| 3081 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3102 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 3082 header.fec_group = 0; | 3103 header.fec_group = 0; |
| 3083 | 3104 |
| 3084 QuicConnectionCloseFrame close_frame; | 3105 QuicConnectionCloseFrame close_frame; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3120 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 3141 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
| 3121 *raw_close_packet)); | 3142 *raw_close_packet)); |
| 3122 | 3143 |
| 3123 // Now make sure we can turn our ack packet back into an ack frame | 3144 // Now make sure we can turn our ack packet back into an ack frame |
| 3124 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 3145 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
| 3125 | 3146 |
| 3126 // And do the same for the close frame. | 3147 // And do the same for the close frame. |
| 3127 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); | 3148 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); |
| 3128 } | 3149 } |
| 3129 | 3150 |
| 3130 TEST_F(QuicFramerTest, CleanTruncation) { | 3151 TEST_P(QuicFramerTest, CleanTruncation) { |
| 3131 QuicPacketHeader header; | 3152 QuicPacketHeader header; |
| 3132 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3153 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 3133 header.public_header.reset_flag = false; | 3154 header.public_header.reset_flag = false; |
| 3134 header.public_header.version_flag = false; | 3155 header.public_header.version_flag = false; |
| 3135 header.fec_flag = false; | 3156 header.fec_flag = false; |
| 3136 header.entropy_flag = true; | 3157 header.entropy_flag = true; |
| 3137 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3158 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 3138 header.fec_group = 0; | 3159 header.fec_group = 0; |
| 3139 | 3160 |
| 3140 QuicConnectionCloseFrame close_frame; | 3161 QuicConnectionCloseFrame close_frame; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3200 frame.connection_close_frame = &visitor_.connection_close_frame_; | 3221 frame.connection_close_frame = &visitor_.connection_close_frame_; |
| 3201 frames.push_back(frame); | 3222 frames.push_back(frame); |
| 3202 | 3223 |
| 3203 original_raw_length = raw_close_packet->length(); | 3224 original_raw_length = raw_close_packet->length(); |
| 3204 raw_close_packet.reset( | 3225 raw_close_packet.reset( |
| 3205 framer_.ConstructFrameDataPacket(header, frames).packet); | 3226 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 3206 ASSERT_TRUE(raw_ack_packet != NULL); | 3227 ASSERT_TRUE(raw_ack_packet != NULL); |
| 3207 EXPECT_EQ(original_raw_length, raw_close_packet->length()); | 3228 EXPECT_EQ(original_raw_length, raw_close_packet->length()); |
| 3208 } | 3229 } |
| 3209 | 3230 |
| 3210 TEST_F(QuicFramerTest, EntropyFlagTest) { | 3231 TEST_P(QuicFramerTest, EntropyFlagTest) { |
| 3211 unsigned char packet[] = { | 3232 unsigned char packet[] = { |
| 3212 // public flags (8 byte guid) | 3233 // public flags (8 byte guid) |
| 3213 0x3C, | 3234 0x3C, |
| 3214 // guid | 3235 // guid |
| 3215 0x10, 0x32, 0x54, 0x76, | 3236 0x10, 0x32, 0x54, 0x76, |
| 3216 0x98, 0xBA, 0xDC, 0xFE, | 3237 0x98, 0xBA, 0xDC, 0xFE, |
| 3217 // packet sequence number | 3238 // packet sequence number |
| 3218 0xBC, 0x9A, 0x78, 0x56, | 3239 0xBC, 0x9A, 0x78, 0x56, |
| 3219 0x34, 0x12, | 3240 0x34, 0x12, |
| 3220 // private flags (Entropy) | 3241 // private flags (Entropy) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3239 | 3260 |
| 3240 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3261 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3241 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3262 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3263 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3243 ASSERT_TRUE(visitor_.header_.get()); | 3264 ASSERT_TRUE(visitor_.header_.get()); |
| 3244 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3265 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 3245 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3266 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
| 3246 EXPECT_FALSE(visitor_.header_->fec_flag); | 3267 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 3247 }; | 3268 }; |
| 3248 | 3269 |
| 3249 TEST_F(QuicFramerTest, FecEntropyTest) { | 3270 TEST_P(QuicFramerTest, FecEntropyTest) { |
| 3250 unsigned char packet[] = { | 3271 unsigned char packet[] = { |
| 3251 // public flags (8 byte guid) | 3272 // public flags (8 byte guid) |
| 3252 0x3C, | 3273 0x3C, |
| 3253 // guid | 3274 // guid |
| 3254 0x10, 0x32, 0x54, 0x76, | 3275 0x10, 0x32, 0x54, 0x76, |
| 3255 0x98, 0xBA, 0xDC, 0xFE, | 3276 0x98, 0xBA, 0xDC, 0xFE, |
| 3256 // packet sequence number | 3277 // packet sequence number |
| 3257 0xBC, 0x9A, 0x78, 0x56, | 3278 0xBC, 0x9A, 0x78, 0x56, |
| 3258 0x34, 0x12, | 3279 0x34, 0x12, |
| 3259 // private flags (Entropy & fec group & FEC) | 3280 // private flags (Entropy & fec group & FEC) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3280 | 3301 |
| 3281 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3302 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3282 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3303 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3283 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3304 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3284 ASSERT_TRUE(visitor_.header_.get()); | 3305 ASSERT_TRUE(visitor_.header_.get()); |
| 3285 EXPECT_TRUE(visitor_.header_->fec_flag); | 3306 EXPECT_TRUE(visitor_.header_->fec_flag); |
| 3286 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3307 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 3287 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3308 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
| 3288 }; | 3309 }; |
| 3289 | 3310 |
| 3290 TEST_F(QuicFramerTest, StopPacketProcessing) { | 3311 TEST_P(QuicFramerTest, StopPacketProcessing) { |
| 3291 unsigned char packet[] = { | 3312 unsigned char packet[] = { |
| 3292 // public flags (8 byte guid) | 3313 // public flags (8 byte guid) |
| 3293 0x3C, | 3314 0x3C, |
| 3294 // guid | 3315 // guid |
| 3295 0x10, 0x32, 0x54, 0x76, | 3316 0x10, 0x32, 0x54, 0x76, |
| 3296 0x98, 0xBA, 0xDC, 0xFE, | 3317 0x98, 0xBA, 0xDC, 0xFE, |
| 3297 // packet sequence number | 3318 // packet sequence number |
| 3298 0xBC, 0x9A, 0x78, 0x56, | 3319 0xBC, 0x9A, 0x78, 0x56, |
| 3299 0x34, 0x12, | 3320 0x34, 0x12, |
| 3300 // Entropy | 3321 // Entropy |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3341 EXPECT_CALL(visitor, OnPacketHeader(_)); | 3362 EXPECT_CALL(visitor, OnPacketHeader(_)); |
| 3342 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); | 3363 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); |
| 3343 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 3364 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
| 3344 EXPECT_CALL(visitor, OnPacketComplete()); | 3365 EXPECT_CALL(visitor, OnPacketComplete()); |
| 3345 | 3366 |
| 3346 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3367 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3347 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3368 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3369 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3349 } | 3370 } |
| 3350 | 3371 |
| 3351 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { | 3372 TEST_P(QuicFramerTest, ConnectionCloseWithInvalidAck) { |
| 3352 unsigned char packet[] = { | 3373 unsigned char packet[] = { |
| 3353 // public flags (8 byte guid) | 3374 // public flags (8 byte guid) |
| 3354 0x3C, | 3375 0x3C, |
| 3355 // guid | 3376 // guid |
| 3356 0x10, 0x32, 0x54, 0x76, | 3377 0x10, 0x32, 0x54, 0x76, |
| 3357 0x98, 0xBA, 0xDC, 0xFE, | 3378 0x98, 0xBA, 0xDC, 0xFE, |
| 3358 // packet sequence number | 3379 // packet sequence number |
| 3359 0xBC, 0x9A, 0x78, 0x56, | 3380 0xBC, 0x9A, 0x78, 0x56, |
| 3360 0x34, 0x12, | 3381 0x34, 0x12, |
| 3361 // private flags | 3382 // private flags |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3401 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); | 3422 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); |
| 3402 EXPECT_CALL(visitor, OnPacketComplete()); | 3423 EXPECT_CALL(visitor, OnPacketComplete()); |
| 3403 | 3424 |
| 3404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3426 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3427 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3407 } | 3428 } |
| 3408 | 3429 |
| 3409 } // namespace test | 3430 } // namespace test |
| 3410 } // namespace net | 3431 } // namespace net |
| OLD | NEW |