| Index: net/spdy/header_coalescer_test.cc
|
| diff --git a/net/spdy/header_coalescer_test.cc b/net/spdy/header_coalescer_test.cc
|
| deleted file mode 100644
|
| index 64900324bc4c30a37d7d823b7b42e771f8dc0213..0000000000000000000000000000000000000000
|
| --- a/net/spdy/header_coalescer_test.cc
|
| +++ /dev/null
|
| @@ -1,140 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/spdy/header_coalescer.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "net/spdy/platform/api/spdy_string.h"
|
| -#include "net/spdy/platform/api/spdy_string_utils.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::ElementsAre;
|
| -using ::testing::Pair;
|
| -
|
| -namespace net {
|
| -namespace test {
|
| -
|
| -class HeaderCoalescerTest : public ::testing::Test {
|
| - public:
|
| - protected:
|
| - HeaderCoalescer header_coalescer_;
|
| -};
|
| -
|
| -TEST_F(HeaderCoalescerTest, CorrectHeaders) {
|
| - header_coalescer_.OnHeader(":foo", "bar");
|
| - header_coalescer_.OnHeader("baz", "qux");
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| -
|
| - SpdyHeaderBlock header_block = header_coalescer_.release_headers();
|
| - EXPECT_THAT(header_block,
|
| - ElementsAre(Pair(":foo", "bar"), Pair("baz", "qux")));
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, EmptyHeaderKey) {
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| - header_coalescer_.OnHeader("", "foo");
|
| - EXPECT_TRUE(header_coalescer_.error_seen());
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, HeaderBlockTooLarge) {
|
| - // 3 byte key, 256 * 1024 - 40 byte value, 32 byte overhead:
|
| - // less than 256 * 1024 bytes in total.
|
| - SpdyString data(256 * 1024 - 40, 'a');
|
| - header_coalescer_.OnHeader("foo", data);
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| -
|
| - // Another 3 + 3 + 32 bytes: too large.
|
| - header_coalescer_.OnHeader("bar", "baz");
|
| - EXPECT_TRUE(header_coalescer_.error_seen());
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, PseudoHeadersMustNotFollowRegularHeaders) {
|
| - header_coalescer_.OnHeader("foo", "bar");
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| - header_coalescer_.OnHeader(":baz", "qux");
|
| - EXPECT_TRUE(header_coalescer_.error_seen());
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, Append) {
|
| - header_coalescer_.OnHeader("foo", "bar");
|
| - header_coalescer_.OnHeader("cookie", "baz");
|
| - header_coalescer_.OnHeader("foo", "quux");
|
| - header_coalescer_.OnHeader("cookie", "qux");
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| -
|
| - SpdyHeaderBlock header_block = header_coalescer_.release_headers();
|
| - EXPECT_THAT(header_block,
|
| - ElementsAre(Pair("foo", SpdyStringPiece("bar\0quux", 8)),
|
| - Pair("cookie", "baz; qux")));
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, CRLFInHeaderValue) {
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| - header_coalescer_.OnHeader("foo", "bar\r\nbaz");
|
| - EXPECT_TRUE(header_coalescer_.error_seen());
|
| -}
|
| -
|
| -TEST_F(HeaderCoalescerTest, HeaderNameNotValid) {
|
| - SpdyStringPiece header_name("\x01\x7F\x80\xff");
|
| - header_coalescer_.OnHeader(header_name, "foo");
|
| - EXPECT_TRUE(header_coalescer_.error_seen());
|
| -}
|
| -
|
| -// RFC 7230 Section 3.2. Valid header name is defined as:
|
| -// field-name = token
|
| -// token = 1*tchar
|
| -// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
|
| -// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
|
| -TEST_F(HeaderCoalescerTest, HeaderNameValid) {
|
| - SpdyStringPiece header_name(
|
| - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-."
|
| - "^_`|~");
|
| - header_coalescer_.OnHeader(header_name, "foo");
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| - SpdyHeaderBlock header_block = header_coalescer_.release_headers();
|
| - EXPECT_THAT(header_block, ElementsAre(Pair(header_name, "foo")));
|
| -}
|
| -
|
| -// RFC 7230 Section 3.2. Valid header value is defined as:
|
| -// field-value = *( field-content / obs-fold )
|
| -// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
|
| -// field-vchar = VCHAR / obs-text
|
| -//
|
| -// obs-fold = CRLF 1*( SP / HTAB )
|
| -// ; obsolete line folding
|
| -// ; see Section 3.2.4
|
| -TEST_F(HeaderCoalescerTest, HeaderValueValid) {
|
| - // Add two headers, one with an HTAB and one with a SP.
|
| - std::vector<char> header_values[2];
|
| - char prefixes[] = {'\t', ' '};
|
| - for (int i = 0; i < 2; ++i) {
|
| - header_values[i] = std::vector<char>();
|
| - header_values[i].push_back(prefixes[i]);
|
| - // obs-text. From 0x80 to 0xff.
|
| - for (int j = 0x80; j <= 0xff; ++j) {
|
| - header_values[i].push_back(j);
|
| - }
|
| - // vchar
|
| - for (int j = 0x21; j <= 0x7E; ++j) {
|
| - header_values[i].push_back(j);
|
| - }
|
| - header_coalescer_.OnHeader(
|
| - SpdyStringPrintf("%s_%d", "foo", i),
|
| - SpdyStringPiece(header_values[i].data(), header_values[i].size()));
|
| - EXPECT_FALSE(header_coalescer_.error_seen());
|
| - }
|
| - SpdyHeaderBlock header_block = header_coalescer_.release_headers();
|
| - EXPECT_THAT(
|
| - header_block,
|
| - ElementsAre(Pair("foo_0", SpdyStringPiece(header_values[0].data(),
|
| - header_values[0].size())),
|
| - Pair("foo_1", SpdyStringPiece(header_values[1].data(),
|
| - header_values[1].size()))));
|
| -}
|
| -
|
| -} // namespace test
|
| -
|
| -} // namespace net
|
|
|