Ports a test utility from //gfe/gfe2/test_tools to //third_party/http2/adapter.
PiperOrigin-RevId: 364558763
Change-Id: I2573bb6c5fffbe5873fa418c039f18f4b952a186
diff --git a/http2/adapter/test_utils_test.cc b/http2/adapter/test_utils_test.cc
new file mode 100644
index 0000000..1f8c557
--- /dev/null
+++ b/http2/adapter/test_utils_test.cc
@@ -0,0 +1,88 @@
+#include "http2/adapter/test_utils.h"
+
+#include "testing/base/public/gunit.h"
+#include "spdy/core/spdy_framer.h"
+
+namespace http2 {
+namespace adapter {
+namespace test {
+namespace {
+
+using spdy::SpdyFramer;
+
+TEST(ContainsFrames, Empty) {
+ EXPECT_THAT("", ContainsFrames({}));
+}
+
+TEST(ContainsFrames, SingleFrameWithLength) {
+ SpdyFramer framer{SpdyFramer::ENABLE_COMPRESSION};
+
+ spdy::SpdyPingIR ping{511};
+ EXPECT_THAT(framer.SerializeFrame(ping),
+ ContainsFrames({{spdy::SpdyFrameType::PING, 8}}));
+
+ spdy::SpdyWindowUpdateIR window_update{1, 101};
+ EXPECT_THAT(framer.SerializeFrame(window_update),
+ ContainsFrames({{spdy::SpdyFrameType::WINDOW_UPDATE, 4}}));
+
+ spdy::SpdyDataIR data{3, "Some example data, ha ha!"};
+ EXPECT_THAT(framer.SerializeFrame(data),
+ ContainsFrames({{spdy::SpdyFrameType::DATA, 25}}));
+}
+
+TEST(ContainsFrames, SingleFrameWithoutLength) {
+ SpdyFramer framer{SpdyFramer::ENABLE_COMPRESSION};
+
+ spdy::SpdyRstStreamIR rst_stream{7, spdy::ERROR_CODE_REFUSED_STREAM};
+ EXPECT_THAT(
+ framer.SerializeFrame(rst_stream),
+ ContainsFrames({{spdy::SpdyFrameType::RST_STREAM, absl::nullopt}}));
+
+ spdy::SpdyGoAwayIR goaway{13, spdy::ERROR_CODE_ENHANCE_YOUR_CALM,
+ "Consider taking some deep breaths."};
+ EXPECT_THAT(framer.SerializeFrame(goaway),
+ ContainsFrames({{spdy::SpdyFrameType::GOAWAY, absl::nullopt}}));
+
+ spdy::Http2HeaderBlock block;
+ block[":method"] = "GET";
+ block[":path"] = "/example";
+ block[":authority"] = "example.com";
+ spdy::SpdyHeadersIR headers{17, std::move(block)};
+ EXPECT_THAT(framer.SerializeFrame(headers),
+ ContainsFrames({{spdy::SpdyFrameType::HEADERS, absl::nullopt}}));
+}
+
+TEST(ContainsFrames, MultipleFrames) {
+ SpdyFramer framer{SpdyFramer::ENABLE_COMPRESSION};
+
+ spdy::SpdyPingIR ping{511};
+ spdy::SpdyWindowUpdateIR window_update{1, 101};
+ spdy::SpdyDataIR data{3, "Some example data, ha ha!"};
+ spdy::SpdyRstStreamIR rst_stream{7, spdy::ERROR_CODE_REFUSED_STREAM};
+ spdy::SpdyGoAwayIR goaway{13, spdy::ERROR_CODE_ENHANCE_YOUR_CALM,
+ "Consider taking some deep breaths."};
+ spdy::Http2HeaderBlock block;
+ block[":method"] = "GET";
+ block[":path"] = "/example";
+ block[":authority"] = "example.com";
+ spdy::SpdyHeadersIR headers{17, std::move(block)};
+
+ EXPECT_THAT(
+ absl::StrCat(absl::string_view(framer.SerializeFrame(ping)),
+ absl::string_view(framer.SerializeFrame(window_update)),
+ absl::string_view(framer.SerializeFrame(data)),
+ absl::string_view(framer.SerializeFrame(rst_stream)),
+ absl::string_view(framer.SerializeFrame(goaway)),
+ absl::string_view(framer.SerializeFrame(headers))),
+ ContainsFrames({{spdy::SpdyFrameType::PING, absl::nullopt},
+ {spdy::SpdyFrameType::WINDOW_UPDATE, absl::nullopt},
+ {spdy::SpdyFrameType::DATA, 25},
+ {spdy::SpdyFrameType::RST_STREAM, absl::nullopt},
+ {spdy::SpdyFrameType::GOAWAY, 42},
+ {spdy::SpdyFrameType::HEADERS, 19}}));
+}
+
+} // namespace
+} // namespace test
+} // namespace adapter
+} // namespace http2