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

Immediately retransmit initial packets in writeCryptoAndAckDataToSocket

Summary: In `writeCryptoAndAckDataToSocket`, add an additional `writeProbingDataToSocket` call at the end that is limited to the number of CRYPTO frame-containing packets just written, gated by the new `TransportSetttings` field `immediatelyRetransmitInitialPackets`.

Reviewed By: mjoras

Differential Revision: D64485616

fbshipit-source-id: f0927a3796767700fd46673195e1cd4e1bbbcbeb
This commit is contained in:
Jolene Tan
2024-10-24 15:30:20 -07:00
committed by Facebook GitHub Bot
parent cc14fe8d55
commit 1dad9543b9
3 changed files with 55 additions and 1 deletions

View File

@@ -3372,6 +3372,38 @@ TEST_F(QuicTransportFunctionsTest, NoCryptoProbeWriteIfNoProbeCredit) {
EXPECT_EQ(0, res.probesWritten);
}
TEST_F(QuicTransportFunctionsTest, ImmediatelyRetransmitInitialPackets) {
auto conn = createConn();
conn->transportSettings.immediatelyRetransmitInitialPackets = true;
auto cryptoStream = &conn->cryptoState->initialStream;
auto buf = buildRandomInputData(1600);
writeDataToQuicStream(*cryptoStream, buf->clone());
EventBase evb;
std::shared_ptr<FollyQuicEventBase> qEvb =
std::make_shared<FollyQuicEventBase>(&evb);
auto socket =
std::make_unique<NiceMock<quic::test::MockAsyncUDPSocket>>(qEvb);
auto rawSocket = socket.get();
auto res = writeCryptoAndAckDataToSocket(
*rawSocket,
*conn,
*conn->clientConnectionId,
*conn->serverConnectionId,
LongHeader::Types::Initial,
*conn->initialWriteCipher,
*conn->initialHeaderCipher,
getVersion(*conn),
conn->transportSettings.writeConnectionDataPacketsLimit);
EXPECT_GE(res.bytesWritten, buf->computeChainDataLength());
EXPECT_EQ(2, res.packetsWritten);
EXPECT_EQ(2, res.probesWritten);
EXPECT_EQ(conn->udpSendPacketLen * 4, res.bytesWritten);
ASSERT_EQ(4, conn->outstandings.packets.size());
ASSERT_EQ(2, cryptoStream->retransmissionBuffer.size());
ASSERT_TRUE(cryptoStream->pendingWrites.empty());
}
TEST_F(QuicTransportFunctionsTest, ResetNumProbePackets) {
auto conn = createConn();
EventBase evb;