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

Implement one Datagram Frame per packet, and discard policy on rx/tx paths

Reviewed By: mjoras

Differential Revision: D28167755

fbshipit-source-id: b589376800742dfe167f1efe193f0fe059b18ab4
This commit is contained in:
Luca Niccolini
2021-06-13 21:12:07 -07:00
committed by Facebook GitHub Bot
parent dc3b4dded0
commit 4acc7dc355
6 changed files with 133 additions and 14 deletions

View File

@@ -1842,6 +1842,54 @@ TEST_F(QuicPacketSchedulerTest, NoFINWriteWhenBufMetaWrittenFIN) {
EXPECT_FALSE(scheduler2.hasPendingData());
}
TEST_F(QuicPacketSchedulerTest, DatagramFrameSchedulerMultipleFramesPerPacket) {
QuicClientConnectionState conn(
FizzClientQuicHandshakeContext::Builder().build());
conn.datagramState.maxReadFrameSize = std::numeric_limits<uint16_t>::max();
conn.datagramState.maxReadBufferSize = 10;
conn.transportSettings.datagramConfig.framePerPacket = false;
DatagramFrameScheduler scheduler(conn);
// Add datagrams
conn.datagramState.writeBuffer.emplace_back(
folly::IOBuf::createChain(conn.udpSendPacketLen / 3, 4096));
conn.datagramState.writeBuffer.emplace_back(
folly::IOBuf::createChain(conn.udpSendPacketLen / 3, 4096));
NiceMock<MockQuicPacketBuilder> builder2;
EXPECT_CALL(builder2, remainingSpaceInPkt()).WillRepeatedly(Return(4096));
EXPECT_CALL(builder2, appendFrame(_)).WillRepeatedly(Invoke([&](auto f) {
builder2.frames_.push_back(f);
}));
// Call scheduler
auto& frames = builder2.frames_;
scheduler.writeDatagramFrames(builder2);
ASSERT_EQ(frames.size(), 2);
}
TEST_F(QuicPacketSchedulerTest, DatagramFrameSchedulerOneFramePerPacket) {
QuicClientConnectionState conn(
FizzClientQuicHandshakeContext::Builder().build());
conn.datagramState.maxReadFrameSize = std::numeric_limits<uint16_t>::max();
conn.datagramState.maxReadBufferSize = 10;
conn.transportSettings.datagramConfig.framePerPacket = true;
DatagramFrameScheduler scheduler(conn);
// Add datagrams
conn.datagramState.writeBuffer.emplace_back(
folly::IOBuf::createChain(conn.udpSendPacketLen / 3, 4096));
conn.datagramState.writeBuffer.emplace_back(
folly::IOBuf::createChain(conn.udpSendPacketLen / 3, 4096));
NiceMock<MockQuicPacketBuilder> builder2;
EXPECT_CALL(builder2, remainingSpaceInPkt()).WillRepeatedly(Return(4096));
EXPECT_CALL(builder2, appendFrame(_)).WillRepeatedly(Invoke([&](auto f) {
builder2.frames_.push_back(f);
}));
// Call scheduler
auto& frames = builder2.frames_;
scheduler.writeDatagramFrames(builder2);
ASSERT_EQ(frames.size(), 1);
scheduler.writeDatagramFrames(builder2);
ASSERT_EQ(frames.size(), 2);
}
INSTANTIATE_TEST_CASE_P(
QuicPacketSchedulerTests,
QuicPacketSchedulerTest,