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

fix to peek API

Reviewed By: lnicco

Differential Revision: D15415966

fbshipit-source-id: 50363c4d6289d27e772cab5000bb387926c96db0
This commit is contained in:
Omer Shapira
2019-05-22 19:58:38 -07:00
committed by Facebook Github Bot
parent 482366c63a
commit 3099d621af
10 changed files with 181 additions and 59 deletions

View File

@@ -155,7 +155,7 @@ class TestQuicTransport
return lossTimeout_.getTimeRemaining();
}
void onReadData(const folly::SocketAddress&, NetworkData&& data) {
void onReadData(const folly::SocketAddress&, NetworkData&& data) override {
if (!data.data) {
return;
}
@@ -194,8 +194,8 @@ class TestQuicTransport
continue;
}
appendDataToReadBuffer(*stream, std::move(buffer.second));
conn_->streamManager->updatePeekableStreams(*stream);
conn_->streamManager->updateReadableStreams(*stream);
conn_->streamManager->updatePeekableStreams(*stream);
}
}
}
@@ -276,6 +276,7 @@ class TestQuicTransport
QuicStreamState* stream = conn_->streamManager->getStream(id);
stream->streamReadError = ex;
conn_->streamManager->updateReadableStreams(*stream);
conn_->streamManager->updatePeekableStreams(*stream);
updateReadLooper();
}
@@ -1847,17 +1848,18 @@ TEST_F(QuicTransportImplTest, PeekConsumeReadTest) {
EXPECT_CALL(peekCb, onDataAvailable(stream1, _));
transport->driveReadCallbacks();
// Only read should be called.
// Only read should be called
EXPECT_CALL(readCb, readAvailable(stream1));
EXPECT_CALL(peekCb, onDataAvailable(stream1, _)).Times(0);
transport->driveReadCallbacks();
// Consume 5 bytes.
transport->consume(stream1, 5);
// Only read should be called.
// Both peek and read should be called.
// Read - because it is called every time
// Peek - because the peekable range has changed
EXPECT_CALL(readCb, readAvailable(stream1));
EXPECT_CALL(peekCb, onDataAvailable(stream1, _)).Times(0);
EXPECT_CALL(peekCb, onDataAvailable(stream1, _));
transport->driveReadCallbacks();
// Read 10 bytes.
@@ -1865,9 +1867,15 @@ TEST_F(QuicTransportImplTest, PeekConsumeReadTest) {
EXPECT_EQ("l stream d", data.first->moveToFbString().toStdString());
});
// Both peek and read should be called.
// Read - because it is called every time
// Peek - because the peekable range has changed
EXPECT_CALL(readCb, readAvailable(stream1));
EXPECT_CALL(peekCb, onDataAvailable(stream1, _));
transport->driveReadCallbacks();
// Only read should be called.
EXPECT_CALL(readCb, readAvailable(stream1));
EXPECT_CALL(peekCb, onDataAvailable(stream1, _)).Times(0);
transport->driveReadCallbacks();
// Consume the rest of the data.
@@ -1898,9 +1906,8 @@ TEST_F(QuicTransportImplTest, PeekConsumeReadTest) {
// Consume left part.
transport->consume(stream1, buf1->computeChainDataLength());
// Neither read nor peek should be called.
EXPECT_CALL(readCb, readAvailable(stream1)).Times(0);
EXPECT_CALL(peekCb, onDataAvailable(stream1, _)).Times(0);
// Only peek should be called.
EXPECT_CALL(peekCb, onDataAvailable(stream1, _));
transport->driveReadCallbacks();
// Fill in the gap.
@@ -1983,21 +1990,18 @@ TEST_F(QuicTransportImplTest, UpdatePeekableListEmptyListTest) {
TEST_F(QuicTransportImplTest, UpdatePeekableListWithStreamErrorTest) {
auto streamId = transport->createBidirectionalStream().value();
const auto& conn = transport->transportConn;
auto stream = transport->getStream(streamId);
// Add some data to the stream.
transport->addDataToStream(
streamId,
StreamBuffer(folly::IOBuf::copyBuffer("actual stream data"), 0));
transport->addStreamReadError(streamId, LocalErrorCode::NO_ERROR);
// streamId is in the list.
EXPECT_EQ(1, conn->streamManager->peekableStreams().count(streamId));
transport->addStreamReadError(streamId, LocalErrorCode::NO_ERROR);
// streamId is removed from the list after the call
// because there is an error on the stream.
conn->streamManager->updatePeekableStreams(*stream);
EXPECT_EQ(0, conn->streamManager->peekableStreams().count(streamId));
}