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

Defer stream available callbacks until connCallback_ is set

Summary: If the peer sends higher stream limits in the settings, these callbacks may be invoked before the app has a chance to set the connection callback.

Reviewed By: sharmafb

Differential Revision: D64214648

fbshipit-source-id: 6a8a9b8d4d9e02a2baad672d69a43ba61daba918
This commit is contained in:
Alan Frindell
2024-10-25 15:02:38 -07:00
committed by Facebook GitHub Bot
parent 02a98533da
commit 0c061201af
5 changed files with 37 additions and 5 deletions

View File

@@ -235,8 +235,6 @@ class TestQuicTransport
ConnectionCallback* connCb)
: QuicTransportBase(std::move(evb), std::move(socket)),
observerContainer_(std::make_shared<SocketObserverContainer>(this)) {
setConnectionSetupCallback(connSetupCb);
setConnectionCallback(connCb);
auto conn = std::make_unique<QuicServerConnectionState>(
FizzServerQuicHandshakeContext::Builder().build());
conn->clientConnectionId = ConnectionId({10, 9, 8, 7});
@@ -247,6 +245,8 @@ class TestQuicTransport
aead = test::createNoOpAead();
headerCipher = test::createNoOpHeaderCipher();
connIdAlgo_ = std::make_unique<DefaultConnectionIdAlgo>();
setConnectionSetupCallback(connSetupCb);
setConnectionCallbackFromCtor(connCb);
}
~TestQuicTransport() override {
@@ -711,6 +711,23 @@ TEST_P(QuicTransportImplTestBase, IdleTimeoutExpiredDestroysTransport) {
transport->invokeIdleTimeout();
}
TEST_P(QuicTransportImplTestBase, DelayConnCallback) {
transport->transportConn->streamManager->setMaxLocalBidirectionalStreams(
0, /*force=*/true);
transport->setConnectionCallback(nullptr);
transport->addMaxStreamsFrame(
MaxStreamsFrame(10, /*isBidirectionalIn=*/true));
transport->setConnectionCallback(&connCallback);
EXPECT_CALL(connCallback, onBidirectionalStreamsAvailable(_))
.WillOnce(Invoke([](uint64_t numAvailableStreams) {
EXPECT_EQ(numAvailableStreams, 10);
}));
transport->getEventBase()->loopOnce();
transport.reset();
}
TEST_P(QuicTransportImplTestBase, IdleTimeoutStreamMaessage) {
auto stream1 = transport->createBidirectionalStream().value();
auto stream2 = transport->createBidirectionalStream().value();