1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-06 22:22:38 +03:00

Write a buffer's meta data into QUIC

Summary:
Instead of writing real data into the transport, we want to support a
use case where only its metadata is written to the transport. Sending of the
real data is delegated to another entity in such setup.

Reviewed By: mjoras

Differential Revision: D26131772

fbshipit-source-id: 4fcfa3a1626203f63c61898e6de089a3079d043d
This commit is contained in:
Yang Chi
2021-03-03 23:48:14 -08:00
committed by Facebook GitHub Bot
parent 968b39f4a9
commit adc1e15eff
8 changed files with 229 additions and 0 deletions

View File

@@ -3279,5 +3279,31 @@ TEST_F(QuicTransportTest, PrioritySetAndGet) {
EXPECT_EQ(LocalErrorCode::CONNECTION_CLOSED, closedConnStreamPri.error());
}
TEST_F(QuicTransportTest, WriteBufMetaIntoStream) {
auto streamId = transport_->createBidirectionalStream().value();
size_t bufferLength = 2000;
BufferMeta meta(bufferLength);
auto buf = buildRandomInputData(20);
// Some amount of real data needs to be written first:
transport_->writeChain(streamId, std::move(buf), false);
transport_->writeBufMeta(streamId, meta, true);
auto& stream =
*transport_->getConnectionState().streamManager->findStream(streamId);
EXPECT_GE(stream.writeBufMeta.offset, 20);
EXPECT_EQ(stream.writeBufMeta.length, bufferLength);
EXPECT_TRUE(stream.writeBufMeta.eof);
EXPECT_EQ(
*stream.finalWriteOffset,
stream.writeBufMeta.offset + stream.writeBufMeta.length);
}
TEST_F(QuicTransportTest, WriteBufMetaWithoutRealData) {
auto streamId = transport_->createBidirectionalStream().value();
size_t bufferLength = 2000;
BufferMeta meta(bufferLength);
auto result = transport_->writeBufMeta(streamId, meta, true);
EXPECT_TRUE(result.hasError());
}
} // namespace test
} // namespace quic