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:
committed by
Facebook GitHub Bot
parent
02a98533da
commit
0c061201af
@@ -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();
|
||||
|
Reference in New Issue
Block a user