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

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

Issue 247243003: SPDY: Use SpdyMajorVersion rather than ints for SPDY version number. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Also include cr/64899106 Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <iostream> 6 #include <iostream>
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 return true; 352 return true;
353 } 353 }
354 354
355 virtual void OnSetting(SpdySettingsIds id, 355 virtual void OnSetting(SpdySettingsIds id,
356 uint8 flags, 356 uint8 flags,
357 uint32 value) OVERRIDE { 357 uint32 value) OVERRIDE {
358 ++setting_count_; 358 ++setting_count_;
359 } 359 }
360 360
361 virtual void OnSettingsAck() OVERRIDE { 361 virtual void OnSettingsAck() OVERRIDE {
362 DCHECK_GE(4, framer_.protocol_version()); 362 DCHECK_LT(SPDY3, framer_.protocol_version());
363 ++settings_ack_received_; 363 ++settings_ack_received_;
364 } 364 }
365 365
366 virtual void OnSettingsEnd() OVERRIDE { 366 virtual void OnSettingsEnd() OVERRIDE {
367 if (framer_.protocol_version() < 4) { return; } 367 if (framer_.protocol_version() <= SPDY3) { return; }
368 ++settings_ack_sent_; 368 ++settings_ack_sent_;
369 } 369 }
370 370
371 virtual void OnPing(SpdyPingId unique_id, bool is_ack) OVERRIDE { 371 virtual void OnPing(SpdyPingId unique_id, bool is_ack) OVERRIDE {
372 DLOG(FATAL); 372 DLOG(FATAL);
373 } 373 }
374 374
375 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id, 375 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id,
376 SpdyGoAwayStatus status) OVERRIDE { 376 SpdyGoAwayStatus status) OVERRIDE {
377 ++goaway_count_; 377 ++goaway_count_;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 using net::test::SpdyFramerTestUtil; 545 using net::test::SpdyFramerTestUtil;
546 using net::test::TestSpdyVisitor; 546 using net::test::TestSpdyVisitor;
547 using net::test::GetSerializedHeaders; 547 using net::test::GetSerializedHeaders;
548 548
549 namespace net { 549 namespace net {
550 550
551 class SpdyFramerTest : public ::testing::TestWithParam<SpdyMajorVersion> { 551 class SpdyFramerTest : public ::testing::TestWithParam<SpdyMajorVersion> {
552 protected: 552 protected:
553 virtual void SetUp() { 553 virtual void SetUp() {
554 spdy_version_ = GetParam(); 554 spdy_version_ = GetParam();
555 spdy_version_ch_ = static_cast<unsigned char>(spdy_version_); 555 spdy_version_ch_ = static_cast<unsigned char>(
556 SpdyConstants::SerializeMajorVersion(spdy_version_));
556 } 557 }
557 558
558 void CompareFrame(const string& description, 559 void CompareFrame(const string& description,
559 const SpdyFrame& actual_frame, 560 const SpdyFrame& actual_frame,
560 const unsigned char* expected, 561 const unsigned char* expected,
561 const int expected_len) { 562 const int expected_len) {
562 const unsigned char* actual = 563 const unsigned char* actual =
563 reinterpret_cast<const unsigned char*>(actual_frame.data()); 564 reinterpret_cast<const unsigned char*>(actual_frame.data());
564 CompareCharArraysWithHexError( 565 CompareCharArraysWithHexError(
565 description, actual, actual_frame.size(), expected, expected_len); 566 description, actual, actual_frame.size(), expected, expected_len);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 779 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
779 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size())); 780 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size()));
780 EXPECT_TRUE(framer.HasError()); 781 EXPECT_TRUE(framer.HasError());
781 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code()) 782 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
782 << SpdyFramer::ErrorCodeToString(framer.error_code()); 783 << SpdyFramer::ErrorCodeToString(framer.error_code());
783 } 784 }
784 785
785 // Test that if we receive a PUSH_PROMISE with stream ID zero, we signal an 786 // Test that if we receive a PUSH_PROMISE with stream ID zero, we signal an
786 // error (but don't crash). 787 // error (but don't crash).
787 TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) { 788 TEST_P(SpdyFramerTest, PushPromiseWithStreamIdZero) {
788 if (spdy_version_ < SPDY4) { 789 if (spdy_version_ <= SPDY3) {
789 return; 790 return;
790 } 791 }
791 792
792 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 793 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
793 SpdyFramer framer(spdy_version_); 794 SpdyFramer framer(spdy_version_);
794 framer.set_visitor(&visitor); 795 framer.set_visitor(&visitor);
795 796
796 SpdyPushPromiseIR push_promise(0, 4); 797 SpdyPushPromiseIR push_promise(0, 4);
797 push_promise.SetHeader("alpha", "beta"); 798 push_promise.SetHeader("alpha", "beta");
798 scoped_ptr<SpdySerializedFrame> frame( 799 scoped_ptr<SpdySerializedFrame> frame(
799 framer.SerializePushPromise(push_promise)); 800 framer.SerializePushPromise(push_promise));
800 ASSERT_TRUE(frame.get() != NULL); 801 ASSERT_TRUE(frame.get() != NULL);
801 802
802 // We shouldn't have to read the whole frame before we signal an error. 803 // We shouldn't have to read the whole frame before we signal an error.
803 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 804 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
804 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size())); 805 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size()));
805 EXPECT_TRUE(framer.HasError()); 806 EXPECT_TRUE(framer.HasError());
806 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code()) 807 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
807 << SpdyFramer::ErrorCodeToString(framer.error_code()); 808 << SpdyFramer::ErrorCodeToString(framer.error_code());
808 } 809 }
809 810
810 // Test that if we receive a PUSH_PROMISE with promised stream ID zero, we 811 // Test that if we receive a PUSH_PROMISE with promised stream ID zero, we
811 // signal an error (but don't crash). 812 // signal an error (but don't crash).
812 TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) { 813 TEST_P(SpdyFramerTest, PushPromiseWithPromisedStreamIdZero) {
813 if (spdy_version_ < SPDY4) { 814 if (spdy_version_ <= SPDY3) {
814 return; 815 return;
815 } 816 }
816 817
817 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 818 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
818 SpdyFramer framer(spdy_version_); 819 SpdyFramer framer(spdy_version_);
819 framer.set_visitor(&visitor); 820 framer.set_visitor(&visitor);
820 821
821 SpdyPushPromiseIR push_promise(3, 0); 822 SpdyPushPromiseIR push_promise(3, 0);
822 push_promise.SetHeader("alpha", "beta"); 823 push_promise.SetHeader("alpha", "beta");
823 scoped_ptr<SpdySerializedFrame> frame( 824 scoped_ptr<SpdySerializedFrame> frame(
824 framer.SerializePushPromise(push_promise)); 825 framer.SerializePushPromise(push_promise));
825 ASSERT_TRUE(frame.get() != NULL); 826 ASSERT_TRUE(frame.get() != NULL);
826 827
827 // We shouldn't have to read the whole frame before we signal an error. 828 // We shouldn't have to read the whole frame before we signal an error.
828 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 829 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
829 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size())); 830 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size()));
830 EXPECT_TRUE(framer.HasError()); 831 EXPECT_TRUE(framer.HasError());
831 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code()) 832 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
832 << SpdyFramer::ErrorCodeToString(framer.error_code()); 833 << SpdyFramer::ErrorCodeToString(framer.error_code());
833 } 834 }
834 835
835 TEST_P(SpdyFramerTest, DuplicateHeader) { 836 TEST_P(SpdyFramerTest, DuplicateHeader) {
836 if (spdy_version_ >= 4) { 837 if (spdy_version_ > SPDY3) {
837 // TODO(jgraettinger): Punting on this because we haven't determined 838 // TODO(jgraettinger): Punting on this because we haven't determined
838 // whether duplicate HPACK headers other than Cookie are an error. 839 // whether duplicate HPACK headers other than Cookie are an error.
839 // If they are, this will need to be updated to use HpackOutputStream. 840 // If they are, this will need to be updated to use HpackOutputStream.
840 return; 841 return;
841 } 842 }
842 SpdyFramer framer(spdy_version_); 843 SpdyFramer framer(spdy_version_);
843 // Frame builder with plentiful buffer size. 844 // Frame builder with plentiful buffer size.
844 SpdyFrameBuilder frame(1024, spdy_version_); 845 SpdyFrameBuilder frame(1024, spdy_version_);
845 if (spdy_version_ < 4) { 846 if (spdy_version_ <= SPDY3) {
846 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); 847 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE);
847 frame.WriteUInt32(3); // stream_id 848 frame.WriteUInt32(3); // stream_id
848 frame.WriteUInt32(0); // associated stream id 849 frame.WriteUInt32(0); // associated stream id
849 frame.WriteUInt16(0); // Priority. 850 frame.WriteUInt16(0); // Priority.
850 } else { 851 } else {
851 frame.BeginNewFrame(framer, HEADERS, HEADERS_FLAG_PRIORITY, 3); 852 frame.BeginNewFrame(framer, HEADERS, HEADERS_FLAG_PRIORITY, 3);
852 frame.WriteUInt32(framer.GetHighestPriority()); 853 frame.WriteUInt32(framer.GetHighestPriority());
853 } 854 }
854 855
855 if (IsSpdy2()) { 856 if (IsSpdy2()) {
(...skipping 20 matching lines...) Expand all
876 // This should fail because duplicate headers are verboten by the spec. 877 // This should fail because duplicate headers are verboten by the spec.
877 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), 878 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(),
878 serialized_headers.size(), 879 serialized_headers.size(),
879 &new_headers)); 880 &new_headers));
880 } 881 }
881 882
882 TEST_P(SpdyFramerTest, MultiValueHeader) { 883 TEST_P(SpdyFramerTest, MultiValueHeader) {
883 SpdyFramer framer(spdy_version_); 884 SpdyFramer framer(spdy_version_);
884 // Frame builder with plentiful buffer size. 885 // Frame builder with plentiful buffer size.
885 SpdyFrameBuilder frame(1024, spdy_version_); 886 SpdyFrameBuilder frame(1024, spdy_version_);
886 if (spdy_version_ < 4) { 887 if (spdy_version_ <= SPDY3) {
887 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); 888 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE);
888 frame.WriteUInt32(3); // stream_id 889 frame.WriteUInt32(3); // stream_id
889 frame.WriteUInt32(0); // associated stream id 890 frame.WriteUInt32(0); // associated stream id
890 frame.WriteUInt16(0); // Priority. 891 frame.WriteUInt16(0); // Priority.
891 } else { 892 } else {
892 frame.BeginNewFrame(framer, 893 frame.BeginNewFrame(framer,
893 HEADERS, 894 HEADERS,
894 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, 895 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS,
895 3); 896 3);
896 frame.WriteUInt32(framer.GetHighestPriority()); 897 frame.WriteUInt32(framer.GetHighestPriority());
897 } 898 }
898 899
899 string value("value1\0value2", 13); 900 string value("value1\0value2", 13);
900 if (IsSpdy2()) { 901 if (IsSpdy2()) {
901 frame.WriteUInt16(1); // Number of headers. 902 frame.WriteUInt16(1); // Number of headers.
902 frame.WriteString("name"); 903 frame.WriteString("name");
903 frame.WriteString(value); 904 frame.WriteString(value);
904 } else if (spdy_version_ >= 4) { 905 } else if (spdy_version_ > SPDY3) {
905 HpackOutputStream output_stream(1024); 906 HpackOutputStream output_stream(1024);
906 output_stream.AppendLiteralHeaderNoIndexingWithName("name", value); 907 output_stream.AppendLiteralHeaderNoIndexingWithName("name", value);
907 string buffer; 908 string buffer;
908 output_stream.TakeString(&buffer); 909 output_stream.TakeString(&buffer);
909 frame.WriteBytes(&buffer[0], buffer.size()); 910 frame.WriteBytes(&buffer[0], buffer.size());
910 } else { 911 } else {
911 frame.WriteUInt32(1); // Number of headers. 912 frame.WriteUInt32(1); // Number of headers.
912 frame.WriteStringPiece32("name"); 913 frame.WriteStringPiece32("name");
913 frame.WriteStringPiece32(value); 914 frame.WriteStringPiece32(value);
914 } 915 }
915 // write the length 916 // write the length
916 frame.RewriteLength(framer); 917 frame.RewriteLength(framer);
917 918
918 framer.set_enable_compression(false); 919 framer.set_enable_compression(false);
919 scoped_ptr<SpdyFrame> control_frame(frame.take()); 920 scoped_ptr<SpdyFrame> control_frame(frame.take());
920 921
921 TestSpdyVisitor visitor(spdy_version_); 922 TestSpdyVisitor visitor(spdy_version_);
922 visitor.use_compression_ = false; 923 visitor.use_compression_ = false;
923 visitor.SimulateInFramer( 924 visitor.SimulateInFramer(
924 reinterpret_cast<unsigned char*>(control_frame->data()), 925 reinterpret_cast<unsigned char*>(control_frame->data()),
925 control_frame->size()); 926 control_frame->size());
926 927
927 EXPECT_THAT(visitor.headers_, ElementsAre( 928 EXPECT_THAT(visitor.headers_, ElementsAre(
928 Pair("name", value))); 929 Pair("name", value)));
929 } 930 }
930 931
931 TEST_P(SpdyFramerTest, BasicCompression) { 932 TEST_P(SpdyFramerTest, BasicCompression) {
932 if (spdy_version_ >= 4) { 933 if (spdy_version_ > SPDY3) {
933 // Deflate compression doesn't apply to HPACK. 934 // Deflate compression doesn't apply to HPACK.
934 return; 935 return;
935 } 936 }
936 scoped_ptr<TestSpdyVisitor> visitor(new TestSpdyVisitor(spdy_version_)); 937 scoped_ptr<TestSpdyVisitor> visitor(new TestSpdyVisitor(spdy_version_));
937 SpdyFramer framer(spdy_version_); 938 SpdyFramer framer(spdy_version_);
938 framer.set_debug_visitor(visitor.get()); 939 framer.set_debug_visitor(visitor.get());
939 SpdySynStreamIR syn_stream(1); 940 SpdySynStreamIR syn_stream(1);
940 syn_stream.set_priority(1); 941 syn_stream.set_priority(1);
941 syn_stream.SetHeader("server", "SpdyServer 1.0"); 942 syn_stream.SetHeader("server", "SpdyServer 1.0");
942 syn_stream.SetHeader("date", "Mon 12 Jan 2009 12:12:12 PST"); 943 syn_stream.SetHeader("date", "Mon 12 Jan 2009 12:12:12 PST");
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 EXPECT_EQ(0, visitor.headers_frame_count_); 1398 EXPECT_EQ(0, visitor.headers_frame_count_);
1398 } 1399 }
1399 EXPECT_EQ(0, visitor.data_bytes_); 1400 EXPECT_EQ(0, visitor.data_bytes_);
1400 EXPECT_EQ(0, visitor.fin_frame_count_); 1401 EXPECT_EQ(0, visitor.fin_frame_count_);
1401 EXPECT_EQ(1, visitor.fin_flag_count_); 1402 EXPECT_EQ(1, visitor.fin_flag_count_);
1402 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 1403 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
1403 EXPECT_EQ(0, visitor.data_frame_count_); 1404 EXPECT_EQ(0, visitor.data_frame_count_);
1404 } 1405 }
1405 1406
1406 TEST_P(SpdyFramerTest, HeaderCompression) { 1407 TEST_P(SpdyFramerTest, HeaderCompression) {
1407 if (spdy_version_ >= 4) { 1408 if (spdy_version_ > SPDY3) {
1408 // Deflate compression doesn't apply to HPACK. 1409 // Deflate compression doesn't apply to HPACK.
1409 return; 1410 return;
1410 } 1411 }
1411 SpdyFramer send_framer(spdy_version_); 1412 SpdyFramer send_framer(spdy_version_);
1412 SpdyFramer recv_framer(spdy_version_); 1413 SpdyFramer recv_framer(spdy_version_);
1413 1414
1414 send_framer.set_enable_compression(true); 1415 send_framer.set_enable_compression(true);
1415 recv_framer.set_enable_compression(true); 1416 recv_framer.set_enable_compression(true);
1416 1417
1417 const char kHeader1[] = "header1"; 1418 const char kHeader1[] = "header1";
(...skipping 1686 matching lines...) Expand 10 before | Expand all | Expand 10 after
3104 // produced by rand(), so adding, removing or running single tests 3105 // produced by rand(), so adding, removing or running single tests
3105 // alters this value. The best we can do is assert that it happens 3106 // alters this value. The best we can do is assert that it happens
3106 // at least twice. 3107 // at least twice.
3107 EXPECT_LE(2, visitor.control_frame_header_data_count_); 3108 EXPECT_LE(2, visitor.control_frame_header_data_count_);
3108 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 3109 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
3109 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 3110 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
3110 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); 3111 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
3111 } 3112 }
3112 3113
3113 TEST_P(SpdyFramerTest, ControlFrameAtMaxSizeLimit) { 3114 TEST_P(SpdyFramerTest, ControlFrameAtMaxSizeLimit) {
3114 if (spdy_version_ >= 4) { 3115 if (spdy_version_ > SPDY3) {
3115 // TODO(jgraettinger): This test setup doesn't work with HPACK. 3116 // TODO(jgraettinger): This test setup doesn't work with HPACK.
3116 return; 3117 return;
3117 } 3118 }
3118 // First find the size of the header value in order to just reach the control 3119 // First find the size of the header value in order to just reach the control
3119 // frame max size. 3120 // frame max size.
3120 SpdyFramer framer(spdy_version_); 3121 SpdyFramer framer(spdy_version_);
3121 framer.set_enable_compression(false); 3122 framer.set_enable_compression(false);
3122 SpdySynStreamIR syn_stream(1); 3123 SpdySynStreamIR syn_stream(1);
3123 syn_stream.set_priority(1); 3124 syn_stream.set_priority(1);
3124 syn_stream.SetHeader("aa", ""); 3125 syn_stream.SetHeader("aa", "");
(...skipping 14 matching lines...) Expand all
3139 control_frame->size()); 3140 control_frame->size());
3140 EXPECT_TRUE(visitor.header_buffer_valid_); 3141 EXPECT_TRUE(visitor.header_buffer_valid_);
3141 EXPECT_EQ(0, visitor.error_count_); 3142 EXPECT_EQ(0, visitor.error_count_);
3142 EXPECT_EQ(1, visitor.syn_frame_count_); 3143 EXPECT_EQ(1, visitor.syn_frame_count_);
3143 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 3144 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
3144 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 3145 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
3145 EXPECT_LT(kBigValueSize, visitor.header_buffer_length_); 3146 EXPECT_LT(kBigValueSize, visitor.header_buffer_length_);
3146 } 3147 }
3147 3148
3148 TEST_P(SpdyFramerTest, ControlFrameTooLarge) { 3149 TEST_P(SpdyFramerTest, ControlFrameTooLarge) {
3149 if (spdy_version_ >= 4) { 3150 if (spdy_version_ > SPDY3) {
3150 // TODO(jgraettinger): This test setup doesn't work with HPACK. 3151 // TODO(jgraettinger): This test setup doesn't work with HPACK.
3151 return; 3152 return;
3152 } 3153 }
3153 // First find the size of the header value in order to just reach the control 3154 // First find the size of the header value in order to just reach the control
3154 // frame max size. 3155 // frame max size.
3155 SpdyFramer framer(spdy_version_); 3156 SpdyFramer framer(spdy_version_);
3156 framer.set_enable_compression(false); 3157 framer.set_enable_compression(false);
3157 SpdySynStreamIR syn_stream(1); 3158 SpdySynStreamIR syn_stream(1);
3158 syn_stream.SetHeader("aa", ""); 3159 syn_stream.SetHeader("aa", "");
3159 syn_stream.set_priority(1); 3160 syn_stream.set_priority(1);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
3280 // at least kHeaderBufferChunks + 1. 3281 // at least kHeaderBufferChunks + 1.
3281 EXPECT_LE(kHeaderBufferChunks + 1, 3282 EXPECT_LE(kHeaderBufferChunks + 1,
3282 static_cast<unsigned>(visitor.control_frame_header_data_count_)); 3283 static_cast<unsigned>(visitor.control_frame_header_data_count_));
3283 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); 3284 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_);
3284 3285
3285 // The framer should not have sent half-close to the visitor. 3286 // The framer should not have sent half-close to the visitor.
3286 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 3287 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
3287 } 3288 }
3288 3289
3289 TEST_P(SpdyFramerTest, DecompressCorruptHeaderBlock) { 3290 TEST_P(SpdyFramerTest, DecompressCorruptHeaderBlock) {
3290 if (spdy_version_ >= 4) { 3291 if (spdy_version_ > SPDY3) {
3291 // Deflate compression doesn't apply to HPACK. 3292 // Deflate compression doesn't apply to HPACK.
3292 return; 3293 return;
3293 } 3294 }
3294 SpdyFramer framer(spdy_version_); 3295 SpdyFramer framer(spdy_version_);
3295 framer.set_enable_compression(false); 3296 framer.set_enable_compression(false);
3296 // Construct a SYN_STREAM control frame without compressing the header block, 3297 // Construct a SYN_STREAM control frame without compressing the header block,
3297 // and have the framer try to decompress it. This will cause the framer to 3298 // and have the framer try to decompress it. This will cause the framer to
3298 // deal with a decompression error. 3299 // deal with a decompression error.
3299 SpdySynStreamIR syn_stream(1); 3300 SpdySynStreamIR syn_stream(1);
3300 syn_stream.set_priority(1); 3301 syn_stream.set_priority(1);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
3359 TEST_P(SpdyFramerTest, ReadZeroLenSettingsFrame) { 3360 TEST_P(SpdyFramerTest, ReadZeroLenSettingsFrame) {
3360 SpdyFramer framer(spdy_version_); 3361 SpdyFramer framer(spdy_version_);
3361 SpdySettingsIR settings_ir; 3362 SpdySettingsIR settings_ir;
3362 scoped_ptr<SpdyFrame> control_frame(framer.SerializeSettings(settings_ir)); 3363 scoped_ptr<SpdyFrame> control_frame(framer.SerializeSettings(settings_ir));
3363 SetFrameLength(control_frame.get(), 0, spdy_version_); 3364 SetFrameLength(control_frame.get(), 0, spdy_version_);
3364 TestSpdyVisitor visitor(spdy_version_); 3365 TestSpdyVisitor visitor(spdy_version_);
3365 visitor.use_compression_ = false; 3366 visitor.use_compression_ = false;
3366 visitor.SimulateInFramer( 3367 visitor.SimulateInFramer(
3367 reinterpret_cast<unsigned char*>(control_frame->data()), 3368 reinterpret_cast<unsigned char*>(control_frame->data()),
3368 framer.GetControlFrameHeaderSize()); 3369 framer.GetControlFrameHeaderSize());
3369 if (spdy_version_ < 4) { 3370 if (spdy_version_ <= SPDY3) {
3370 // Should generate an error, since zero-len settings frames are unsupported. 3371 // Should generate an error, since zero-len settings frames are unsupported.
3371 EXPECT_EQ(1, visitor.error_count_); 3372 EXPECT_EQ(1, visitor.error_count_);
3372 } else { 3373 } else {
3373 // Zero-len settings frames are permitted as of SPDY 4. 3374 // Zero-len settings frames are permitted as of SPDY 4.
3374 EXPECT_EQ(0, visitor.error_count_); 3375 EXPECT_EQ(0, visitor.error_count_);
3375 } 3376 }
3376 } 3377 }
3377 3378
3378 // Tests handling of SETTINGS frames with invalid length. 3379 // Tests handling of SETTINGS frames with invalid length.
3379 TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) { 3380 TEST_P(SpdyFramerTest, ReadBogusLenSettingsFrame) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 control_frame->size()); 3422 control_frame->size());
3422 TestSpdyVisitor visitor(spdy_version_); 3423 TestSpdyVisitor visitor(spdy_version_);
3423 visitor.use_compression_ = false; 3424 visitor.use_compression_ = false;
3424 3425
3425 // Read all at once. 3426 // Read all at once.
3426 visitor.SimulateInFramer( 3427 visitor.SimulateInFramer(
3427 reinterpret_cast<unsigned char*>(control_frame->data()), 3428 reinterpret_cast<unsigned char*>(control_frame->data()),
3428 control_frame->size()); 3429 control_frame->size());
3429 EXPECT_EQ(0, visitor.error_count_); 3430 EXPECT_EQ(0, visitor.error_count_);
3430 EXPECT_EQ(3, visitor.setting_count_); 3431 EXPECT_EQ(3, visitor.setting_count_);
3431 if (spdy_version_ >= 4) { 3432 if (spdy_version_ > SPDY3) {
3432 EXPECT_EQ(1, visitor.settings_ack_sent_); 3433 EXPECT_EQ(1, visitor.settings_ack_sent_);
3433 } 3434 }
3434 3435
3435 // Read data in small chunks. 3436 // Read data in small chunks.
3436 size_t framed_data = 0; 3437 size_t framed_data = 0;
3437 size_t unframed_data = control_frame->size(); 3438 size_t unframed_data = control_frame->size();
3438 size_t kReadChunkSize = 5; // Read five bytes at a time. 3439 size_t kReadChunkSize = 5; // Read five bytes at a time.
3439 while (unframed_data > 0) { 3440 while (unframed_data > 0) {
3440 size_t to_read = min(kReadChunkSize, unframed_data); 3441 size_t to_read = min(kReadChunkSize, unframed_data);
3441 visitor.SimulateInFramer( 3442 visitor.SimulateInFramer(
3442 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data), 3443 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data),
3443 to_read); 3444 to_read);
3444 unframed_data -= to_read; 3445 unframed_data -= to_read;
3445 framed_data += to_read; 3446 framed_data += to_read;
3446 } 3447 }
3447 EXPECT_EQ(0, visitor.error_count_); 3448 EXPECT_EQ(0, visitor.error_count_);
3448 EXPECT_EQ(3 * 2, visitor.setting_count_); 3449 EXPECT_EQ(3 * 2, visitor.setting_count_);
3449 if (spdy_version_ >= 4) { 3450 if (spdy_version_ > SPDY3) {
3450 EXPECT_EQ(2, visitor.settings_ack_sent_); 3451 EXPECT_EQ(2, visitor.settings_ack_sent_);
3451 } 3452 }
3452 } 3453 }
3453 3454
3454 // Tests handling of SETTINGS frame with duplicate entries. 3455 // Tests handling of SETTINGS frame with duplicate entries.
3455 TEST_P(SpdyFramerTest, ReadDuplicateSettings) { 3456 TEST_P(SpdyFramerTest, ReadDuplicateSettings) {
3456 SpdyFramer framer(spdy_version_); 3457 SpdyFramer framer(spdy_version_);
3457 3458
3458 const unsigned char kV2FrameData[] = { 3459 const unsigned char kV2FrameData[] = {
3459 0x80, spdy_version_ch_, 0x00, 0x04, 3460 0x80, spdy_version_ch_, 0x00, 0x04,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
3562 EXPECT_EQ(1, visitor.error_count_); 3563 EXPECT_EQ(1, visitor.error_count_);
3563 } else { 3564 } else {
3564 // In SPDY 4+, settings are allowed in any order. 3565 // In SPDY 4+, settings are allowed in any order.
3565 EXPECT_EQ(3, visitor.setting_count_); 3566 EXPECT_EQ(3, visitor.setting_count_);
3566 EXPECT_EQ(0, visitor.error_count_); 3567 EXPECT_EQ(0, visitor.error_count_);
3567 // EXPECT_EQ(1, visitor.settings_ack_count_); 3568 // EXPECT_EQ(1, visitor.settings_ack_count_);
3568 } 3569 }
3569 } 3570 }
3570 3571
3571 TEST_P(SpdyFramerTest, ProcessSettingsAckFrame) { 3572 TEST_P(SpdyFramerTest, ProcessSettingsAckFrame) {
3572 if (spdy_version_ < 4) { 3573 if (spdy_version_ <= SPDY3) {
3573 return; 3574 return;
3574 } 3575 }
3575 SpdyFramer framer(spdy_version_); 3576 SpdyFramer framer(spdy_version_);
3576 3577
3577 const unsigned char kFrameData[] = { 3578 const unsigned char kFrameData[] = {
3578 0x00, 0x00, 0x04, 0x01, 3579 0x00, 0x00, 0x04, 0x01,
3579 0x00, 0x00, 0x00, 0x00, 3580 0x00, 0x00, 0x00, 0x00,
3580 }; 3581 };
3581 3582
3582 TestSpdyVisitor visitor(spdy_version_); 3583 TestSpdyVisitor visitor(spdy_version_);
3583 visitor.use_compression_ = false; 3584 visitor.use_compression_ = false;
3584 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); 3585 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData));
3585 3586
3586 EXPECT_EQ(0, visitor.error_count_); 3587 EXPECT_EQ(0, visitor.error_count_);
3587 EXPECT_EQ(0, visitor.setting_count_); 3588 EXPECT_EQ(0, visitor.setting_count_);
3588 EXPECT_EQ(1, visitor.settings_ack_received_); 3589 EXPECT_EQ(1, visitor.settings_ack_received_);
3589 } 3590 }
3590 3591
3591 3592
3592 TEST_P(SpdyFramerTest, ProcessDataFrameWithPadding) { 3593 TEST_P(SpdyFramerTest, ProcessDataFrameWithPadding) {
3593 if (spdy_version_ < 4) { 3594 if (spdy_version_ <= SPDY3) {
3594 return; 3595 return;
3595 } 3596 }
3596 3597
3597 const int kPaddingLen = 512; // So we get two bytes for padding length field. 3598 const int kPaddingLen = 512; // So we get two bytes for padding length field.
3598 const char data_payload[] = "hello"; 3599 const char data_payload[] = "hello";
3599 3600
3600 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 3601 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
3601 SpdyFramer framer(spdy_version_); 3602 SpdyFramer framer(spdy_version_);
3602 framer.set_visitor(&visitor); 3603 framer.set_visitor(&visitor);
3603 3604
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
3756 3757
3757 SpdyContinuationIR continuation(42); 3758 SpdyContinuationIR continuation(42);
3758 continuation.SetHeader("bar", "foo"); 3759 continuation.SetHeader("bar", "foo");
3759 continuation.SetHeader("foo", "bar"); 3760 continuation.SetHeader("foo", "bar");
3760 scoped_ptr<SpdySerializedFrame> frame( 3761 scoped_ptr<SpdySerializedFrame> frame(
3761 framer.SerializeContinuation(continuation)); 3762 framer.SerializeContinuation(continuation));
3762 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 3763 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
3763 } 3764 }
3764 3765
3765 TEST_P(SpdyFramerTest, ReadCompressedPushPromise) { 3766 TEST_P(SpdyFramerTest, ReadCompressedPushPromise) {
3766 if (spdy_version_ < 4) { 3767 if (spdy_version_ <= SPDY3) {
3767 return; 3768 return;
3768 } 3769 }
3769 3770
3770 SpdyFramer framer(spdy_version_); 3771 SpdyFramer framer(spdy_version_);
3771 SpdyPushPromiseIR push_promise(42, 57); 3772 SpdyPushPromiseIR push_promise(42, 57);
3772 push_promise.SetHeader("foo", "bar"); 3773 push_promise.SetHeader("foo", "bar");
3773 push_promise.SetHeader("bar", "foofoo"); 3774 push_promise.SetHeader("bar", "foofoo");
3774 SpdyHeaderBlock headers = push_promise.name_value_block(); 3775 SpdyHeaderBlock headers = push_promise.name_value_block();
3775 scoped_ptr<SpdySerializedFrame> frame( 3776 scoped_ptr<SpdySerializedFrame> frame(
3776 framer.SerializePushPromise(push_promise)); 3777 framer.SerializePushPromise(push_promise));
3777 EXPECT_TRUE(frame.get() != NULL); 3778 EXPECT_TRUE(frame.get() != NULL);
3778 TestSpdyVisitor visitor(spdy_version_); 3779 TestSpdyVisitor visitor(spdy_version_);
3779 visitor.use_compression_ = true; 3780 visitor.use_compression_ = true;
3780 visitor.SimulateInFramer( 3781 visitor.SimulateInFramer(
3781 reinterpret_cast<unsigned char*>(frame->data()), 3782 reinterpret_cast<unsigned char*>(frame->data()),
3782 frame->size()); 3783 frame->size());
3783 EXPECT_EQ(42u, visitor.last_push_promise_stream_); 3784 EXPECT_EQ(42u, visitor.last_push_promise_stream_);
3784 EXPECT_EQ(57u, visitor.last_push_promise_promised_stream_); 3785 EXPECT_EQ(57u, visitor.last_push_promise_promised_stream_);
3785 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_)); 3786 EXPECT_TRUE(CompareHeaderBlocks(&headers, &visitor.headers_));
3786 } 3787 }
3787 3788
3788 TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) { 3789 TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) {
3789 if (spdy_version_ < 4) { 3790 if (spdy_version_ <= SPDY3) {
3790 return; 3791 return;
3791 } 3792 }
3792 3793
3793 const unsigned char kInput[] = { 3794 const unsigned char kInput[] = {
3794 0x00, 0x10, 0x01, 0x00, // HEADERS 3795 0x00, 0x10, 0x01, 0x00, // HEADERS
3795 0x00, 0x00, 0x00, 0x01, // Stream 1 3796 0x00, 0x00, 0x00, 0x01, // Stream 1
3796 0x40, 0x06, 0x43, 0x6f, 3797 0x40, 0x06, 0x43, 0x6f,
3797 0x6f, 0x6b, 0x69, 0x65, 3798 0x6f, 0x6b, 0x69, 0x65,
3798 0x07, 0x66, 0x6f, 0x6f, 3799 0x07, 0x66, 0x6f, 0x6f,
3799 0x3d, 0x62, 0x61, 0x72, 3800 0x3d, 0x62, 0x61, 0x72,
(...skipping 24 matching lines...) Expand all
3824 EXPECT_EQ(2, visitor.continuation_count_); 3825 EXPECT_EQ(2, visitor.continuation_count_);
3825 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 3826 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
3826 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 3827 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
3827 3828
3828 EXPECT_THAT(visitor.headers_, ElementsAre( 3829 EXPECT_THAT(visitor.headers_, ElementsAre(
3829 Pair("cookie", "foo=bar; baz=bing; "), 3830 Pair("cookie", "foo=bar; baz=bing; "),
3830 Pair("name", "value"))); 3831 Pair("name", "value")));
3831 } 3832 }
3832 3833
3833 TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) { 3834 TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) {
3834 if (spdy_version_ < 4) { 3835 if (spdy_version_ <= SPDY3) {
3835 return; 3836 return;
3836 } 3837 }
3837 3838
3838 const unsigned char kInput[] = { 3839 const unsigned char kInput[] = {
3839 0x00, 0x10, 0x01, 0x01, // HEADERS: FIN 3840 0x00, 0x10, 0x01, 0x01, // HEADERS: FIN
3840 0x00, 0x00, 0x00, 0x01, // Stream 1 3841 0x00, 0x00, 0x00, 0x01, // Stream 1
3841 0x40, 0x06, 0x43, 0x6f, 3842 0x40, 0x06, 0x43, 0x6f,
3842 0x6f, 0x6b, 0x69, 0x65, 3843 0x6f, 0x6b, 0x69, 0x65,
3843 0x07, 0x66, 0x6f, 0x6f, 3844 0x07, 0x66, 0x6f, 0x6f,
3844 0x3d, 0x62, 0x61, 0x72, 3845 0x3d, 0x62, 0x61, 0x72,
(...skipping 25 matching lines...) Expand all
3870 EXPECT_EQ(1, visitor.fin_flag_count_); 3871 EXPECT_EQ(1, visitor.fin_flag_count_);
3871 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 3872 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
3872 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 3873 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
3873 3874
3874 EXPECT_THAT(visitor.headers_, ElementsAre( 3875 EXPECT_THAT(visitor.headers_, ElementsAre(
3875 Pair("cookie", "foo=bar; baz=bing; "), 3876 Pair("cookie", "foo=bar; baz=bing; "),
3876 Pair("name", "value"))); 3877 Pair("name", "value")));
3877 } 3878 }
3878 3879
3879 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { 3880 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) {
3880 if (spdy_version_ < 4) { 3881 if (spdy_version_ <= SPDY3) {
3881 return; 3882 return;
3882 } 3883 }
3883 3884
3884 const unsigned char kInput[] = { 3885 const unsigned char kInput[] = {
3885 0x00, 0x14, 0x05, 0x00, // PUSH_PROMISE 3886 0x00, 0x14, 0x05, 0x00, // PUSH_PROMISE
3886 0x00, 0x00, 0x00, 0x01, // Stream 1 3887 0x00, 0x00, 0x00, 0x01, // Stream 1
3887 0x00, 0x00, 0x00, 0x2A, // Promised stream 42 3888 0x00, 0x00, 0x00, 0x2A, // Promised stream 42
3888 0x40, 0x06, 0x43, 0x6f, 3889 0x40, 0x06, 0x43, 0x6f,
3889 0x6f, 0x6b, 0x69, 0x65, 3890 0x6f, 0x6b, 0x69, 0x65,
3890 0x07, 0x66, 0x6f, 0x6f, 3891 0x07, 0x66, 0x6f, 0x6f,
(...skipping 26 matching lines...) Expand all
3917 EXPECT_EQ(2, visitor.continuation_count_); 3918 EXPECT_EQ(2, visitor.continuation_count_);
3918 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 3919 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
3919 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 3920 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
3920 3921
3921 EXPECT_THAT(visitor.headers_, ElementsAre( 3922 EXPECT_THAT(visitor.headers_, ElementsAre(
3922 Pair("cookie", "foo=bar; baz=bing; "), 3923 Pair("cookie", "foo=bar; baz=bing; "),
3923 Pair("name", "value"))); 3924 Pair("name", "value")));
3924 } 3925 }
3925 3926
3926 TEST_P(SpdyFramerTest, ReadContinuationWithWrongStreamId) { 3927 TEST_P(SpdyFramerTest, ReadContinuationWithWrongStreamId) {
3927 if (spdy_version_ < 4) { 3928 if (spdy_version_ <= SPDY3) {
3928 return; 3929 return;
3929 } 3930 }
3930 3931
3931 const unsigned char kInput[] = { 3932 const unsigned char kInput[] = {
3932 0x00, 0x10, 0x01, 0x00, // HEADERS 3933 0x00, 0x10, 0x01, 0x00, // HEADERS
3933 0x00, 0x00, 0x00, 0x01, // Stream 1 3934 0x00, 0x00, 0x00, 0x01, // Stream 1
3934 0x40, 0x06, 0x43, 0x6f, 3935 0x40, 0x06, 0x43, 0x6f,
3935 0x6f, 0x6b, 0x69, 0x65, 3936 0x6f, 0x6b, 0x69, 0x65,
3936 0x07, 0x66, 0x6f, 0x6f, 3937 0x07, 0x66, 0x6f, 0x6f,
3937 0x3d, 0x62, 0x61, 0x72, 3938 0x3d, 0x62, 0x61, 0x72,
(...skipping 15 matching lines...) Expand all
3953 EXPECT_EQ(1, visitor.error_count_); 3954 EXPECT_EQ(1, visitor.error_count_);
3954 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, 3955 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
3955 visitor.framer_.error_code()) 3956 visitor.framer_.error_code())
3956 << SpdyFramer::ErrorCodeToString(framer.error_code()); 3957 << SpdyFramer::ErrorCodeToString(framer.error_code());
3957 EXPECT_EQ(1, visitor.headers_frame_count_); 3958 EXPECT_EQ(1, visitor.headers_frame_count_);
3958 EXPECT_EQ(0, visitor.continuation_count_); 3959 EXPECT_EQ(0, visitor.continuation_count_);
3959 EXPECT_EQ(0u, visitor.header_buffer_length_); 3960 EXPECT_EQ(0u, visitor.header_buffer_length_);
3960 } 3961 }
3961 3962
3962 TEST_P(SpdyFramerTest, ReadContinuationOutOfOrder) { 3963 TEST_P(SpdyFramerTest, ReadContinuationOutOfOrder) {
3963 if (spdy_version_ < 4) { 3964 if (spdy_version_ <= SPDY3) {
3964 return; 3965 return;
3965 } 3966 }
3966 3967
3967 const unsigned char kInput[] = { 3968 const unsigned char kInput[] = {
3968 0x00, 0x10, 0x09, 0x00, // CONTINUATION 3969 0x00, 0x10, 0x09, 0x00, // CONTINUATION
3969 0x00, 0x00, 0x00, 0x01, // Stream 1 3970 0x00, 0x00, 0x00, 0x01, // Stream 1
3970 0x40, 0x06, 0x43, 0x6f, 3971 0x40, 0x06, 0x43, 0x6f,
3971 0x6f, 0x6b, 0x69, 0x65, 3972 0x6f, 0x6b, 0x69, 0x65,
3972 0x07, 0x66, 0x6f, 0x6f, 3973 0x07, 0x66, 0x6f, 0x6f,
3973 0x3d, 0x62, 0x61, 0x72, 3974 0x3d, 0x62, 0x61, 0x72,
3974 }; 3975 };
3975 3976
3976 SpdyFramer framer(spdy_version_); 3977 SpdyFramer framer(spdy_version_);
3977 TestSpdyVisitor visitor(spdy_version_); 3978 TestSpdyVisitor visitor(spdy_version_);
3978 framer.set_visitor(&visitor); 3979 framer.set_visitor(&visitor);
3979 visitor.SimulateInFramer(kInput, sizeof(kInput)); 3980 visitor.SimulateInFramer(kInput, sizeof(kInput));
3980 3981
3981 EXPECT_EQ(1, visitor.error_count_); 3982 EXPECT_EQ(1, visitor.error_count_);
3982 EXPECT_EQ(SpdyFramer::SPDY_UNEXPECTED_FRAME, 3983 EXPECT_EQ(SpdyFramer::SPDY_UNEXPECTED_FRAME,
3983 visitor.framer_.error_code()) 3984 visitor.framer_.error_code())
3984 << SpdyFramer::ErrorCodeToString(framer.error_code()); 3985 << SpdyFramer::ErrorCodeToString(framer.error_code());
3985 EXPECT_EQ(0, visitor.continuation_count_); 3986 EXPECT_EQ(0, visitor.continuation_count_);
3986 EXPECT_EQ(0u, visitor.header_buffer_length_); 3987 EXPECT_EQ(0u, visitor.header_buffer_length_);
3987 } 3988 }
3988 3989
3989 TEST_P(SpdyFramerTest, ExpectContinuationReceiveData) { 3990 TEST_P(SpdyFramerTest, ExpectContinuationReceiveData) {
3990 if (spdy_version_ < 4) { 3991 if (spdy_version_ <= SPDY3) {
3991 return; 3992 return;
3992 } 3993 }
3993 3994
3994 const unsigned char kInput[] = { 3995 const unsigned char kInput[] = {
3995 0x00, 0x10, 0x01, 0x00, // HEADERS 3996 0x00, 0x10, 0x01, 0x00, // HEADERS
3996 0x00, 0x00, 0x00, 0x01, // Stream 1 3997 0x00, 0x00, 0x00, 0x01, // Stream 1
3997 0x40, 0x06, 0x43, 0x6f, 3998 0x40, 0x06, 0x43, 0x6f,
3998 0x6f, 0x6b, 0x69, 0x65, 3999 0x6f, 0x6b, 0x69, 0x65,
3999 0x07, 0x66, 0x6f, 0x6f, 4000 0x07, 0x66, 0x6f, 0x6f,
4000 0x3d, 0x62, 0x61, 0x72, 4001 0x3d, 0x62, 0x61, 0x72,
(...skipping 12 matching lines...) Expand all
4013 EXPECT_EQ(SpdyFramer::SPDY_UNEXPECTED_FRAME, 4014 EXPECT_EQ(SpdyFramer::SPDY_UNEXPECTED_FRAME,
4014 visitor.framer_.error_code()) 4015 visitor.framer_.error_code())
4015 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4016 << SpdyFramer::ErrorCodeToString(framer.error_code());
4016 EXPECT_EQ(1, visitor.headers_frame_count_); 4017 EXPECT_EQ(1, visitor.headers_frame_count_);
4017 EXPECT_EQ(0, visitor.continuation_count_); 4018 EXPECT_EQ(0, visitor.continuation_count_);
4018 EXPECT_EQ(0u, visitor.header_buffer_length_); 4019 EXPECT_EQ(0u, visitor.header_buffer_length_);
4019 EXPECT_EQ(0, visitor.data_frame_count_); 4020 EXPECT_EQ(0, visitor.data_frame_count_);
4020 } 4021 }
4021 4022
4022 TEST_P(SpdyFramerTest, ExpectContinuationReceiveControlFrame) { 4023 TEST_P(SpdyFramerTest, ExpectContinuationReceiveControlFrame) {
4023 if (spdy_version_ < 4) { 4024 if (spdy_version_ <= SPDY3) {
4024 return; 4025 return;
4025 } 4026 }
4026 4027
4027 const unsigned char kInput[] = { 4028 const unsigned char kInput[] = {
4028 0x00, 0x10, 0x01, 0x00, // HEADERS 4029 0x00, 0x10, 0x01, 0x00, // HEADERS
4029 0x00, 0x00, 0x00, 0x01, // Stream 1 4030 0x00, 0x00, 0x00, 0x01, // Stream 1
4030 0x40, 0x06, 0x43, 0x6f, 4031 0x40, 0x06, 0x43, 0x6f,
4031 0x6f, 0x6b, 0x69, 0x65, 4032 0x6f, 0x6b, 0x69, 0x65,
4032 0x07, 0x66, 0x6f, 0x6f, 4033 0x07, 0x66, 0x6f, 0x6f,
4033 0x3d, 0x62, 0x61, 0x72, 4034 0x3d, 0x62, 0x61, 0x72,
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
4270 EXPECT_CALL(visitor, OnError(_)); 4271 EXPECT_CALL(visitor, OnError(_));
4271 framer.ProcessInput("HTTP/1.0", 8); 4272 framer.ProcessInput("HTTP/1.0", 8);
4272 EXPECT_TRUE(framer.probable_http_response()); 4273 EXPECT_TRUE(framer.probable_http_response());
4273 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 4274 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4274 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) 4275 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code())
4275 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4276 << SpdyFramer::ErrorCodeToString(framer.error_code());
4276 } 4277 }
4277 } 4278 }
4278 4279
4279 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) { 4280 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) {
4280 if (spdy_version_ >= 4) { 4281 if (spdy_version_ > SPDY3) {
4281 return; 4282 return;
4282 } 4283 }
4283 4284
4284 for (int flags = 0; flags < 256; ++flags) { 4285 for (int flags = 0; flags < 256; ++flags) {
4285 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4286 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4286 4287
4287 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4288 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4288 SpdyFramer framer(spdy_version_); 4289 SpdyFramer framer(spdy_version_);
4289 framer.set_visitor(&visitor); 4290 framer.set_visitor(&visitor);
4290 4291
(...skipping 19 matching lines...) Expand all
4310 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4311 << SpdyFramer::ErrorCodeToString(framer.error_code());
4311 } else { 4312 } else {
4312 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4313 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4313 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4314 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4314 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4315 << SpdyFramer::ErrorCodeToString(framer.error_code());
4315 } 4316 }
4316 } 4317 }
4317 } 4318 }
4318 4319
4319 TEST_P(SpdyFramerTest, DataFrameFlagsV4) { 4320 TEST_P(SpdyFramerTest, DataFrameFlagsV4) {
4320 if (spdy_version_ < 4) { 4321 if (spdy_version_ <= SPDY3) {
4321 return; 4322 return;
4322 } 4323 }
4323 4324
4324 uint8 valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT | 4325 uint8 valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT |
4325 DATA_FLAG_PAD_LOW | DATA_FLAG_PAD_HIGH; 4326 DATA_FLAG_PAD_LOW | DATA_FLAG_PAD_HIGH;
4326 4327
4327 for (int flags = 0; flags < 256; ++flags) { 4328 for (int flags = 0; flags < 256; ++flags) {
4328 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4329 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4329 4330
4330 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4331 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
4508 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4509 << SpdyFramer::ErrorCodeToString(framer.error_code());
4509 } else { 4510 } else {
4510 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4511 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4511 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4512 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4512 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4513 << SpdyFramer::ErrorCodeToString(framer.error_code());
4513 } 4514 }
4514 } 4515 }
4515 } 4516 }
4516 4517
4517 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) { 4518 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) {
4518 if (spdy_version_ >= 4) { return; } 4519 if (spdy_version_ > SPDY3) { return; }
4519 for (int flags = 0; flags < 256; ++flags) { 4520 for (int flags = 0; flags < 256; ++flags) {
4520 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4521 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4521 4522
4522 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4523 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4523 SpdyFramer framer(spdy_version_); 4524 SpdyFramer framer(spdy_version_);
4524 framer.set_visitor(&visitor); 4525 framer.set_visitor(&visitor);
4525 4526
4526 SpdySettingsIR settings_ir; 4527 SpdySettingsIR settings_ir;
4527 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH, 4528 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH,
4528 false, 4529 false,
(...skipping 20 matching lines...) Expand all
4549 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4550 << SpdyFramer::ErrorCodeToString(framer.error_code());
4550 } else { 4551 } else {
4551 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4552 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4552 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4553 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4553 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4554 << SpdyFramer::ErrorCodeToString(framer.error_code());
4554 } 4555 }
4555 } 4556 }
4556 } 4557 }
4557 4558
4558 TEST_P(SpdyFramerTest, SettingsFrameFlags) { 4559 TEST_P(SpdyFramerTest, SettingsFrameFlags) {
4559 if (spdy_version_ < 4) { return; } 4560 if (spdy_version_ <= SPDY3) { return; }
4560 for (int flags = 0; flags < 256; ++flags) { 4561 for (int flags = 0; flags < 256; ++flags) {
4561 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4562 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4562 4563
4563 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4564 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4564 SpdyFramer framer(spdy_version_); 4565 SpdyFramer framer(spdy_version_);
4565 framer.set_visitor(&visitor); 4566 framer.set_visitor(&visitor);
4566 4567
4567 SpdySettingsIR settings_ir; 4568 SpdySettingsIR settings_ir;
4568 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16); 4569 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16);
4569 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); 4570 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir));
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
5027 SpdyBlockedIR blocked_ir(0); 5028 SpdyBlockedIR blocked_ir(0);
5028 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); 5029 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir));
5029 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); 5030 framer.ProcessInput(frame->data(), framer.GetBlockedSize());
5030 5031
5031 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5032 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5032 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5033 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5033 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5034 << SpdyFramer::ErrorCodeToString(framer.error_code());
5034 } 5035 }
5035 5036
5036 } // namespace net 5037 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698