mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-06 22:22:38 +03:00
If there's lost data, we have data to write, take 2.
Summary: This is a bug that could prevent us from writing data if we ran out of connection flow control while we had lost data. The last attempt missed a mistake in the scheduling of sequential priority streams. Reviewed By: kvtsoy Differential Revision: D33030784 fbshipit-source-id: e1b82234346a604875a9ffe9ab7bc5fb398450ed
This commit is contained in:
committed by
Facebook GitHub Bot
parent
8cde858b62
commit
ca4705af0b
@@ -3451,6 +3451,24 @@ TEST_F(QuicTransportFunctionsTest, ShouldWriteDataNoConnFlowControl) {
|
||||
EXPECT_EQ(WriteDataReason::NO_WRITE, shouldWriteData(*conn));
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportFunctionsTest, ShouldWriteDataNoConnFlowControlLoss) {
|
||||
auto conn = createConn();
|
||||
conn->oneRttWriteCipher = test::createNoOpAead();
|
||||
auto mockCongestionController =
|
||||
std::make_unique<NiceMock<MockCongestionController>>();
|
||||
auto rawCongestionController = mockCongestionController.get();
|
||||
EXPECT_CALL(*rawCongestionController, getWritableBytes())
|
||||
.WillRepeatedly(Return(1500));
|
||||
auto stream1 = conn->streamManager->createNextBidirectionalStream().value();
|
||||
auto buf = IOBuf::copyBuffer("0123456789");
|
||||
writeDataToQuicStream(*stream1, buf->clone(), false);
|
||||
EXPECT_NE(WriteDataReason::NO_WRITE, shouldWriteData(*conn));
|
||||
// Artificially limit the connection flow control.
|
||||
conn->streamManager->addLoss(stream1->id);
|
||||
conn->flowControlState.peerAdvertisedMaxOffset = 0;
|
||||
EXPECT_NE(WriteDataReason::NO_WRITE, shouldWriteData(*conn));
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportFunctionsTest, HasAckDataToWriteCipherAndAckStateMatch) {
|
||||
auto conn = createConn();
|
||||
EXPECT_FALSE(hasAckDataToWrite(*conn));
|
||||
|
Reference in New Issue
Block a user