1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00

Update ACK_FREQUENCY frame

Summary:
- Use varint reordering threshold (this is still being discussed, using varint until a decision is made)
- Track server's minAckDelay on client
- Track ack frequency frame sequence number
- Improve frame parsing error logs
- Add some unit tests

Reviewed By: hanidamlaj

Differential Revision: D38289108

fbshipit-source-id: 274e45115022ffd4e15b60dc57f77f1cce69bd82
This commit is contained in:
Joseph Beshay
2022-08-24 11:11:33 -07:00
committed by Facebook GitHub Bot
parent ce0873c14d
commit 1e594fe1ba
10 changed files with 126 additions and 17 deletions

View File

@@ -1677,5 +1677,51 @@ TEST_F(QuicWriteCodecTest, WriteStreamFrameWithGroup) {
EXPECT_TRUE(folly::IOBufEqualTo()(inputBuf, decodedStreamFrame.data));
}
TEST_F(QuicWriteCodecTest, WriteAckFrequencyFrame) {
MockQuicPacketBuilder pktBuilder;
pktBuilder.remaining_ = 1300;
setupCommonExpects(pktBuilder);
AckFrequencyFrame frame;
frame.sequenceNumber = 5; // Length: 1
frame.packetTolerance = 100; // Length: 2
frame.updateMaxAckDelay = 150000; // Length: 4
frame.reorderThreshold = 50; // Length: 1
auto dataLen = writeSimpleFrame(frame, pktBuilder);
ASSERT_EQ(dataLen, 10); // Based upon the values passed above + 2 (frame-type)
auto outputBuf = pktBuilder.data_->clone();
EXPECT_EQ(outputBuf->computeChainDataLength(), 10);
auto builtOut = std::move(pktBuilder).buildTestPacket();
auto regularPacket = builtOut.first;
ASSERT_EQ(regularPacket.frames.size(), 1);
ASSERT_TRUE(regularPacket.frames[0].asQuicSimpleFrame());
auto resultFrame =
regularPacket.frames[0].asQuicSimpleFrame()->asAckFrequencyFrame();
ASSERT_TRUE(resultFrame);
EXPECT_EQ(resultFrame->sequenceNumber, frame.sequenceNumber);
EXPECT_EQ(resultFrame->packetTolerance, frame.packetTolerance);
EXPECT_EQ(resultFrame->sequenceNumber, frame.sequenceNumber);
EXPECT_EQ(resultFrame->reorderThreshold, frame.reorderThreshold);
// Verify the on wire bytes via decoder.
auto wireBuf = std::move(builtOut.second);
BufQueue queue;
queue.append(wireBuf->clone());
QuicFrame parsedFrame = quic::parseFrame(
queue,
regularPacket.header,
CodecParameters(kDefaultAckDelayExponent, QuicVersion::MVFST));
ASSERT_TRUE(parsedFrame.asQuicSimpleFrame());
auto decodedFrame = parsedFrame.asQuicSimpleFrame()->asAckFrequencyFrame();
ASSERT_TRUE(decodedFrame);
EXPECT_EQ(decodedFrame->sequenceNumber, frame.sequenceNumber);
EXPECT_EQ(decodedFrame->packetTolerance, frame.packetTolerance);
EXPECT_EQ(decodedFrame->sequenceNumber, frame.sequenceNumber);
EXPECT_EQ(decodedFrame->reorderThreshold, frame.reorderThreshold);
}
} // namespace test
} // namespace quic