mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-06 22:22:38 +03:00
Allow specifying error code in setReadCallback
Summary: We have an API behavior where setReadCalback will issue a StopSending on behalf of the app. This is useful but has confusing semantics as it always defaults to GenericApplicationError::NO_ERROR. Instead let the error be specified as part of the API. Reviewed By: yangchi, lnicco Differential Revision: D23055196 fbshipit-source-id: 755f4122bf445016c9b5adb23c3090fc23173eb9
This commit is contained in:
committed by
Facebook GitHub Bot
parent
acf0d30c16
commit
81756e3d13
@@ -888,6 +888,85 @@ TEST_F(QuicTransportTest, StopSending) {
|
||||
EXPECT_TRUE(foundStopSending);
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportTest, StopSendingReadCallbackDefault) {
|
||||
auto streamId = transport_->createBidirectionalStream().value();
|
||||
NiceMock<MockReadCallback> readCb;
|
||||
EXPECT_CALL(*socket_, write(_, _)).WillOnce(Invoke(bufLength));
|
||||
transport_->setReadCallback(streamId, &readCb);
|
||||
transport_->setReadCallback(streamId, nullptr);
|
||||
loopForWrites();
|
||||
EXPECT_EQ(1, transport_->getConnectionState().outstandings.packets.size());
|
||||
auto packet =
|
||||
getLastOutstandingPacket(
|
||||
transport_->getConnectionState(), PacketNumberSpace::AppData)
|
||||
->packet;
|
||||
EXPECT_EQ(1, packet.frames.size());
|
||||
bool foundStopSending = false;
|
||||
for (auto& frame : packet.frames) {
|
||||
const QuicSimpleFrame* simpleFrame = frame.asQuicSimpleFrame();
|
||||
if (!simpleFrame) {
|
||||
continue;
|
||||
}
|
||||
const StopSendingFrame* stopSending = simpleFrame->asStopSendingFrame();
|
||||
if (!stopSending) {
|
||||
continue;
|
||||
}
|
||||
EXPECT_EQ(streamId, stopSending->streamId);
|
||||
EXPECT_EQ(GenericApplicationErrorCode::NO_ERROR, stopSending->errorCode);
|
||||
foundStopSending = true;
|
||||
}
|
||||
EXPECT_TRUE(foundStopSending);
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportTest, StopSendingReadCallback) {
|
||||
auto streamId = transport_->createBidirectionalStream().value();
|
||||
NiceMock<MockReadCallback> readCb;
|
||||
EXPECT_CALL(*socket_, write(_, _)).WillOnce(Invoke(bufLength));
|
||||
transport_->setReadCallback(streamId, &readCb);
|
||||
transport_->setReadCallback(
|
||||
streamId, nullptr, GenericApplicationErrorCode::UNKNOWN);
|
||||
loopForWrites();
|
||||
EXPECT_EQ(1, transport_->getConnectionState().outstandings.packets.size());
|
||||
auto packet =
|
||||
getLastOutstandingPacket(
|
||||
transport_->getConnectionState(), PacketNumberSpace::AppData)
|
||||
->packet;
|
||||
EXPECT_EQ(1, packet.frames.size());
|
||||
bool foundStopSending = false;
|
||||
for (auto& frame : packet.frames) {
|
||||
const QuicSimpleFrame* simpleFrame = frame.asQuicSimpleFrame();
|
||||
if (!simpleFrame) {
|
||||
continue;
|
||||
}
|
||||
const StopSendingFrame* stopSending = simpleFrame->asStopSendingFrame();
|
||||
if (!stopSending) {
|
||||
continue;
|
||||
}
|
||||
EXPECT_EQ(streamId, stopSending->streamId);
|
||||
EXPECT_EQ(GenericApplicationErrorCode::UNKNOWN, stopSending->errorCode);
|
||||
foundStopSending = true;
|
||||
}
|
||||
EXPECT_TRUE(foundStopSending);
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportTest, StopSendingReadCallbackNone) {
|
||||
auto streamId = transport_->createBidirectionalStream().value();
|
||||
NiceMock<MockReadCallback> readCb;
|
||||
transport_->setReadCallback(streamId, &readCb);
|
||||
transport_->setReadCallback(streamId, nullptr, folly::none);
|
||||
loopForWrites();
|
||||
EXPECT_EQ(0, transport_->getConnectionState().outstandings.packets.size());
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportTest, NoStopSendingReadCallback) {
|
||||
auto streamId = transport_->createBidirectionalStream().value();
|
||||
NiceMock<MockReadCallback> readCb;
|
||||
transport_->setReadCallback(streamId, &readCb);
|
||||
loopForWrites();
|
||||
EXPECT_EQ(0, transport_->getConnectionState().outstandings.packets.size());
|
||||
transport_->setReadCallback(streamId, nullptr, folly::none);
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportTest, SendPathChallenge) {
|
||||
EXPECT_CALL(*socket_, write(_, _)).WillOnce(Invoke(bufLength));
|
||||
auto& conn = transport_->getConnectionState();
|
||||
|
Reference in New Issue
Block a user