mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-25 15:43:13 +03:00
Observer stream events
Summary: Provide observers with visibility into stream events triggered by local and peer (e.g., new stream opened locally or by peer). Reviewed By: mjoras Differential Revision: D31886978 fbshipit-source-id: 7556fef0f336bd0f190b4474f1a7b0120aae6ef1
This commit is contained in:
committed by
Facebook GitHub Bot
parent
7b40794598
commit
d89e8d344e
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include "quic/state/QuicStreamUtilities.h"
|
||||
|
||||
#include <quic/state/QuicStreamFunctions.h>
|
||||
#include <quic/state/QuicStreamUtilities.h>
|
||||
@@ -1103,6 +1104,18 @@ TEST_F(QuicStreamFunctionsTest, IsBidirectionalStream) {
|
||||
EXPECT_FALSE(isBidirectionalStream(0xff));
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, GetStreamDirectionality) {
|
||||
EXPECT_EQ(StreamDirectionality::Bidirectional, getStreamDirectionality(0x01));
|
||||
EXPECT_EQ(StreamDirectionality::Bidirectional, getStreamDirectionality(0xf0));
|
||||
EXPECT_EQ(StreamDirectionality::Bidirectional, getStreamDirectionality(0xf1));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional, getStreamDirectionality(0x02));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional, getStreamDirectionality(0x03));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional, getStreamDirectionality(0xff));
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, IsSendingStream) {
|
||||
QuicClientConnectionState clientState(
|
||||
FizzClientQuicHandshakeContext::Builder().build());
|
||||
@@ -1161,6 +1174,174 @@ TEST_F(QuicStreamFunctionsTest, IsReceivingStream) {
|
||||
EXPECT_TRUE(isReceivingStream(nodeType, id));
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, GetStreamInitiatorBidirectional) {
|
||||
const auto clientStream1Id =
|
||||
conn.streamManager->createNextBidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
const auto clientStream2Id =
|
||||
conn.streamManager->createNextBidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(clientStream1Id, 0x00);
|
||||
EXPECT_EQ(clientStream2Id, 0x04);
|
||||
|
||||
const auto serverStream1Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(clientStream1Id + 1))->id;
|
||||
const auto serverStream2Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(clientStream2Id + 1))->id;
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(clientStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(serverStream2Id));
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, clientStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, serverStream2Id));
|
||||
}
|
||||
|
||||
TEST_F(QuicServerStreamFunctionsTest, GetStreamInitiatorBidirectional) {
|
||||
const auto serverStream1Id =
|
||||
conn.streamManager->createNextBidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
const auto serverStream2Id =
|
||||
conn.streamManager->createNextBidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(serverStream1Id, 0x01);
|
||||
EXPECT_EQ(serverStream2Id, 0x05);
|
||||
|
||||
const auto clientStream1Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(serverStream1Id - 1))->id;
|
||||
const auto clientStream2Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(serverStream2Id - 1))->id;
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(serverStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Bidirectional,
|
||||
getStreamDirectionality(clientStream2Id));
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, serverStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, clientStream2Id));
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, GetStreamInitiatorUnidirectional) {
|
||||
const auto clientStream1Id =
|
||||
conn.streamManager->createNextUnidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
const auto clientStream2Id =
|
||||
conn.streamManager->createNextUnidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(clientStream1Id, 0x02);
|
||||
EXPECT_EQ(clientStream2Id, 0x06);
|
||||
|
||||
const auto serverStream1Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(clientStream1Id + 1))->id;
|
||||
const auto serverStream2Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(clientStream2Id + 1))->id;
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(clientStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(serverStream2Id));
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, clientStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, serverStream2Id));
|
||||
}
|
||||
|
||||
TEST_F(QuicServerStreamFunctionsTest, GetStreamInitiatorUnidirectional) {
|
||||
const auto serverStream1Id =
|
||||
conn.streamManager->createNextUnidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
const auto serverStream2Id =
|
||||
conn.streamManager->createNextUnidirectionalStream().value()->id;
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(serverStream1Id, 0x03);
|
||||
EXPECT_EQ(serverStream2Id, 0x07);
|
||||
|
||||
const auto clientStream1Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(serverStream1Id - 1))->id;
|
||||
const auto clientStream2Id =
|
||||
CHECK_NOTNULL(conn.streamManager->getStream(serverStream2Id - 1))->id;
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(serverStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamDirectionality::Unidirectional,
|
||||
getStreamDirectionality(clientStream2Id));
|
||||
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, serverStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Local,
|
||||
getStreamInitiator(conn.nodeType, serverStream2Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, clientStream1Id));
|
||||
EXPECT_EQ(
|
||||
StreamInitiator::Remote,
|
||||
getStreamInitiator(conn.nodeType, clientStream2Id));
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, HasReadableDataNoData) {
|
||||
auto stream = conn.streamManager->createNextBidirectionalStream().value();
|
||||
auto buf1 = IOBuf::copyBuffer("just");
|
||||
|
||||
Reference in New Issue
Block a user