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

Revert D26260987: Update QUIC stream state after BufferMeta is written

Differential Revision:
D26260987 (78170a2f3b)

Original commit changeset: 15a4fa178264

fbshipit-source-id: 3942cea62eaf404d79da49310faf5d233de86cfa
This commit is contained in:
Misha Shneerson
2021-03-10 12:44:14 -08:00
committed by Facebook GitHub Bot
parent b1424782d4
commit 3c350f5256
3 changed files with 42 additions and 176 deletions

View File

@@ -2612,62 +2612,5 @@ 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