Add expect_final_byte_offset argument to CopyAndValidateTrailers().
This will be used in cr/231494986 where trailers sent on the
request/response stream should not have the :final-offset pseudo-header.
gfe-relnote: n/a. No functional change.
PiperOrigin-RevId: 243730777
Change-Id: I1a5c729fb5aab3e3abdb0ce64dad5667faf794bf
diff --git a/quic/core/http/spdy_utils_test.cc b/quic/core/http/spdy_utils_test.cc
index b7da0fd..d5c96fb 100644
--- a/quic/core/http/spdy_utils_test.cc
+++ b/quic/core/http/spdy_utils_test.cc
@@ -17,6 +17,10 @@
namespace quic {
namespace test {
+namespace {
+
+const bool kExpectFinalByteOffset = true;
+const bool kDoNotExpectFinalByteOffset = false;
static std::unique_ptr<QuicHeaderList> FromList(
const QuicHeaderList::ListType& src) {
@@ -29,6 +33,8 @@
return headers;
}
+} // anonymous namespace
+
using CopyAndValidateHeaders = QuicTest;
TEST_F(CopyAndValidateHeaders, NormalUsage) {
@@ -202,29 +208,62 @@
auto trailers = FromList({{kFinalOffsetHeaderKey, "1234"}});
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset,
- &block));
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
EXPECT_EQ(1234u, final_byte_offset);
}
-TEST_F(CopyAndValidateTrailers, EmptyTrailerList) {
- // An empty trailer list will fail as required key kFinalOffsetHeaderKey is
+TEST_F(CopyAndValidateTrailers, EmptyTrailerListWithFinalByteOffsetExpected) {
+ // An empty trailer list will fail as expected key kFinalOffsetHeaderKey is
// not present.
QuicHeaderList trailers;
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_FALSE(
- SpdyUtils::CopyAndValidateTrailers(trailers, &final_byte_offset, &block));
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(
+ trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
}
-TEST_F(CopyAndValidateTrailers, FinalByteOffsetNotPresent) {
- // Validation fails if required kFinalOffsetHeaderKey is not present, even if
+TEST_F(CopyAndValidateTrailers,
+ EmptyTrailerListWithFinalByteOffsetNotExpected) {
+ // An empty trailer list will pass successfully if kFinalOffsetHeaderKey is
+ // not expected.
+ QuicHeaderList trailers;
+ size_t final_byte_offset = 0;
+ SpdyHeaderBlock block;
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(
+ trailers, kDoNotExpectFinalByteOffset, &final_byte_offset, &block));
+ EXPECT_TRUE(block.empty());
+}
+
+TEST_F(CopyAndValidateTrailers, FinalByteOffsetExpectedButNotPresent) {
+ // Validation fails if expected 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));
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
+}
+
+TEST_F(CopyAndValidateTrailers, FinalByteOffsetNotExpectedButPresent) {
+ // Validation fails if kFinalOffsetHeaderKey is present but should not be,
+ // even if the rest of the header block is valid.
+ auto trailers = FromList({{"key", "value"}, {kFinalOffsetHeaderKey, "1234"}});
+ size_t final_byte_offset = 0;
+ SpdyHeaderBlock block;
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kDoNotExpectFinalByteOffset, &final_byte_offset, &block));
+}
+
+TEST_F(CopyAndValidateTrailers, FinalByteOffsetNotExpectedAndNotPresent) {
+ // Validation succeeds if kFinalOffsetHeaderKey is not expected and not
+ // present.
+ auto trailers = FromList({{"key", "value"}});
+ size_t final_byte_offset = 0;
+ SpdyHeaderBlock block;
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kDoNotExpectFinalByteOffset, &final_byte_offset, &block));
+ EXPECT_THAT(block, UnorderedElementsAre(Pair("key", "value")));
}
TEST_F(CopyAndValidateTrailers, EmptyName) {
@@ -233,8 +272,8 @@
auto trailers = FromList({{"", "value"}, {kFinalOffsetHeaderKey, "1234"}});
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset,
- &block));
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
}
TEST_F(CopyAndValidateTrailers, PseudoHeaderInTrailers) {
@@ -243,8 +282,8 @@
FromList({{":pseudo_key", "value"}, {kFinalOffsetHeaderKey, "1234"}});
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset,
- &block));
+ EXPECT_FALSE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
}
TEST_F(CopyAndValidateTrailers, DuplicateTrailers) {
@@ -262,8 +301,8 @@
{"key", "non_contiguous_duplicate"}});
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(*trailers, &final_byte_offset,
- &block));
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(
+ *trailers, kExpectFinalByteOffset, &final_byte_offset, &block));
EXPECT_THAT(
block,
UnorderedElementsAre(
@@ -286,8 +325,8 @@
size_t final_byte_offset = 0;
SpdyHeaderBlock block;
- EXPECT_TRUE(
- SpdyUtils::CopyAndValidateTrailers(*headers, &final_byte_offset, &block));
+ EXPECT_TRUE(SpdyUtils::CopyAndValidateTrailers(
+ *headers, kExpectFinalByteOffset, &final_byte_offset, &block));
EXPECT_THAT(
block,
UnorderedElementsAre(