Reworks the remaining DataFrameSource-based test cases in nghttp2_adapter_test.cc.
The `DataFrameSource` parts of the API are no longer used and will be removed shortly.
PiperOrigin-RevId: 699324410
diff --git a/quiche/http2/adapter/nghttp2_adapter_test.cc b/quiche/http2/adapter/nghttp2_adapter_test.cc
index ad76dc9..f153eb8 100644
--- a/quiche/http2/adapter/nghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/nghttp2_adapter_test.cc
@@ -38,24 +38,6 @@
CONTINUATION,
};
-// This send callback assumes |source|'s pointer is a TestDataSource, and
-// |user_data| is a Http2VisitorInterface.
-int TestSendCallback(nghttp2_session*, nghttp2_frame* /*frame*/,
- const uint8_t* framehd, size_t length,
- nghttp2_data_source* source, void* user_data) {
- auto* visitor = static_cast<Http2VisitorInterface*>(user_data);
- // Send the frame header via the visitor.
- ssize_t result = visitor->OnReadyToSend(ToStringView(framehd, 9));
- if (result == 0) {
- return NGHTTP2_ERR_WOULDBLOCK;
- }
- auto* test_source = static_cast<TestDataSource*>(source->ptr);
- absl::string_view payload = test_source->ReadNext(length);
- // Send the frame payload via the visitor.
- visitor->OnReadyToSend(payload);
- return 0;
-}
-
TEST(NgHttp2AdapterTest, ClientConstruction) {
testing::StrictMock<MockHttp2Visitor> visitor;
auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
@@ -2401,97 +2383,20 @@
kInitialFlowControlWindowSize);
}
-// This is really a test of the MakeZeroCopyDataFrameSource adapter, but I
-// wasn't sure where else to put it.
-TEST(NgHttp2AdapterTest, ClientSubmitRequestWithDataProvider) {
- TestVisitor visitor;
- auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
- int result = adapter->Send();
- EXPECT_EQ(0, result);
- // Client preface does not appear to include the mandatory SETTINGS frame.
- EXPECT_THAT(visitor.data(),
- testing::StrEq(spdy::kHttp2ConnectionHeaderPrefix));
- visitor.Clear();
-
- const std::string initial_frames =
- TestFrameSequence().ServerPreface().Serialize();
- testing::InSequence s;
-
- // Server preface (empty SETTINGS)
- EXPECT_CALL(visitor, OnFrameHeader(0, 0, SETTINGS, 0));
- EXPECT_CALL(visitor, OnSettingsStart());
- EXPECT_CALL(visitor, OnSettingsEnd());
-
- const int64_t initial_result = adapter->ProcessBytes(initial_frames);
- EXPECT_EQ(initial_frames.size(), initial_result);
-
- EXPECT_TRUE(adapter->want_write());
-
- EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, 0, 0x1));
- EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, 0, 0x1, 0));
-
- result = adapter->Send();
- EXPECT_EQ(0, result);
- EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::SETTINGS}));
- visitor.Clear();
-
- EXPECT_FALSE(adapter->want_write());
- const absl::string_view kBody = "This is an example request body.";
- // This test will use TestDataSource as the source of the body payload data.
- TestDataSource body1{kBody};
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
- nghttp2_send_data_callback send_callback = &TestSendCallback;
-
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &visitor, std::move(send_callback));
- int stream_id =
- adapter->SubmitRequest(ToHeaders({{":method", "POST"},
- {":scheme", "http"},
- {":authority", "example.com"},
- {":path", "/this/is/request/one"}}),
- std::move(frame_source), false, nullptr);
- EXPECT_GT(stream_id, 0);
- EXPECT_TRUE(adapter->want_write());
-
- EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, stream_id, _, 0x4));
- EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
- EXPECT_CALL(visitor, OnFrameSent(DATA, stream_id, _, 0x1, 0));
-
- result = adapter->Send();
- EXPECT_EQ(0, result);
- EXPECT_THAT(visitor.data(),
- EqualsFrames({SpdyFrameType::HEADERS, SpdyFrameType::DATA}));
- EXPECT_THAT(visitor.data(), testing::HasSubstr(kBody));
- EXPECT_FALSE(adapter->want_write());
-}
-
// This test verifies how nghttp2 behaves when a data source becomes
// read-blocked.
-TEST(NgHttp2AdapterTest, ClientSubmitRequestWithDataProviderAndReadBlock) {
+TEST(NgHttp2AdapterTest, ClientSubmitRequestWithReadBlock) {
TestVisitor visitor;
auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
const absl::string_view kBody = "This is an example request body.";
- // This test will use TestDataSource as the source of the body payload data.
- TestDataSource body1{kBody};
- body1.set_is_data_available(false);
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
- nghttp2_send_data_callback send_callback = &TestSendCallback;
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &visitor, std::move(send_callback));
int stream_id =
adapter->SubmitRequest(ToHeaders({{":method", "POST"},
{":scheme", "http"},
{":authority", "example.com"},
{":path", "/this/is/request/one"}}),
- std::move(frame_source), false, nullptr);
+ nullptr, false, nullptr);
EXPECT_GT(stream_id, 0);
EXPECT_TRUE(adapter->want_write());
@@ -2510,7 +2415,8 @@
EXPECT_FALSE(adapter->want_write());
// Resume the deferred stream.
- body1.set_is_data_available(true);
+ visitor.AppendPayloadForStream(stream_id, kBody);
+ visitor.SetEndData(stream_id, true);
EXPECT_TRUE(adapter->ResumeStream(stream_id));
EXPECT_TRUE(adapter->want_write());
@@ -2532,24 +2438,12 @@
TestVisitor visitor;
auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
- const absl::string_view kEmptyBody = "";
- // This test will use TestDataSource as the source of the body payload data.
- TestDataSource body1{kEmptyBody};
- body1.set_is_data_available(false);
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
- nghttp2_send_data_callback send_callback = &TestSendCallback;
-
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &visitor, std::move(send_callback));
int stream_id =
adapter->SubmitRequest(ToHeaders({{":method", "POST"},
{":scheme", "http"},
{":authority", "example.com"},
{":path", "/this/is/request/one"}}),
- std::move(frame_source), false, nullptr);
+ nullptr, false, nullptr);
EXPECT_GT(stream_id, 0);
EXPECT_TRUE(adapter->want_write());
@@ -2568,7 +2462,7 @@
EXPECT_FALSE(adapter->want_write());
// Resume the deferred stream.
- body1.set_is_data_available(true);
+ visitor.SetEndData(stream_id, true);
EXPECT_TRUE(adapter->ResumeStream(stream_id));
EXPECT_TRUE(adapter->want_write());
@@ -2586,7 +2480,7 @@
// This test verifies how nghttp2 behaves when a connection becomes
// write-blocked while sending HEADERS.
-TEST(NgHttp2AdapterTest, ClientSubmitRequestWithDataProviderAndWriteBlock) {
+TEST(NgHttp2AdapterTest, ClientSubmitRequestWithWriteBlock) {
TestVisitor visitor;
auto adapter = NgHttp2Adapter::CreateClientAdapter(visitor);
@@ -2598,22 +2492,13 @@
visitor.Clear();
const absl::string_view kBody = "This is an example request body.";
- // This test will use TestDataSource as the source of the body payload data.
- TestDataSource body1{kBody};
- // The TestDataSource is wrapped in the nghttp2_data_provider data type.
- nghttp2_data_provider provider = body1.MakeDataProvider();
- nghttp2_send_data_callback send_callback = &TestSendCallback;
- // This call transforms it back into a DataFrameSource, which is compatible
- // with the Http2Adapter API.
- std::unique_ptr<DataFrameSource> frame_source =
- MakeZeroCopyDataFrameSource(provider, &visitor, std::move(send_callback));
int stream_id =
adapter->SubmitRequest(ToHeaders({{":method", "POST"},
{":scheme", "http"},
{":authority", "example.com"},
{":path", "/this/is/request/one"}}),
- std::move(frame_source), false, nullptr);
+ nullptr, false, nullptr);
EXPECT_GT(stream_id, 0);
EXPECT_TRUE(adapter->want_write());
@@ -2628,6 +2513,8 @@
EXPECT_CALL(visitor, OnFrameSent(HEADERS, stream_id, _, 0x4, 0));
EXPECT_CALL(visitor, OnFrameSent(DATA, stream_id, _, 0x1, 0));
+ visitor.AppendPayloadForStream(stream_id, kBody);
+ visitor.SetEndData(stream_id, true);
visitor.set_is_write_blocked(false);
result = adapter->Send();
EXPECT_EQ(0, result);