mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-06 22:22:38 +03:00
Redo "Update QUIC stream state after BufferMeta is written "
Summary: try to land this again without the compiler flags change Differential Revision: D26958681 fbshipit-source-id: d00659aaf819dbb2942da8b41deab3d108a19f0f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
eefd6f88d0
commit
cabbdfa0d7
@@ -2612,5 +2612,62 @@ TEST_F(QuicTransportFunctionsTest, WriteD6DProbesWithInplaceBuilder) {
|
||||
EXPECT_EQ(0, bufPtr->headroom());
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportFunctionsTest, UpdateConnectionWithBufferMeta) {
|
||||
auto conn = createConn();
|
||||
// Builds a fake packet to test with.
|
||||
auto packet = buildEmptyPacket(*conn, PacketNumberSpace::AppData);
|
||||
|
||||
auto streamId =
|
||||
conn->streamManager->createNextBidirectionalStream().value()->id;
|
||||
auto stream = conn->streamManager->findStream(streamId);
|
||||
EXPECT_TRUE(stream->retransmissionBufMetas.empty());
|
||||
writeDataToQuicStream(
|
||||
*stream, IOBuf::copyBuffer("Wear a face mask please!"), false /* eof */);
|
||||
BufferMeta bufMeta(2000);
|
||||
writeBufMetaToQuicStream(*stream, bufMeta, true /* eof */);
|
||||
EXPECT_TRUE(stream->writeBufMeta.eof);
|
||||
EXPECT_EQ(2000, stream->writeBufMeta.length);
|
||||
auto bufMetaStartingOffset = stream->writeBufMeta.offset;
|
||||
WriteStreamFrame writeStreamFrame(
|
||||
streamId, bufMetaStartingOffset, 1000, false /* fin */);
|
||||
writeStreamFrame.fromBufMeta = true;
|
||||
packet.packet.frames.push_back(writeStreamFrame);
|
||||
|
||||
updateConnection(
|
||||
*conn, folly::none, packet.packet, TimePoint(), getEncodedSize(packet));
|
||||
EXPECT_EQ(1000 + bufMetaStartingOffset, stream->writeBufMeta.offset);
|
||||
EXPECT_EQ(1000, stream->writeBufMeta.length);
|
||||
EXPECT_FALSE(stream->retransmissionBufMetas.empty());
|
||||
auto retxBufMetaIter =
|
||||
stream->retransmissionBufMetas.find(bufMetaStartingOffset);
|
||||
EXPECT_NE(retxBufMetaIter, stream->retransmissionBufMetas.end());
|
||||
EXPECT_EQ(bufMetaStartingOffset, retxBufMetaIter->second.offset);
|
||||
EXPECT_EQ(1000, retxBufMetaIter->second.length);
|
||||
EXPECT_FALSE(retxBufMetaIter->second.eof);
|
||||
|
||||
// Manually lose this packet:
|
||||
stream->lossBufMetas.push_back(retxBufMetaIter->second);
|
||||
stream->retransmissionBufMetas.erase(retxBufMetaIter);
|
||||
ASSERT_FALSE(stream->lossBufMetas.empty());
|
||||
ASSERT_TRUE(stream->retransmissionBufMetas.empty());
|
||||
|
||||
// Retransmit it:
|
||||
auto retxPacket = buildEmptyPacket(*conn, PacketNumberSpace::AppData);
|
||||
// Retx of the stream looks exactly the same
|
||||
retxPacket.packet.frames.push_back(writeStreamFrame);
|
||||
updateConnection(
|
||||
*conn,
|
||||
folly::none,
|
||||
retxPacket.packet,
|
||||
TimePoint(),
|
||||
getEncodedSize(retxPacket));
|
||||
EXPECT_TRUE(stream->lossBufMetas.empty());
|
||||
retxBufMetaIter = stream->retransmissionBufMetas.find(bufMetaStartingOffset);
|
||||
EXPECT_NE(retxBufMetaIter, stream->retransmissionBufMetas.end());
|
||||
EXPECT_EQ(bufMetaStartingOffset, retxBufMetaIter->second.offset);
|
||||
EXPECT_EQ(1000, retxBufMetaIter->second.length);
|
||||
EXPECT_FALSE(retxBufMetaIter->second.eof);
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace quic
|
||||
|
Reference in New Issue
Block a user