Add HTTPBalsaFrameTest.RequestWithTrailers.

PiperOrigin-RevId: 459235027
diff --git a/quiche/balsa/balsa_frame_test.cc b/quiche/balsa/balsa_frame_test.cc
index b6dc2ae..7895cd9 100644
--- a/quiche/balsa/balsa_frame_test.cc
+++ b/quiche/balsa/balsa_frame_test.cc
@@ -1204,6 +1204,45 @@
   EXPECT_EQ("monkeys", funky);
 }
 
+TEST_F(HTTPBalsaFrameTest, RequestWithTrailers) {
+  std::string headers =
+      "GET / HTTP/1.1\r\n"
+      "Connection: close\r\n"
+      "transfer-encoding: chunked\r\n"
+      "\r\n";
+
+  std::string chunks =
+      "3\r\n"
+      "123\r\n"
+      "0\r\n";
+  std::string trailer =
+      "crass: monkeys\r\n"
+      "funky: monkeys\r\n"
+      "\r\n";
+
+  ASSERT_EQ(headers.size(),
+            balsa_frame_.ProcessInput(headers.data(), headers.size()));
+  ASSERT_EQ(chunks.size(),
+            balsa_frame_.ProcessInput(chunks.data(), chunks.size()));
+
+  FakeHeaders fake_trailers;
+  fake_trailers.AddKeyValue("crass", "monkeys");
+  fake_trailers.AddKeyValue("funky", "monkeys");
+
+  EXPECT_CALL(visitor_mock_, OnTrailerInput(_)).Times(AtLeast(1));
+  EXPECT_CALL(visitor_mock_, ProcessTrailers(fake_trailers));
+  EXPECT_EQ(trailer.size(),
+            balsa_frame_.ProcessInput(trailer.data(), trailer.size()));
+
+  EXPECT_TRUE(balsa_frame_.MessageFullyRead());
+  EXPECT_EQ(BalsaFrameEnums::BALSA_NO_ERROR, balsa_frame_.ErrorCode());
+
+  const absl::string_view crass = trailer_.GetHeader("crass");
+  EXPECT_EQ("monkeys", crass);
+  const absl::string_view funky = trailer_.GetHeader("funky");
+  EXPECT_EQ("monkeys", funky);
+}
+
 TEST_F(HTTPBalsaFrameTest, NothingBadHappensWhenNoVisitorIsAssignedInResponse) {
   std::string headers =
       "HTTP/1.1 502 Bad Gateway\r\n"