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

Add idle timer checker

Reviewed By: mjoras

Differential Revision: D60913168

fbshipit-source-id: 1b14a2e17545ba24f879e7212153eee19cfe9972
This commit is contained in:
Konstantin Tsoy
2024-08-07 18:55:45 -07:00
committed by Facebook GitHub Bot
parent 901fcc5847
commit b51ee87995
4 changed files with 102 additions and 0 deletions

View File

@@ -413,6 +413,14 @@ class TestQuicTransport
return readLooper_;
}
void runCheckIdleTimer(TimePoint now) {
checkIdleTimer(now);
}
const IdleTimeoutCheck& getIdleTimeoutCheck() {
return idleTimeoutCheck_;
}
void unbindConnection() {}
void onReadError(const folly::AsyncSocketException&) noexcept {}
@@ -4961,5 +4969,46 @@ TEST_P(
transport.reset();
}
TEST_P(QuicTransportImplTestBase, TestCheckIdleTimerTimerActiveConnNotExpired) {
auto transportSettings = transport->getTransportSettings();
transportSettings.checkIdleTimerOnWrite = true;
transport->setTransportSettings(transportSettings);
transport->getConnectionState().streamManager->refreshTransportSettings(
transportSettings);
transport->transportConn->oneRttWriteCipher = test::createNoOpAead();
EXPECT_FALSE(transport->isClosed());
transport->setIdleTimeout();
transport->runCheckIdleTimer(Clock::now());
qEvb->loopOnce();
EXPECT_FALSE(transport->isClosed());
transport.reset();
}
TEST_P(QuicTransportImplTestBase, TestCheckIdleTimerTimerActiveConnExpired) {
auto transportSettings = transport->getTransportSettings();
transportSettings.checkIdleTimerOnWrite = true;
transport->setTransportSettings(transportSettings);
transport->getConnectionState().streamManager->refreshTransportSettings(
transportSettings);
transport->transportConn->oneRttWriteCipher = test::createNoOpAead();
EXPECT_FALSE(transport->isClosed());
transport->setIdleTimeout();
const auto& idleTimerCheck = transport->getIdleTimeoutCheck();
TimePoint fakeFutureTs = Clock::now() +
std::chrono::milliseconds(idleTimerCheck.idleTimeoutMs.count() + 1000);
transport->runCheckIdleTimer(fakeFutureTs);
qEvb->loopOnce();
EXPECT_TRUE(transport->isClosed());
transport.reset();
}
} // namespace test
} // namespace quic