Test that Http2HeaderBlock order is preserved.
This is to test that Http2HeaderBlock does not have any magic to reorder
headers, for example, to move pseudo-header fields before regular ones for
spec compliance.
In contrast, note that HpackEncoder moves pseudo-headers to the beginning of the
header block when encoding.
PiperOrigin-RevId: 474136110
diff --git a/quiche/spdy/core/http2_header_block_test.cc b/quiche/spdy/core/http2_header_block_test.cc
index 4624d7b..1ad045f 100644
--- a/quiche/spdy/core/http2_header_block_test.cc
+++ b/quiche/spdy/core/http2_header_block_test.cc
@@ -275,5 +275,21 @@
EXPECT_EQ(block_copy.TotalBytesUsed(), Http2HeaderBlockSize(block_copy));
}
+// The order of header fields is preserved. Note that all pseudo-header fields
+// must appear before regular header fields, both in HTTP/2 and HTTP/3, see
+// https://www.rfc-editor.org/rfc/rfc9113.html#name-http-control-data and
+// https://www.rfc-editor.org/rfc/rfc9114.html#name-http-control-data. It is
+// the responsibility of the higher layer to add header fields in the correct
+// order.
+TEST(Http2HeaderBlockTest, OrderPreserved) {
+ Http2HeaderBlock block;
+ block[":method"] = "GET";
+ block["foo"] = "bar";
+ block[":path"] = "/";
+
+ EXPECT_THAT(block, ElementsAre(Pair(":method", "GET"), Pair("foo", "bar"),
+ Pair(":path", "/")));
+}
+
} // namespace test
} // namespace spdy