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:
committed by
Facebook GitHub Bot
parent
ce0873c14d
commit
1e594fe1ba
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user