Move oghttp2 shutdown tests to oghttp2_adapter_test.cc, and add analogous nghttp2 tests.
This testing prefactor/addition will be helpful for future shutdown changes.
PiperOrigin-RevId: 416875184
diff --git a/http2/adapter/nghttp2_adapter_test.cc b/http2/adapter/nghttp2_adapter_test.cc
index fc5dbd2..b2494e5 100644
--- a/http2/adapter/nghttp2_adapter_test.cc
+++ b/http2/adapter/nghttp2_adapter_test.cc
@@ -1072,6 +1072,22 @@
EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::SETTINGS}));
}
+TEST(NgHttp2AdapterTest, ClientStartsShutdown) {
+ DataSavingVisitor visitor;
+ auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ // No-op for a client implementation.
+ adapter->SubmitShutdownNotice();
+ EXPECT_FALSE(adapter->want_write());
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+
+ EXPECT_EQ(visitor.data(), spdy::kHttp2ConnectionHeaderPrefix);
+}
+
TEST(NgHttp2AdapterTest, ClientFailsOnGoAway) {
DataSavingVisitor visitor;
auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
@@ -3855,6 +3871,45 @@
EXPECT_FALSE(adapter->want_write());
}
+TEST(NgHttp2AdapterTest, ServerStartsShutdown) {
+ DataSavingVisitor visitor;
+ auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ adapter->SubmitShutdownNotice();
+ EXPECT_TRUE(adapter->want_write());
+
+ EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+ EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::GOAWAY}));
+}
+
+TEST(NgHttp2AdapterTest, ServerStartsShutdownAfterGoaway) {
+ DataSavingVisitor visitor;
+ auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ adapter->SubmitGoAway(1, Http2ErrorCode::HTTP2_NO_ERROR,
+ "and don't come back!");
+ EXPECT_TRUE(adapter->want_write());
+
+ EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+ EXPECT_THAT(visitor.data(), EqualsFrames({spdy::SpdyFrameType::GOAWAY}));
+
+ // No-op, since a GOAWAY has previously been enqueued.
+ adapter->SubmitShutdownNotice();
+ EXPECT_FALSE(adapter->want_write());
+}
+
} // namespace
} // namespace test
} // namespace adapter
diff --git a/http2/adapter/oghttp2_adapter_test.cc b/http2/adapter/oghttp2_adapter_test.cc
index 8d62da9..adc46c0 100644
--- a/http2/adapter/oghttp2_adapter_test.cc
+++ b/http2/adapter/oghttp2_adapter_test.cc
@@ -1298,6 +1298,30 @@
spdy::SpdyFrameType::RST_STREAM}));
}
+TEST(OgHttp2AdapterClientTest, ClientStartsShutdown) {
+ DataSavingVisitor visitor;
+ OgHttp2Adapter::Options options{.perspective = Perspective::kClient};
+ auto adapter = OgHttp2Adapter::Create(visitor, options);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ // No-op (except for logging) for a client implementation.
+ adapter->SubmitShutdownNotice();
+ EXPECT_FALSE(adapter->want_write());
+
+ EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+
+ absl::string_view serialized = visitor.data();
+ EXPECT_THAT(serialized,
+ testing::StartsWith(spdy::kHttp2ConnectionHeaderPrefix));
+ serialized.remove_prefix(strlen(spdy::kHttp2ConnectionHeaderPrefix));
+ EXPECT_THAT(serialized, EqualsFrames({SpdyFrameType::SETTINGS}));
+}
+
TEST(OgHttp2AdapterClientTest, ClientFailsOnGoAway) {
DataSavingVisitor visitor;
OgHttp2Adapter::Options options{.perspective = Perspective::kClient};
@@ -3887,6 +3911,53 @@
EXPECT_FALSE(adapter->want_write());
}
+TEST(OgHttpAdapterServerTest, ServerStartsShutdown) {
+ DataSavingVisitor visitor;
+ OgHttp2Adapter::Options options{.perspective = Perspective::kServer};
+ auto adapter = OgHttp2Adapter::Create(visitor, options);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ adapter->SubmitShutdownNotice();
+ EXPECT_TRUE(adapter->want_write());
+
+ EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
+ EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+ EXPECT_THAT(visitor.data(),
+ EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
+}
+
+TEST(OgHttp2AdapterServerTest, ServerStartsShutdownAfterGoaway) {
+ DataSavingVisitor visitor;
+ OgHttp2Adapter::Options options{.perspective = Perspective::kServer};
+ auto adapter = OgHttp2Adapter::Create(visitor, options);
+
+ EXPECT_FALSE(adapter->want_write());
+
+ adapter->SubmitGoAway(1, Http2ErrorCode::HTTP2_NO_ERROR,
+ "and don't come back!");
+ EXPECT_TRUE(adapter->want_write());
+
+ EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
+ EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
+ EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
+
+ int result = adapter->Send();
+ EXPECT_EQ(0, result);
+ EXPECT_THAT(visitor.data(),
+ EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
+
+ // No-op, since a GOAWAY has previously been enqueued.
+ adapter->SubmitShutdownNotice();
+ EXPECT_FALSE(adapter->want_write());
+}
+
} // namespace
} // namespace test
} // namespace adapter
diff --git a/http2/adapter/oghttp2_session_test.cc b/http2/adapter/oghttp2_session_test.cc
index 28a143a..83dd424 100644
--- a/http2/adapter/oghttp2_session_test.cc
+++ b/http2/adapter/oghttp2_session_test.cc
@@ -473,30 +473,6 @@
EXPECT_FALSE(session.want_write());
}
-TEST(OgHttp2SessionTest, ClientStartShutdown) {
- DataSavingVisitor visitor;
- OgHttp2Session session(
- visitor, OgHttp2Session::Options{.perspective = Perspective::kClient});
-
- EXPECT_FALSE(session.want_write());
-
- // No-op (except for logging) for a client implementation.
- session.StartGracefulShutdown();
- EXPECT_FALSE(session.want_write());
-
- EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
- EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
-
- int result = session.Send();
- EXPECT_EQ(0, result);
-
- absl::string_view serialized = visitor.data();
- EXPECT_THAT(serialized,
- testing::StartsWith(spdy::kHttp2ConnectionHeaderPrefix));
- serialized.remove_prefix(strlen(spdy::kHttp2ConnectionHeaderPrefix));
- EXPECT_THAT(serialized, EqualsFrames({SpdyFrameType::SETTINGS}));
-}
-
TEST(OgHttp2SessionTest, ServerConstruction) {
testing::StrictMock<MockHttp2Visitor> visitor;
OgHttp2Session session(
@@ -762,54 +738,6 @@
EXPECT_GT(session.GetHpackEncoderDynamicTableSize(), 0);
}
-TEST(OgHttp2SessionTest, ServerStartShutdown) {
- DataSavingVisitor visitor;
- OgHttp2Session session(
- visitor, OgHttp2Session::Options{.perspective = Perspective::kServer});
-
- EXPECT_FALSE(session.want_write());
-
- session.StartGracefulShutdown();
- EXPECT_TRUE(session.want_write());
-
- EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
- EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
- EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
- EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
-
- int result = session.Send();
- EXPECT_EQ(0, result);
- EXPECT_THAT(visitor.data(),
- EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
-}
-
-TEST(OgHttp2SessionTest, ServerStartShutdownAfterGoaway) {
- DataSavingVisitor visitor;
- OgHttp2Session session(
- visitor, OgHttp2Session::Options{.perspective = Perspective::kServer});
-
- EXPECT_FALSE(session.want_write());
-
- auto goaway = absl::make_unique<spdy::SpdyGoAwayIR>(
- 1, spdy::ERROR_CODE_NO_ERROR, "and don't come back!");
- session.EnqueueFrame(std::move(goaway));
- EXPECT_TRUE(session.want_write());
-
- EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
- EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
- EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
- EXPECT_CALL(visitor, OnFrameSent(GOAWAY, 0, _, 0x0, 0));
-
- int result = session.Send();
- EXPECT_EQ(0, result);
- EXPECT_THAT(visitor.data(),
- EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
-
- // No-op, since a GOAWAY has previously been enqueued.
- session.StartGracefulShutdown();
- EXPECT_FALSE(session.want_write());
-}
-
// Tests the case where the server queues trailers after the data stream is
// exhausted.
TEST(OgHttp2SessionTest, ServerSendsTrailers) {