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

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 9689078: SPDY - unforked spdy_framer and spdy_protocol tests. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <iostream> 6 #include <iostream>
7 7
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "net/spdy/spdy_framer.h" 9 #include "net/spdy/spdy_framer.h"
10 #include "net/spdy/spdy_protocol.h" 10 #include "net/spdy/spdy_protocol.h"
11 #include "net/spdy/spdy_frame_builder.h" 11 #include "net/spdy/spdy_frame_builder.h"
12 #include "testing/platform_test.h" 12 #include "testing/platform_test.h"
13 13
14 namespace { 14 namespace {
15 15
16 // Default SPDY version for unit tests. 16 // Default SPDY version for unit tests.
17 const int SPDY_VERSION_FOR_TESTS = 3; 17 int SPDY_VERSION_FOR_TESTS = 2;
Ryan Hamilton 2012/03/13 19:59:12 I think I would make these member variables instea
ramant (doing other things) 2012/03/13 21:43:02 Done.
18 18
19 // The current default spdy version as a byte to be included in const 19 // The current default spdy version as a byte to be included in const
20 // byte arrays below. Name choice is unfortunate, but better to fit to four 20 // byte arrays below. Name choice is unfortunate, but better to fit to four
21 // bytes than not. 21 // bytes than not.
22 unsigned char kVer = SPDY_VERSION_FOR_TESTS; 22 unsigned char kVer = SPDY_VERSION_FOR_TESTS;
23 23
24 spdy::SpdySetting SpdySettingFromWireFormat(uint32 key, uint32 value) { 24 spdy::SpdySetting SpdySettingFromWireFormat(uint32 key, uint32 value) {
25 return spdy::SpdySetting( 25 return spdy::SpdySetting(
26 spdy::SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, key), 26 spdy::SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, key),
27 value); 27 value);
28 } 28 }
29 29
30 } // namespace 30 } // namespace
31 31
32 namespace spdy { 32 namespace spdy {
33 33
34 namespace test_spdy3 { 34 namespace test {
35 35
36 static const size_t kMaxDecompressedSize = 1024; 36 static const size_t kMaxDecompressedSize = 1024;
37 37
38 class SpdyFramerTestUtil { 38 class SpdyFramerTestUtil {
39 public: 39 public:
40 // Decompress a single frame using the decompression context held by 40 // Decompress a single frame using the decompression context held by
41 // the SpdyFramer. The implemention will CHECK fail if the input is anything 41 // the SpdyFramer. The implemention will CHECK fail if the input is anything
42 // other than a single, well-formed compressed frame. 42 // other than a single, well-formed compressed frame.
43 // 43 //
44 // Returns a new decompressed SpdyFrame. 44 // Returns a new decompressed SpdyFrame.
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 SpdyControlType header_control_type_; 442 SpdyControlType header_control_type_;
443 bool header_buffer_valid_; 443 bool header_buffer_valid_;
444 SpdyHeaderBlock headers_; 444 SpdyHeaderBlock headers_;
445 445
446 scoped_array<char> credential_buffer_; 446 scoped_array<char> credential_buffer_;
447 size_t credential_buffer_length_; 447 size_t credential_buffer_length_;
448 size_t credential_buffer_size_; 448 size_t credential_buffer_size_;
449 SpdyCredential credential_; 449 SpdyCredential credential_;
450 }; 450 };
451 451
452 } // namespace test_spdy3 452 } // namespace test
453 453
454 } // namespace spdy 454 } // namespace spdy
455 455
456 using spdy::SpdyControlFlags; 456 using spdy::SpdyControlFlags;
457 using spdy::SpdyControlFrame; 457 using spdy::SpdyControlFrame;
458 using spdy::SpdyDataFrame; 458 using spdy::SpdyDataFrame;
459 using spdy::SpdyFrame; 459 using spdy::SpdyFrame;
460 using spdy::SpdyFrameBuilder; 460 using spdy::SpdyFrameBuilder;
461 using spdy::SpdyFramer; 461 using spdy::SpdyFramer;
462 using spdy::SpdyHeaderBlock; 462 using spdy::SpdyHeaderBlock;
463 using spdy::SpdySynStreamControlFrame; 463 using spdy::SpdySynStreamControlFrame;
464 using spdy::kControlFlagMask; 464 using spdy::kControlFlagMask;
465 using spdy::kLengthMask; 465 using spdy::kLengthMask;
466 using spdy::CONTROL_FLAG_NONE; 466 using spdy::CONTROL_FLAG_NONE;
467 using spdy::DATA_FLAG_COMPRESSED; 467 using spdy::DATA_FLAG_COMPRESSED;
468 using spdy::DATA_FLAG_FIN; 468 using spdy::DATA_FLAG_FIN;
469 using spdy::SYN_STREAM; 469 using spdy::SYN_STREAM;
470 using spdy::test_spdy3::CompareCharArraysWithHexError; 470 using spdy::test::CompareCharArraysWithHexError;
471 using spdy::test_spdy3::SpdyFramerTestUtil; 471 using spdy::test::SpdyFramerTestUtil;
472 using spdy::test_spdy3::TestSpdyVisitor; 472 using spdy::test::TestSpdyVisitor;
473 473
474 namespace spdy { 474 namespace spdy {
475 475
476 TEST(SpdyFrameBuilderSpdy3Test, WriteLimits) { 476 TEST(SpdyFrameBuilderTest, WriteLimits) {
477 SpdyFrameBuilder builder(kLengthMask + 4); 477 SpdyFrameBuilder builder(kLengthMask + 4);
478 // length field should fail. 478 // length field should fail.
479 EXPECT_FALSE(builder.WriteBytes(reinterpret_cast<const void*>(0x1), 479 EXPECT_FALSE(builder.WriteBytes(reinterpret_cast<const void*>(0x1),
480 kLengthMask + 1)); 480 kLengthMask + 1));
481 EXPECT_EQ(0, builder.length()); 481 EXPECT_EQ(0, builder.length());
482 482
483 // Writing a block of the maximum allowed size should succeed. 483 // Writing a block of the maximum allowed size should succeed.
484 const std::string kLargeData(kLengthMask, 'A'); 484 const std::string kLargeData(kLengthMask, 'A');
485 builder.WriteUInt32(kLengthMask); 485 builder.WriteUInt32(kLengthMask);
486 EXPECT_EQ(4, builder.length()); 486 EXPECT_EQ(4, builder.length());
487 EXPECT_TRUE(builder.WriteBytes(kLargeData.data(), kLengthMask)); 487 EXPECT_TRUE(builder.WriteBytes(kLargeData.data(), kLengthMask));
488 EXPECT_EQ(4 + kLengthMask, static_cast<unsigned>(builder.length())); 488 EXPECT_EQ(4 + kLengthMask, static_cast<unsigned>(builder.length()));
489 } 489 }
490 490
491 class SpdyFramerSpdy3Test : public PlatformTest { 491 enum SpdyFramerTestTypes {
492 public: 492 SPDY2,
493 SPDY3,
494 };
495
496 class SpdyFramerTest
497 : public ::testing::TestWithParam<SpdyFramerTestTypes> {
498 protected:
499 virtual void SetUp() {
500 if (GetParam() == SPDY2) {
501 kVer = 2;
502 SPDY_VERSION_FOR_TESTS = 2;
503 } else {
504 kVer = 3;
505 SPDY_VERSION_FOR_TESTS = 3;
506 }
507 }
508
493 virtual void TearDown() {} 509 virtual void TearDown() {}
494 510
495 protected:
496 void CompareFrame(const std::string& description, 511 void CompareFrame(const std::string& description,
497 const SpdyFrame& actual_frame, 512 const SpdyFrame& actual_frame,
498 const unsigned char* expected, 513 const unsigned char* expected,
499 const int expected_len) { 514 const int expected_len) {
500 const unsigned char* actual = 515 const unsigned char* actual =
501 reinterpret_cast<const unsigned char*>(actual_frame.data()); 516 reinterpret_cast<const unsigned char*>(actual_frame.data());
502 int actual_len = actual_frame.length() + SpdyFrame::kHeaderSize; 517 int actual_len = actual_frame.length() + SpdyFrame::kHeaderSize;
503 CompareCharArraysWithHexError( 518 CompareCharArraysWithHexError(
504 description, actual, actual_len, expected, expected_len); 519 description, actual, actual_len, expected, expected_len);
505 } 520 }
(...skipping 21 matching lines...) Expand all
527 << "'. The actual value received was '" << it2->second 542 << "'. The actual value received was '" << it2->second
528 << "'." << std::endl; 543 << "'." << std::endl;
529 return false; 544 return false;
530 } 545 }
531 } 546 }
532 return true; 547 return true;
533 } 548 }
534 }; 549 };
535 550
536 551
552 //-----------------------------------------------------------------------------
553 // All tests are run with two different SPDY versions: SPDY/2 and SPDY/3.
554 INSTANTIATE_TEST_CASE_P(SpdyFramerTests,
555 SpdyFramerTest,
556 ::testing::Values(SPDY2, SPDY3));
557
537 // Test that we can encode and decode a SpdyHeaderBlock in serialized form. 558 // Test that we can encode and decode a SpdyHeaderBlock in serialized form.
538 TEST_F(SpdyFramerSpdy3Test, HeaderBlockInBuffer) { 559 TEST_P(SpdyFramerTest, HeaderBlockInBuffer) {
539 SpdyHeaderBlock headers; 560 SpdyHeaderBlock headers;
540 headers["alpha"] = "beta"; 561 headers["alpha"] = "beta";
541 headers["gamma"] = "charlie"; 562 headers["gamma"] = "charlie";
542 SpdyFramer framer(kVer); 563 SpdyFramer framer(kVer);
543 564
544 // Encode the header block into a SynStream frame. 565 // Encode the header block into a SynStream frame.
545 scoped_ptr<SpdySynStreamControlFrame> frame( 566 scoped_ptr<SpdySynStreamControlFrame> frame(
546 framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE, false, &headers)); 567 framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE, false, &headers));
547 EXPECT_TRUE(frame.get() != NULL); 568 EXPECT_TRUE(frame.get() != NULL);
548 std::string serialized_headers(frame->header_block(), 569 std::string serialized_headers(frame->header_block(),
549 frame->header_block_len()); 570 frame->header_block_len());
550 SpdyHeaderBlock new_headers; 571 SpdyHeaderBlock new_headers;
551 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(), 572 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(),
552 serialized_headers.size(), 573 serialized_headers.size(),
553 &new_headers)); 574 &new_headers));
554 575
555 EXPECT_EQ(headers.size(), new_headers.size()); 576 EXPECT_EQ(headers.size(), new_headers.size());
556 EXPECT_EQ(headers["alpha"], new_headers["alpha"]); 577 EXPECT_EQ(headers["alpha"], new_headers["alpha"]);
557 EXPECT_EQ(headers["gamma"], new_headers["gamma"]); 578 EXPECT_EQ(headers["gamma"], new_headers["gamma"]);
558 } 579 }
559 580
560 // Test that if there's not a full frame, we fail to parse it. 581 // Test that if there's not a full frame, we fail to parse it.
561 TEST_F(SpdyFramerSpdy3Test, UndersizedHeaderBlockInBuffer) { 582 TEST_P(SpdyFramerTest, UndersizedHeaderBlockInBuffer) {
562 SpdyHeaderBlock headers; 583 SpdyHeaderBlock headers;
563 headers["alpha"] = "beta"; 584 headers["alpha"] = "beta";
564 headers["gamma"] = "charlie"; 585 headers["gamma"] = "charlie";
565 SpdyFramer framer(kVer); 586 SpdyFramer framer(kVer);
566 587
567 // Encode the header block into a SynStream frame. 588 // Encode the header block into a SynStream frame.
568 scoped_ptr<SpdySynStreamControlFrame> frame( 589 scoped_ptr<SpdySynStreamControlFrame> frame(
569 framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE, false, &headers)); 590 framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE, false, &headers));
570 EXPECT_TRUE(frame.get() != NULL); 591 EXPECT_TRUE(frame.get() != NULL);
571 592
572 std::string serialized_headers(frame->header_block(), 593 std::string serialized_headers(frame->header_block(),
573 frame->header_block_len()); 594 frame->header_block_len());
574 SpdyHeaderBlock new_headers; 595 SpdyHeaderBlock new_headers;
575 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(), 596 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(),
576 serialized_headers.size() - 2, 597 serialized_headers.size() - 2,
577 &new_headers)); 598 &new_headers));
578 } 599 }
579 600
580 TEST_F(SpdyFramerSpdy3Test, OutOfOrderHeaders) { 601 TEST_P(SpdyFramerTest, OutOfOrderHeaders) {
581 // Frame builder with plentiful buffer size. 602 // Frame builder with plentiful buffer size.
582 SpdyFrameBuilder frame(1024); 603 SpdyFrameBuilder frame(1024);
583 604
584 frame.WriteUInt16(kControlFlagMask | 1); 605 frame.WriteUInt16(kControlFlagMask | 1);
585 frame.WriteUInt16(SYN_STREAM); 606 frame.WriteUInt16(SYN_STREAM);
586 frame.WriteUInt32(0); // Placeholder for the length. 607 frame.WriteUInt32(0); // Placeholder for the length.
587 frame.WriteUInt32(3); // stream_id 608 frame.WriteUInt32(3); // stream_id
588 frame.WriteUInt32(0); // Associated stream id 609 frame.WriteUInt32(0); // Associated stream id
589 frame.WriteUInt16(0); // Priority. 610 frame.WriteUInt16(0); // Priority.
590 611
(...skipping 18 matching lines...) Expand all
609 SpdySynStreamControlFrame syn_frame(control_frame->data(), false); 630 SpdySynStreamControlFrame syn_frame(control_frame->data(), false);
610 std::string serialized_headers(syn_frame.header_block(), 631 std::string serialized_headers(syn_frame.header_block(),
611 syn_frame.header_block_len()); 632 syn_frame.header_block_len());
612 SpdyFramer framer(kVer); 633 SpdyFramer framer(kVer);
613 framer.set_enable_compression(false); 634 framer.set_enable_compression(false);
614 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(), 635 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(),
615 serialized_headers.size(), 636 serialized_headers.size(),
616 &new_headers)); 637 &new_headers));
617 } 638 }
618 639
619 TEST_F(SpdyFramerSpdy3Test, CreateCredential) { 640 TEST_P(SpdyFramerTest, CreateCredential) {
620 SpdyFramer framer(kVer); 641 SpdyFramer framer(kVer);
621 642
622 { 643 {
623 const char kDescription[] = "CREDENTIAL frame"; 644 const char kDescription[] = "CREDENTIAL frame";
624 const unsigned char kFrameData[] = { 645 const unsigned char kFrameData[] = {
625 0x80, kVer, 0x00, 0x0A, 646 0x80, kVer, 0x00, 0x0A,
626 0x00, 0x00, 0x00, 0x33, 647 0x00, 0x00, 0x00, 0x33,
627 0x00, 0x03, 0x00, 0x00, 648 0x00, 0x03, 0x00, 0x00,
628 0x00, 0x05, 'p', 'r', 649 0x00, 0x05, 'p', 'r',
629 'o', 'o', 'f', 0x00, 650 'o', 'o', 'f', 0x00,
(...skipping 12 matching lines...) Expand all
642 credential.slot = 3; 663 credential.slot = 3;
643 credential.proof = "proof"; 664 credential.proof = "proof";
644 credential.certs.push_back("a cert"); 665 credential.certs.push_back("a cert");
645 credential.certs.push_back("another cert"); 666 credential.certs.push_back("another cert");
646 credential.certs.push_back("final cert"); 667 credential.certs.push_back("final cert");
647 scoped_ptr<SpdyFrame> frame(framer.CreateCredentialFrame(credential)); 668 scoped_ptr<SpdyFrame> frame(framer.CreateCredentialFrame(credential));
648 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 669 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
649 } 670 }
650 } 671 }
651 672
652 TEST_F(SpdyFramerSpdy3Test, ParseCredentialFrameData) { 673 TEST_P(SpdyFramerTest, ParseCredentialFrameData) {
653 SpdyFramer framer(kVer); 674 SpdyFramer framer(kVer);
654 675
655 { 676 {
656 unsigned char kFrameData[] = { 677 unsigned char kFrameData[] = {
657 0x80, kVer, 0x00, 0x0A, 678 0x80, kVer, 0x00, 0x0A,
658 0x00, 0x00, 0x00, 0x33, 679 0x00, 0x00, 0x00, 0x33,
659 0x00, 0x03, 0x00, 0x00, 680 0x00, 0x03, 0x00, 0x00,
660 0x00, 0x05, 'p', 'r', 681 0x00, 0x05, 'p', 'r',
661 'o', 'o', 'f', 0x00, 682 'o', 'o', 'f', 0x00,
662 0x00, 0x00, 0x06, 'a', 683 0x00, 0x00, 0x06, 'a',
(...skipping 17 matching lines...) Expand all
680 EXPECT_EQ("a cert", credential.certs.front()); 701 EXPECT_EQ("a cert", credential.certs.front());
681 credential.certs.erase(credential.certs.begin()); 702 credential.certs.erase(credential.certs.begin());
682 EXPECT_EQ("another cert", credential.certs.front()); 703 EXPECT_EQ("another cert", credential.certs.front());
683 credential.certs.erase(credential.certs.begin()); 704 credential.certs.erase(credential.certs.begin());
684 EXPECT_EQ("final cert", credential.certs.front()); 705 EXPECT_EQ("final cert", credential.certs.front());
685 credential.certs.erase(credential.certs.begin()); 706 credential.certs.erase(credential.certs.begin());
686 EXPECT_TRUE(credential.certs.empty()); 707 EXPECT_TRUE(credential.certs.empty());
687 } 708 }
688 } 709 }
689 710
690 TEST_F(SpdyFramerSpdy3Test, DuplicateHeader) { 711 TEST_P(SpdyFramerTest, DuplicateHeader) {
691 // Frame builder with plentiful buffer size. 712 // Frame builder with plentiful buffer size.
692 SpdyFrameBuilder frame(1024); 713 SpdyFrameBuilder frame(1024);
693 714
694 frame.WriteUInt16(kControlFlagMask | 1); 715 frame.WriteUInt16(kControlFlagMask | 1);
695 frame.WriteUInt16(SYN_STREAM); 716 frame.WriteUInt16(SYN_STREAM);
696 frame.WriteUInt32(0); // Placeholder for the length. 717 frame.WriteUInt32(0); // Placeholder for the length.
697 frame.WriteUInt32(3); // stream_id 718 frame.WriteUInt32(3); // stream_id
698 frame.WriteUInt32(0); // associated stream id 719 frame.WriteUInt32(0); // associated stream id
699 frame.WriteUInt16(0); // Priority. 720 frame.WriteUInt16(0); // Priority.
700 721
(...skipping 19 matching lines...) Expand all
720 std::string serialized_headers(syn_frame.header_block(), 741 std::string serialized_headers(syn_frame.header_block(),
721 syn_frame.header_block_len()); 742 syn_frame.header_block_len());
722 SpdyFramer framer(kVer); 743 SpdyFramer framer(kVer);
723 framer.set_enable_compression(false); 744 framer.set_enable_compression(false);
724 // This should fail because duplicate headers are verboten by the spec. 745 // This should fail because duplicate headers are verboten by the spec.
725 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(), 746 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(),
726 serialized_headers.size(), 747 serialized_headers.size(),
727 &new_headers)); 748 &new_headers));
728 } 749 }
729 750
730 TEST_F(SpdyFramerSpdy3Test, MultiValueHeader) { 751 TEST_P(SpdyFramerTest, MultiValueHeader) {
731 // Frame builder with plentiful buffer size. 752 // Frame builder with plentiful buffer size.
732 SpdyFrameBuilder frame(1024); 753 SpdyFrameBuilder frame(1024);
733 754
734 frame.WriteUInt16(kControlFlagMask | 1); 755 frame.WriteUInt16(kControlFlagMask | 1);
735 frame.WriteUInt16(SYN_STREAM); 756 frame.WriteUInt16(SYN_STREAM);
736 frame.WriteUInt32(0); // Placeholder for the length. 757 frame.WriteUInt32(0); // Placeholder for the length.
737 frame.WriteUInt32(3); // stream_id 758 frame.WriteUInt32(3); // stream_id
738 frame.WriteUInt32(0); // associated stream id 759 frame.WriteUInt32(0); // associated stream id
739 frame.WriteUInt16(0); // Priority. 760 frame.WriteUInt16(0); // Priority.
740 761
(...skipping 17 matching lines...) Expand all
758 syn_frame.header_block_len()); 779 syn_frame.header_block_len());
759 SpdyFramer framer(kVer); 780 SpdyFramer framer(kVer);
760 framer.set_enable_compression(false); 781 framer.set_enable_compression(false);
761 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(), 782 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.c_str(),
762 serialized_headers.size(), 783 serialized_headers.size(),
763 &new_headers)); 784 &new_headers));
764 EXPECT_TRUE(new_headers.find("name") != new_headers.end()); 785 EXPECT_TRUE(new_headers.find("name") != new_headers.end());
765 EXPECT_EQ(value, new_headers.find("name")->second); 786 EXPECT_EQ(value, new_headers.find("name")->second);
766 } 787 }
767 788
768 TEST_F(SpdyFramerSpdy3Test, BasicCompression) { 789 TEST_P(SpdyFramerTest, BasicCompression) {
769 SpdyHeaderBlock headers; 790 SpdyHeaderBlock headers;
770 headers["server"] = "SpdyServer 1.0"; 791 headers["server"] = "SpdyServer 1.0";
771 headers["date"] = "Mon 12 Jan 2009 12:12:12 PST"; 792 headers["date"] = "Mon 12 Jan 2009 12:12:12 PST";
772 headers["status"] = "200"; 793 headers["status"] = "200";
773 headers["version"] = "HTTP/1.1"; 794 headers["version"] = "HTTP/1.1";
774 headers["content-type"] = "text/html"; 795 headers["content-type"] = "text/html";
775 headers["content-length"] = "12"; 796 headers["content-length"] = "12";
776 797
777 SpdyFramer framer(kVer); 798 SpdyFramer framer(kVer);
778 framer.set_enable_compression(true); 799 framer.set_enable_compression(true);
(...skipping 25 matching lines...) Expand all
804 // from scratch. 825 // from scratch.
805 scoped_ptr<SpdySynStreamControlFrame> 826 scoped_ptr<SpdySynStreamControlFrame>
806 uncompressed_frame(framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE, 827 uncompressed_frame(framer.CreateSynStream(1, 0, 1, CONTROL_FLAG_NONE,
807 false, &headers)); 828 false, &headers));
808 EXPECT_EQ(frame3->length(), uncompressed_frame->length()); 829 EXPECT_EQ(frame3->length(), uncompressed_frame->length());
809 EXPECT_EQ(0, 830 EXPECT_EQ(0,
810 memcmp(frame3->data(), uncompressed_frame->data(), 831 memcmp(frame3->data(), uncompressed_frame->data(),
811 SpdyFrame::kHeaderSize + uncompressed_frame->length())); 832 SpdyFrame::kHeaderSize + uncompressed_frame->length()));
812 } 833 }
813 834
814 TEST_F(SpdyFramerSpdy3Test, Basic) { 835 TEST_P(SpdyFramerTest, Basic) {
815 const unsigned char kV2Input[] = { 836 const unsigned char kV2Input[] = {
816 0x80, kVer, 0x00, 0x01, // SYN Stream #1 837 0x80, kVer, 0x00, 0x01, // SYN Stream #1
817 0x00, 0x00, 0x00, 0x14, 838 0x00, 0x00, 0x00, 0x14,
818 0x00, 0x00, 0x00, 0x01, 839 0x00, 0x00, 0x00, 0x01,
819 0x00, 0x00, 0x00, 0x00, 840 0x00, 0x00, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x01, 841 0x00, 0x00, 0x00, 0x01,
821 0x00, 0x02, 'h', 'h', 842 0x00, 0x02, 'h', 'h',
822 0x00, 0x02, 'v', 'v', 843 0x00, 0x02, 'v', 'v',
823 844
824 0x80, kVer, 0x00, 0x08, // HEADERS on Stream #1 845 0x80, kVer, 0x00, 0x08, // HEADERS on Stream #1
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 EXPECT_EQ(0, visitor.syn_reply_frame_count_); 957 EXPECT_EQ(0, visitor.syn_reply_frame_count_);
937 EXPECT_EQ(1, visitor.headers_frame_count_); 958 EXPECT_EQ(1, visitor.headers_frame_count_);
938 EXPECT_EQ(24, visitor.data_bytes_); 959 EXPECT_EQ(24, visitor.data_bytes_);
939 EXPECT_EQ(2, visitor.fin_frame_count_); 960 EXPECT_EQ(2, visitor.fin_frame_count_);
940 EXPECT_EQ(0, visitor.fin_flag_count_); 961 EXPECT_EQ(0, visitor.fin_flag_count_);
941 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 962 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
942 EXPECT_EQ(4, visitor.data_frame_count_); 963 EXPECT_EQ(4, visitor.data_frame_count_);
943 } 964 }
944 965
945 // Test that the FIN flag on a data frame signifies EOF. 966 // Test that the FIN flag on a data frame signifies EOF.
946 TEST_F(SpdyFramerSpdy3Test, FinOnDataFrame) { 967 TEST_P(SpdyFramerTest, FinOnDataFrame) {
947 const unsigned char kV2Input[] = { 968 const unsigned char kV2Input[] = {
948 0x80, kVer, 0x00, 0x01, // SYN Stream #1 969 0x80, kVer, 0x00, 0x01, // SYN Stream #1
949 0x00, 0x00, 0x00, 0x14, 970 0x00, 0x00, 0x00, 0x14,
950 0x00, 0x00, 0x00, 0x01, 971 0x00, 0x00, 0x00, 0x01,
951 0x00, 0x00, 0x00, 0x00, 972 0x00, 0x00, 0x00, 0x00,
952 0x00, 0x00, 0x00, 0x01, 973 0x00, 0x00, 0x00, 0x01,
953 0x00, 0x02, 'h', 'h', 974 0x00, 0x02, 'h', 'h',
954 0x00, 0x02, 'v', 'v', 975 0x00, 0x02, 'v', 'v',
955 976
956 0x80, kVer, 0x00, 0x02, // SYN REPLY Stream #1 977 0x80, kVer, 0x00, 0x02, // SYN REPLY Stream #1
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 EXPECT_EQ(1, visitor.syn_reply_frame_count_); 1034 EXPECT_EQ(1, visitor.syn_reply_frame_count_);
1014 EXPECT_EQ(0, visitor.headers_frame_count_); 1035 EXPECT_EQ(0, visitor.headers_frame_count_);
1015 EXPECT_EQ(16, visitor.data_bytes_); 1036 EXPECT_EQ(16, visitor.data_bytes_);
1016 EXPECT_EQ(0, visitor.fin_frame_count_); 1037 EXPECT_EQ(0, visitor.fin_frame_count_);
1017 EXPECT_EQ(0, visitor.fin_flag_count_); 1038 EXPECT_EQ(0, visitor.fin_flag_count_);
1018 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 1039 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
1019 EXPECT_EQ(2, visitor.data_frame_count_); 1040 EXPECT_EQ(2, visitor.data_frame_count_);
1020 } 1041 }
1021 1042
1022 // Test that the FIN flag on a SYN reply frame signifies EOF. 1043 // Test that the FIN flag on a SYN reply frame signifies EOF.
1023 TEST_F(SpdyFramerSpdy3Test, FinOnSynReplyFrame) { 1044 TEST_P(SpdyFramerTest, FinOnSynReplyFrame) {
1024 const unsigned char kV2Input[] = { 1045 const unsigned char kV2Input[] = {
1025 0x80, kVer, 0x00, 0x01, // SYN Stream #1 1046 0x80, kVer, 0x00, 0x01, // SYN Stream #1
1026 0x00, 0x00, 0x00, 0x14, 1047 0x00, 0x00, 0x00, 0x14,
1027 0x00, 0x00, 0x00, 0x01, 1048 0x00, 0x00, 0x00, 0x01,
1028 0x00, 0x00, 0x00, 0x00, 1049 0x00, 0x00, 0x00, 0x00,
1029 0x00, 0x00, 0x00, 0x01, 1050 0x00, 0x00, 0x00, 0x01,
1030 0x00, 0x02, 'h', 'h', 1051 0x00, 0x02, 'h', 'h',
1031 0x00, 0x02, 'v', 'v', 1052 0x00, 0x02, 'v', 'v',
1032 1053
1033 0x80, kVer, 0x00, 0x02, // SYN REPLY Stream #1 1054 0x80, kVer, 0x00, 0x02, // SYN REPLY Stream #1
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 EXPECT_EQ(1, visitor.syn_frame_count_); 1092 EXPECT_EQ(1, visitor.syn_frame_count_);
1072 EXPECT_EQ(1, visitor.syn_reply_frame_count_); 1093 EXPECT_EQ(1, visitor.syn_reply_frame_count_);
1073 EXPECT_EQ(0, visitor.headers_frame_count_); 1094 EXPECT_EQ(0, visitor.headers_frame_count_);
1074 EXPECT_EQ(0, visitor.data_bytes_); 1095 EXPECT_EQ(0, visitor.data_bytes_);
1075 EXPECT_EQ(0, visitor.fin_frame_count_); 1096 EXPECT_EQ(0, visitor.fin_frame_count_);
1076 EXPECT_EQ(1, visitor.fin_flag_count_); 1097 EXPECT_EQ(1, visitor.fin_flag_count_);
1077 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 1098 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
1078 EXPECT_EQ(0, visitor.data_frame_count_); 1099 EXPECT_EQ(0, visitor.data_frame_count_);
1079 } 1100 }
1080 1101
1081 TEST_F(SpdyFramerSpdy3Test, HeaderCompression) { 1102 TEST_P(SpdyFramerTest, HeaderCompression) {
1082 SpdyFramer send_framer(kVer); 1103 SpdyFramer send_framer(kVer);
1083 SpdyFramer recv_framer(kVer); 1104 SpdyFramer recv_framer(kVer);
1084 1105
1085 send_framer.set_enable_compression(true); 1106 send_framer.set_enable_compression(true);
1086 recv_framer.set_enable_compression(true); 1107 recv_framer.set_enable_compression(true);
1087 1108
1088 const char kHeader1[] = "header1"; 1109 const char kHeader1[] = "header1";
1089 const char kHeader2[] = "header2"; 1110 const char kHeader2[] = "header2";
1090 const char kHeader3[] = "header3"; 1111 const char kHeader3[] = "header3";
1091 const char kValue1[] = "value1"; 1112 const char kValue1[] = "value1";
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 EXPECT_EQ(kValue3, decompressed_headers[kHeader3]); 1171 EXPECT_EQ(kValue3, decompressed_headers[kHeader3]);
1151 1172
1152 // We didn't have data streams, so we shouldn't have (de)compressors. 1173 // We didn't have data streams, so we shouldn't have (de)compressors.
1153 EXPECT_EQ(0, send_framer.num_stream_compressors()); 1174 EXPECT_EQ(0, send_framer.num_stream_compressors());
1154 EXPECT_EQ(0, send_framer.num_stream_decompressors()); 1175 EXPECT_EQ(0, send_framer.num_stream_decompressors());
1155 EXPECT_EQ(0, recv_framer.num_stream_compressors()); 1176 EXPECT_EQ(0, recv_framer.num_stream_compressors());
1156 EXPECT_EQ(0, recv_framer.num_stream_decompressors()); 1177 EXPECT_EQ(0, recv_framer.num_stream_decompressors());
1157 } 1178 }
1158 1179
1159 // Verify we don't leak when we leave streams unclosed 1180 // Verify we don't leak when we leave streams unclosed
1160 TEST_F(SpdyFramerSpdy3Test, UnclosedStreamDataCompressors) { 1181 TEST_P(SpdyFramerTest, UnclosedStreamDataCompressors) {
1161 SpdyFramer send_framer(kVer); 1182 SpdyFramer send_framer(kVer);
1162 1183
1163 send_framer.set_enable_compression(true); 1184 send_framer.set_enable_compression(true);
1164 1185
1165 const char kHeader1[] = "header1"; 1186 const char kHeader1[] = "header1";
1166 const char kHeader2[] = "header2"; 1187 const char kHeader2[] = "header2";
1167 const char kValue1[] = "value1"; 1188 const char kValue1[] = "value1";
1168 const char kValue2[] = "value2"; 1189 const char kValue2[] = "value2";
1169 1190
1170 SpdyHeaderBlock block; 1191 SpdyHeaderBlock block;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1224
1204 // We closed the streams, so all compressors should be down. 1225 // We closed the streams, so all compressors should be down.
1205 EXPECT_EQ(0, visitor.framer_.num_stream_compressors()); 1226 EXPECT_EQ(0, visitor.framer_.num_stream_compressors());
1206 EXPECT_EQ(0, visitor.framer_.num_stream_decompressors()); 1227 EXPECT_EQ(0, visitor.framer_.num_stream_decompressors());
1207 EXPECT_EQ(0, send_framer.num_stream_compressors()); 1228 EXPECT_EQ(0, send_framer.num_stream_compressors());
1208 EXPECT_EQ(0, send_framer.num_stream_decompressors()); 1229 EXPECT_EQ(0, send_framer.num_stream_decompressors());
1209 } 1230 }
1210 1231
1211 // Verify we can decompress the stream even if handed over to the 1232 // Verify we can decompress the stream even if handed over to the
1212 // framer 1 byte at a time. 1233 // framer 1 byte at a time.
1213 TEST_F(SpdyFramerSpdy3Test, UnclosedStreamDataCompressorsOneByteAtATime) { 1234 TEST_P(SpdyFramerTest, UnclosedStreamDataCompressorsOneByteAtATime) {
1214 SpdyFramer send_framer(kVer); 1235 SpdyFramer send_framer(kVer);
1215 1236
1216 send_framer.set_enable_compression(true); 1237 send_framer.set_enable_compression(true);
1217 1238
1218 const char kHeader1[] = "header1"; 1239 const char kHeader1[] = "header1";
1219 const char kHeader2[] = "header2"; 1240 const char kHeader2[] = "header2";
1220 const char kValue1[] = "value1"; 1241 const char kValue1[] = "value1";
1221 const char kValue2[] = "value2"; 1242 const char kValue2[] = "value2";
1222 1243
1223 SpdyHeaderBlock block; 1244 SpdyHeaderBlock block;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 1285 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
1265 EXPECT_EQ(1, visitor.data_frame_count_); 1286 EXPECT_EQ(1, visitor.data_frame_count_);
1266 1287
1267 // We closed the streams, so all compressors should be down. 1288 // We closed the streams, so all compressors should be down.
1268 EXPECT_EQ(0, visitor.framer_.num_stream_compressors()); 1289 EXPECT_EQ(0, visitor.framer_.num_stream_compressors());
1269 EXPECT_EQ(0, visitor.framer_.num_stream_decompressors()); 1290 EXPECT_EQ(0, visitor.framer_.num_stream_decompressors());
1270 EXPECT_EQ(0, send_framer.num_stream_compressors()); 1291 EXPECT_EQ(0, send_framer.num_stream_compressors());
1271 EXPECT_EQ(0, send_framer.num_stream_decompressors()); 1292 EXPECT_EQ(0, send_framer.num_stream_decompressors());
1272 } 1293 }
1273 1294
1274 TEST_F(SpdyFramerSpdy3Test, WindowUpdateFrame) { 1295 TEST_P(SpdyFramerTest, WindowUpdateFrame) {
1275 SpdyFramer framer(kVer); 1296 SpdyFramer framer(kVer);
1276 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame( 1297 scoped_ptr<SpdyWindowUpdateControlFrame> window_update_frame(
1277 framer.CreateWindowUpdate(1, 0x12345678)); 1298 framer.CreateWindowUpdate(1, 0x12345678));
1278 1299
1279 const unsigned char expected_data_frame[] = { 1300 const unsigned char expected_data_frame[] = {
1280 0x80, kVer, 0x00, 0x09, 1301 0x80, kVer, 0x00, 0x09,
1281 0x00, 0x00, 0x00, 0x08, 1302 0x00, 0x00, 0x00, 0x08,
1282 0x00, 0x00, 0x00, 0x01, 1303 0x00, 0x00, 0x00, 0x01,
1283 0x12, 0x34, 0x56, 0x78 1304 0x12, 0x34, 0x56, 0x78
1284 }; 1305 };
1285 1306
1286 EXPECT_EQ(16u, window_update_frame->size()); 1307 EXPECT_EQ(16u, window_update_frame->size());
1287 EXPECT_EQ(0, 1308 EXPECT_EQ(0,
1288 memcmp(window_update_frame->data(), expected_data_frame, 16)); 1309 memcmp(window_update_frame->data(), expected_data_frame, 16));
1289 } 1310 }
1290 1311
1291 TEST_F(SpdyFramerSpdy3Test, CreateDataFrame) { 1312 TEST_P(SpdyFramerTest, CreateDataFrame) {
1292 SpdyFramer framer(kVer); 1313 SpdyFramer framer(kVer);
1293 1314
1294 { 1315 {
1295 const char kDescription[] = "'hello' data frame, no FIN"; 1316 const char kDescription[] = "'hello' data frame, no FIN";
1296 const unsigned char kFrameData[] = { 1317 const unsigned char kFrameData[] = {
1297 0x00, 0x00, 0x00, 0x01, 1318 0x00, 0x00, 0x00, 0x01,
1298 0x00, 0x00, 0x00, 0x05, 1319 0x00, 0x00, 0x00, 0x05,
1299 'h', 'e', 'l', 'l', 1320 'h', 'e', 'l', 'l',
1300 'o' 1321 'o'
1301 }; 1322 };
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 new unsigned char[kFrameSize]); 1388 new unsigned char[kFrameSize]);
1368 memcpy(expected_frame_data.get(), kFrameHeader, arraysize(kFrameHeader)); 1389 memcpy(expected_frame_data.get(), kFrameHeader, arraysize(kFrameHeader));
1369 memset(expected_frame_data.get() + arraysize(kFrameHeader), 'A', kDataSize); 1390 memset(expected_frame_data.get() + arraysize(kFrameHeader), 'A', kDataSize);
1370 1391
1371 scoped_ptr<SpdyFrame> frame(framer.CreateDataFrame( 1392 scoped_ptr<SpdyFrame> frame(framer.CreateDataFrame(
1372 1, kData.data(), kData.size(), DATA_FLAG_FIN)); 1393 1, kData.data(), kData.size(), DATA_FLAG_FIN));
1373 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize); 1394 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize);
1374 } 1395 }
1375 } 1396 }
1376 1397
1377 TEST_F(SpdyFramerSpdy3Test, CreateSynStreamUncompressed) { 1398 TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) {
1378 SpdyFramer framer(kVer); 1399 SpdyFramer framer(kVer);
1379 framer.set_enable_compression(false); 1400 framer.set_enable_compression(false);
1380 1401
1381 { 1402 {
1382 const char kDescription[] = "SYN_STREAM frame, lowest pri, no FIN"; 1403 const char kDescription[] = "SYN_STREAM frame, lowest pri, no FIN";
1383 1404
1384 SpdyHeaderBlock headers; 1405 SpdyHeaderBlock headers;
1385 headers["bar"] = "foo"; 1406 headers["bar"] = "foo";
1386 headers["foo"] = "bar"; 1407 headers["foo"] = "bar";
1387 1408
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1509 scoped_ptr<SpdyFrame> frame(framer.CreateSynStream( 1530 scoped_ptr<SpdyFrame> frame(framer.CreateSynStream(
1510 0x7fffffff, 0x7fffffff, 1, CONTROL_FLAG_FIN, false, &headers)); 1531 0x7fffffff, 0x7fffffff, 1, CONTROL_FLAG_FIN, false, &headers));
1511 CompareFrame(kDescription, 1532 CompareFrame(kDescription,
1512 *frame, 1533 *frame,
1513 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 1534 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
1514 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 1535 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
1515 : arraysize(kV3FrameData)); 1536 : arraysize(kV3FrameData));
1516 } 1537 }
1517 } 1538 }
1518 1539
1519 TEST_F(SpdyFramerSpdy3Test, CreateSynStreamCompressed) { 1540 TEST_P(SpdyFramerTest, CreateSynStreamCompressed) {
1520 SpdyFramer framer(kVer); 1541 SpdyFramer framer(kVer);
1521 framer.set_enable_compression(true); 1542 framer.set_enable_compression(true);
1522 1543
1523 { 1544 {
1524 const char kDescription[] = 1545 const char kDescription[] =
1525 "SYN_STREAM frame, low pri, no FIN"; 1546 "SYN_STREAM frame, low pri, no FIN";
1526 1547
1527 SpdyHeaderBlock headers; 1548 SpdyHeaderBlock headers;
1528 headers["bar"] = "foo"; 1549 headers["bar"] = "foo";
1529 headers["foo"] = "bar"; 1550 headers["foo"] = "bar";
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 scoped_ptr<SpdyFrame> frame(framer.CreateSynStream( 1582 scoped_ptr<SpdyFrame> frame(framer.CreateSynStream(
1562 1, 0, priority, CONTROL_FLAG_NONE, true, &headers)); 1583 1, 0, priority, CONTROL_FLAG_NONE, true, &headers));
1563 CompareFrame(kDescription, 1584 CompareFrame(kDescription,
1564 *frame, 1585 *frame,
1565 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 1586 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
1566 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 1587 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
1567 : arraysize(kV3FrameData)); 1588 : arraysize(kV3FrameData));
1568 } 1589 }
1569 } 1590 }
1570 1591
1571 TEST_F(SpdyFramerSpdy3Test, CreateSynReplyUncompressed) { 1592 TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) {
1572 SpdyFramer framer(kVer); 1593 SpdyFramer framer(kVer);
1573 framer.set_enable_compression(false); 1594 framer.set_enable_compression(false);
1574 1595
1575 { 1596 {
1576 const char kDescription[] = "SYN_REPLY frame, no FIN"; 1597 const char kDescription[] = "SYN_REPLY frame, no FIN";
1577 1598
1578 SpdyHeaderBlock headers; 1599 SpdyHeaderBlock headers;
1579 headers["bar"] = "foo"; 1600 headers["bar"] = "foo";
1580 headers["foo"] = "bar"; 1601 headers["foo"] = "bar";
1581 1602
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 scoped_ptr<SpdyFrame> frame(framer.CreateSynReply( 1709 scoped_ptr<SpdyFrame> frame(framer.CreateSynReply(
1689 0x7fffffff, CONTROL_FLAG_FIN, false, &headers)); 1710 0x7fffffff, CONTROL_FLAG_FIN, false, &headers));
1690 CompareFrame(kDescription, 1711 CompareFrame(kDescription,
1691 *frame, 1712 *frame,
1692 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 1713 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
1693 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 1714 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
1694 : arraysize(kV3FrameData)); 1715 : arraysize(kV3FrameData));
1695 } 1716 }
1696 } 1717 }
1697 1718
1698 TEST_F(SpdyFramerSpdy3Test, CreateSynReplyCompressed) { 1719 TEST_P(SpdyFramerTest, CreateSynReplyCompressed) {
1699 SpdyFramer framer(kVer); 1720 SpdyFramer framer(kVer);
1700 framer.set_enable_compression(true); 1721 framer.set_enable_compression(true);
1701 1722
1702 { 1723 {
1703 const char kDescription[] = "SYN_REPLY frame, no FIN"; 1724 const char kDescription[] = "SYN_REPLY frame, no FIN";
1704 1725
1705 SpdyHeaderBlock headers; 1726 SpdyHeaderBlock headers;
1706 headers["bar"] = "foo"; 1727 headers["bar"] = "foo";
1707 headers["foo"] = "bar"; 1728 headers["foo"] = "bar";
1708 1729
(...skipping 26 matching lines...) Expand all
1735 scoped_ptr<SpdyFrame> frame(framer.CreateSynReply( 1756 scoped_ptr<SpdyFrame> frame(framer.CreateSynReply(
1736 1, CONTROL_FLAG_NONE, true, &headers)); 1757 1, CONTROL_FLAG_NONE, true, &headers));
1737 CompareFrame(kDescription, 1758 CompareFrame(kDescription,
1738 *frame, 1759 *frame,
1739 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 1760 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
1740 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 1761 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
1741 : arraysize(kV3FrameData)); 1762 : arraysize(kV3FrameData));
1742 } 1763 }
1743 } 1764 }
1744 1765
1745 TEST_F(SpdyFramerSpdy3Test, CreateRstStream) { 1766 TEST_P(SpdyFramerTest, CreateRstStream) {
1746 SpdyFramer framer(kVer); 1767 SpdyFramer framer(kVer);
1747 1768
1748 { 1769 {
1749 const char kDescription[] = "RST_STREAM frame"; 1770 const char kDescription[] = "RST_STREAM frame";
1750 const unsigned char kFrameData[] = { 1771 const unsigned char kFrameData[] = {
1751 0x80, kVer, 0x00, 0x03, 1772 0x80, kVer, 0x00, 0x03,
1752 0x00, 0x00, 0x00, 0x08, 1773 0x00, 0x00, 0x00, 0x08,
1753 0x00, 0x00, 0x00, 0x01, 1774 0x00, 0x00, 0x00, 0x01,
1754 0x00, 0x00, 0x00, 0x01, 1775 0x00, 0x00, 0x00, 0x01,
1755 }; 1776 };
(...skipping 23 matching lines...) Expand all
1779 0x00, 0x00, 0x00, 0x08, 1800 0x00, 0x00, 0x00, 0x08,
1780 0x7f, 0xff, 0xff, 0xff, 1801 0x7f, 0xff, 0xff, 0xff,
1781 0x00, 0x00, 0x00, 0x06, 1802 0x00, 0x00, 0x00, 0x06,
1782 }; 1803 };
1783 scoped_ptr<SpdyFrame> frame(framer.CreateRstStream(0x7FFFFFFF, 1804 scoped_ptr<SpdyFrame> frame(framer.CreateRstStream(0x7FFFFFFF,
1784 INTERNAL_ERROR)); 1805 INTERNAL_ERROR));
1785 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 1806 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
1786 } 1807 }
1787 } 1808 }
1788 1809
1789 TEST_F(SpdyFramerSpdy3Test, CreateSettings) { 1810 TEST_P(SpdyFramerTest, CreateSettings) {
1790 SpdyFramer framer(kVer); 1811 SpdyFramer framer(kVer);
1791 1812
1792 { 1813 {
1793 const char kDescription[] = "Network byte order SETTINGS frame"; 1814 const char kDescription[] = "Network byte order SETTINGS frame";
1794 1815
1795 uint32 kValue = 0x0a0b0c0d; 1816 uint32 kValue = 0x0a0b0c0d;
1796 uint8 kFlags = 0x04; 1817 uint8 kFlags = 0x04;
1797 uint32 kId = 0x030201; 1818 uint32 kId = 0x030201;
1798 SettingsFlagsAndId idAndFlags(kFlags, kId); 1819 SettingsFlagsAndId idAndFlags(kFlags, kId);
1799 1820
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 const unsigned char kFrameData[] = { 1919 const unsigned char kFrameData[] = {
1899 0x80, kVer, 0x00, 0x04, 1920 0x80, kVer, 0x00, 0x04,
1900 0x00, 0x00, 0x00, 0x04, 1921 0x00, 0x00, 0x00, 0x04,
1901 0x00, 0x00, 0x00, 0x00, 1922 0x00, 0x00, 0x00, 0x00,
1902 }; 1923 };
1903 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); 1924 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings));
1904 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 1925 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
1905 } 1926 }
1906 } 1927 }
1907 1928
1908 TEST_F(SpdyFramerSpdy3Test, CreatePingFrame) { 1929 TEST_P(SpdyFramerTest, CreatePingFrame) {
1909 SpdyFramer framer(kVer); 1930 SpdyFramer framer(kVer);
1910 1931
1911 { 1932 {
1912 const char kDescription[] = "PING frame"; 1933 const char kDescription[] = "PING frame";
1913 const unsigned char kFrameData[] = { 1934 const unsigned char kFrameData[] = {
1914 0x80, kVer, 0x00, 0x06, 1935 0x80, kVer, 0x00, 0x06,
1915 0x00, 0x00, 0x00, 0x04, 1936 0x00, 0x00, 0x00, 0x04,
1916 0x12, 0x34, 0x56, 0x78, 1937 0x12, 0x34, 0x56, 0x78,
1917 }; 1938 };
1918 scoped_ptr<SpdyPingControlFrame> frame(framer.CreatePingFrame(0x12345678u)); 1939 scoped_ptr<SpdyPingControlFrame> frame(framer.CreatePingFrame(0x12345678u));
1919 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 1940 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
1920 EXPECT_EQ(SpdyFramer::kInvalidStream, 1941 EXPECT_EQ(SpdyFramer::kInvalidStream,
1921 SpdyFramer::GetControlFrameStreamId(frame.get())); 1942 SpdyFramer::GetControlFrameStreamId(frame.get()));
1922 } 1943 }
1923 } 1944 }
1924 1945
1925 TEST_F(SpdyFramerSpdy3Test, CreateGoAway) { 1946 TEST_P(SpdyFramerTest, CreateGoAway) {
1926 SpdyFramer framer(kVer); 1947 SpdyFramer framer(kVer);
1927 1948
1928 { 1949 {
1929 const char kDescription[] = "GOAWAY frame"; 1950 const char kDescription[] = "GOAWAY frame";
1930 const unsigned char kFrameData[] = { 1951 const unsigned char kFrameData[] = {
1931 0x80, kVer, 0x00, 0x07, 1952 0x80, kVer, 0x00, 0x07,
1932 0x00, 0x00, 0x00, 0x04, 1953 0x00, 0x00, 0x00, 0x04,
1933 0x00, 0x00, 0x00, 0x00, 1954 0x00, 0x00, 0x00, 0x00,
1934 }; 1955 };
1935 scoped_ptr<SpdyGoAwayControlFrame> frame(framer.CreateGoAway(0)); 1956 scoped_ptr<SpdyGoAwayControlFrame> frame(framer.CreateGoAway(0));
1936 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 1957 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
1937 EXPECT_EQ(SpdyFramer::kInvalidStream, 1958 EXPECT_EQ(SpdyFramer::kInvalidStream,
1938 SpdyFramer::GetControlFrameStreamId(frame.get())); 1959 SpdyFramer::GetControlFrameStreamId(frame.get()));
1939 } 1960 }
1940 1961
1941 { 1962 {
1942 const char kDescription[] = "GOAWAY frame with max stream ID"; 1963 const char kDescription[] = "GOAWAY frame with max stream ID";
1943 const unsigned char kFrameData[] = { 1964 const unsigned char kFrameData[] = {
1944 0x80, kVer, 0x00, 0x07, 1965 0x80, kVer, 0x00, 0x07,
1945 0x00, 0x00, 0x00, 0x04, 1966 0x00, 0x00, 0x00, 0x04,
1946 0x7f, 0xff, 0xff, 0xff, 1967 0x7f, 0xff, 0xff, 0xff,
1947 }; 1968 };
1948 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0x7FFFFFFF)); 1969 scoped_ptr<SpdyFrame> frame(framer.CreateGoAway(0x7FFFFFFF));
1949 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 1970 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
1950 } 1971 }
1951 } 1972 }
1952 1973
1953 TEST_F(SpdyFramerSpdy3Test, CreateHeadersUncompressed) { 1974 TEST_P(SpdyFramerTest, CreateHeadersUncompressed) {
1954 SpdyFramer framer(kVer); 1975 SpdyFramer framer(kVer);
1955 framer.set_enable_compression(false); 1976 framer.set_enable_compression(false);
1956 1977
1957 { 1978 {
1958 const char kDescription[] = "HEADERS frame, no FIN"; 1979 const char kDescription[] = "HEADERS frame, no FIN";
1959 1980
1960 SpdyHeaderBlock headers; 1981 SpdyHeaderBlock headers;
1961 headers["bar"] = "foo"; 1982 headers["bar"] = "foo";
1962 headers["foo"] = "bar"; 1983 headers["foo"] = "bar";
1963 1984
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
2070 scoped_ptr<SpdyFrame> frame(framer.CreateHeaders( 2091 scoped_ptr<SpdyFrame> frame(framer.CreateHeaders(
2071 0x7fffffff, CONTROL_FLAG_FIN, false, &headers)); 2092 0x7fffffff, CONTROL_FLAG_FIN, false, &headers));
2072 CompareFrame(kDescription, 2093 CompareFrame(kDescription,
2073 *frame, 2094 *frame,
2074 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 2095 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
2075 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 2096 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
2076 : arraysize(kV3FrameData)); 2097 : arraysize(kV3FrameData));
2077 } 2098 }
2078 } 2099 }
2079 2100
2080 TEST_F(SpdyFramerSpdy3Test, CreateHeadersCompressed) { 2101 TEST_P(SpdyFramerTest, CreateHeadersCompressed) {
2081 SpdyFramer framer(kVer); 2102 SpdyFramer framer(kVer);
2082 framer.set_enable_compression(true); 2103 framer.set_enable_compression(true);
2083 2104
2084 { 2105 {
2085 const char kDescription[] = "HEADERS frame, no FIN"; 2106 const char kDescription[] = "HEADERS frame, no FIN";
2086 2107
2087 SpdyHeaderBlock headers; 2108 SpdyHeaderBlock headers;
2088 headers["bar"] = "foo"; 2109 headers["bar"] = "foo";
2089 headers["foo"] = "bar"; 2110 headers["foo"] = "bar";
2090 2111
(...skipping 26 matching lines...) Expand all
2117 scoped_ptr<SpdyFrame> frame(framer.CreateHeaders( 2138 scoped_ptr<SpdyFrame> frame(framer.CreateHeaders(
2118 1, CONTROL_FLAG_NONE, true, &headers)); 2139 1, CONTROL_FLAG_NONE, true, &headers));
2119 CompareFrame(kDescription, 2140 CompareFrame(kDescription,
2120 *frame, 2141 *frame,
2121 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData, 2142 (SPDY_VERSION_FOR_TESTS < 3) ? kV2FrameData : kV3FrameData,
2122 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData) 2143 (SPDY_VERSION_FOR_TESTS < 3) ? arraysize(kV2FrameData)
2123 : arraysize(kV3FrameData)); 2144 : arraysize(kV3FrameData));
2124 } 2145 }
2125 } 2146 }
2126 2147
2127 TEST_F(SpdyFramerSpdy3Test, CreateWindowUpdate) { 2148 TEST_P(SpdyFramerTest, CreateWindowUpdate) {
2128 SpdyFramer framer(kVer); 2149 SpdyFramer framer(kVer);
2129 2150
2130 { 2151 {
2131 const char kDescription[] = "WINDOW_UPDATE frame"; 2152 const char kDescription[] = "WINDOW_UPDATE frame";
2132 const unsigned char kFrameData[] = { 2153 const unsigned char kFrameData[] = {
2133 0x80, kVer, 0x00, 0x09, 2154 0x80, kVer, 0x00, 0x09,
2134 0x00, 0x00, 0x00, 0x08, 2155 0x00, 0x00, 0x00, 0x08,
2135 0x00, 0x00, 0x00, 0x01, 2156 0x00, 0x00, 0x00, 0x01,
2136 0x00, 0x00, 0x00, 0x01, 2157 0x00, 0x00, 0x00, 0x01,
2137 }; 2158 };
(...skipping 21 matching lines...) Expand all
2159 0x80, kVer, 0x00, 0x09, 2180 0x80, kVer, 0x00, 0x09,
2160 0x00, 0x00, 0x00, 0x08, 2181 0x00, 0x00, 0x00, 0x08,
2161 0x00, 0x00, 0x00, 0x01, 2182 0x00, 0x00, 0x00, 0x01,
2162 0x7f, 0xff, 0xff, 0xff, 2183 0x7f, 0xff, 0xff, 0xff,
2163 }; 2184 };
2164 scoped_ptr<SpdyFrame> frame(framer.CreateWindowUpdate(1, 0x7FFFFFFF)); 2185 scoped_ptr<SpdyFrame> frame(framer.CreateWindowUpdate(1, 0x7FFFFFFF));
2165 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 2186 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
2166 } 2187 }
2167 } 2188 }
2168 2189
2169 TEST_F(SpdyFramerSpdy3Test, DuplicateFrame) { 2190 TEST_P(SpdyFramerTest, DuplicateFrame) {
2170 SpdyFramer framer(kVer); 2191 SpdyFramer framer(kVer);
2171 2192
2172 { 2193 {
2173 const char kDescription[] = "PING frame"; 2194 const char kDescription[] = "PING frame";
2174 const unsigned char kFrameData[] = { 2195 const unsigned char kFrameData[] = {
2175 0x80, kVer, 0x00, 0x06, 2196 0x80, kVer, 0x00, 0x06,
2176 0x00, 0x00, 0x00, 0x04, 2197 0x00, 0x00, 0x00, 0x04,
2177 0x12, 0x34, 0x56, 0x78, 2198 0x12, 0x34, 0x56, 0x78,
2178 }; 2199 };
2179 scoped_ptr<SpdyFrame> frame1(framer.CreatePingFrame(0x12345678u)); 2200 scoped_ptr<SpdyFrame> frame1(framer.CreatePingFrame(0x12345678u));
2180 CompareFrame(kDescription, *frame1, kFrameData, arraysize(kFrameData)); 2201 CompareFrame(kDescription, *frame1, kFrameData, arraysize(kFrameData));
2181 2202
2182 scoped_ptr<SpdyFrame> frame2(framer.DuplicateFrame(*frame1)); 2203 scoped_ptr<SpdyFrame> frame2(framer.DuplicateFrame(*frame1));
2183 CompareFrame(kDescription, *frame2, kFrameData, arraysize(kFrameData)); 2204 CompareFrame(kDescription, *frame2, kFrameData, arraysize(kFrameData));
2184 } 2205 }
2185 } 2206 }
2186 2207
2187 // This test case reproduces conditions that caused ExpandControlFrameBuffer to 2208 // This test case reproduces conditions that caused ExpandControlFrameBuffer to
2188 // fail to expand the buffer control frame buffer when it should have, allowing 2209 // fail to expand the buffer control frame buffer when it should have, allowing
2189 // the framer to overrun the buffer, and smash other heap contents. This test 2210 // the framer to overrun the buffer, and smash other heap contents. This test
2190 // relies on the debug version of the heap manager, which checks for buffer 2211 // relies on the debug version of the heap manager, which checks for buffer
2191 // overrun errors during delete processing. Regression test for b/2974814. 2212 // overrun errors during delete processing. Regression test for b/2974814.
2192 TEST_F(SpdyFramerSpdy3Test, ExpandBuffer_HeapSmash) { 2213 TEST_P(SpdyFramerTest, ExpandBuffer_HeapSmash) {
2193 // Sweep through the area of problematic values, to make sure we always cover 2214 // Sweep through the area of problematic values, to make sure we always cover
2194 // the danger zone, even if it moves around at bit due to SPDY changes. 2215 // the danger zone, even if it moves around at bit due to SPDY changes.
2195 for (uint16 val2_len = SpdyFramer::kControlFrameBufferInitialSize - 50; 2216 for (uint16 val2_len = SpdyFramer::kControlFrameBufferInitialSize - 50;
2196 val2_len < SpdyFramer::kControlFrameBufferInitialSize; 2217 val2_len < SpdyFramer::kControlFrameBufferInitialSize;
2197 val2_len++) { 2218 val2_len++) {
2198 std::string val2 = std::string(val2_len, 'a'); 2219 std::string val2 = std::string(val2_len, 'a');
2199 SpdyHeaderBlock headers; 2220 SpdyHeaderBlock headers;
2200 headers["bar"] = "foo"; 2221 headers["bar"] = "foo";
2201 headers["foo"] = "baz"; 2222 headers["foo"] = "baz";
2202 headers["grue"] = val2.c_str(); 2223 headers["grue"] = val2.c_str();
2203 SpdyFramer framer(kVer); 2224 SpdyFramer framer(kVer);
2204 scoped_ptr<SpdySynStreamControlFrame> template_frame( 2225 scoped_ptr<SpdySynStreamControlFrame> template_frame(
2205 framer.CreateSynStream(1, // stream_id 2226 framer.CreateSynStream(1, // stream_id
2206 0, // associated_stream_id 2227 0, // associated_stream_id
2207 1, // priority 2228 1, // priority
2208 CONTROL_FLAG_NONE, 2229 CONTROL_FLAG_NONE,
2209 false, // compress 2230 false, // compress
2210 &headers)); 2231 &headers));
2211 EXPECT_TRUE(template_frame.get() != NULL); 2232 EXPECT_TRUE(template_frame.get() != NULL);
2212 TestSpdyVisitor visitor; 2233 TestSpdyVisitor visitor;
2213 visitor.SimulateInFramer( 2234 visitor.SimulateInFramer(
2214 reinterpret_cast<unsigned char*>(template_frame.get()->data()), 2235 reinterpret_cast<unsigned char*>(template_frame.get()->data()),
2215 template_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2236 template_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2216 EXPECT_EQ(1, visitor.syn_frame_count_); 2237 EXPECT_EQ(1, visitor.syn_frame_count_);
2217 } 2238 }
2218 } 2239 }
2219 2240
2220 TEST_F(SpdyFramerSpdy3Test, ControlFrameSizesAreValidated) { 2241 TEST_P(SpdyFramerTest, ControlFrameSizesAreValidated) {
2221 // Create a GoAway frame that has a few extra bytes at the end. 2242 // Create a GoAway frame that has a few extra bytes at the end.
2222 // We create enough overhead to require the framer to expand its frame buffer. 2243 // We create enough overhead to require the framer to expand its frame buffer.
2223 size_t overhead = SpdyFramer::kUncompressedControlFrameBufferInitialSize; 2244 size_t overhead = SpdyFramer::kUncompressedControlFrameBufferInitialSize;
2224 SpdyFramer framer(kVer); 2245 SpdyFramer framer(kVer);
2225 scoped_ptr<SpdyGoAwayControlFrame> goaway(framer.CreateGoAway(1)); 2246 scoped_ptr<SpdyGoAwayControlFrame> goaway(framer.CreateGoAway(1));
2226 goaway->set_length(goaway->length() + overhead); 2247 goaway->set_length(goaway->length() + overhead);
2227 std::string pad('A', overhead); 2248 std::string pad('A', overhead);
2228 TestSpdyVisitor visitor; 2249 TestSpdyVisitor visitor;
2229 2250
2230 // First attempt without validation on. 2251 // First attempt without validation on.
(...skipping 12 matching lines...) Expand all
2243 visitor.SimulateInFramer( 2264 visitor.SimulateInFramer(
2244 reinterpret_cast<unsigned char*>(goaway->data()), 2265 reinterpret_cast<unsigned char*>(goaway->data()),
2245 goaway->length() - overhead + SpdyControlFrame::kHeaderSize); 2266 goaway->length() - overhead + SpdyControlFrame::kHeaderSize);
2246 visitor.SimulateInFramer( 2267 visitor.SimulateInFramer(
2247 reinterpret_cast<const unsigned char*>(pad.c_str()), 2268 reinterpret_cast<const unsigned char*>(pad.c_str()),
2248 overhead); 2269 overhead);
2249 EXPECT_EQ(1, visitor.error_count_); // This generated an error. 2270 EXPECT_EQ(1, visitor.error_count_); // This generated an error.
2250 EXPECT_EQ(1, visitor.goaway_count_); // Unchanged from before. 2271 EXPECT_EQ(1, visitor.goaway_count_); // Unchanged from before.
2251 } 2272 }
2252 2273
2253 TEST_F(SpdyFramerSpdy3Test, ReadZeroLenSettingsFrame) { 2274 TEST_P(SpdyFramerTest, ReadZeroLenSettingsFrame) {
2254 SpdyFramer framer(kVer); 2275 SpdyFramer framer(kVer);
2255 SpdySettings settings; 2276 SpdySettings settings;
2256 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); 2277 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
2257 control_frame->set_length(0); 2278 control_frame->set_length(0);
2258 TestSpdyVisitor visitor; 2279 TestSpdyVisitor visitor;
2259 visitor.use_compression_ = false; 2280 visitor.use_compression_ = false;
2260 visitor.SimulateInFramer( 2281 visitor.SimulateInFramer(
2261 reinterpret_cast<unsigned char*>(control_frame->data()), 2282 reinterpret_cast<unsigned char*>(control_frame->data()),
2262 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2283 control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2263 // Should generate an error, since zero-len settings frames are unsupported. 2284 // Should generate an error, since zero-len settings frames are unsupported.
2264 EXPECT_EQ(1, visitor.error_count_); 2285 EXPECT_EQ(1, visitor.error_count_);
2265 } 2286 }
2266 2287
2267 // Tests handling of SETTINGS frames with invalid length. 2288 // Tests handling of SETTINGS frames with invalid length.
2268 TEST_F(SpdyFramerSpdy3Test, ReadBogusLenSettingsFrame) { 2289 TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) {
2269 SpdyFramer framer(kVer); 2290 SpdyFramer framer(kVer);
2270 SpdySettings settings; 2291 SpdySettings settings;
2271 // Add a setting to pad the frame so that we don't get a buffer overflow when 2292 // Add a setting to pad the frame so that we don't get a buffer overflow when
2272 // calling SimulateInFramer() below. 2293 // calling SimulateInFramer() below.
2273 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002)); 2294 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002));
2274 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); 2295 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
2275 control_frame->set_length(5); 2296 control_frame->set_length(5);
2276 TestSpdyVisitor visitor; 2297 TestSpdyVisitor visitor;
2277 visitor.use_compression_ = false; 2298 visitor.use_compression_ = false;
2278 visitor.SimulateInFramer( 2299 visitor.SimulateInFramer(
2279 reinterpret_cast<unsigned char*>(control_frame->data()), 2300 reinterpret_cast<unsigned char*>(control_frame->data()),
2280 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2301 control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2281 // Should generate an error, since zero-len settings frames are unsupported. 2302 // Should generate an error, since zero-len settings frames are unsupported.
2282 EXPECT_EQ(1, visitor.error_count_); 2303 EXPECT_EQ(1, visitor.error_count_);
2283 } 2304 }
2284 2305
2285 // Tests handling of SETTINGS frames larger than the frame buffer size. 2306 // Tests handling of SETTINGS frames larger than the frame buffer size.
2286 TEST_F(SpdyFramerSpdy3Test, ReadLargeSettingsFrame) { 2307 TEST_P(SpdyFramerTest, ReadLargeSettingsFrame) {
2287 SpdyFramer framer(kVer); 2308 SpdyFramer framer(kVer);
2288 SpdySettings settings; 2309 SpdySettings settings;
2289 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002)); 2310 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002));
2290 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 2), 0x00000003)); 2311 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 2), 0x00000003));
2291 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000004)); 2312 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000004));
2292 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); 2313 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
2293 EXPECT_LT(SpdyFramer::kUncompressedControlFrameBufferInitialSize, 2314 EXPECT_LT(SpdyFramer::kUncompressedControlFrameBufferInitialSize,
2294 control_frame->length() + SpdyControlFrame::kHeaderSize); 2315 control_frame->length() + SpdyControlFrame::kHeaderSize);
2295 TestSpdyVisitor visitor; 2316 TestSpdyVisitor visitor;
2296 visitor.use_compression_ = false; 2317 visitor.use_compression_ = false;
(...skipping 18 matching lines...) Expand all
2315 to_read); 2336 to_read);
2316 unframed_data -= to_read; 2337 unframed_data -= to_read;
2317 framed_data += to_read; 2338 framed_data += to_read;
2318 } 2339 }
2319 EXPECT_EQ(0, visitor.error_count_); 2340 EXPECT_EQ(0, visitor.error_count_);
2320 EXPECT_EQ(settings.size() * 2, static_cast<unsigned>(visitor.setting_count_)); 2341 EXPECT_EQ(settings.size() * 2, static_cast<unsigned>(visitor.setting_count_));
2321 EXPECT_EQ(2, visitor.settings_frame_count_); 2342 EXPECT_EQ(2, visitor.settings_frame_count_);
2322 } 2343 }
2323 2344
2324 // Tests handling of SETTINGS frame with duplicate entries. 2345 // Tests handling of SETTINGS frame with duplicate entries.
2325 TEST_F(SpdyFramerSpdy3Test, ReadDuplicateSettings) { 2346 TEST_P(SpdyFramerTest, ReadDuplicateSettings) {
2326 SpdyFramer framer(kVer); 2347 SpdyFramer framer(kVer);
2327 SpdySettings settings; 2348 SpdySettings settings;
2328 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002)); 2349 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000002));
2329 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003)); 2350 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003));
2330 // This last setting should not be processed due to error above. 2351 // This last setting should not be processed due to error above.
2331 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000003)); 2352 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000003));
2332 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); 2353 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
2333 TestSpdyVisitor visitor; 2354 TestSpdyVisitor visitor;
2334 visitor.use_compression_ = false; 2355 visitor.use_compression_ = false;
2335 2356
2336 visitor.SimulateInFramer( 2357 visitor.SimulateInFramer(
2337 reinterpret_cast<unsigned char*>(control_frame->data()), 2358 reinterpret_cast<unsigned char*>(control_frame->data()),
2338 control_frame->length() + SpdyControlFrame::kHeaderSize); 2359 control_frame->length() + SpdyControlFrame::kHeaderSize);
2339 EXPECT_EQ(1, visitor.error_count_); 2360 EXPECT_EQ(1, visitor.error_count_);
2340 EXPECT_EQ(1, visitor.setting_count_); 2361 EXPECT_EQ(1, visitor.setting_count_);
2341 EXPECT_EQ(1, visitor.settings_frame_count_); 2362 EXPECT_EQ(1, visitor.settings_frame_count_);
2342 } 2363 }
2343 2364
2344 // Tests handling of SETTINGS frame with entries out of order. 2365 // Tests handling of SETTINGS frame with entries out of order.
2345 TEST_F(SpdyFramerSpdy3Test, ReadOutOfOrderSettings) { 2366 TEST_P(SpdyFramerTest, ReadOutOfOrderSettings) {
2346 SpdyFramer framer(kVer); 2367 SpdyFramer framer(kVer);
2347 SpdySettings settings; 2368 SpdySettings settings;
2348 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 2), 0x00000002)); 2369 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 2), 0x00000002));
2349 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003)); 2370 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 1), 0x00000003));
2350 // This last setting should not be processed due to error above. 2371 // This last setting should not be processed due to error above.
2351 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000003)); 2372 settings.push_back(SpdySetting(SettingsFlagsAndId(0, 3), 0x00000003));
2352 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings)); 2373 scoped_ptr<SpdyFrame> control_frame(framer.CreateSettings(settings));
2353 TestSpdyVisitor visitor; 2374 TestSpdyVisitor visitor;
2354 visitor.use_compression_ = false; 2375 visitor.use_compression_ = false;
2355 2376
2356 visitor.SimulateInFramer( 2377 visitor.SimulateInFramer(
2357 reinterpret_cast<unsigned char*>(control_frame->data()), 2378 reinterpret_cast<unsigned char*>(control_frame->data()),
2358 control_frame->length() + SpdyControlFrame::kHeaderSize); 2379 control_frame->length() + SpdyControlFrame::kHeaderSize);
2359 EXPECT_EQ(1, visitor.error_count_); 2380 EXPECT_EQ(1, visitor.error_count_);
2360 EXPECT_EQ(1, visitor.setting_count_); 2381 EXPECT_EQ(1, visitor.setting_count_);
2361 EXPECT_EQ(1, visitor.settings_frame_count_); 2382 EXPECT_EQ(1, visitor.settings_frame_count_);
2362 } 2383 }
2363 2384
2364 TEST_F(SpdyFramerSpdy3Test, ReadCredentialFrame) { 2385 TEST_P(SpdyFramerTest, ReadCredentialFrame) {
2365 SpdyCredential credential; 2386 SpdyCredential credential;
2366 credential.slot = 3; 2387 credential.slot = 3;
2367 credential.proof = "proof"; 2388 credential.proof = "proof";
2368 credential.certs.push_back("a cert"); 2389 credential.certs.push_back("a cert");
2369 credential.certs.push_back("another cert"); 2390 credential.certs.push_back("another cert");
2370 credential.certs.push_back("final cert"); 2391 credential.certs.push_back("final cert");
2371 SpdyFramer framer(kVer); 2392 SpdyFramer framer(kVer);
2372 scoped_ptr<SpdyFrame> control_frame( 2393 scoped_ptr<SpdyFrame> control_frame(
2373 framer.CreateCredentialFrame(credential)); 2394 framer.CreateCredentialFrame(credential));
2374 EXPECT_TRUE(control_frame.get() != NULL); 2395 EXPECT_TRUE(control_frame.get() != NULL);
2375 TestSpdyVisitor visitor; 2396 TestSpdyVisitor visitor;
2376 visitor.use_compression_ = false; 2397 visitor.use_compression_ = false;
2377 visitor.SimulateInFramer( 2398 visitor.SimulateInFramer(
2378 reinterpret_cast<unsigned char*>(control_frame.get()->data()), 2399 reinterpret_cast<unsigned char*>(control_frame.get()->data()),
2379 control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2400 control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2380 EXPECT_EQ(0, visitor.error_count_); 2401 EXPECT_EQ(0, visitor.error_count_);
2381 EXPECT_EQ(1, visitor.credential_count_); 2402 EXPECT_EQ(1, visitor.credential_count_);
2382 EXPECT_EQ(control_frame->length(), visitor.credential_buffer_length_); 2403 EXPECT_EQ(control_frame->length(), visitor.credential_buffer_length_);
2383 EXPECT_EQ(credential.slot, visitor.credential_.slot); 2404 EXPECT_EQ(credential.slot, visitor.credential_.slot);
2384 EXPECT_EQ(credential.proof, visitor.credential_.proof); 2405 EXPECT_EQ(credential.proof, visitor.credential_.proof);
2385 EXPECT_EQ(credential.certs.size(), visitor.credential_.certs.size()); 2406 EXPECT_EQ(credential.certs.size(), visitor.credential_.certs.size());
2386 for (size_t i = 0; i < credential.certs.size(); i++) { 2407 for (size_t i = 0; i < credential.certs.size(); i++) {
2387 EXPECT_EQ(credential.certs[i], visitor.credential_.certs[i]); 2408 EXPECT_EQ(credential.certs[i], visitor.credential_.certs[i]);
2388 } 2409 }
2389 } 2410 }
2390 2411
2391 TEST_F(SpdyFramerSpdy3Test, ReadCredentialFrameWithCorruptProof) { 2412 TEST_P(SpdyFramerTest, ReadCredentialFrameWithCorruptProof) {
2392 SpdyCredential credential; 2413 SpdyCredential credential;
2393 credential.slot = 3; 2414 credential.slot = 3;
2394 credential.proof = "proof"; 2415 credential.proof = "proof";
2395 credential.certs.push_back("a cert"); 2416 credential.certs.push_back("a cert");
2396 credential.certs.push_back("another cert"); 2417 credential.certs.push_back("another cert");
2397 credential.certs.push_back("final cert"); 2418 credential.certs.push_back("final cert");
2398 SpdyFramer framer(kVer); 2419 SpdyFramer framer(kVer);
2399 scoped_ptr<SpdyFrame> control_frame( 2420 scoped_ptr<SpdyFrame> control_frame(
2400 framer.CreateCredentialFrame(credential)); 2421 framer.CreateCredentialFrame(credential));
2401 EXPECT_TRUE(control_frame.get() != NULL); 2422 EXPECT_TRUE(control_frame.get() != NULL);
2402 TestSpdyVisitor visitor; 2423 TestSpdyVisitor visitor;
2403 visitor.use_compression_ = false; 2424 visitor.use_compression_ = false;
2404 unsigned char* data = 2425 unsigned char* data =
2405 reinterpret_cast<unsigned char*>(control_frame.get()->data()); 2426 reinterpret_cast<unsigned char*>(control_frame.get()->data());
2406 size_t offset = SpdyControlFrame::kHeaderSize + 4; 2427 size_t offset = SpdyControlFrame::kHeaderSize + 4;
2407 data[offset] = 0xFF; // Proof length is past the end of the frame 2428 data[offset] = 0xFF; // Proof length is past the end of the frame
2408 visitor.SimulateInFramer( 2429 visitor.SimulateInFramer(
2409 data, control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2430 data, control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2410 EXPECT_EQ(1, visitor.error_count_); 2431 EXPECT_EQ(1, visitor.error_count_);
2411 } 2432 }
2412 2433
2413 TEST_F(SpdyFramerSpdy3Test, ReadCredentialFrameWithCorruptCertificate) { 2434 TEST_P(SpdyFramerTest, ReadCredentialFrameWithCorruptCertificate) {
2414 SpdyCredential credential; 2435 SpdyCredential credential;
2415 credential.slot = 3; 2436 credential.slot = 3;
2416 credential.proof = "proof"; 2437 credential.proof = "proof";
2417 credential.certs.push_back("a cert"); 2438 credential.certs.push_back("a cert");
2418 credential.certs.push_back("another cert"); 2439 credential.certs.push_back("another cert");
2419 credential.certs.push_back("final cert"); 2440 credential.certs.push_back("final cert");
2420 SpdyFramer framer(kVer); 2441 SpdyFramer framer(kVer);
2421 scoped_ptr<SpdyFrame> control_frame( 2442 scoped_ptr<SpdyFrame> control_frame(
2422 framer.CreateCredentialFrame(credential)); 2443 framer.CreateCredentialFrame(credential));
2423 EXPECT_TRUE(control_frame.get() != NULL); 2444 EXPECT_TRUE(control_frame.get() != NULL);
2424 TestSpdyVisitor visitor; 2445 TestSpdyVisitor visitor;
2425 visitor.use_compression_ = false; 2446 visitor.use_compression_ = false;
2426 unsigned char* data = 2447 unsigned char* data =
2427 reinterpret_cast<unsigned char*>(control_frame.get()->data()); 2448 reinterpret_cast<unsigned char*>(control_frame.get()->data());
2428 size_t offset = SpdyControlFrame::kHeaderSize + credential.proof.length(); 2449 size_t offset = SpdyControlFrame::kHeaderSize + credential.proof.length();
2429 data[offset] = 0xFF; // Certificate length is past the end of the frame 2450 data[offset] = 0xFF; // Certificate length is past the end of the frame
2430 visitor.SimulateInFramer( 2451 visitor.SimulateInFramer(
2431 data, control_frame.get()->length() + SpdyControlFrame::kHeaderSize); 2452 data, control_frame.get()->length() + SpdyControlFrame::kHeaderSize);
2432 EXPECT_EQ(1, visitor.error_count_); 2453 EXPECT_EQ(1, visitor.error_count_);
2433 } 2454 }
2434 2455
2435 TEST_F(SpdyFramerSpdy3Test, ReadGarbage) { 2456 TEST_P(SpdyFramerTest, ReadGarbage) {
2436 SpdyFramer framer(kVer); 2457 SpdyFramer framer(kVer);
2437 unsigned char garbage_frame[256]; 2458 unsigned char garbage_frame[256];
2438 memset(garbage_frame, ~0, sizeof(garbage_frame)); 2459 memset(garbage_frame, ~0, sizeof(garbage_frame));
2439 TestSpdyVisitor visitor; 2460 TestSpdyVisitor visitor;
2440 visitor.use_compression_ = false; 2461 visitor.use_compression_ = false;
2441 visitor.SimulateInFramer(garbage_frame, sizeof(garbage_frame)); 2462 visitor.SimulateInFramer(garbage_frame, sizeof(garbage_frame));
2442 EXPECT_EQ(1, visitor.error_count_); 2463 EXPECT_EQ(1, visitor.error_count_);
2443 } 2464 }
2444 2465
2445 TEST_F(SpdyFramerSpdy3Test, ReadGarbageWithValidVersion) { 2466 TEST_P(SpdyFramerTest, ReadGarbageWithValidVersion) {
2446 SpdyFramer framer(kVer); 2467 SpdyFramer framer(kVer);
2447 char garbage_frame[256]; 2468 char garbage_frame[256];
2448 memset(garbage_frame, ~0, sizeof(garbage_frame)); 2469 memset(garbage_frame, ~0, sizeof(garbage_frame));
2449 SpdyControlFrame control_frame(&garbage_frame[0], false); 2470 SpdyControlFrame control_frame(&garbage_frame[0], false);
2450 control_frame.set_version(SPDY_VERSION_FOR_TESTS); 2471 control_frame.set_version(SPDY_VERSION_FOR_TESTS);
2451 TestSpdyVisitor visitor; 2472 TestSpdyVisitor visitor;
2452 visitor.use_compression_ = false; 2473 visitor.use_compression_ = false;
2453 visitor.SimulateInFramer( 2474 visitor.SimulateInFramer(
2454 reinterpret_cast<unsigned char*>(control_frame.data()), 2475 reinterpret_cast<unsigned char*>(control_frame.data()),
2455 sizeof(garbage_frame)); 2476 sizeof(garbage_frame));
2456 EXPECT_EQ(1, visitor.error_count_); 2477 EXPECT_EQ(1, visitor.error_count_);
2457 } 2478 }
2458 2479
2459 TEST_F(SpdyFramerSpdy3Test, StateToStringTest) { 2480 TEST_P(SpdyFramerTest, StateToStringTest) {
2460 EXPECT_STREQ("ERROR", 2481 EXPECT_STREQ("ERROR",
2461 SpdyFramer::StateToString(SpdyFramer::SPDY_ERROR)); 2482 SpdyFramer::StateToString(SpdyFramer::SPDY_ERROR));
2462 EXPECT_STREQ("DONE", 2483 EXPECT_STREQ("DONE",
2463 SpdyFramer::StateToString(SpdyFramer::SPDY_DONE)); 2484 SpdyFramer::StateToString(SpdyFramer::SPDY_DONE));
2464 EXPECT_STREQ("AUTO_RESET", 2485 EXPECT_STREQ("AUTO_RESET",
2465 SpdyFramer::StateToString(SpdyFramer::SPDY_AUTO_RESET)); 2486 SpdyFramer::StateToString(SpdyFramer::SPDY_AUTO_RESET));
2466 EXPECT_STREQ("RESET", 2487 EXPECT_STREQ("RESET",
2467 SpdyFramer::StateToString(SpdyFramer::SPDY_RESET)); 2488 SpdyFramer::StateToString(SpdyFramer::SPDY_RESET));
2468 EXPECT_STREQ("READING_COMMON_HEADER", 2489 EXPECT_STREQ("READING_COMMON_HEADER",
2469 SpdyFramer::StateToString( 2490 SpdyFramer::StateToString(
(...skipping 17 matching lines...) Expand all
2487 SpdyFramer::StateToString( 2508 SpdyFramer::StateToString(
2488 SpdyFramer::SPDY_CREDENTIAL_FRAME_PAYLOAD)); 2509 SpdyFramer::SPDY_CREDENTIAL_FRAME_PAYLOAD));
2489 EXPECT_STREQ("SPDY_SETTINGS_FRAME_PAYLOAD", 2510 EXPECT_STREQ("SPDY_SETTINGS_FRAME_PAYLOAD",
2490 SpdyFramer::StateToString( 2511 SpdyFramer::StateToString(
2491 SpdyFramer::SPDY_SETTINGS_FRAME_PAYLOAD)); 2512 SpdyFramer::SPDY_SETTINGS_FRAME_PAYLOAD));
2492 EXPECT_STREQ("UNKNOWN_STATE", 2513 EXPECT_STREQ("UNKNOWN_STATE",
2493 SpdyFramer::StateToString( 2514 SpdyFramer::StateToString(
2494 SpdyFramer::SPDY_SETTINGS_FRAME_PAYLOAD + 1)); 2515 SpdyFramer::SPDY_SETTINGS_FRAME_PAYLOAD + 1));
2495 } 2516 }
2496 2517
2497 TEST_F(SpdyFramerSpdy3Test, ErrorCodeToStringTest) { 2518 TEST_P(SpdyFramerTest, ErrorCodeToStringTest) {
2498 EXPECT_STREQ("NO_ERROR", 2519 EXPECT_STREQ("NO_ERROR",
2499 SpdyFramer::ErrorCodeToString(SpdyFramer::SPDY_NO_ERROR)); 2520 SpdyFramer::ErrorCodeToString(SpdyFramer::SPDY_NO_ERROR));
2500 EXPECT_STREQ("INVALID_CONTROL_FRAME", 2521 EXPECT_STREQ("INVALID_CONTROL_FRAME",
2501 SpdyFramer::ErrorCodeToString( 2522 SpdyFramer::ErrorCodeToString(
2502 SpdyFramer::SPDY_INVALID_CONTROL_FRAME)); 2523 SpdyFramer::SPDY_INVALID_CONTROL_FRAME));
2503 EXPECT_STREQ("CONTROL_PAYLOAD_TOO_LARGE", 2524 EXPECT_STREQ("CONTROL_PAYLOAD_TOO_LARGE",
2504 SpdyFramer::ErrorCodeToString( 2525 SpdyFramer::ErrorCodeToString(
2505 SpdyFramer::SPDY_CONTROL_PAYLOAD_TOO_LARGE)); 2526 SpdyFramer::SPDY_CONTROL_PAYLOAD_TOO_LARGE));
2506 EXPECT_STREQ("ZLIB_INIT_FAILURE", 2527 EXPECT_STREQ("ZLIB_INIT_FAILURE",
2507 SpdyFramer::ErrorCodeToString( 2528 SpdyFramer::ErrorCodeToString(
2508 SpdyFramer::SPDY_ZLIB_INIT_FAILURE)); 2529 SpdyFramer::SPDY_ZLIB_INIT_FAILURE));
2509 EXPECT_STREQ("UNSUPPORTED_VERSION", 2530 EXPECT_STREQ("UNSUPPORTED_VERSION",
2510 SpdyFramer::ErrorCodeToString( 2531 SpdyFramer::ErrorCodeToString(
2511 SpdyFramer::SPDY_UNSUPPORTED_VERSION)); 2532 SpdyFramer::SPDY_UNSUPPORTED_VERSION));
2512 EXPECT_STREQ("DECOMPRESS_FAILURE", 2533 EXPECT_STREQ("DECOMPRESS_FAILURE",
2513 SpdyFramer::ErrorCodeToString( 2534 SpdyFramer::ErrorCodeToString(
2514 SpdyFramer::SPDY_DECOMPRESS_FAILURE)); 2535 SpdyFramer::SPDY_DECOMPRESS_FAILURE));
2515 EXPECT_STREQ("COMPRESS_FAILURE", 2536 EXPECT_STREQ("COMPRESS_FAILURE",
2516 SpdyFramer::ErrorCodeToString( 2537 SpdyFramer::ErrorCodeToString(
2517 SpdyFramer::SPDY_COMPRESS_FAILURE)); 2538 SpdyFramer::SPDY_COMPRESS_FAILURE));
2518 EXPECT_STREQ("UNKNOWN_ERROR", 2539 EXPECT_STREQ("UNKNOWN_ERROR",
2519 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR)); 2540 SpdyFramer::ErrorCodeToString(SpdyFramer::LAST_ERROR));
2520 } 2541 }
2521 2542
2522 TEST_F(SpdyFramerSpdy3Test, StatusCodeToStringTest) { 2543 TEST_P(SpdyFramerTest, StatusCodeToStringTest) {
2523 EXPECT_STREQ("INVALID", 2544 EXPECT_STREQ("INVALID",
2524 SpdyFramer::StatusCodeToString(INVALID)); 2545 SpdyFramer::StatusCodeToString(INVALID));
2525 EXPECT_STREQ("PROTOCOL_ERROR", 2546 EXPECT_STREQ("PROTOCOL_ERROR",
2526 SpdyFramer::StatusCodeToString(PROTOCOL_ERROR)); 2547 SpdyFramer::StatusCodeToString(PROTOCOL_ERROR));
2527 EXPECT_STREQ("INVALID_STREAM", 2548 EXPECT_STREQ("INVALID_STREAM",
2528 SpdyFramer::StatusCodeToString(INVALID_STREAM)); 2549 SpdyFramer::StatusCodeToString(INVALID_STREAM));
2529 EXPECT_STREQ("REFUSED_STREAM", 2550 EXPECT_STREQ("REFUSED_STREAM",
2530 SpdyFramer::StatusCodeToString(REFUSED_STREAM)); 2551 SpdyFramer::StatusCodeToString(REFUSED_STREAM));
2531 EXPECT_STREQ("UNSUPPORTED_VERSION", 2552 EXPECT_STREQ("UNSUPPORTED_VERSION",
2532 SpdyFramer::StatusCodeToString(UNSUPPORTED_VERSION)); 2553 SpdyFramer::StatusCodeToString(UNSUPPORTED_VERSION));
2533 EXPECT_STREQ("CANCEL", 2554 EXPECT_STREQ("CANCEL",
2534 SpdyFramer::StatusCodeToString(CANCEL)); 2555 SpdyFramer::StatusCodeToString(CANCEL));
2535 EXPECT_STREQ("INTERNAL_ERROR", 2556 EXPECT_STREQ("INTERNAL_ERROR",
2536 SpdyFramer::StatusCodeToString(INTERNAL_ERROR)); 2557 SpdyFramer::StatusCodeToString(INTERNAL_ERROR));
2537 EXPECT_STREQ("FLOW_CONTROL_ERROR", 2558 EXPECT_STREQ("FLOW_CONTROL_ERROR",
2538 SpdyFramer::StatusCodeToString(FLOW_CONTROL_ERROR)); 2559 SpdyFramer::StatusCodeToString(FLOW_CONTROL_ERROR));
2539 EXPECT_STREQ("UNKNOWN_STATUS", 2560 EXPECT_STREQ("UNKNOWN_STATUS",
2540 SpdyFramer::StatusCodeToString(NUM_STATUS_CODES)); 2561 SpdyFramer::StatusCodeToString(NUM_STATUS_CODES));
2541 } 2562 }
2542 2563
2543 TEST_F(SpdyFramerSpdy3Test, ControlTypeToStringTest) { 2564 TEST_P(SpdyFramerTest, ControlTypeToStringTest) {
2544 EXPECT_STREQ("SYN_STREAM", 2565 EXPECT_STREQ("SYN_STREAM",
2545 SpdyFramer::ControlTypeToString(SYN_STREAM)); 2566 SpdyFramer::ControlTypeToString(SYN_STREAM));
2546 EXPECT_STREQ("SYN_REPLY", 2567 EXPECT_STREQ("SYN_REPLY",
2547 SpdyFramer::ControlTypeToString(SYN_REPLY)); 2568 SpdyFramer::ControlTypeToString(SYN_REPLY));
2548 EXPECT_STREQ("RST_STREAM", 2569 EXPECT_STREQ("RST_STREAM",
2549 SpdyFramer::ControlTypeToString(RST_STREAM)); 2570 SpdyFramer::ControlTypeToString(RST_STREAM));
2550 EXPECT_STREQ("SETTINGS", 2571 EXPECT_STREQ("SETTINGS",
2551 SpdyFramer::ControlTypeToString(SETTINGS)); 2572 SpdyFramer::ControlTypeToString(SETTINGS));
2552 EXPECT_STREQ("NOOP", 2573 EXPECT_STREQ("NOOP",
2553 SpdyFramer::ControlTypeToString(NOOP)); 2574 SpdyFramer::ControlTypeToString(NOOP));
2554 EXPECT_STREQ("PING", 2575 EXPECT_STREQ("PING",
2555 SpdyFramer::ControlTypeToString(PING)); 2576 SpdyFramer::ControlTypeToString(PING));
2556 EXPECT_STREQ("GOAWAY", 2577 EXPECT_STREQ("GOAWAY",
2557 SpdyFramer::ControlTypeToString(GOAWAY)); 2578 SpdyFramer::ControlTypeToString(GOAWAY));
2558 EXPECT_STREQ("HEADERS", 2579 EXPECT_STREQ("HEADERS",
2559 SpdyFramer::ControlTypeToString(HEADERS)); 2580 SpdyFramer::ControlTypeToString(HEADERS));
2560 EXPECT_STREQ("WINDOW_UPDATE", 2581 EXPECT_STREQ("WINDOW_UPDATE",
2561 SpdyFramer::ControlTypeToString(WINDOW_UPDATE)); 2582 SpdyFramer::ControlTypeToString(WINDOW_UPDATE));
2562 EXPECT_STREQ("CREDENTIAL", 2583 EXPECT_STREQ("CREDENTIAL",
2563 SpdyFramer::ControlTypeToString(CREDENTIAL)); 2584 SpdyFramer::ControlTypeToString(CREDENTIAL));
2564 EXPECT_STREQ("UNKNOWN_CONTROL_TYPE", 2585 EXPECT_STREQ("UNKNOWN_CONTROL_TYPE",
2565 SpdyFramer::ControlTypeToString(NUM_CONTROL_FRAME_TYPES)); 2586 SpdyFramer::ControlTypeToString(NUM_CONTROL_FRAME_TYPES));
2566 } 2587 }
2567 2588
2568 TEST_F(SpdyFramerSpdy3Test, GetMinimumControlFrameSizeTest) { 2589 TEST_P(SpdyFramerTest, GetMinimumControlFrameSizeTest) {
2569 EXPECT_EQ(SpdySynStreamControlFrame::size(), 2590 EXPECT_EQ(SpdySynStreamControlFrame::size(),
2570 SpdyFramer::GetMinimumControlFrameSize(SYN_STREAM)); 2591 SpdyFramer::GetMinimumControlFrameSize(SYN_STREAM));
2571 EXPECT_EQ(SpdySynReplyControlFrame::size(), 2592 EXPECT_EQ(SpdySynReplyControlFrame::size(),
2572 SpdyFramer::GetMinimumControlFrameSize(SYN_REPLY)); 2593 SpdyFramer::GetMinimumControlFrameSize(SYN_REPLY));
2573 EXPECT_EQ(SpdyRstStreamControlFrame::size(), 2594 EXPECT_EQ(SpdyRstStreamControlFrame::size(),
2574 SpdyFramer::GetMinimumControlFrameSize(RST_STREAM)); 2595 SpdyFramer::GetMinimumControlFrameSize(RST_STREAM));
2575 EXPECT_EQ(SpdySettingsControlFrame::size(), 2596 EXPECT_EQ(SpdySettingsControlFrame::size(),
2576 SpdyFramer::GetMinimumControlFrameSize(SETTINGS)); 2597 SpdyFramer::GetMinimumControlFrameSize(SETTINGS));
2577 EXPECT_EQ(SpdyFrame::kHeaderSize, 2598 EXPECT_EQ(SpdyFrame::kHeaderSize,
2578 SpdyFramer::GetMinimumControlFrameSize(NOOP)); 2599 SpdyFramer::GetMinimumControlFrameSize(NOOP));
2579 EXPECT_EQ(SpdyPingControlFrame::size(), 2600 EXPECT_EQ(SpdyPingControlFrame::size(),
2580 SpdyFramer::GetMinimumControlFrameSize(PING)); 2601 SpdyFramer::GetMinimumControlFrameSize(PING));
2581 EXPECT_EQ(SpdyGoAwayControlFrame::size(), 2602 EXPECT_EQ(SpdyGoAwayControlFrame::size(),
2582 SpdyFramer::GetMinimumControlFrameSize(GOAWAY)); 2603 SpdyFramer::GetMinimumControlFrameSize(GOAWAY));
2583 EXPECT_EQ(SpdyHeadersControlFrame::size(), 2604 EXPECT_EQ(SpdyHeadersControlFrame::size(),
2584 SpdyFramer::GetMinimumControlFrameSize(HEADERS)); 2605 SpdyFramer::GetMinimumControlFrameSize(HEADERS));
2585 EXPECT_EQ(SpdyWindowUpdateControlFrame::size(), 2606 EXPECT_EQ(SpdyWindowUpdateControlFrame::size(),
2586 SpdyFramer::GetMinimumControlFrameSize(WINDOW_UPDATE)); 2607 SpdyFramer::GetMinimumControlFrameSize(WINDOW_UPDATE));
2587 EXPECT_EQ(SpdyCredentialControlFrame::size(), 2608 EXPECT_EQ(SpdyCredentialControlFrame::size(),
2588 SpdyFramer::GetMinimumControlFrameSize(CREDENTIAL)); 2609 SpdyFramer::GetMinimumControlFrameSize(CREDENTIAL));
2589 EXPECT_EQ(static_cast<size_t>(0x7FFFFFFF), 2610 EXPECT_EQ(static_cast<size_t>(0x7FFFFFFF),
2590 SpdyFramer::GetMinimumControlFrameSize(NUM_CONTROL_FRAME_TYPES)); 2611 SpdyFramer::GetMinimumControlFrameSize(NUM_CONTROL_FRAME_TYPES));
2591 } 2612 }
2592 2613
2593 TEST_F(SpdyFramerSpdy3Test, CatchProbableHttpResponse) { 2614 TEST_P(SpdyFramerTest, CatchProbableHttpResponse) {
2594 SpdyFramerTestUtil::DecompressionVisitor visitor; 2615 SpdyFramerTestUtil::DecompressionVisitor visitor;
2595 visitor.set_allow_data_frames(true); 2616 visitor.set_allow_data_frames(true);
2596 { 2617 {
2597 SpdyFramer framer(kVer); 2618 SpdyFramer framer(kVer);
2598 framer.set_visitor(&visitor); 2619 framer.set_visitor(&visitor);
2599 framer.ProcessInput("HTTP/1.1", 8); 2620 framer.ProcessInput("HTTP/1.1", 8);
2600 EXPECT_TRUE(framer.probable_http_response()); 2621 EXPECT_TRUE(framer.probable_http_response());
2601 } 2622 }
2602 { 2623 {
2603 SpdyFramer framer(kVer); 2624 SpdyFramer framer(kVer);
2604 framer.set_visitor(&visitor); 2625 framer.set_visitor(&visitor);
2605 framer.ProcessInput("HTTP/1.0", 8); 2626 framer.ProcessInput("HTTP/1.0", 8);
2606 EXPECT_TRUE(framer.probable_http_response()); 2627 EXPECT_TRUE(framer.probable_http_response());
2607 } 2628 }
2608 } 2629 }
2609 2630
2610 TEST_F(SpdyFramerSpdy3Test, SettingsFlagsAndId) { 2631 TEST_P(SpdyFramerTest, SettingsFlagsAndId) {
2611 const uint32 kId = 0x020304; 2632 const uint32 kId = 0x020304;
2612 const uint32 kFlags = 0x01; 2633 const uint32 kFlags = 0x01;
2613 const uint32 kWireFormat = 2634 const uint32 kWireFormat =
2614 htonl((SPDY_VERSION_FOR_TESTS < 3) ? 0x04030201 : 0x01020304); 2635 htonl((SPDY_VERSION_FOR_TESTS < 3) ? 0x04030201 : 0x01020304);
2615 2636
2616 SettingsFlagsAndId id_and_flags = 2637 SettingsFlagsAndId id_and_flags =
2617 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, kWireFormat); 2638 SettingsFlagsAndId::FromWireFormat(SPDY_VERSION_FOR_TESTS, kWireFormat);
2618 EXPECT_EQ(kId, id_and_flags.id()); 2639 EXPECT_EQ(kId, id_and_flags.id());
2619 EXPECT_EQ(kFlags, id_and_flags.flags()); 2640 EXPECT_EQ(kFlags, id_and_flags.flags());
2620 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(SPDY_VERSION_FOR_TESTS)); 2641 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(SPDY_VERSION_FOR_TESTS));
2621 } 2642 }
2622 2643
2623 } // namespace 2644 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698