| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "net/spdy/spdy_headers_block_parser.h" | 5 #include "net/spdy/spdy_headers_block_parser.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 // A mock the handler class to check that we parse out the correct headers | 28 // A mock the handler class to check that we parse out the correct headers |
| 29 // and call the callback methods when we should. | 29 // and call the callback methods when we should. |
| 30 class MockSpdyHeadersHandler : public SpdyHeadersHandlerInterface { | 30 class MockSpdyHeadersHandler : public SpdyHeadersHandlerInterface { |
| 31 public: | 31 public: |
| 32 MOCK_METHOD0(OnHeaderBlockStart, void()); | 32 MOCK_METHOD0(OnHeaderBlockStart, void()); |
| 33 MOCK_METHOD1(OnHeaderBlockEnd, void(size_t bytes)); | 33 MOCK_METHOD1(OnHeaderBlockEnd, void(size_t bytes)); |
| 34 MOCK_METHOD2(OnHeaderBlockEnd, void(size_t bytes, size_t compressed_bytes)); | 34 MOCK_METHOD2(OnHeaderBlockEnd, void(size_t bytes, size_t compressed_bytes)); |
| 35 MOCK_METHOD2(OnHeader, void(StringPiece key, StringPiece value)); | 35 MOCK_METHOD2(OnHeader, void(StringPiece key, StringPiece value)); |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 class SpdyHeadersBlockParserTest : | 38 class SpdyHeadersBlockParserTest : public ::testing::Test { |
| 39 public ::testing::TestWithParam<SpdyMajorVersion> { | |
| 40 public: | 39 public: |
| 41 ~SpdyHeadersBlockParserTest() override {} | 40 ~SpdyHeadersBlockParserTest() override {} |
| 42 | 41 |
| 43 protected: | 42 protected: |
| 44 void SetUp() override { | 43 void SetUp() override { |
| 45 // Create a parser using the mock handler. | 44 // Create a parser using the mock handler. |
| 46 parser_.reset(new SpdyHeadersBlockParser(HTTP2, &handler_)); | 45 parser_.reset(new SpdyHeadersBlockParser(&handler_)); |
| 47 } | 46 } |
| 48 | 47 |
| 49 // Create a header block with a specified number of headers. | 48 // Create a header block with a specified number of headers. |
| 50 string CreateHeaders(uint32_t num_headers, bool insert_nulls) { | 49 string CreateHeaders(uint32_t num_headers, bool insert_nulls) { |
| 51 string headers; | 50 string headers; |
| 52 | 51 |
| 53 // First, write the number of headers in the header block. | 52 // First, write the number of headers in the header block. |
| 54 headers += EncodeLength(num_headers); | 53 headers += EncodeLength(num_headers); |
| 55 | 54 |
| 56 // Second, write the key-value pairs. | 55 // Second, write the key-value pairs. |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 217 |
| 219 TEST_F(SpdyHeadersBlockParserTest, LargeBlocksDiscardedTest) { | 218 TEST_F(SpdyHeadersBlockParserTest, LargeBlocksDiscardedTest) { |
| 220 // Header block with too many headers. | 219 // Header block with too many headers. |
| 221 { | 220 { |
| 222 string headers = EncodeLength(parser_->MaxNumberOfHeaders() + 1); | 221 string headers = EncodeLength(parser_->MaxNumberOfHeaders() + 1); |
| 223 EXPECT_FALSE(parser_-> | 222 EXPECT_FALSE(parser_-> |
| 224 HandleControlFrameHeadersData(1, headers.c_str(), headers.length())); | 223 HandleControlFrameHeadersData(1, headers.c_str(), headers.length())); |
| 225 EXPECT_EQ(SpdyHeadersBlockParser::HEADER_BLOCK_TOO_LARGE, | 224 EXPECT_EQ(SpdyHeadersBlockParser::HEADER_BLOCK_TOO_LARGE, |
| 226 parser_->get_error()); | 225 parser_->get_error()); |
| 227 } | 226 } |
| 228 parser_.reset(new SpdyHeadersBlockParser(HTTP2, &handler_)); | 227 parser_.reset(new SpdyHeadersBlockParser(&handler_)); |
| 229 // Header block with one header, which has a too-long key. | 228 // Header block with one header, which has a too-long key. |
| 230 { | 229 { |
| 231 string headers = EncodeLength(1) + EncodeLength( | 230 string headers = EncodeLength(1) + EncodeLength( |
| 232 SpdyHeadersBlockParser::kMaximumFieldLength + 1); | 231 SpdyHeadersBlockParser::kMaximumFieldLength + 1); |
| 233 EXPECT_FALSE(parser_-> | 232 EXPECT_FALSE(parser_-> |
| 234 HandleControlFrameHeadersData(1, headers.c_str(), headers.length())); | 233 HandleControlFrameHeadersData(1, headers.c_str(), headers.length())); |
| 235 EXPECT_EQ(SpdyHeadersBlockParser::HEADER_FIELD_TOO_LARGE, | 234 EXPECT_EQ(SpdyHeadersBlockParser::HEADER_FIELD_TOO_LARGE, |
| 236 parser_->get_error()); | 235 parser_->get_error()); |
| 237 } | 236 } |
| 238 } | 237 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 string headers(CreateHeaders(kNumHeadersInBlock, false)); | 272 string headers(CreateHeaders(kNumHeadersInBlock, false)); |
| 274 bool result; | 273 bool result; |
| 275 EXPECT_SPDY_BUG( | 274 EXPECT_SPDY_BUG( |
| 276 result = parser_->HandleControlFrameHeadersData(0, headers.data(), 1), | 275 result = parser_->HandleControlFrameHeadersData(0, headers.data(), 1), |
| 277 "Expected nonzero stream id, saw: 0"); | 276 "Expected nonzero stream id, saw: 0"); |
| 278 EXPECT_FALSE(result); | 277 EXPECT_FALSE(result); |
| 279 EXPECT_EQ(SpdyHeadersBlockParser::UNEXPECTED_STREAM_ID, parser_->get_error()); | 278 EXPECT_EQ(SpdyHeadersBlockParser::UNEXPECTED_STREAM_ID, parser_->get_error()); |
| 280 } | 279 } |
| 281 | 280 |
| 282 } // namespace net | 281 } // namespace net |
| OLD | NEW |