Index: net/quic/core/spdy_utils_test.cc |
diff --git a/net/quic/core/spdy_utils_test.cc b/net/quic/core/spdy_utils_test.cc |
index 034af2537280bb3221abd66d7d8d5e07a807502f..b5978aa74c44425a85ce56b979bc129b4dbdc39d 100644 |
--- a/net/quic/core/spdy_utils_test.cc |
+++ b/net/quic/core/spdy_utils_test.cc |
@@ -194,6 +194,74 @@ TEST(CopyAndValidateHeaders, MultipleCookies) { |
EXPECT_EQ(-1, content_length); |
} |
+TEST(CopyAndValidateTrailers, SimplestValidList) { |
+ // Verify that the simplest trailers are valid: just a final byte offset that |
+ // gets parsed successfully. |
+ auto trailers = FromList({{kFinalOffsetHeaderKey, "1234"}}); |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+ EXPECT_EQ(1234u, final_byte_offset); |
+} |
+ |
+TEST(CopyAndValidateTrailers, EmptyTrailerList) { |
+ // An empty trailer list will fail as required key kFinalOffsetHeaderKey is |
+ // not present. |
+ QuicHeaderList trailers; |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_FALSE( |
+ SpdyUtils::CopyAndValidateTrailers(trailers, &final_byte_offset, &block)); |
+} |
+ |
+TEST(CopyAndValidateTrailers, FinalByteOffsetNotPresent) { |
+ // Validation fails if required kFinalOffsetHeaderKey is not present, even if |
+ // the rest of the header block is valid. |
+ auto trailers = FromList({{"key", "value"}}); |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+} |
+ |
+TEST(CopyAndValidateTrailers, EmptyName) { |
+ // Trailer validation will fail with an empty header key, in an otherwise |
+ // valid block of trailers. |
+ auto trailers = FromList({{"", "value"}, {kFinalOffsetHeaderKey, "1234"}}); |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+} |
+ |
+TEST(CopyAndValidateTrailers, PseudoHeaderInTrailers) { |
+ // Pseudo headers are illegal in trailers. |
+ auto trailers = |
+ FromList({{":pseudo_key", "value"}, {kFinalOffsetHeaderKey, "1234"}}); |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+} |
+ |
+TEST(CopyAndValidateTrailers, DuplicateTrailers) { |
+ // Duplicate trailers are not allowed. |
+ auto trailers = FromList({{"key", "value0"}, |
+ {"key", "value1"}, |
+ {"key", ""}, |
+ {"key", ""}, |
+ {"key", "value2"}, |
+ {"key", ""}, |
+ {kFinalOffsetHeaderKey, "1234"}, |
+ {"other_key", "value"}, |
+ {"key", "non_contiguous_duplicate"}}); |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+} |
+ |
TEST(GetUrlFromHeaderBlock, Basic) { |
SpdyHeaderBlock headers; |
EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), ""); |