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

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

Issue 786123002: Update from https://crrev.com/307330 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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
« 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"
11 #include "net/spdy/hpack_output_stream.h" 11 #include "net/spdy/hpack_output_stream.h"
12 #include "net/spdy/mock_spdy_framer_visitor.h" 12 #include "net/spdy/mock_spdy_framer_visitor.h"
13 #include "net/spdy/spdy_frame_builder.h" 13 #include "net/spdy/spdy_frame_builder.h"
14 #include "net/spdy/spdy_frame_reader.h" 14 #include "net/spdy/spdy_frame_reader.h"
15 #include "net/spdy/spdy_framer.h" 15 #include "net/spdy/spdy_framer.h"
16 #include "net/spdy/spdy_protocol.h" 16 #include "net/spdy/spdy_protocol.h"
17 #include "net/spdy/spdy_test_utils.h" 17 #include "net/spdy/spdy_test_utils.h"
18 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/platform_test.h" 19 #include "testing/platform_test.h"
20 20
21 using base::StringPiece;
22 using std::string; 21 using std::string;
23 using std::max;
24 using std::min;
25 using std::numeric_limits;
26 using testing::ElementsAre;
27 using testing::Pair;
28 using testing::_; 22 using testing::_;
29 23
30 namespace net { 24 namespace net {
31 25
32 namespace test { 26 namespace test {
33 27
34 static const size_t kMaxDecompressedSize = 1024; 28 static const size_t kMaxDecompressedSize = 1024;
35 29
36 class MockDebugVisitor : public SpdyFramerDebugVisitorInterface { 30 class MockDebugVisitor : public SpdyFramerDebugVisitorInterface {
37 public: 31 public:
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 } 355 }
362 } 356 }
363 357
364 void OnRstStream(SpdyStreamId stream_id, 358 void OnRstStream(SpdyStreamId stream_id,
365 SpdyRstStreamStatus status) override { 359 SpdyRstStreamStatus status) override {
366 ++fin_frame_count_; 360 ++fin_frame_count_;
367 } 361 }
368 362
369 bool OnRstStreamFrameData(const char* rst_stream_data, size_t len) override { 363 bool OnRstStreamFrameData(const char* rst_stream_data, size_t len) override {
370 if ((rst_stream_data != NULL) && (len > 0)) { 364 if ((rst_stream_data != NULL) && (len > 0)) {
371 fin_opaque_data_ += std::string(rst_stream_data, len); 365 fin_opaque_data_ += string(rst_stream_data, len);
372 } 366 }
373 return true; 367 return true;
374 } 368 }
375 369
376 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { 370 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override {
377 ++setting_count_; 371 ++setting_count_;
378 } 372 }
379 373
380 void OnSettingsAck() override { 374 void OnSettingsAck() override {
381 DCHECK_LT(SPDY3, framer_.protocol_version()); 375 DCHECK_LT(SPDY3, framer_.protocol_version());
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 framer_.set_visitor(this); 465 framer_.set_visitor(this);
472 size_t input_remaining = size; 466 size_t input_remaining = size;
473 const char* input_ptr = reinterpret_cast<const char*>(input); 467 const char* input_ptr = reinterpret_cast<const char*>(input);
474 while (input_remaining > 0 && 468 while (input_remaining > 0 &&
475 framer_.error_code() == SpdyFramer::SPDY_NO_ERROR) { 469 framer_.error_code() == SpdyFramer::SPDY_NO_ERROR) {
476 // To make the tests more interesting, we feed random (amd small) chunks 470 // To make the tests more interesting, we feed random (amd small) chunks
477 // into the framer. This simulates getting strange-sized reads from 471 // into the framer. This simulates getting strange-sized reads from
478 // the socket. 472 // the socket.
479 const size_t kMaxReadSize = 32; 473 const size_t kMaxReadSize = 32;
480 size_t bytes_read = 474 size_t bytes_read =
481 (rand() % min(input_remaining, kMaxReadSize)) + 1; 475 (rand() % std::min(input_remaining, kMaxReadSize)) + 1;
482 size_t bytes_processed = framer_.ProcessInput(input_ptr, bytes_read); 476 size_t bytes_processed = framer_.ProcessInput(input_ptr, bytes_read);
483 input_remaining -= bytes_processed; 477 input_remaining -= bytes_processed;
484 input_ptr += bytes_processed; 478 input_ptr += bytes_processed;
485 } 479 }
486 } 480 }
487 481
488 void InitHeaderStreaming(SpdyFrameType header_control_type, 482 void InitHeaderStreaming(SpdyFrameType header_control_type,
489 SpdyStreamId stream_id) { 483 SpdyStreamId stream_id) {
490 if (!SpdyConstants::IsValidFrameType(framer_.protocol_version(), 484 if (!SpdyConstants::IsValidFrameType(framer_.protocol_version(),
491 SpdyConstants::SerializeFrameType(framer_.protocol_version(), 485 SpdyConstants::SerializeFrameType(framer_.protocol_version(),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 int altsvc_count_; 529 int altsvc_count_;
536 int priority_count_; 530 int priority_count_;
537 SpdyAltSvcIR test_altsvc_ir_; 531 SpdyAltSvcIR test_altsvc_ir_;
538 bool on_unknown_frame_result_; 532 bool on_unknown_frame_result_;
539 SpdyStreamId last_window_update_stream_; 533 SpdyStreamId last_window_update_stream_;
540 uint32 last_window_update_delta_; 534 uint32 last_window_update_delta_;
541 SpdyStreamId last_push_promise_stream_; 535 SpdyStreamId last_push_promise_stream_;
542 SpdyStreamId last_push_promise_promised_stream_; 536 SpdyStreamId last_push_promise_promised_stream_;
543 int data_bytes_; 537 int data_bytes_;
544 int fin_frame_count_; // The count of RST_STREAM type frames received. 538 int fin_frame_count_; // The count of RST_STREAM type frames received.
545 std::string fin_opaque_data_; 539 string fin_opaque_data_;
546 int fin_flag_count_; // The count of frames with the FIN flag set. 540 int fin_flag_count_; // The count of frames with the FIN flag set.
547 int zero_length_data_frame_count_; // The count of zero-length data frames. 541 int zero_length_data_frame_count_; // The count of zero-length data frames.
548 int control_frame_header_data_count_; // The count of chunks received. 542 int control_frame_header_data_count_; // The count of chunks received.
549 // The count of zero-length control frame header data chunks received. 543 // The count of zero-length control frame header data chunks received.
550 int zero_length_control_frame_header_data_count_; 544 int zero_length_control_frame_header_data_count_;
551 int data_frame_count_; 545 int data_frame_count_;
552 size_t last_payload_len_; 546 size_t last_payload_len_;
553 size_t last_frame_len_; 547 size_t last_frame_len_;
554 548
555 // Header block streaming state: 549 // Header block streaming state:
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 937
944 framer.set_enable_compression(false); 938 framer.set_enable_compression(false);
945 scoped_ptr<SpdyFrame> control_frame(frame.take()); 939 scoped_ptr<SpdyFrame> control_frame(frame.take());
946 940
947 TestSpdyVisitor visitor(spdy_version_); 941 TestSpdyVisitor visitor(spdy_version_);
948 visitor.use_compression_ = false; 942 visitor.use_compression_ = false;
949 visitor.SimulateInFramer( 943 visitor.SimulateInFramer(
950 reinterpret_cast<unsigned char*>(control_frame->data()), 944 reinterpret_cast<unsigned char*>(control_frame->data()),
951 control_frame->size()); 945 control_frame->size());
952 946
953 EXPECT_THAT(visitor.headers_, ElementsAre( 947 EXPECT_THAT(visitor.headers_,
954 Pair("name", value))); 948 testing::ElementsAre(testing::Pair("name", value)));
955 } 949 }
956 950
957 TEST_P(SpdyFramerTest, BasicCompression) { 951 TEST_P(SpdyFramerTest, BasicCompression) {
958 if (spdy_version_ > SPDY3) { 952 if (spdy_version_ > SPDY3) {
959 // Deflate compression doesn't apply to HPACK. 953 // Deflate compression doesn't apply to HPACK.
960 return; 954 return;
961 } 955 }
962 scoped_ptr<TestSpdyVisitor> visitor(new TestSpdyVisitor(spdy_version_)); 956 scoped_ptr<TestSpdyVisitor> visitor(new TestSpdyVisitor(spdy_version_));
963 SpdyFramer framer(spdy_version_); 957 SpdyFramer framer(spdy_version_);
964 framer.set_debug_visitor(visitor.get()); 958 framer.set_debug_visitor(visitor.get());
(...skipping 2798 matching lines...) Expand 10 before | Expand all | Expand 10 after
3763 EXPECT_EQ(1, visitor.error_count_); 3757 EXPECT_EQ(1, visitor.error_count_);
3764 EXPECT_EQ(SpdyFramer::SPDY_DECOMPRESS_FAILURE, visitor.framer_.error_code()) 3758 EXPECT_EQ(SpdyFramer::SPDY_DECOMPRESS_FAILURE, visitor.framer_.error_code())
3765 << SpdyFramer::ErrorCodeToString(framer.error_code()); 3759 << SpdyFramer::ErrorCodeToString(framer.error_code());
3766 EXPECT_EQ(0u, visitor.header_buffer_length_); 3760 EXPECT_EQ(0u, visitor.header_buffer_length_);
3767 } 3761 }
3768 3762
3769 TEST_P(SpdyFramerTest, ControlFrameSizesAreValidated) { 3763 TEST_P(SpdyFramerTest, ControlFrameSizesAreValidated) {
3770 SpdyFramer framer(spdy_version_); 3764 SpdyFramer framer(spdy_version_);
3771 // Create a GoAway frame that has a few extra bytes at the end. 3765 // Create a GoAway frame that has a few extra bytes at the end.
3772 // We create enough overhead to overflow the framer's control frame buffer. 3766 // We create enough overhead to overflow the framer's control frame buffer.
3773 ASSERT_GE(250u, SpdyFramer::kControlFrameBufferSize); 3767 ASSERT_LE(SpdyFramer::kControlFrameBufferSize, 250u);
3774 const unsigned char length = 1 + SpdyFramer::kControlFrameBufferSize; 3768 const size_t length = SpdyFramer::kControlFrameBufferSize + 1;
3775 const unsigned char kV3FrameData[] = { // Also applies for V2. 3769 const unsigned char kV3FrameData[] = { // Also applies for V2.
3776 0x80, spdy_version_ch_, 0x00, 0x07, 3770 0x80, spdy_version_ch_, 0x00, 0x07,
3777 0x00, 0x00, 0x00, length, 3771 0x00, 0x00, 0x00, static_cast<unsigned char>(length),
3778 0x00, 0x00, 0x00, 0x00, // Stream ID 3772 0x00, 0x00, 0x00, 0x00, // Stream ID
3779 0x00, 0x00, 0x00, 0x00, // Status 3773 0x00, 0x00, 0x00, 0x00, // Status
3780 }; 3774 };
3781 3775
3782 // SPDY version 4 and up GOAWAY frames are only bound to a minimal length, 3776 // SPDY version 4 and up GOAWAY frames are only bound to a minimal length,
3783 // since it may carry opaque data. Verify that minimal length is tested. 3777 // since it may carry opaque data. Verify that minimal length is tested.
3784 const unsigned char less_than_min_length = 3778 ASSERT_GT(framer.GetGoAwayMinimumSize(), framer.GetControlFrameHeaderSize());
3779 const size_t less_than_min_length =
3785 framer.GetGoAwayMinimumSize() - framer.GetControlFrameHeaderSize() - 1; 3780 framer.GetGoAwayMinimumSize() - framer.GetControlFrameHeaderSize() - 1;
3781 ASSERT_LE(less_than_min_length, std::numeric_limits<unsigned char>::max());
3786 const unsigned char kV4FrameData[] = { 3782 const unsigned char kV4FrameData[] = {
3787 0x00, 0x00, static_cast<uint8>(less_than_min_length), 0x07, 3783 0x00, 0x00, static_cast<unsigned char>(less_than_min_length), 0x07,
3788 0x00, 0x00, 0x00, 0x00, 3784 0x00, 0x00, 0x00, 0x00,
3789 0x00, 0x00, 0x00, 0x00, // Stream Id 3785 0x00, 0x00, 0x00, 0x00, // Stream Id
3790 0x00, 0x00, 0x00, 0x00, // Status 3786 0x00, 0x00, 0x00, 0x00, // Status
3791 0x00, 3787 0x00,
3792 }; 3788 };
3793 const size_t pad_length = 3789 const size_t pad_length =
3794 length + framer.GetControlFrameHeaderSize() - 3790 length + framer.GetControlFrameHeaderSize() -
3795 (IsSpdy4() ? sizeof(kV4FrameData) : sizeof(kV3FrameData)); 3791 (IsSpdy4() ? sizeof(kV4FrameData) : sizeof(kV3FrameData));
3796 string pad('A', pad_length); 3792 string pad(pad_length, 'A');
3797 TestSpdyVisitor visitor(spdy_version_); 3793 TestSpdyVisitor visitor(spdy_version_);
3798 3794
3799 if (IsSpdy4()) { 3795 if (IsSpdy4()) {
3800 visitor.SimulateInFramer(kV4FrameData, sizeof(kV4FrameData)); 3796 visitor.SimulateInFramer(kV4FrameData, sizeof(kV4FrameData));
3801 } else { 3797 } else {
3802 visitor.SimulateInFramer(kV3FrameData, sizeof(kV3FrameData)); 3798 visitor.SimulateInFramer(kV3FrameData, sizeof(kV3FrameData));
3803 } 3799 }
3804 visitor.SimulateInFramer( 3800 visitor.SimulateInFramer(
3805 reinterpret_cast<const unsigned char*>(pad.c_str()), 3801 reinterpret_cast<const unsigned char*>(pad.c_str()),
3806 pad.length()); 3802 pad.length());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
3886 EXPECT_EQ(3, visitor.setting_count_); 3882 EXPECT_EQ(3, visitor.setting_count_);
3887 if (spdy_version_ > SPDY3) { 3883 if (spdy_version_ > SPDY3) {
3888 EXPECT_EQ(1, visitor.settings_ack_sent_); 3884 EXPECT_EQ(1, visitor.settings_ack_sent_);
3889 } 3885 }
3890 3886
3891 // Read data in small chunks. 3887 // Read data in small chunks.
3892 size_t framed_data = 0; 3888 size_t framed_data = 0;
3893 size_t unframed_data = control_frame->size(); 3889 size_t unframed_data = control_frame->size();
3894 size_t kReadChunkSize = 5; // Read five bytes at a time. 3890 size_t kReadChunkSize = 5; // Read five bytes at a time.
3895 while (unframed_data > 0) { 3891 while (unframed_data > 0) {
3896 size_t to_read = min(kReadChunkSize, unframed_data); 3892 size_t to_read = std::min(kReadChunkSize, unframed_data);
3897 visitor.SimulateInFramer( 3893 visitor.SimulateInFramer(
3898 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data), 3894 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data),
3899 to_read); 3895 to_read);
3900 unframed_data -= to_read; 3896 unframed_data -= to_read;
3901 framed_data += to_read; 3897 framed_data += to_read;
3902 } 3898 }
3903 EXPECT_EQ(0, visitor.error_count_); 3899 EXPECT_EQ(0, visitor.error_count_);
3904 EXPECT_EQ(3 * 2, visitor.setting_count_); 3900 EXPECT_EQ(3 * 2, visitor.setting_count_);
3905 if (spdy_version_ > SPDY3) { 3901 if (spdy_version_ > SPDY3) {
3906 EXPECT_EQ(2, visitor.settings_ack_sent_); 3902 EXPECT_EQ(2, visitor.settings_ack_sent_);
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
4287 4283
4288 TestSpdyVisitor visitor(spdy_version_); 4284 TestSpdyVisitor visitor(spdy_version_);
4289 visitor.SimulateInFramer(kInput, sizeof(kInput)); 4285 visitor.SimulateInFramer(kInput, sizeof(kInput));
4290 4286
4291 EXPECT_EQ(0, visitor.error_count_); 4287 EXPECT_EQ(0, visitor.error_count_);
4292 EXPECT_EQ(1, visitor.headers_frame_count_); 4288 EXPECT_EQ(1, visitor.headers_frame_count_);
4293 EXPECT_EQ(2, visitor.continuation_count_); 4289 EXPECT_EQ(2, visitor.continuation_count_);
4294 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 4290 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
4295 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 4291 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
4296 4292
4297 EXPECT_THAT(visitor.headers_, ElementsAre( 4293 EXPECT_THAT(visitor.headers_,
4298 Pair("cookie", "foo=bar; baz=bing; "), 4294 testing::ElementsAre(
4299 Pair("name", "value"))); 4295 testing::Pair("cookie", "foo=bar; baz=bing; "),
4296 testing::Pair("name", "value")));
4300 } 4297 }
4301 4298
4302 TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) { 4299 TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) {
4303 if (spdy_version_ <= SPDY3) { 4300 if (spdy_version_ <= SPDY3) {
4304 return; 4301 return;
4305 } 4302 }
4306 4303
4307 const unsigned char kInput[] = { 4304 const unsigned char kInput[] = {
4308 0x00, 0x00, 0x10, 0x01, 0x01, // HEADERS: FIN 4305 0x00, 0x00, 0x10, 0x01, 0x01, // HEADERS: FIN
4309 0x00, 0x00, 0x00, 0x01, // Stream 1 4306 0x00, 0x00, 0x00, 0x01, // Stream 1
(...skipping 23 matching lines...) Expand all
4333 TestSpdyVisitor visitor(spdy_version_); 4330 TestSpdyVisitor visitor(spdy_version_);
4334 visitor.SimulateInFramer(kInput, sizeof(kInput)); 4331 visitor.SimulateInFramer(kInput, sizeof(kInput));
4335 4332
4336 EXPECT_EQ(0, visitor.error_count_); 4333 EXPECT_EQ(0, visitor.error_count_);
4337 EXPECT_EQ(1, visitor.headers_frame_count_); 4334 EXPECT_EQ(1, visitor.headers_frame_count_);
4338 EXPECT_EQ(2, visitor.continuation_count_); 4335 EXPECT_EQ(2, visitor.continuation_count_);
4339 EXPECT_EQ(1, visitor.fin_flag_count_); 4336 EXPECT_EQ(1, visitor.fin_flag_count_);
4340 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 4337 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
4341 EXPECT_EQ(1, visitor.zero_length_data_frame_count_); 4338 EXPECT_EQ(1, visitor.zero_length_data_frame_count_);
4342 4339
4343 EXPECT_THAT(visitor.headers_, ElementsAre( 4340 EXPECT_THAT(visitor.headers_,
4344 Pair("cookie", "foo=bar; baz=bing; "), 4341 testing::ElementsAre(
4345 Pair("name", "value"))); 4342 testing::Pair("cookie", "foo=bar; baz=bing; "),
4343 testing::Pair("name", "value")));
4346 } 4344 }
4347 4345
4348 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { 4346 TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) {
4349 if (spdy_version_ <= SPDY3) { 4347 if (spdy_version_ <= SPDY3) {
4350 return; 4348 return;
4351 } 4349 }
4352 4350
4353 const unsigned char kInput[] = { 4351 const unsigned char kInput[] = {
4354 0x00, 0x00, 0x17, 0x05, // PUSH_PROMISE 4352 0x00, 0x00, 0x17, 0x05, // PUSH_PROMISE
4355 0x08, 0x00, 0x00, 0x00, // PADDED 4353 0x08, 0x00, 0x00, 0x00, // PADDED
(...skipping 26 matching lines...) Expand all
4382 TestSpdyVisitor visitor(spdy_version_); 4380 TestSpdyVisitor visitor(spdy_version_);
4383 visitor.SimulateInFramer(kInput, sizeof(kInput)); 4381 visitor.SimulateInFramer(kInput, sizeof(kInput));
4384 4382
4385 EXPECT_EQ(0, visitor.error_count_); 4383 EXPECT_EQ(0, visitor.error_count_);
4386 EXPECT_EQ(1u, visitor.last_push_promise_stream_); 4384 EXPECT_EQ(1u, visitor.last_push_promise_stream_);
4387 EXPECT_EQ(42u, visitor.last_push_promise_promised_stream_); 4385 EXPECT_EQ(42u, visitor.last_push_promise_promised_stream_);
4388 EXPECT_EQ(2, visitor.continuation_count_); 4386 EXPECT_EQ(2, visitor.continuation_count_);
4389 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 4387 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
4390 EXPECT_EQ(0, visitor.zero_length_data_frame_count_); 4388 EXPECT_EQ(0, visitor.zero_length_data_frame_count_);
4391 4389
4392 EXPECT_THAT(visitor.headers_, ElementsAre( 4390 EXPECT_THAT(visitor.headers_,
4393 Pair("cookie", "foo=bar; baz=bing; "), 4391 testing::ElementsAre(
4394 Pair("name", "value"))); 4392 testing::Pair("cookie", "foo=bar; baz=bing; "),
4393 testing::Pair("name", "value")));
4395 } 4394 }
4396 4395
4397 TEST_P(SpdyFramerTest, ReadContinuationWithWrongStreamId) { 4396 TEST_P(SpdyFramerTest, ReadContinuationWithWrongStreamId) {
4398 if (spdy_version_ <= SPDY3) { 4397 if (spdy_version_ <= SPDY3) {
4399 return; 4398 return;
4400 } 4399 }
4401 4400
4402 const unsigned char kInput[] = { 4401 const unsigned char kInput[] = {
4403 0x00, 0x00, 0x10, 0x01, 0x00, // HEADERS 4402 0x00, 0x00, 0x10, 0x01, 0x00, // HEADERS
4404 0x00, 0x00, 0x00, 0x01, // Stream 1 4403 0x00, 0x00, 0x00, 0x01, // Stream 1
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
4563 }; 4562 };
4564 4563
4565 TestSpdyVisitor visitor(spdy_version_); 4564 TestSpdyVisitor visitor(spdy_version_);
4566 visitor.SimulateInFramer(kInput, sizeof(kInput)); 4565 visitor.SimulateInFramer(kInput, sizeof(kInput));
4567 4566
4568 // TODO(jgraettinger): Verify END_SEGMENT when support is added. 4567 // TODO(jgraettinger): Verify END_SEGMENT when support is added.
4569 EXPECT_EQ(0, visitor.error_count_); 4568 EXPECT_EQ(0, visitor.error_count_);
4570 EXPECT_EQ(1, visitor.headers_frame_count_); 4569 EXPECT_EQ(1, visitor.headers_frame_count_);
4571 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_); 4570 EXPECT_EQ(1, visitor.zero_length_control_frame_header_data_count_);
4572 4571
4573 EXPECT_THAT(visitor.headers_, ElementsAre( 4572 EXPECT_THAT(visitor.headers_,
4574 Pair("cookie", "foo=bar"))); 4573 testing::ElementsAre(testing::Pair("cookie", "foo=bar")));
4575 } 4574 }
4576 4575
4577 TEST_P(SpdyFramerTest, ReadGarbage) { 4576 TEST_P(SpdyFramerTest, ReadGarbage) {
4578 SpdyFramer framer(spdy_version_); 4577 SpdyFramer framer(spdy_version_);
4579 unsigned char garbage_frame[256]; 4578 unsigned char garbage_frame[256];
4580 memset(garbage_frame, ~0, sizeof(garbage_frame)); 4579 memset(garbage_frame, ~0, sizeof(garbage_frame));
4581 TestSpdyVisitor visitor(spdy_version_); 4580 TestSpdyVisitor visitor(spdy_version_);
4582 visitor.use_compression_ = false; 4581 visitor.use_compression_ = false;
4583 visitor.SimulateInFramer(garbage_frame, sizeof(garbage_frame)); 4582 visitor.SimulateInFramer(garbage_frame, sizeof(garbage_frame));
4584 EXPECT_EQ(1, visitor.error_count_); 4583 EXPECT_EQ(1, visitor.error_count_);
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
4853 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code()) 4852 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, framer.error_code())
4854 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4853 << SpdyFramer::ErrorCodeToString(framer.error_code());
4855 } 4854 }
4856 } 4855 }
4857 4856
4858 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) { 4857 TEST_P(SpdyFramerTest, DataFrameFlagsV2V3) {
4859 if (spdy_version_ > SPDY3) { 4858 if (spdy_version_ > SPDY3) {
4860 return; 4859 return;
4861 } 4860 }
4862 4861
4863 for (int flags = 0; flags < 256; ++flags) { 4862 uint8 flags = 0;
4863 do {
4864 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4864 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4865 4865
4866 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4866 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4867 SpdyFramer framer(spdy_version_); 4867 SpdyFramer framer(spdy_version_);
4868 framer.set_visitor(&visitor); 4868 framer.set_visitor(&visitor);
4869 4869
4870 SpdyDataIR data_ir(1, StringPiece("hello", 5)); 4870 SpdyDataIR data_ir(1, StringPiece("hello", 5));
4871 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); 4871 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir));
4872 SetFrameFlags(frame.get(), flags, spdy_version_); 4872 SetFrameFlags(frame.get(), flags, spdy_version_);
4873 4873
(...skipping 11 matching lines...) Expand all
4885 if (flags & ~DATA_FLAG_FIN) { 4885 if (flags & ~DATA_FLAG_FIN) {
4886 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 4886 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4887 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, 4887 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS,
4888 framer.error_code()) 4888 framer.error_code())
4889 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4889 << SpdyFramer::ErrorCodeToString(framer.error_code());
4890 } else { 4890 } else {
4891 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4891 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4892 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4892 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4893 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4893 << SpdyFramer::ErrorCodeToString(framer.error_code());
4894 } 4894 }
4895 } 4895 } while (++flags != 0);
4896 } 4896 }
4897 4897
4898 TEST_P(SpdyFramerTest, DataFrameFlagsV4) { 4898 TEST_P(SpdyFramerTest, DataFrameFlagsV4) {
4899 if (spdy_version_ <= SPDY3) { 4899 if (spdy_version_ <= SPDY3) {
4900 return; 4900 return;
4901 } 4901 }
4902 4902
4903 uint8 valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT | 4903 uint8 valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT |
4904 DATA_FLAG_PADDED; 4904 DATA_FLAG_PADDED;
4905 4905
4906 for (int flags = 0; flags < 256; ++flags) { 4906 uint8 flags = 0;
4907 do {
4907 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4908 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4908 4909
4909 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4910 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4910 SpdyFramer framer(spdy_version_); 4911 SpdyFramer framer(spdy_version_);
4911 framer.set_visitor(&visitor); 4912 framer.set_visitor(&visitor);
4912 4913
4913 SpdyDataIR data_ir(1, StringPiece("hello", 5)); 4914 SpdyDataIR data_ir(1, StringPiece("hello", 5));
4914 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); 4915 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir));
4915 SetFrameFlags(frame.get(), flags, spdy_version_); 4916 SetFrameFlags(frame.get(), flags, spdy_version_);
4916 4917
(...skipping 16 matching lines...) Expand all
4933 if ((flags & ~valid_data_flags) || (flags & DATA_FLAG_PADDED)) { 4934 if ((flags & ~valid_data_flags) || (flags & DATA_FLAG_PADDED)) {
4934 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 4935 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4935 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS, 4936 EXPECT_EQ(SpdyFramer::SPDY_INVALID_DATA_FRAME_FLAGS,
4936 framer.error_code()) 4937 framer.error_code())
4937 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4938 << SpdyFramer::ErrorCodeToString(framer.error_code());
4938 } else { 4939 } else {
4939 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4940 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4940 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4941 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4941 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4942 << SpdyFramer::ErrorCodeToString(framer.error_code());
4942 } 4943 }
4943 } 4944 } while (++flags != 0);
4944 } 4945 }
4945 4946
4946 TEST_P(SpdyFramerTest, SynStreamFrameFlags) { 4947 TEST_P(SpdyFramerTest, SynStreamFrameFlags) {
4947 if (!IsSpdy2() && !IsSpdy3()) { 4948 if (!IsSpdy2() && !IsSpdy3()) {
4948 // SYN_STREAM not supported in SPDY>3 4949 // SYN_STREAM not supported in SPDY>3
4949 return; 4950 return;
4950 } 4951 }
4951 for (int flags = 0; flags < 256; ++flags) { 4952 uint8 flags = 0;
4953 do {
4952 SCOPED_TRACE(testing::Message() << "Flags " << flags); 4954 SCOPED_TRACE(testing::Message() << "Flags " << flags);
4953 4955
4954 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4956 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4955 testing::StrictMock<test::MockDebugVisitor> debug_visitor; 4957 testing::StrictMock<test::MockDebugVisitor> debug_visitor;
4956 SpdyFramer framer(spdy_version_); 4958 SpdyFramer framer(spdy_version_);
4957 framer.set_visitor(&visitor); 4959 framer.set_visitor(&visitor);
4958 framer.set_debug_visitor(&debug_visitor); 4960 framer.set_debug_visitor(&debug_visitor);
4959 4961
4960 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(8, SYN_STREAM, _, _)); 4962 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(8, SYN_STREAM, _, _));
4961 4963
4962 SpdySynStreamIR syn_stream(8); 4964 SpdySynStreamIR syn_stream(8);
4963 syn_stream.set_associated_to_stream_id(3); 4965 syn_stream.set_associated_to_stream_id(3);
4964 syn_stream.set_priority(1); 4966 syn_stream.set_priority(1);
4965 syn_stream.SetHeader("foo", "bar"); 4967 syn_stream.SetHeader("foo", "bar");
4966 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); 4968 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream));
4967 int set_flags = flags; 4969 SetFrameFlags(frame.get(), flags, spdy_version_);
4968 SetFrameFlags(frame.get(), set_flags, spdy_version_);
4969 4970
4970 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { 4971 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
4971 EXPECT_CALL(visitor, OnError(_)); 4972 EXPECT_CALL(visitor, OnError(_));
4972 } else { 4973 } else {
4973 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _)); 4974 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _));
4974 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, flags & CONTROL_FLAG_FIN, 4975 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, flags & CONTROL_FLAG_FIN,
4975 flags & CONTROL_FLAG_UNIDIRECTIONAL)); 4976 flags & CONTROL_FLAG_UNIDIRECTIONAL));
4976 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _)) 4977 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _))
4977 .WillRepeatedly(testing::Return(true)); 4978 .WillRepeatedly(testing::Return(true));
4978 if (flags & DATA_FLAG_FIN) { 4979 if (flags & DATA_FLAG_FIN) {
4979 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); 4980 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
4980 } else { 4981 } else {
4981 // Do not close the stream if we are expecting a CONTINUATION frame. 4982 // Do not close the stream if we are expecting a CONTINUATION frame.
4982 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)).Times(0); 4983 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)).Times(0);
4983 } 4984 }
4984 } 4985 }
4985 4986
4986 framer.ProcessInput(frame->data(), frame->size()); 4987 framer.ProcessInput(frame->data(), frame->size());
4987 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { 4988 if (flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
4988 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 4989 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4989 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 4990 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
4990 framer.error_code()) 4991 framer.error_code())
4991 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4992 << SpdyFramer::ErrorCodeToString(framer.error_code());
4992 } else { 4993 } else {
4993 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4994 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4994 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4995 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4995 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4996 << SpdyFramer::ErrorCodeToString(framer.error_code());
4996 } 4997 }
4997 } 4998 } while (++flags != 0);
4998 } 4999 }
4999 5000
5000 TEST_P(SpdyFramerTest, SynReplyFrameFlags) { 5001 TEST_P(SpdyFramerTest, SynReplyFrameFlags) {
5001 if (!IsSpdy2() && !IsSpdy3()) { 5002 if (!IsSpdy2() && !IsSpdy3()) {
5002 // SYN_REPLY not supported in SPDY>3 5003 // SYN_REPLY not supported in SPDY>3
5003 return; 5004 return;
5004 } 5005 }
5005 for (int flags = 0; flags < 256; ++flags) { 5006 uint8 flags = 0;
5007 do {
5006 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5008 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5007 5009
5008 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5010 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5009 SpdyFramer framer(spdy_version_); 5011 SpdyFramer framer(spdy_version_);
5010 framer.set_visitor(&visitor); 5012 framer.set_visitor(&visitor);
5011 5013
5012 SpdySynReplyIR syn_reply(37); 5014 SpdySynReplyIR syn_reply(37);
5013 syn_reply.SetHeader("foo", "bar"); 5015 syn_reply.SetHeader("foo", "bar");
5014 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply)); 5016 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply));
5015 SetFrameFlags(frame.get(), flags, spdy_version_); 5017 SetFrameFlags(frame.get(), flags, spdy_version_);
(...skipping 13 matching lines...) Expand all
5029 if (flags & ~CONTROL_FLAG_FIN) { 5031 if (flags & ~CONTROL_FLAG_FIN) {
5030 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5032 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5031 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5033 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5032 framer.error_code()) 5034 framer.error_code())
5033 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5035 << SpdyFramer::ErrorCodeToString(framer.error_code());
5034 } else { 5036 } else {
5035 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5037 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5036 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5038 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5037 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5039 << SpdyFramer::ErrorCodeToString(framer.error_code());
5038 } 5040 }
5039 } 5041 } while (++flags != 0);
5040 } 5042 }
5041 5043
5042 TEST_P(SpdyFramerTest, RstStreamFrameFlags) { 5044 TEST_P(SpdyFramerTest, RstStreamFrameFlags) {
5043 for (int flags = 0; flags < 256; ++flags) { 5045 uint8 flags = 0;
5046 do {
5044 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5047 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5045 5048
5046 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5049 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5047 SpdyFramer framer(spdy_version_); 5050 SpdyFramer framer(spdy_version_);
5048 framer.set_visitor(&visitor); 5051 framer.set_visitor(&visitor);
5049 5052
5050 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL, ""); 5053 SpdyRstStreamIR rst_stream(13, RST_STREAM_CANCEL, "");
5051 scoped_ptr<SpdyFrame> frame(framer.SerializeRstStream(rst_stream)); 5054 scoped_ptr<SpdyFrame> frame(framer.SerializeRstStream(rst_stream));
5052 SetFrameFlags(frame.get(), flags, spdy_version_); 5055 SetFrameFlags(frame.get(), flags, spdy_version_);
5053 5056
5054 if (flags != 0) { 5057 if (flags != 0) {
5055 EXPECT_CALL(visitor, OnError(_)); 5058 EXPECT_CALL(visitor, OnError(_));
5056 } else { 5059 } else {
5057 EXPECT_CALL(visitor, OnRstStream(13, RST_STREAM_CANCEL)); 5060 EXPECT_CALL(visitor, OnRstStream(13, RST_STREAM_CANCEL));
5058 } 5061 }
5059 5062
5060 framer.ProcessInput(frame->data(), frame->size()); 5063 framer.ProcessInput(frame->data(), frame->size());
5061 if (flags != 0) { 5064 if (flags != 0) {
5062 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5065 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5063 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5066 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5064 framer.error_code()) 5067 framer.error_code())
5065 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5068 << SpdyFramer::ErrorCodeToString(framer.error_code());
5066 } else { 5069 } else {
5067 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5070 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5068 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5071 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5069 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5072 << SpdyFramer::ErrorCodeToString(framer.error_code());
5070 } 5073 }
5071 } 5074 } while (++flags != 0);
5072 } 5075 }
5073 5076
5074 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) { 5077 TEST_P(SpdyFramerTest, SettingsFrameFlagsOldFormat) {
5075 if (spdy_version_ > SPDY3) { return; } 5078 if (spdy_version_ > SPDY3) { return; }
5076 for (int flags = 0; flags < 256; ++flags) { 5079 uint8 flags = 0;
5080 do {
5077 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5081 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5078 5082
5079 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5083 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5080 SpdyFramer framer(spdy_version_); 5084 SpdyFramer framer(spdy_version_);
5081 framer.set_visitor(&visitor); 5085 framer.set_visitor(&visitor);
5082 5086
5083 SpdySettingsIR settings_ir; 5087 SpdySettingsIR settings_ir;
5084 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH, 5088 settings_ir.AddSetting(SETTINGS_UPLOAD_BANDWIDTH,
5085 false, 5089 false,
5086 false, 5090 false,
(...skipping 15 matching lines...) Expand all
5102 if (flags & ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) { 5106 if (flags & ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) {
5103 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5107 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5104 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5108 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5105 framer.error_code()) 5109 framer.error_code())
5106 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5110 << SpdyFramer::ErrorCodeToString(framer.error_code());
5107 } else { 5111 } else {
5108 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5112 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5109 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5113 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5110 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5114 << SpdyFramer::ErrorCodeToString(framer.error_code());
5111 } 5115 }
5112 } 5116 } while (++flags != 0);
5113 } 5117 }
5114 5118
5115 TEST_P(SpdyFramerTest, SettingsFrameFlags) { 5119 TEST_P(SpdyFramerTest, SettingsFrameFlags) {
5116 if (spdy_version_ <= SPDY3) { return; } 5120 if (spdy_version_ <= SPDY3) { return; }
5117 for (int flags = 0; flags < 256; ++flags) { 5121 uint8 flags = 0;
5122 do {
5118 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5123 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5119 5124
5120 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5125 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5121 SpdyFramer framer(spdy_version_); 5126 SpdyFramer framer(spdy_version_);
5122 framer.set_visitor(&visitor); 5127 framer.set_visitor(&visitor);
5123 5128
5124 SpdySettingsIR settings_ir; 5129 SpdySettingsIR settings_ir;
5125 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16); 5130 settings_ir.AddSetting(SETTINGS_INITIAL_WINDOW_SIZE, 0, 0, 16);
5126 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir)); 5131 scoped_ptr<SpdyFrame> frame(framer.SerializeSettings(settings_ir));
5127 SetFrameFlags(frame.get(), flags, spdy_version_); 5132 SetFrameFlags(frame.get(), flags, spdy_version_);
(...skipping 16 matching lines...) Expand all
5144 // The frame is invalid because ACK frames should have no payload. 5149 // The frame is invalid because ACK frames should have no payload.
5145 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5150 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5146 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, 5151 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5147 framer.error_code()) 5152 framer.error_code())
5148 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5153 << SpdyFramer::ErrorCodeToString(framer.error_code());
5149 } else { 5154 } else {
5150 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5155 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5151 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5156 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5152 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5157 << SpdyFramer::ErrorCodeToString(framer.error_code());
5153 } 5158 }
5154 } 5159 } while (++flags != 0);
5155 } 5160 }
5156 5161
5157 TEST_P(SpdyFramerTest, GoawayFrameFlags) { 5162 TEST_P(SpdyFramerTest, GoawayFrameFlags) {
5158 for (int flags = 0; flags < 256; ++flags) { 5163 uint8 flags = 0;
5164 do {
5159 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5165 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5160 5166
5161 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5167 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5162 SpdyFramer framer(spdy_version_); 5168 SpdyFramer framer(spdy_version_);
5163 framer.set_visitor(&visitor); 5169 framer.set_visitor(&visitor);
5164 5170
5165 SpdyGoAwayIR goaway_ir(97, GOAWAY_OK, "test"); 5171 SpdyGoAwayIR goaway_ir(97, GOAWAY_OK, "test");
5166 scoped_ptr<SpdyFrame> frame(framer.SerializeGoAway(goaway_ir)); 5172 scoped_ptr<SpdyFrame> frame(framer.SerializeGoAway(goaway_ir));
5167 SetFrameFlags(frame.get(), flags, spdy_version_); 5173 SetFrameFlags(frame.get(), flags, spdy_version_);
5168 5174
5169 if (flags != 0) { 5175 if (flags != 0) {
5170 EXPECT_CALL(visitor, OnError(_)); 5176 EXPECT_CALL(visitor, OnError(_));
5171 } else { 5177 } else {
5172 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK)); 5178 EXPECT_CALL(visitor, OnGoAway(97, GOAWAY_OK));
5173 } 5179 }
5174 5180
5175 framer.ProcessInput(frame->data(), frame->size()); 5181 framer.ProcessInput(frame->data(), frame->size());
5176 if (flags != 0) { 5182 if (flags != 0) {
5177 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5183 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5178 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5184 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5179 framer.error_code()) 5185 framer.error_code())
5180 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5186 << SpdyFramer::ErrorCodeToString(framer.error_code());
5181 } else { 5187 } else {
5182 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5188 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5183 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5189 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5184 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5190 << SpdyFramer::ErrorCodeToString(framer.error_code());
5185 } 5191 }
5186 } 5192 } while (++flags != 0);
5187 } 5193 }
5188 5194
5189 TEST_P(SpdyFramerTest, HeadersFrameFlags) { 5195 TEST_P(SpdyFramerTest, HeadersFrameFlags) {
5190 for (int flags = 0; flags < 256; ++flags) { 5196 uint8 flags = 0;
5197 do {
5191 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5198 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5192 5199
5193 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5200 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5194 SpdyFramer framer(spdy_version_); 5201 SpdyFramer framer(spdy_version_);
5195 framer.set_visitor(&visitor); 5202 framer.set_visitor(&visitor);
5196 5203
5197 SpdyHeadersIR headers_ir(57); 5204 SpdyHeadersIR headers_ir(57);
5198 if (IsSpdy4() && (flags & HEADERS_FLAG_PRIORITY)) { 5205 if (IsSpdy4() && (flags & HEADERS_FLAG_PRIORITY)) {
5199 headers_ir.set_priority(3); 5206 headers_ir.set_priority(3);
5200 headers_ir.set_has_priority(true); 5207 headers_ir.set_has_priority(true);
5201 } 5208 }
5202 headers_ir.SetHeader("foo", "bar"); 5209 headers_ir.SetHeader("foo", "bar");
5203 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir)); 5210 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir));
5204 int set_flags = flags; 5211 uint8 set_flags = flags;
5205 if (IsSpdy4()) { 5212 if (IsSpdy4()) {
5206 // TODO(jgraettinger): Add padding to SpdyHeadersIR, 5213 // TODO(jgraettinger): Add padding to SpdyHeadersIR,
5207 // and implement framing. 5214 // and implement framing.
5208 set_flags &= ~HEADERS_FLAG_PADDED; 5215 set_flags &= ~HEADERS_FLAG_PADDED;
5209 } 5216 }
5210 SetFrameFlags(frame.get(), set_flags, spdy_version_); 5217 SetFrameFlags(frame.get(), set_flags, spdy_version_);
5211 5218
5212 if (!IsSpdy4() && flags & ~CONTROL_FLAG_FIN) { 5219 if (!IsSpdy4() && flags & ~CONTROL_FLAG_FIN) {
5213 EXPECT_CALL(visitor, OnError(_)); 5220 EXPECT_CALL(visitor, OnError(_));
5214 } else if (IsSpdy4() && flags & ~(CONTROL_FLAG_FIN | 5221 } else if (IsSpdy4() && flags & ~(CONTROL_FLAG_FIN |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
5259 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5266 << SpdyFramer::ErrorCodeToString(framer.error_code());
5260 } else if (IsSpdy4() && ~(flags & HEADERS_FLAG_END_HEADERS)) { 5267 } else if (IsSpdy4() && ~(flags & HEADERS_FLAG_END_HEADERS)) {
5261 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5268 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5262 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5269 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5263 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5270 << SpdyFramer::ErrorCodeToString(framer.error_code());
5264 } else { 5271 } else {
5265 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5272 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5266 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5273 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5267 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5274 << SpdyFramer::ErrorCodeToString(framer.error_code());
5268 } 5275 }
5269 } 5276 } while (++flags != 0);
5270 } 5277 }
5271 5278
5272 TEST_P(SpdyFramerTest, PingFrameFlags) { 5279 TEST_P(SpdyFramerTest, PingFrameFlags) {
5273 for (int flags = 0; flags < 256; ++flags) { 5280 uint8 flags = 0;
5281 do {
5274 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5282 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5275 5283
5276 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5284 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5277 SpdyFramer framer(spdy_version_); 5285 SpdyFramer framer(spdy_version_);
5278 framer.set_visitor(&visitor); 5286 framer.set_visitor(&visitor);
5279 5287
5280 scoped_ptr<SpdyFrame> frame(framer.SerializePing(SpdyPingIR(42))); 5288 scoped_ptr<SpdyFrame> frame(framer.SerializePing(SpdyPingIR(42)));
5281 SetFrameFlags(frame.get(), flags, spdy_version_); 5289 SetFrameFlags(frame.get(), flags, spdy_version_);
5282 5290
5283 if (spdy_version_ > SPDY3 && 5291 if (spdy_version_ > SPDY3 &&
(...skipping 10 matching lines...) Expand all
5294 flags == 0) { 5302 flags == 0) {
5295 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5303 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5296 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5304 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5297 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5305 << SpdyFramer::ErrorCodeToString(framer.error_code());
5298 } else { 5306 } else {
5299 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5307 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5300 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5308 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5301 framer.error_code()) 5309 framer.error_code())
5302 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5310 << SpdyFramer::ErrorCodeToString(framer.error_code());
5303 } 5311 }
5304 } 5312 } while (++flags != 0);
5305 } 5313 }
5306 5314
5307 TEST_P(SpdyFramerTest, WindowUpdateFrameFlags) { 5315 TEST_P(SpdyFramerTest, WindowUpdateFrameFlags) {
5308 for (int flags = 0; flags < 256; ++flags) { 5316 uint8 flags = 0;
5317 do {
5309 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5318 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5310 5319
5311 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5320 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5312 SpdyFramer framer(spdy_version_); 5321 SpdyFramer framer(spdy_version_);
5313 framer.set_visitor(&visitor); 5322 framer.set_visitor(&visitor);
5314 5323
5315 scoped_ptr<SpdyFrame> frame(framer.SerializeWindowUpdate( 5324 scoped_ptr<SpdyFrame> frame(framer.SerializeWindowUpdate(
5316 SpdyWindowUpdateIR(4, 1024))); 5325 SpdyWindowUpdateIR(4, 1024)));
5317 SetFrameFlags(frame.get(), flags, spdy_version_); 5326 SetFrameFlags(frame.get(), flags, spdy_version_);
5318 5327
5319 if (flags != 0) { 5328 if (flags != 0) {
5320 EXPECT_CALL(visitor, OnError(_)); 5329 EXPECT_CALL(visitor, OnError(_));
5321 } else { 5330 } else {
5322 EXPECT_CALL(visitor, OnWindowUpdate(4, 1024)); 5331 EXPECT_CALL(visitor, OnWindowUpdate(4, 1024));
5323 } 5332 }
5324 5333
5325 framer.ProcessInput(frame->data(), frame->size()); 5334 framer.ProcessInput(frame->data(), frame->size());
5326 if (flags != 0) { 5335 if (flags != 0) {
5327 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5336 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5328 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5337 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5329 framer.error_code()) 5338 framer.error_code())
5330 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5339 << SpdyFramer::ErrorCodeToString(framer.error_code());
5331 } else { 5340 } else {
5332 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5341 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5333 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5342 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5334 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5343 << SpdyFramer::ErrorCodeToString(framer.error_code());
5335 } 5344 }
5336 } 5345 } while (++flags != 0);
5337 } 5346 }
5338 5347
5339 TEST_P(SpdyFramerTest, PushPromiseFrameFlags) { 5348 TEST_P(SpdyFramerTest, PushPromiseFrameFlags) {
5340 if (spdy_version_ <= SPDY3) { 5349 if (spdy_version_ <= SPDY3) {
5341 return; 5350 return;
5342 } 5351 }
5343 5352
5344 for (int flags = 0; flags < 256; ++flags) { 5353 uint8 flags = 0;
5354 do {
5345 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5355 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5346 5356
5347 testing::StrictMock<net::test::MockSpdyFramerVisitor> visitor; 5357 testing::StrictMock<net::test::MockSpdyFramerVisitor> visitor;
5348 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor; 5358 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor;
5349 SpdyFramer framer(spdy_version_); 5359 SpdyFramer framer(spdy_version_);
5350 framer.set_visitor(&visitor); 5360 framer.set_visitor(&visitor);
5351 framer.set_debug_visitor(&debug_visitor); 5361 framer.set_debug_visitor(&debug_visitor);
5352 5362
5353 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, PUSH_PROMISE, _, _)); 5363 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, PUSH_PROMISE, _, _));
5354 5364
5355 SpdyPushPromiseIR push_promise(42, 57); 5365 SpdyPushPromiseIR push_promise(42, 57);
5356 push_promise.SetHeader("foo", "bar"); 5366 push_promise.SetHeader("foo", "bar");
5357 scoped_ptr<SpdySerializedFrame> frame( 5367 scoped_ptr<SpdySerializedFrame> frame(
5358 framer.SerializePushPromise(push_promise)); 5368 framer.SerializePushPromise(push_promise));
5359 // TODO(jgraettinger): Add padding to SpdyPushPromiseIR, 5369 // TODO(jgraettinger): Add padding to SpdyPushPromiseIR,
5360 // and implement framing. 5370 // and implement framing.
5361 int set_flags = flags & ~HEADERS_FLAG_PADDED; 5371 SetFrameFlags(frame.get(), flags & ~HEADERS_FLAG_PADDED, spdy_version_);
5362 SetFrameFlags(frame.get(), set_flags, spdy_version_);
5363 5372
5364 if (flags & ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED)) { 5373 if (flags & ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED)) {
5365 EXPECT_CALL(visitor, OnError(_)); 5374 EXPECT_CALL(visitor, OnError(_));
5366 } else { 5375 } else {
5367 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, PUSH_PROMISE, _)); 5376 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, PUSH_PROMISE, _));
5368 EXPECT_CALL(visitor, OnPushPromise(42, 57, 5377 EXPECT_CALL(visitor, OnPushPromise(42, 57,
5369 flags & PUSH_PROMISE_FLAG_END_PUSH_PROMISE)); 5378 flags & PUSH_PROMISE_FLAG_END_PUSH_PROMISE));
5370 EXPECT_CALL(visitor, OnControlFrameHeaderData(42, _, _)) 5379 EXPECT_CALL(visitor, OnControlFrameHeaderData(42, _, _))
5371 .WillRepeatedly(testing::Return(true)); 5380 .WillRepeatedly(testing::Return(true));
5372 } 5381 }
5373 5382
5374 framer.ProcessInput(frame->data(), frame->size()); 5383 framer.ProcessInput(frame->data(), frame->size());
5375 if (flags & ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED)) { 5384 if (flags & ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED)) {
5376 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5385 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5377 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5386 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5378 framer.error_code()) 5387 framer.error_code())
5379 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5388 << SpdyFramer::ErrorCodeToString(framer.error_code());
5380 } else { 5389 } else {
5381 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5390 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5382 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5391 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5383 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5392 << SpdyFramer::ErrorCodeToString(framer.error_code());
5384 } 5393 }
5385 } 5394 } while (++flags != 0);
5386 } 5395 }
5387 5396
5388 TEST_P(SpdyFramerTest, ContinuationFrameFlags) { 5397 TEST_P(SpdyFramerTest, ContinuationFrameFlags) {
5389 if (spdy_version_ <= SPDY3) { 5398 if (spdy_version_ <= SPDY3) {
5390 return; 5399 return;
5391 } 5400 }
5392 5401
5393 for (int flags = 0; flags < 256; ++flags) { 5402 uint8 flags = 0;
5403 do {
5394 SCOPED_TRACE(testing::Message() << "Flags " << flags); 5404 SCOPED_TRACE(testing::Message() << "Flags " << flags);
5395 5405
5396 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5406 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5397 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor; 5407 testing::StrictMock<net::test::MockDebugVisitor> debug_visitor;
5398 SpdyFramer framer(spdy_version_); 5408 SpdyFramer framer(spdy_version_);
5399 framer.set_visitor(&visitor); 5409 framer.set_visitor(&visitor);
5400 framer.set_debug_visitor(&debug_visitor); 5410 framer.set_debug_visitor(&debug_visitor);
5401 5411
5402 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _)); 5412 EXPECT_CALL(debug_visitor, OnSendCompressedFrame(42, HEADERS, _, _));
5403 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, HEADERS, _)); 5413 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(42, HEADERS, _));
(...skipping 27 matching lines...) Expand all
5431 if (flags & ~(HEADERS_FLAG_END_HEADERS)) { 5441 if (flags & ~(HEADERS_FLAG_END_HEADERS)) {
5432 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5442 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5433 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS, 5443 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME_FLAGS,
5434 framer.error_code()) 5444 framer.error_code())
5435 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5445 << SpdyFramer::ErrorCodeToString(framer.error_code());
5436 } else { 5446 } else {
5437 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5447 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5438 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5448 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5439 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5449 << SpdyFramer::ErrorCodeToString(framer.error_code());
5440 } 5450 }
5441 } 5451 } while (++flags != 0);
5442 } 5452 }
5443 5453
5444 // TODO(mlavan): Add TEST_P(SpdyFramerTest, AltSvcFrameFlags) 5454 // TODO(mlavan): Add TEST_P(SpdyFramerTest, AltSvcFrameFlags)
5445 5455
5446 // TODO(hkhalil): Add TEST_P(SpdyFramerTest, BlockedFrameFlags) 5456 // TODO(hkhalil): Add TEST_P(SpdyFramerTest, BlockedFrameFlags)
5447 5457
5448 TEST_P(SpdyFramerTest, EmptySynStream) { 5458 TEST_P(SpdyFramerTest, EmptySynStream) {
5449 if (!IsSpdy2() && !IsSpdy3()) { 5459 if (!IsSpdy2() && !IsSpdy3()) {
5450 // SYN_STREAM not supported in SPDY>3. 5460 // SYN_STREAM not supported in SPDY>3.
5451 return; 5461 return;
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
5835 5845
5836 scoped_ptr<SpdyFrame> control_frame(framer.SerializeAltSvc(altsvc_ir)); 5846 scoped_ptr<SpdyFrame> control_frame(framer.SerializeAltSvc(altsvc_ir));
5837 TestSpdyVisitor visitor(spdy_version_); 5847 TestSpdyVisitor visitor(spdy_version_);
5838 visitor.use_compression_ = false; 5848 visitor.use_compression_ = false;
5839 5849
5840 // Read data in small chunks. 5850 // Read data in small chunks.
5841 size_t framed_data = 0; 5851 size_t framed_data = 0;
5842 size_t unframed_data = control_frame->size(); 5852 size_t unframed_data = control_frame->size();
5843 size_t kReadChunkSize = 5; // Read five bytes at a time. 5853 size_t kReadChunkSize = 5; // Read five bytes at a time.
5844 while (unframed_data > 0) { 5854 while (unframed_data > 0) {
5845 size_t to_read = min(kReadChunkSize, unframed_data); 5855 size_t to_read = std::min(kReadChunkSize, unframed_data);
5846 visitor.SimulateInFramer( 5856 visitor.SimulateInFramer(
5847 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data), 5857 reinterpret_cast<unsigned char*>(control_frame->data() + framed_data),
5848 to_read); 5858 to_read);
5849 unframed_data -= to_read; 5859 unframed_data -= to_read;
5850 framed_data += to_read; 5860 framed_data += to_read;
5851 } 5861 }
5852 EXPECT_EQ(0, visitor.error_count_); 5862 EXPECT_EQ(0, visitor.error_count_);
5853 EXPECT_EQ(1, visitor.altsvc_count_); 5863 EXPECT_EQ(1, visitor.altsvc_count_);
5854 EXPECT_EQ(20u, visitor.test_altsvc_ir_.max_age()); 5864 EXPECT_EQ(20u, visitor.test_altsvc_ir_.max_age());
5855 EXPECT_EQ(443u, visitor.test_altsvc_ir_.port()); 5865 EXPECT_EQ(443u, visitor.test_altsvc_ir_.port());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
5925 TestSpdyVisitor visitor(spdy_version_); 5935 TestSpdyVisitor visitor(spdy_version_);
5926 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); 5936 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData));
5927 5937
5928 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); 5938 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state());
5929 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, 5939 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5930 visitor.framer_.error_code()) 5940 visitor.framer_.error_code())
5931 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); 5941 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code());
5932 } 5942 }
5933 5943
5934 } // namespace net 5944 } // 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