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 b5978aa74c44425a85ce56b979bc129b4dbdc39d..6acfc83d01b987b2bbcc754e916ac399f2e01046 100644 |
--- a/net/quic/core/spdy_utils_test.cc |
+++ b/net/quic/core/spdy_utils_test.cc |
@@ -6,6 +6,8 @@ |
#include <memory> |
#include "base/macros.h" |
+#include "net/quic/platform/api/quic_flag_utils.h" |
+#include "net/quic/platform/api/quic_flags.h" |
#include "net/quic/platform/api/quic_string_piece.h" |
#include "net/quic/platform/api/quic_text_utils.h" |
#include "net/test/gtest_util.h" |
@@ -246,7 +248,10 @@ TEST(CopyAndValidateTrailers, PseudoHeaderInTrailers) { |
} |
TEST(CopyAndValidateTrailers, DuplicateTrailers) { |
- // Duplicate trailers are not allowed. |
+ // Duplicate trailers are allowed, and their values are concatenated into a |
+ // single string delimted with '\0'. Some of the duplicate headers |
+ // deliberately have an empty value. |
+ FLAGS_quic_reloadable_flag_quic_handle_duplicate_trailers = true; |
auto trailers = FromList({{"key", "value0"}, |
{"key", "value1"}, |
{"key", ""}, |
@@ -258,8 +263,38 @@ TEST(CopyAndValidateTrailers, DuplicateTrailers) { |
{"key", "non_contiguous_duplicate"}}); |
size_t final_byte_offset = 0; |
SpdyHeaderBlock block; |
- EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
- &block)); |
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset, |
+ &block)); |
+ EXPECT_THAT( |
+ block, |
+ UnorderedElementsAre( |
+ Pair("key", |
+ QuicStringPiece( |
+ "value0\0value1\0\0\0value2\0\0non_contiguous_duplicate", |
+ 48)), |
+ Pair("other_key", "value"))); |
+} |
+ |
+TEST(CopyAndValidateTrailers, DuplicateCookies) { |
+ // Duplicate cookie headers in trailers should be concatenated into a single |
+ // "; " delimted string. |
+ FLAGS_quic_reloadable_flag_quic_handle_duplicate_trailers = true; |
+ auto headers = FromList({{"cookie", " part 1"}, |
+ {"cookie", "part 2 "}, |
+ {"cookie", "part3"}, |
+ {"key", "value"}, |
+ {kFinalOffsetHeaderKey, "1234"}, |
+ {"cookie", " non_contiguous_cookie!"}}); |
+ |
+ size_t final_byte_offset = 0; |
+ SpdyHeaderBlock block; |
+ EXPECT_TRUE( |
+ SpdyUtils::CopyAndValidateTrailers(*headers, &final_byte_offset, &block)); |
+ EXPECT_THAT( |
+ block, |
+ UnorderedElementsAre( |
+ Pair("cookie", " part 1; part 2 ; part3; non_contiguous_cookie!"), |
+ Pair("key", "value"))); |
} |
TEST(GetUrlFromHeaderBlock, Basic) { |