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

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

Issue 244833003: SPDY tests: Additional headers validation in framer tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Back out header casing & checks. Build fix. 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 | « no previous file | no next file » | 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_framer.h" 15 #include "net/spdy/spdy_framer.h"
15 #include "net/spdy/spdy_protocol.h" 16 #include "net/spdy/spdy_protocol.h"
16 #include "net/spdy/spdy_test_utils.h" 17 #include "net/spdy/spdy_test_utils.h"
17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/platform_test.h" 19 #include "testing/platform_test.h"
19 20
20 using base::StringPiece; 21 using base::StringPiece;
21 using std::string; 22 using std::string;
22 using std::max; 23 using std::max;
23 using std::min; 24 using std::min;
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 size_t len) OVERRIDE { 294 size_t len) OVERRIDE {
294 ++control_frame_header_data_count_; 295 ++control_frame_header_data_count_;
295 CHECK_EQ(header_stream_id_, stream_id); 296 CHECK_EQ(header_stream_id_, stream_id);
296 if (len == 0) { 297 if (len == 0) {
297 ++zero_length_control_frame_header_data_count_; 298 ++zero_length_control_frame_header_data_count_;
298 // Indicates end-of-header-block. 299 // Indicates end-of-header-block.
299 headers_.clear(); 300 headers_.clear();
300 CHECK(header_buffer_valid_); 301 CHECK(header_buffer_valid_);
301 size_t parsed_length = framer_.ParseHeaderBlockInBuffer( 302 size_t parsed_length = framer_.ParseHeaderBlockInBuffer(
302 header_buffer_.get(), header_buffer_length_, &headers_); 303 header_buffer_.get(), header_buffer_length_, &headers_);
303 DCHECK_EQ(header_buffer_length_, parsed_length); 304 LOG_IF(DFATAL, header_buffer_length_ != parsed_length)
305 << "Check failed: header_buffer_length_ == parsed_length "
306 << "(" << header_buffer_length_ << " vs. " << parsed_length << ")";
304 return true; 307 return true;
305 } 308 }
306 const size_t available = header_buffer_size_ - header_buffer_length_; 309 const size_t available = header_buffer_size_ - header_buffer_length_;
307 if (len > available) { 310 if (len > available) {
308 header_buffer_valid_ = false; 311 header_buffer_valid_ = false;
309 return false; 312 return false;
310 } 313 }
311 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); 314 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len);
312 header_buffer_length_ += len; 315 header_buffer_length_ += len;
313 return true; 316 return true;
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 // Header block streaming state: 488 // Header block streaming state:
486 scoped_ptr<char[]> header_buffer_; 489 scoped_ptr<char[]> header_buffer_;
487 size_t header_buffer_length_; 490 size_t header_buffer_length_;
488 size_t header_buffer_size_; 491 size_t header_buffer_size_;
489 SpdyStreamId header_stream_id_; 492 SpdyStreamId header_stream_id_;
490 SpdyFrameType header_control_type_; 493 SpdyFrameType header_control_type_;
491 bool header_buffer_valid_; 494 bool header_buffer_valid_;
492 SpdyHeaderBlock headers_; 495 SpdyHeaderBlock headers_;
493 }; 496 };
494 497
495 // Retrieves serialized headers from SYN_STREAM frame. 498 // Retrieves serialized headers from a HEADERS or SYN_STREAM frame.
496 // Does not check that the given frame is a SYN_STREAM.
497 base::StringPiece GetSerializedHeaders(const SpdyFrame* frame, 499 base::StringPiece GetSerializedHeaders(const SpdyFrame* frame,
498 const SpdyFramer& framer) { 500 const SpdyFramer& framer) {
499 return base::StringPiece(frame->data() + framer.GetSynStreamMinimumSize(), 501 SpdyFrameReader reader(frame->data(), frame->size());
500 frame->size() - framer.GetSynStreamMinimumSize()); 502 reader.Seek(2); // Seek past the frame length.
503 SpdyFrameType frame_type;
504 if (framer.protocol_version() > SPDY3) {
505 uint8 serialized_type;
506 reader.ReadUInt8(&serialized_type);
507 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(),
508 serialized_type);
509 DCHECK_EQ(HEADERS, frame_type);
510 uint8 flags;
511 reader.ReadUInt8(&flags);
512 if (flags & HEADERS_FLAG_PRIORITY) {
513 frame_type = SYN_STREAM;
514 }
515 } else {
516 uint16 serialized_type;
517 reader.ReadUInt16(&serialized_type);
518 frame_type = SpdyConstants::ParseFrameType(framer.protocol_version(),
519 serialized_type);
520 DCHECK(frame_type == HEADERS ||
521 frame_type == SYN_STREAM) << frame_type;
522 }
523
524 if (frame_type == SYN_STREAM) {
525 return StringPiece(frame->data() + framer.GetSynStreamMinimumSize(),
526 frame->size() - framer.GetSynStreamMinimumSize());
527 } else {
528 return StringPiece(frame->data() + framer.GetHeadersMinimumSize(),
529 frame->size() - framer.GetHeadersMinimumSize());
530 }
501 } 531 }
502 532
503 } // namespace test 533 } // namespace test
504 534
505 } // namespace net 535 } // namespace net
506 536
507 using net::test::SetFrameLength; 537 using net::test::SetFrameLength;
508 using net::test::SetFrameFlags; 538 using net::test::SetFrameFlags;
509 using net::test::CompareCharArraysWithHexError; 539 using net::test::CompareCharArraysWithHexError;
510 using net::test::SpdyFramerTestUtil; 540 using net::test::SpdyFramerTestUtil;
(...skipping 4225 matching lines...) Expand 10 before | Expand all | Expand 10 after
4736 SpdyBlockedIR blocked_ir(0); 4766 SpdyBlockedIR blocked_ir(0);
4737 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); 4767 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir));
4738 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); 4768 framer.ProcessInput(frame->data(), framer.GetBlockedSize());
4739 4769
4740 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4770 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4741 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4771 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4742 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4772 << SpdyFramer::ErrorCodeToString(framer.error_code());
4743 } 4773 }
4744 4774
4745 } // namespace net 4775 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698