Index: net/quic/spdy_utils_test.cc |
diff --git a/net/quic/spdy_utils_test.cc b/net/quic/spdy_utils_test.cc |
deleted file mode 100644 |
index 35093af511a86ba9fa41a8f2ecf49452bb65cff4..0000000000000000000000000000000000000000 |
--- a/net/quic/spdy_utils_test.cc |
+++ /dev/null |
@@ -1,359 +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/quic/spdy_utils.h" |
- |
-#include "base/macros.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_piece.h" |
-#include "net/test/gtest_util.h" |
- |
-using base::StringPiece; |
-using std::string; |
-using testing::UnorderedElementsAre; |
-using testing::Pair; |
- |
-namespace net { |
-namespace test { |
- |
-TEST(SpdyUtilsTest, SerializeAndParseHeaders) { |
- // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then |
- // parses the serialized output and verifies that the end result is the same |
- // as the headers that the test started with. |
- |
- SpdyHeaderBlock input_headers; |
- input_headers[":pseudo1"] = "pseudo value1"; |
- input_headers[":pseudo2"] = "pseudo value2"; |
- input_headers["key1"] = "value1"; |
- const int64_t kContentLength = 1234; |
- input_headers["content-length"] = base::Int64ToString(kContentLength); |
- input_headers["key2"] = "value2"; |
- |
- // Serialize the header block. |
- string serialized_headers = |
- SpdyUtils::SerializeUncompressedHeaders(input_headers); |
- |
- // Take the serialized header block, and parse back into SpdyHeaderBlock. |
- SpdyHeaderBlock output_headers; |
- int64_t content_length = -1; |
- ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(), |
- serialized_headers.size(), |
- &content_length, &output_headers)); |
- |
- // Should be back to the original headers. |
- EXPECT_EQ(content_length, kContentLength); |
- EXPECT_EQ(output_headers, input_headers); |
-} |
- |
-TEST(SpdyUtilsTest, SerializeAndParseHeadersLargeContentLength) { |
- // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then |
- // parses the serialized output and verifies that the end result is the same |
- // as the headers that the test started with. |
- |
- SpdyHeaderBlock input_headers; |
- input_headers[":pseudo1"] = "pseudo value1"; |
- input_headers[":pseudo2"] = "pseudo value2"; |
- input_headers["key1"] = "value1"; |
- const int64_t kContentLength = 12345678900; |
- input_headers["content-length"] = base::Int64ToString(kContentLength); |
- input_headers["key2"] = "value2"; |
- |
- // Serialize the header block. |
- string serialized_headers = |
- SpdyUtils::SerializeUncompressedHeaders(input_headers); |
- |
- // Take the serialized header block, and parse back into SpdyHeaderBlock. |
- SpdyHeaderBlock output_headers; |
- int64_t content_length = -1; |
- ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(), |
- serialized_headers.size(), |
- &content_length, &output_headers)); |
- |
- // Should be back to the original headers. |
- EXPECT_EQ(content_length, kContentLength); |
- EXPECT_EQ(output_headers, input_headers); |
-} |
- |
-TEST(SpdyUtilsTest, SerializeAndParseValidTrailers) { |
- // Creates a SpdyHeaderBlock with some valid Trailers key->value pairs, |
- // serializes it, then parses the serialized output and verifies that the end |
- // result is the same as the trailers that the test started with. |
- SpdyHeaderBlock input_trailers; |
- const size_t kFinalOffset = 5678; |
- input_trailers[kFinalOffsetHeaderKey] = base::IntToString(kFinalOffset); |
- input_trailers["key1"] = "value1"; |
- input_trailers["key2"] = "value2"; |
- |
- // Serialize the trailers. |
- string serialized_trailers = |
- SpdyUtils::SerializeUncompressedHeaders(input_trailers); |
- |
- // Take the serialized trailers, and parse back into a SpdyHeaderBlock. |
- SpdyHeaderBlock output_trailers; |
- size_t final_byte_offset = 0; |
- EXPECT_TRUE(SpdyUtils::ParseTrailers(serialized_trailers.data(), |
- serialized_trailers.size(), |
- &final_byte_offset, &output_trailers)); |
- |
- // Should be back to the original trailers, without the final offset header. |
- EXPECT_EQ(final_byte_offset, kFinalOffset); |
- input_trailers.erase(kFinalOffsetHeaderKey); |
- EXPECT_EQ(output_trailers, input_trailers); |
-} |
- |
-TEST(SpdyUtilsTest, SerializeAndParseTrailersWithoutFinalOffset) { |
- // Verifies that parsing fails if Trailers are missing a final offset header. |
- |
- SpdyHeaderBlock input_trailers; |
- input_trailers["key1"] = "value1"; |
- input_trailers["key2"] = "value2"; |
- |
- // Serialize the trailers. |
- string serialized_trailers = |
- SpdyUtils::SerializeUncompressedHeaders(input_trailers); |
- |
- // Parsing the serialized trailers fails because of the missing final offset. |
- SpdyHeaderBlock output_trailers; |
- size_t final_byte_offset = 0; |
- EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(), |
- serialized_trailers.size(), |
- &final_byte_offset, &output_trailers)); |
- EXPECT_EQ(final_byte_offset, 0u); |
-} |
- |
-TEST(SpdyUtilsTest, SerializeAndParseTrailersWithPseudoHeaders) { |
- // Verifies that parsing fails if Trailers include pseudo-headers. |
- |
- SpdyHeaderBlock input_trailers; |
- input_trailers[kFinalOffsetHeaderKey] = "12345"; |
- input_trailers[":disallowed-pseudo-header"] = "pseudo value"; |
- input_trailers["key1"] = "value1"; |
- input_trailers["key2"] = "value2"; |
- |
- // Serialize the trailers. |
- string serialized_trailers = |
- SpdyUtils::SerializeUncompressedHeaders(input_trailers); |
- |
- // Parsing the serialized trailers fails because of the extra pseudo header. |
- SpdyHeaderBlock output_trailers; |
- size_t final_byte_offset = 0; |
- EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(), |
- serialized_trailers.size(), |
- &final_byte_offset, &output_trailers)); |
-} |
-static std::unique_ptr<QuicHeaderList> FromList( |
- const QuicHeaderList::ListType& src) { |
- std::unique_ptr<QuicHeaderList> headers(new QuicHeaderList); |
- headers->OnHeaderBlockStart(); |
- for (const auto& p : src) { |
- headers->OnHeader(p.first, p.second); |
- } |
- headers->OnHeaderBlockEnd(0); |
- return headers; |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeaders) { |
- auto headers = FromList({// All cookie crumbs are joined. |
- {"cookie", " part 1"}, |
- {"cookie", "part 2 "}, |
- {"cookie", "part3"}, |
- |
- // Already-delimited headers are passed through. |
- {"passed-through", string("foo\0baz", 7)}, |
- |
- // Other headers are joined on \0. |
- {"joined", "value 1"}, |
- {"joined", "value 2"}, |
- |
- // Empty headers remain empty. |
- {"empty", ""}, |
- |
- // Joined empty headers work as expected. |
- {"empty-joined", ""}, |
- {"empty-joined", "foo"}, |
- {"empty-joined", ""}, |
- {"empty-joined", ""}, |
- |
- // Non-continguous cookie crumb. |
- {"cookie", " fin!"}}); |
- |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, UnorderedElementsAre( |
- Pair("cookie", " part 1; part 2 ; part3; fin!"), |
- Pair("passed-through", StringPiece("foo\0baz", 7)), |
- Pair("joined", StringPiece("value 1\0value 2", 15)), |
- Pair("empty", ""), |
- Pair("empty-joined", StringPiece("\0foo\0\0", 6)))); |
- EXPECT_EQ(-1, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersEmptyName) { |
- auto headers = FromList({{"foo", "foovalue"}, {"", "barvalue"}, {"baz", ""}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_FALSE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleContentLengths) { |
- auto headers = FromList({{"content-length", "9"}, |
- {"foo", "foovalue"}, |
- {"content-length", "9"}, |
- {"bar", "barvalue"}, |
- {"baz", ""}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, UnorderedElementsAre( |
- Pair("foo", "foovalue"), Pair("bar", "barvalue"), |
- Pair("content-length", StringPiece("9" |
- "\0" |
- "9", |
- 3)), |
- Pair("baz", ""))); |
- EXPECT_EQ(9, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersInconsistentContentLengths) { |
- auto headers = FromList({{"content-length", "9"}, |
- {"foo", "foovalue"}, |
- {"content-length", "8"}, |
- {"bar", "barvalue"}, |
- {"baz", ""}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_FALSE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersLargeContentLength) { |
- auto headers = FromList({{"content-length", "9000000000"}, |
- {"foo", "foovalue"}, |
- {"bar", "barvalue"}, |
- {"baz", ""}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, UnorderedElementsAre( |
- Pair("foo", "foovalue"), Pair("bar", "barvalue"), |
- Pair("content-length", StringPiece("9000000000")), |
- Pair("baz", ""))); |
- EXPECT_EQ(9000000000, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleValues) { |
- auto headers = FromList({{"foo", "foovalue"}, |
- {"bar", "barvalue"}, |
- {"baz", ""}, |
- {"foo", "boo"}, |
- {"baz", "buzz"}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT( |
- block, UnorderedElementsAre(Pair("foo", StringPiece("foovalue\0boo", 12)), |
- Pair("bar", "barvalue"), |
- Pair("baz", StringPiece("\0buzz", 5)))); |
- EXPECT_EQ(-1, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMoreThanTwoValues) { |
- auto headers = FromList({{"set-cookie", "value1"}, |
- {"set-cookie", "value2"}, |
- {"set-cookie", "value3"}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, |
- UnorderedElementsAre(Pair( |
- "set-cookie", StringPiece("value1\0value2\0value3", 20)))); |
- EXPECT_EQ(-1, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersCookie) { |
- auto headers = FromList({{"foo", "foovalue"}, |
- {"bar", "barvalue"}, |
- {"cookie", "value1"}, |
- {"baz", ""}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, UnorderedElementsAre( |
- Pair("foo", "foovalue"), Pair("bar", "barvalue"), |
- Pair("cookie", "value1"), Pair("baz", ""))); |
- EXPECT_EQ(-1, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleCookies) { |
- auto headers = FromList({{"foo", "foovalue"}, |
- {"bar", "barvalue"}, |
- {"cookie", "value1"}, |
- {"baz", ""}, |
- {"cookie", "value2"}}); |
- int64_t content_length = -1; |
- SpdyHeaderBlock block; |
- ASSERT_TRUE( |
- SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block)); |
- EXPECT_THAT(block, UnorderedElementsAre( |
- Pair("foo", "foovalue"), Pair("bar", "barvalue"), |
- Pair("cookie", "value1; value2"), Pair("baz", ""))); |
- EXPECT_EQ(-1, content_length); |
-} |
- |
-TEST(SpdyUtilsTest, GetUrlFromHeaderBlock) { |
- SpdyHeaderBlock headers; |
- EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), ""); |
- headers[":scheme"] = "https"; |
- EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), ""); |
- headers[":authority"] = "www.google.com"; |
- EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), ""); |
- headers[":path"] = "/index.html"; |
- EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), |
- "https://www.google.com/index.html"); |
- headers["key1"] = "value1"; |
- headers["key2"] = "value2"; |
- EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), |
- "https://www.google.com/index.html"); |
-} |
- |
-TEST(SpdyUtilsTest, GetHostNameFromHeaderBlock) { |
- SpdyHeaderBlock headers; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), ""); |
- headers[":scheme"] = "https"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), ""); |
- headers[":authority"] = "www.google.com"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), ""); |
- headers[":path"] = "/index.html"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "www.google.com"); |
- headers["key1"] = "value1"; |
- headers["key2"] = "value2"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "www.google.com"); |
- headers[":authority"] = "www.google.com:6666"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "www.google.com"); |
- headers[":authority"] = "192.168.1.1"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "192.168.1.1"); |
- headers[":authority"] = "192.168.1.1:6666"; |
- EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "192.168.1.1"); |
-} |
- |
-TEST(SpdyUtilsTest, UrlIsValid) { |
- SpdyHeaderBlock headers; |
- EXPECT_FALSE(SpdyUtils::UrlIsValid(headers)); |
- headers[":scheme"] = "https"; |
- EXPECT_FALSE(SpdyUtils::UrlIsValid(headers)); |
- headers[":authority"] = "www.google.com"; |
- EXPECT_FALSE(SpdyUtils::UrlIsValid(headers)); |
- headers[":path"] = "/index.html"; |
- EXPECT_TRUE(SpdyUtils::UrlIsValid(headers)); |
-} |
- |
-} // namespace test |
-} // namespace net |