diff --git a/quic/api/test/CMakeLists.txt b/quic/api/test/CMakeLists.txt index c07999512..4a7c5e74e 100644 --- a/quic/api/test/CMakeLists.txt +++ b/quic/api/test/CMakeLists.txt @@ -51,10 +51,10 @@ quic_add_test(TARGET QuicPacketSchedulerTest DEPENDS Folly::folly mvfst_fizz_client + mvfst_server mvfst_codec_pktbuilder mvfst_transport mvfst_test_utils - mvfst_server ) quic_add_test(TARGET IoBufQuicBatchTest diff --git a/quic/api/test/QuicBatchWriterTest.cpp b/quic/api/test/QuicBatchWriterTest.cpp index 5ea2cfc13..c9542a40b 100644 --- a/quic/api/test/QuicBatchWriterTest.cpp +++ b/quic/api/test/QuicBatchWriterTest.cpp @@ -10,6 +10,7 @@ #include #include +#include #include using namespace testing; @@ -25,6 +26,9 @@ constexpr const auto kNumLoops = 10; struct QuicBatchWriterTest : public ::testing::Test, public ::testing::WithParamInterface { + QuicBatchWriterTest() + : conn_(std::make_shared()) {} + protected: QuicServerConnectionState conn_; }; diff --git a/quic/api/test/QuicPacketSchedulerTest.cpp b/quic/api/test/QuicPacketSchedulerTest.cpp index 81020e6b1..3abcac7e7 100644 --- a/quic/api/test/QuicPacketSchedulerTest.cpp +++ b/quic/api/test/QuicPacketSchedulerTest.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -184,7 +185,8 @@ TEST_F(QuicPacketSchedulerTest, PaddingUpToWrapperSize) { } TEST_F(QuicPacketSchedulerTest, CryptoServerInitialPadded) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto connId = getTestConnectionId(); PacketNum nextPacketNum = getNextPacketNum(conn, PacketNumberSpace::Initial); LongHeader longHeader1( @@ -216,7 +218,8 @@ TEST_F(QuicPacketSchedulerTest, CryptoServerInitialPadded) { } TEST_F(QuicPacketSchedulerTest, PadTwoInitialPackets) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto connId = getTestConnectionId(); PacketNum nextPacketNum = getNextPacketNum(conn, PacketNumberSpace::Initial); LongHeader longHeader1( @@ -299,7 +302,8 @@ TEST_F(QuicPacketSchedulerTest, CryptoPaddingRetransmissionClientInitial) { } TEST_F(QuicPacketSchedulerTest, CryptoSchedulerOnlySingleLossFits) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto connId = getTestConnectionId(); LongHeader longHeader( LongHeader::Types::Handshake, @@ -362,7 +366,8 @@ TEST_F(QuicPacketSchedulerTest, CryptoWritePartialLossBuffer) { } TEST_F(QuicPacketSchedulerTest, StreamFrameSchedulerExists) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto connId = getTestConnectionId(); auto stream = conn.streamManager->createNextBidirectionalStream().value(); @@ -384,7 +389,8 @@ TEST_F(QuicPacketSchedulerTest, StreamFrameSchedulerExists) { } TEST_F(QuicPacketSchedulerTest, StreamFrameNoSpace) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto connId = getTestConnectionId(); auto stream = conn.streamManager->createNextBidirectionalStream().value(); @@ -407,7 +413,8 @@ TEST_F(QuicPacketSchedulerTest, StreamFrameNoSpace) { } TEST_F(QuicPacketSchedulerTest, StreamFrameSchedulerStreamNotExists) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto connId = getTestConnectionId(); StreamId nonExistentStream = 11; diff --git a/quic/api/test/QuicTransportBaseTest.cpp b/quic/api/test/QuicTransportBaseTest.cpp index a8bf19668..831b8eb1f 100644 --- a/quic/api/test/QuicTransportBaseTest.cpp +++ b/quic/api/test/QuicTransportBaseTest.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -156,7 +157,8 @@ class TestQuicTransport ConnectionCallback& cb) : QuicTransportBase(evb, std::move(socket)) { setConnectionCallback(&cb); - auto conn = std::make_unique(); + auto conn = std::make_unique( + std::make_shared()); conn->clientConnectionId = ConnectionId({10, 9, 8, 7}); conn->version = QuicVersion::MVFST; transportConn = conn.get(); diff --git a/quic/api/test/QuicTransportFunctionsTest.cpp b/quic/api/test/QuicTransportFunctionsTest.cpp index a84ca338b..0a8bfd1b2 100644 --- a/quic/api/test/QuicTransportFunctionsTest.cpp +++ b/quic/api/test/QuicTransportFunctionsTest.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -149,7 +150,8 @@ class QuicTransportFunctionsTest : public Test { } std::unique_ptr createConn() { - auto conn = std::make_unique(); + auto conn = std::make_unique( + std::make_shared()); conn->serverConnectionId = getTestConnectionId(); conn->clientConnectionId = getTestConnectionId(); conn->version = QuicVersion::MVFST; @@ -1555,7 +1557,8 @@ TEST_F(QuicTransportFunctionsTest, WriteProbingOldData) { } TEST_F(QuicTransportFunctionsTest, WriteProbingCryptoData) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.serverConnectionId = getTestConnectionId(); conn.clientConnectionId = getTestConnectionId(); // writeCryptoDataProbesToSocketForTest writes Initial LongHeader, thus it diff --git a/quic/api/test/TestQuicTransport.h b/quic/api/test/TestQuicTransport.h index f1afbb5b1..282cd955e 100644 --- a/quic/api/test/TestQuicTransport.h +++ b/quic/api/test/TestQuicTransport.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace quic { @@ -24,7 +25,8 @@ class TestQuicTransport ConnectionCallback& cb) : QuicTransportBase(evb, std::move(socket)) { setConnectionCallback(&cb); - conn_.reset(new QuicServerConnectionState()); + conn_.reset(new QuicServerConnectionState( + std::make_shared())); conn_->clientConnectionId = ConnectionId({9, 8, 7, 6}); conn_->serverConnectionId = ConnectionId({1, 2, 3, 4}); conn_->version = QuicVersion::MVFST; diff --git a/quic/codec/test/QuicPacketRebuilderTest.cpp b/quic/codec/test/QuicPacketRebuilderTest.cpp index f57644676..f958fe977 100644 --- a/quic/codec/test/QuicPacketRebuilderTest.cpp +++ b/quic/codec/test/QuicPacketRebuilderTest.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -64,7 +65,8 @@ TEST_F(QuicPacketRebuilderTest, RebuildPacket) { ackBlocks.insert(10, 100); ackBlocks.insert(200, 1000); AckFrameMetaData ackMeta(ackBlocks, 0us, kDefaultAckDelayExponent); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; @@ -201,7 +203,8 @@ TEST_F(QuicPacketRebuilderTest, RebuildAfterResetStream) { RegularQuicPacketBuilder regularBuilder1( kDefaultUDPSendPacketLen, std::move(shortHeader1), 0 /* largestAcked */); regularBuilder1.encodePacketHeader(); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; @@ -237,7 +240,8 @@ TEST_F(QuicPacketRebuilderTest, FinOnlyStreamRebuild) { RegularQuicPacketBuilder regularBuilder1( kDefaultUDPSendPacketLen, std::move(shortHeader1), 0 /* largestAcked */); regularBuilder1.encodePacketHeader(); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; @@ -281,7 +285,8 @@ TEST_F(QuicPacketRebuilderTest, RebuildDataStreamAndEmptyCryptoStream) { kDefaultUDPSendPacketLen, std::move(shortHeader1), 0 /* largestAcked */); regularBuilder1.encodePacketHeader(); // Get a bunch frames - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto stream = conn.streamManager->createNextBidirectionalStream().value(); StreamId streamId = stream->id; @@ -344,7 +349,8 @@ TEST_F(QuicPacketRebuilderTest, CannotRebuildEmptyCryptoStream) { kDefaultUDPSendPacketLen, std::move(shortHeader1), 0 /* largestAcked */); regularBuilder1.encodePacketHeader(); // Get a bunch frames - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); uint64_t cryptoOffset = 0; auto cryptoBuf = folly::IOBuf::copyBuffer("NewSessionTicket"); @@ -382,7 +388,8 @@ TEST_F(QuicPacketRebuilderTest, CannotRebuild) { ackBlocks.insert(10, 100); ackBlocks.insert(200, 1000); AckFrameMetaData ackMeta(ackBlocks, 0us, kDefaultAckDelayExponent); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(10); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; @@ -437,7 +444,8 @@ TEST_F(QuicPacketRebuilderTest, CloneCounter) { writeFrame(maxDataFrame, regularBuilder); auto packet = std::move(regularBuilder).buildPacket(); auto outstandingPacket = makeDummyOutstandingPacket(packet.packet, 1000); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); ShortHeader shortHeader2( ProtectionType::KeyPhaseZero, getTestConnectionId(), 0); RegularQuicPacketBuilder regularBuilder2( @@ -460,7 +468,8 @@ TEST_F(QuicPacketRebuilderTest, PurePingWontRebuild) { auto packet = std::move(regularBuilder).buildPacket(); auto outstandingPacket = makeDummyOutstandingPacket(packet.packet, 50); EXPECT_EQ(1, outstandingPacket.packet.frames.size()); - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); ShortHeader shortHeader2( ProtectionType::KeyPhaseZero, getTestConnectionId(), 0); RegularQuicPacketBuilder regularBuilder2( @@ -473,7 +482,8 @@ TEST_F(QuicPacketRebuilderTest, PurePingWontRebuild) { } TEST_F(QuicPacketRebuilderTest, LastStreamFrameSkipLen) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(100); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; @@ -547,7 +557,8 @@ TEST_F(QuicPacketRebuilderTest, LastStreamFrameSkipLen) { } TEST_F(QuicPacketRebuilderTest, LastStreamFrameFinOnlyNotSkipLen) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.streamManager->setMaxLocalBidirectionalStreams(100); auto stream = conn.streamManager->createNextBidirectionalStream().value(); auto streamId = stream->id; diff --git a/quic/congestion_control/test/CopaTest.cpp b/quic/congestion_control/test/CopaTest.cpp index 2544253d5..62e5c9c7b 100644 --- a/quic/congestion_control/test/CopaTest.cpp +++ b/quic/congestion_control/test/CopaTest.cpp @@ -10,6 +10,7 @@ #include #include +#include #include using namespace testing; @@ -129,7 +130,8 @@ class CopaTest : public Test { }; TEST_F(CopaTest, TestWritableBytes) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); EXPECT_TRUE(copa.inSlowStart()); @@ -145,7 +147,8 @@ TEST_F(CopaTest, TestWritableBytes) { } TEST_F(CopaTest, PersistentCongestion) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto qLogger = std::make_shared(VantagePoint::Client); @@ -178,7 +181,8 @@ TEST_F(CopaTest, PersistentCongestion) { } TEST_F(CopaTest, RemoveBytesWithoutLossOrAck) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto qLogger = std::make_shared(VantagePoint::Client); @@ -210,7 +214,8 @@ TEST_F(CopaTest, RemoveBytesWithoutLossOrAck) { } TEST_F(CopaTest, TestSlowStartAck) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto qLogger = std::make_shared(VantagePoint::Client); @@ -312,7 +317,8 @@ TEST_F(CopaTest, TestSlowStartAck) { } TEST_F(CopaTest, TestSteadyStateChanges) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto now = Clock::now(); @@ -349,7 +355,8 @@ TEST_F(CopaTest, TestSteadyStateChanges) { } TEST_F(CopaTest, TestVelocity) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; conn.transportSettings.pacingTimerTickInterval = 10ms; Copa copa(conn); @@ -444,7 +451,8 @@ TEST_F(CopaTest, TestVelocity) { } TEST_F(CopaTest, NoLargestAckedPacketNoCrash) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto qLogger = std::make_shared(VantagePoint::Client); @@ -465,7 +473,8 @@ TEST_F(CopaTest, NoLargestAckedPacketNoCrash) { } TEST_F(CopaTest, PacketLossInvokesPacer) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.copaDeltaParam = 0.5; Copa copa(conn); auto mockPacer = std::make_unique(); diff --git a/quic/congestion_control/test/NewRenoTest.cpp b/quic/congestion_control/test/NewRenoTest.cpp index 5cb027874..a542af565 100644 --- a/quic/congestion_control/test/NewRenoTest.cpp +++ b/quic/congestion_control/test/NewRenoTest.cpp @@ -10,6 +10,7 @@ #include #include +#include using namespace testing; @@ -58,7 +59,8 @@ createPacket(PacketNum packetNum, uint32_t size, TimePoint sendTime) { } TEST_F(NewRenoTest, TestLoss) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -97,7 +99,8 @@ TEST_F(NewRenoTest, TestLoss) { } TEST_F(NewRenoTest, SendMoreThanWritable) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -114,7 +117,8 @@ TEST_F(NewRenoTest, SendMoreThanWritable) { } TEST_F(NewRenoTest, TestSlowStartAck) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -134,7 +138,8 @@ TEST_F(NewRenoTest, TestSlowStartAck) { } TEST_F(NewRenoTest, TestSteadyStateAck) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -175,7 +180,8 @@ TEST_F(NewRenoTest, TestSteadyStateAck) { } TEST_F(NewRenoTest, TestWritableBytes) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -190,7 +196,8 @@ TEST_F(NewRenoTest, TestWritableBytes) { } TEST_F(NewRenoTest, PersistentCongestion) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); @@ -210,7 +217,8 @@ TEST_F(NewRenoTest, PersistentCongestion) { } TEST_F(NewRenoTest, RemoveBytesWithoutLossOrAck) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); NewReno reno(conn); EXPECT_TRUE(reno.inSlowStart()); diff --git a/quic/fizz/server/handshake/FizzServerHandshake.cpp b/quic/fizz/server/handshake/FizzServerHandshake.cpp new file mode 100644 index 000000000..cef91072b --- /dev/null +++ b/quic/fizz/server/handshake/FizzServerHandshake.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +#include + +// This is necessary for the conversion between QuicServerConnectionState and +// QuicConnectionStateBase and can be removed once ServerHandshake accepts +// QuicServerConnectionState. +#include + +namespace quic { + +FizzServerHandshake::FizzServerHandshake( + QuicServerConnectionState* conn, + std::shared_ptr fizzContext) + : ServerHandshake(conn), fizzContext_(std::move(fizzContext)) {} + +} // namespace quic diff --git a/quic/fizz/server/handshake/FizzServerHandshake.h b/quic/fizz/server/handshake/FizzServerHandshake.h new file mode 100644 index 000000000..f6cc08303 --- /dev/null +++ b/quic/fizz/server/handshake/FizzServerHandshake.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +#pragma once + +#include + +namespace quic { + +class FizzServerQuicHandshakeContext; +struct QuicServerConnectionState; + +class FizzServerHandshake : public ServerHandshake { + public: + FizzServerHandshake( + QuicServerConnectionState* conn, + std::shared_ptr fizzContext); + + private: + std::shared_ptr fizzContext_; +}; + +} // namespace quic diff --git a/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.cpp b/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.cpp new file mode 100644 index 000000000..c26f0be58 --- /dev/null +++ b/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +#include + +#include + +namespace quic { + +std::unique_ptr +FizzServerQuicHandshakeContext::makeServerHandshake( + QuicServerConnectionState* conn) { + return std::make_unique(conn, shared_from_this()); +} + +} // namespace quic diff --git a/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.h b/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.h new file mode 100644 index 000000000..454caacfb --- /dev/null +++ b/quic/fizz/server/handshake/FizzServerQuicHandshakeContext.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +#pragma once + +#include + +namespace quic { + +class FizzServerHandshake; + +class FizzServerQuicHandshakeContext + : public ServerHandshakeFactory, + public std::enable_shared_from_this { + public: + std::unique_ptr makeServerHandshake( + QuicServerConnectionState* conn) override; +}; + +} // namespace quic diff --git a/quic/loss/test/QuicLossFunctionsTest.cpp b/quic/loss/test/QuicLossFunctionsTest.cpp index a48b7362a..511c16045 100644 --- a/quic/loss/test/QuicLossFunctionsTest.cpp +++ b/quic/loss/test/QuicLossFunctionsTest.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -60,7 +61,8 @@ class QuicLossFunctionsTest : public TestWithParam { PacketType packetType); std::unique_ptr createConn() { - auto conn = std::make_unique(); + auto conn = std::make_unique( + std::make_shared()); conn->clientConnectionId = getTestConnectionId(); conn->version = QuicVersion::MVFST; conn->ackStates.initialAckState.nextPacketNum = 1; diff --git a/quic/server/CMakeLists.txt b/quic/server/CMakeLists.txt index 84c42ff99..73c6fe01a 100644 --- a/quic/server/CMakeLists.txt +++ b/quic/server/CMakeLists.txt @@ -17,6 +17,10 @@ add_library( handshake/DefaultAppTokenValidator.cpp handshake/StatelessResetGenerator.cpp state/ServerStateMachine.cpp + + # Fizz specific parts, will be split in its own lib eventually. + ../fizz/server/handshake/FizzServerQuicHandshakeContext.cpp + ../fizz/server/handshake/FizzServerHandshake.cpp ) target_include_directories( diff --git a/quic/server/QuicServerTransport.cpp b/quic/server/QuicServerTransport.cpp index 55692287f..2e6964d6f 100644 --- a/quic/server/QuicServerTransport.cpp +++ b/quic/server/QuicServerTransport.cpp @@ -8,9 +8,11 @@ #include +#include #include #include #include + #include namespace quic { @@ -21,7 +23,8 @@ QuicServerTransport::QuicServerTransport( ConnectionCallback& cb, std::shared_ptr ctx) : QuicTransportBase(evb, std::move(sock)), ctx_(std::move(ctx)) { - auto tempConn = std::make_unique(); + auto tempConn = std::make_unique( + std::make_shared()); tempConn->serverAddr = socket_->address(); serverConn_ = tempConn.get(); conn_.reset(tempConn.release()); diff --git a/quic/server/handshake/ServerHandshakeFactory.h b/quic/server/handshake/ServerHandshakeFactory.h new file mode 100644 index 000000000..d67b8e2f3 --- /dev/null +++ b/quic/server/handshake/ServerHandshakeFactory.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +#pragma once + +#include + +namespace quic { + +class ServerHandshake; +struct QuicServerConnectionState; + +class ServerHandshakeFactory { + public: + virtual ~ServerHandshakeFactory() = default; + + /** + * Construct a new server handshake. + */ + virtual std::unique_ptr makeServerHandshake( + QuicServerConnectionState* conn) = 0; +}; + +} // namespace quic diff --git a/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp b/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp index 495ebbd7d..ff562a04c 100644 --- a/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp +++ b/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -25,7 +26,8 @@ namespace quic { namespace test { TEST(DefaultAppTokenValidatorTest, TestValidParams) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; conn.transportSettings.zeroRttSourceTokenMatchingPolicy = @@ -53,7 +55,8 @@ TEST(DefaultAppTokenValidatorTest, TestValidParams) { TEST( DefaultAppTokenValidatorTest, TestValidUnequalParamsUpdateTransportSettings) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; conn.transportSettings.zeroRttSourceTokenMatchingPolicy = @@ -87,7 +90,8 @@ TEST( } TEST(DefaultAppTokenValidatorTest, TestInvalidNullAppToken) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -102,7 +106,8 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidNullAppToken) { } TEST(DefaultAppTokenValidatorTest, TestInvalidEmptyTransportParams) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -120,7 +125,8 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidEmptyTransportParams) { } TEST(DefaultAppTokenValidatorTest, TestInvalidMissingParams) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -155,7 +161,8 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidMissingParams) { } TEST(DefaultAppTokenValidatorTest, TestInvalidRedundantParameter) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -184,7 +191,8 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidRedundantParameter) { } TEST(DefaultAppTokenValidatorTest, TestInvalidDecreasedInitialMaxStreamData) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -211,7 +219,8 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidDecreasedInitialMaxStreamData) { } TEST(DefaultAppTokenValidatorTest, TestChangedIdleTimeout) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -238,7 +247,8 @@ TEST(DefaultAppTokenValidatorTest, TestChangedIdleTimeout) { } TEST(DefaultAppTokenValidatorTest, TestDecreasedInitialMaxStreams) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -265,7 +275,8 @@ TEST(DefaultAppTokenValidatorTest, TestDecreasedInitialMaxStreams) { } TEST(DefaultAppTokenValidatorTest, TestInvalidAppParams) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn.version = QuicVersion::MVFST; @@ -292,6 +303,9 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidAppParams) { class SourceAddressTokenTest : public Test { public: + SourceAddressTokenTest() + : conn_(std::make_shared()) {} + void SetUp() override { conn_.peerAddress = folly::SocketAddress("1.2.3.4", 443); conn_.version = QuicVersion::MVFST; diff --git a/quic/server/handshake/test/ServerHandshakeTest.cpp b/quic/server/handshake/test/ServerHandshakeTest.cpp index 02bbd43dc..f7abcc88a 100644 --- a/quic/server/handshake/test/ServerHandshakeTest.cpp +++ b/quic/server/handshake/test/ServerHandshakeTest.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -49,7 +50,9 @@ class MockServerHandshakeCallback : public ServerHandshake::HandshakeCallback { }; struct TestingServerConnectionState : public QuicServerConnectionState { - explicit TestingServerConnectionState() : QuicServerConnectionState() {} + explicit TestingServerConnectionState() + : QuicServerConnectionState( + std::make_shared()) {} uint32_t getDestructorGuardCount() const { return folly::DelayedDestruction::getDestructorGuardCount(); diff --git a/quic/server/state/ServerStateMachine.h b/quic/server/state/ServerStateMachine.h index f36072db8..a70ba8fd0 100644 --- a/quic/server/state/ServerStateMachine.h +++ b/quic/server/state/ServerStateMachine.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -141,7 +142,9 @@ struct QuicServerConnectionState : public QuicConnectionStateBase { folly::Optional createAndAddNewSelfConnId() override; - QuicServerConnectionState() : QuicConnectionStateBase(QuicNodeType::Server) { + QuicServerConnectionState( + std::shared_ptr handshakeFactory) + : QuicConnectionStateBase(QuicNodeType::Server) { state = ServerState::Open; // Create the crypto stream. cryptoState = std::make_unique(); @@ -155,8 +158,10 @@ struct QuicServerConnectionState : public QuicConnectionStateBase { QuicVersion::QUIC_DRAFT, QuicVersion::QUIC_DRAFT_LEGACY}}; originalVersion = QuicVersion::MVFST; - serverHandshakeLayer = new ServerHandshake(this); - handshakeLayer.reset(serverHandshakeLayer); + DCHECK(handshakeFactory); + auto tmpServerHandshake = handshakeFactory->makeServerHandshake(this); + serverHandshakeLayer = tmpServerHandshake.get(); + handshakeLayer = std::move(tmpServerHandshake); // We shouldn't normally need to set this until we're starting the // transport, however writing unit tests is much easier if we set this here. updateFlowControlStateWithSettings(flowControlState, transportSettings); diff --git a/quic/server/test/CMakeLists.txt b/quic/server/test/CMakeLists.txt index a3f9dda98..122beb80b 100644 --- a/quic/server/test/CMakeLists.txt +++ b/quic/server/test/CMakeLists.txt @@ -27,7 +27,6 @@ quic_add_test(TARGET QuicServerTransportTest Folly::folly mvfst_codec_pktbuilder mvfst_codec_types - mvfst_fizz_handshake mvfst_server mvfst_state_stream_functions mvfst_test_utils diff --git a/quic/server/test/ServerStateMachineTest.cpp b/quic/server/test/ServerStateMachineTest.cpp index 73a6cdcba..63fc7d370 100644 --- a/quic/server/test/ServerStateMachineTest.cpp +++ b/quic/server/test/ServerStateMachineTest.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include using namespace testing; @@ -28,7 +29,8 @@ void assertServerConnIdParamsEq( namespace test { TEST(ServerStateMachineTest, TestAddConnId) { - QuicServerConnectionState serverState; + QuicServerConnectionState serverState( + std::make_shared()); ServerConnectionIdParams originalParams(12, 1, 37); auto algo = std::make_unique(); @@ -73,7 +75,8 @@ TEST(ServerStateMachineTest, TestAddConnId) { } TEST(ServerStateMachineTest, TestCidRejected) { - QuicServerConnectionState serverConn; + QuicServerConnectionState serverConn( + std::make_shared()); MockServerConnectionIdRejector mockRejector; ServerConnectionIdParams serverCidParams(10, 11, 12); MockConnectionIdAlgo mockCidAlgo; @@ -104,7 +107,8 @@ TEST(ServerStateMachineTest, TestCidRejected) { } TEST(ServerStateMachineTest, TestCidRejectedThenFail) { - QuicServerConnectionState serverConn; + QuicServerConnectionState serverConn( + std::make_shared()); MockServerConnectionIdRejector mockRejector; ServerConnectionIdParams serverCidParams(10, 11, 12); MockConnectionIdAlgo mockCidAlgo; @@ -131,7 +135,8 @@ TEST(ServerStateMachineTest, TestCidRejectedThenFail) { } TEST(ServerStateMachineTest, TestCidRejectedGiveUp) { - QuicServerConnectionState serverConn; + QuicServerConnectionState serverConn( + std::make_shared()); MockServerConnectionIdRejector mockRejector; ServerConnectionIdParams serverCidParams(10, 11, 12); MockConnectionIdAlgo mockCidAlgo; diff --git a/quic/state/stream/test/StreamStateFunctionsTest.cpp b/quic/state/stream/test/StreamStateFunctionsTest.cpp index f5b05ef83..dc952116a 100644 --- a/quic/state/stream/test/StreamStateFunctionsTest.cpp +++ b/quic/state/stream/test/StreamStateFunctionsTest.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -22,7 +23,8 @@ namespace test { class StreamStateFunctionsTests : public Test {}; TEST_F(StreamStateFunctionsTests, BasicResetTest) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId streamId = 0xbaad; QuicStreamState stream(streamId, conn); appendDataToReadBuffer( @@ -55,14 +57,16 @@ TEST_F(StreamStateFunctionsTests, BasicResetTest) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedEmptyStream) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); EXPECT_FALSE(isAllDataReceived(stream)); } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferHasHole) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -74,7 +78,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferHasHole) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferNoHoleNoFin) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -85,7 +90,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferNoHoleNoFin) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferEmptyBufferFin) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -95,7 +101,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferEmptyBufferFin) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferBufferFin) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -107,7 +114,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedReadBufferBufferFin) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedMultipleStreamDataNoHole) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -123,7 +131,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedMultipleStreamDataNoHole) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedMultipleStreamDataHasHole) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 100; @@ -139,7 +148,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedMultipleStreamDataHasHole) { } TEST_F(StreamStateFunctionsTests, IsAllDataReceivedAllDataRead) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 3; QuicStreamState stream(id, conn); stream.currentReadOffset = 101; @@ -148,7 +158,8 @@ TEST_F(StreamStateFunctionsTests, IsAllDataReceivedAllDataRead) { } TEST_F(StreamStateFunctionsTests, SendReset) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); writeDataToQuicStream(stream, folly::IOBuf::copyBuffer("hello"), true); @@ -163,7 +174,8 @@ TEST_F(StreamStateFunctionsTests, SendReset) { } TEST_F(StreamStateFunctionsTests, ResetNoFlowControlGenerated) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); writeDataToQuicStream(stream, folly::IOBuf::copyBuffer("hello"), true); @@ -186,7 +198,8 @@ TEST_F(StreamStateFunctionsTests, ResetNoFlowControlGenerated) { } TEST_F(StreamStateFunctionsTests, ResetFlowControlGenerated) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto qLogger = std::make_shared(VantagePoint::Client); conn.qLogger = qLogger; @@ -221,7 +234,8 @@ TEST_F(StreamStateFunctionsTests, ResetFlowControlGenerated) { } TEST_F(StreamStateFunctionsTests, ResetOffsetNotMatch) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); RstStreamFrame rst(id, GenericApplicationErrorCode::UNKNOWN, 10); @@ -234,7 +248,8 @@ TEST_F(StreamStateFunctionsTests, ResetOffsetNotMatch) { } TEST_F(StreamStateFunctionsTests, ResetOffsetLessThanMaxObserved) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); RstStreamFrame rst(id, GenericApplicationErrorCode::UNKNOWN, 30); @@ -246,7 +261,8 @@ TEST_F(StreamStateFunctionsTests, ResetOffsetLessThanMaxObserved) { } TEST_F(StreamStateFunctionsTests, ResetOffsetGreaterThanStreamFlowControl) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); RstStreamFrame rst(id, GenericApplicationErrorCode::UNKNOWN, 200); @@ -258,7 +274,8 @@ TEST_F(StreamStateFunctionsTests, ResetOffsetGreaterThanStreamFlowControl) { } TEST_F(StreamStateFunctionsTests, ResetOffsetGreaterThanConnFlowControl) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); RstStreamFrame rst(id, GenericApplicationErrorCode::UNKNOWN, 200); @@ -277,7 +294,8 @@ TEST_F(StreamStateFunctionsTests, ResetOffsetGreaterThanConnFlowControl) { } TEST_F(StreamStateFunctionsTests, ResetAfterReadingAllBytesTillFin) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId id = 1; QuicStreamState stream(id, conn); RstStreamFrame rst(id, GenericApplicationErrorCode::UNKNOWN, 100); diff --git a/quic/state/stream/test/StreamStateMachineTest.cpp b/quic/state/stream/test/StreamStateMachineTest.cpp index 48661ef02..37030436a 100644 --- a/quic/state/stream/test/StreamStateMachineTest.cpp +++ b/quic/state/stream/test/StreamStateMachineTest.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -31,7 +32,8 @@ void verifyStreamReset( } std::unique_ptr createConn() { - auto conn = std::make_unique(); + auto conn = std::make_unique( + std::make_shared()); conn->clientConnectionId = getTestConnectionId(); conn->version = QuicVersion::MVFST; conn->ackStates.initialAckState.nextPacketNum = 1; diff --git a/quic/state/test/AckHandlersTest.cpp b/quic/state/test/AckHandlersTest.cpp index d1d3d72a9..b32ece151 100644 --- a/quic/state/test/AckHandlersTest.cpp +++ b/quic/state/test/AckHandlersTest.cpp @@ -11,6 +11,7 @@ #include +#include #include #include #include @@ -35,7 +36,8 @@ auto testLossHandler(std::vector& lostPackets) -> decltype(auto) { } TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocks) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.reorderingThreshold = 85; auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); @@ -105,7 +107,8 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocks) { } TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocksLoss) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.reorderingThreshold = 85; auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); @@ -241,7 +244,8 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocksLoss) { } TEST_P(AckHandlersTest, TestAckBlocksWithGaps) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.reorderingThreshold = 30; auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); @@ -338,7 +342,8 @@ TEST_P(AckHandlersTest, TestAckBlocksWithGaps) { } TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.reorderingThreshold = 10; auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); @@ -431,7 +436,8 @@ TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) { } TEST_P(AckHandlersTest, AckVisitorForAckTest) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.connectionTime = Clock::now(); auto firstPacket = createNewPacket(100 /* packetNum */, GetParam()); WriteAckFrame firstAckFrame; @@ -506,7 +512,8 @@ TEST_P(AckHandlersTest, AckVisitorForAckTest) { } TEST_P(AckHandlersTest, NoNewAckedPacket) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockController = std::make_unique(); auto rawController = mockController.get(); conn.congestionController = std::move(mockController); @@ -533,7 +540,8 @@ TEST_P(AckHandlersTest, NoNewAckedPacket) { } TEST_P(AckHandlersTest, LossByAckedRecovered) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockController = std::make_unique(); conn.congestionController = std::move(mockController); @@ -550,7 +558,8 @@ TEST_P(AckHandlersTest, LossByAckedRecovered) { } TEST_P(AckHandlersTest, AckPacketNumDoesNotExist) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockController = std::make_unique(); conn.congestionController = std::move(mockController); // Get the time based loss detection out of the way @@ -583,7 +592,8 @@ TEST_P(AckHandlersTest, AckPacketNumDoesNotExist) { } TEST_P(AckHandlersTest, TestHandshakeCounterUpdate) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); StreamId stream = 1; for (PacketNum packetNum = 0; packetNum < 10; packetNum++) { auto regularPacket = createNewPacket( @@ -641,7 +651,8 @@ TEST_P(AckHandlersTest, TestHandshakeCounterUpdate) { } TEST_P(AckHandlersTest, PurgeAcks) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); WriteAckFrame ackFrame; ackFrame.ackBlocks.emplace_back(900, 1000); ackFrame.ackBlocks.emplace_back(500, 700); @@ -659,7 +670,8 @@ TEST_P(AckHandlersTest, PurgeAcks) { } TEST_P(AckHandlersTest, NoSkipAckVisitor) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); conn.congestionController = std::move(mockCongestionController); @@ -702,7 +714,8 @@ TEST_P(AckHandlersTest, NoSkipAckVisitor) { } TEST_P(AckHandlersTest, SkipAckVisitor) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); conn.congestionController = std::move(mockCongestionController); @@ -751,7 +764,8 @@ TEST_P(AckHandlersTest, SkipAckVisitor) { } TEST_P(AckHandlersTest, NoDoubleProcess) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.congestionController.reset(); WriteStreamFrame frame(0, 0, 0, true); @@ -820,7 +834,8 @@ TEST_P(AckHandlersTest, NoDoubleProcess) { } TEST_P(AckHandlersTest, ClonedPacketsCounter) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.congestionController = nullptr; WriteStreamFrame frame(0, 0, 0, true); auto packetNum1 = conn.ackStates.appDataAckState.nextPacketNum; @@ -869,7 +884,8 @@ TEST_P(AckHandlersTest, ClonedPacketsCounter) { } TEST_P(AckHandlersTest, UpdateMaxAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.congestionController = nullptr; conn.lossState.mrtt = 200us; PacketNum packetNum = 0; @@ -897,7 +913,8 @@ TEST_P(AckHandlersTest, UpdateMaxAckDelay) { // Ack only acks packets aren't outstanding, but TimeReordering still finds loss TEST_P(AckHandlersTest, AckNotOutstandingButLoss) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockQLogger = std::make_shared(VantagePoint::Server); conn.qLogger = mockQLogger; @@ -963,7 +980,8 @@ TEST_P(AckHandlersTest, AckNotOutstandingButLoss) { } TEST_P(AckHandlersTest, UpdatePendingAckStates) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.congestionController = nullptr; conn.lossState.totalBytesSent = 2468; conn.lossState.totalBytesAcked = 1357; @@ -998,7 +1016,8 @@ TEST_P(AckHandlersTest, UpdatePendingAckStates) { } TEST_P(AckHandlersTest, AckEventCreation) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto mockCongestionController = std::make_unique(); auto rawCongestionController = mockCongestionController.get(); conn.congestionController = std::move(mockCongestionController); diff --git a/quic/state/test/QPRFunctionsTest.cpp b/quic/state/test/QPRFunctionsTest.cpp index 4c058cf75..3820ffaf5 100644 --- a/quic/state/test/QPRFunctionsTest.cpp +++ b/quic/state/test/QPRFunctionsTest.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -20,6 +21,9 @@ namespace test { class QPRFunctionsTest : public Test { public: + QPRFunctionsTest() + : conn(std::make_shared()) {} + void SetUp() override { conn.flowControlState.peerAdvertisedInitialMaxStreamOffsetBidiLocal = kDefaultStreamWindowSize; diff --git a/quic/state/test/QuicStateFunctionsTest.cpp b/quic/state/test/QuicStateFunctionsTest.cpp index 6f6219c11..5b29e297e 100644 --- a/quic/state/test/QuicStateFunctionsTest.cpp +++ b/quic/state/test/QuicStateFunctionsTest.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -55,7 +56,8 @@ class UpdateLargestReceivedPacketNumTest : public TestWithParam {}; TEST_P(UpdateLargestReceivedPacketNumTest, ReceiveNew) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); getAckState(conn, GetParam()).largestReceivedPacketNum = 100; auto currentLargestReceived = *getAckState(conn, GetParam()).largestReceivedPacketNum; @@ -68,7 +70,8 @@ TEST_P(UpdateLargestReceivedPacketNumTest, ReceiveNew) { } TEST_P(UpdateLargestReceivedPacketNumTest, ReceiveOld) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); getAckState(conn, GetParam()).largestReceivedPacketNum = 100; auto currentLargestReceived = *getAckState(conn, GetParam()).largestReceivedPacketNum; @@ -91,7 +94,8 @@ INSTANTIATE_TEST_CASE_P( class UpdateAckStateTest : public TestWithParam {}; TEST_P(UpdateAckStateTest, TestUpdateAckState) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); PacketNum nextPacketNum = 0; auto& ackState = getAckState(conn, GetParam()); updateAckState(conn, GetParam(), nextPacketNum++, true, false, Clock::now()); @@ -168,7 +172,8 @@ TEST_P(UpdateAckStateTest, TestUpdateAckState) { } TEST_P(UpdateAckStateTest, TestUpdateAckStateFrequency) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.transportSettings.rxPacketsBeforeAckInitThreshold = 20; conn.transportSettings.rxPacketsBeforeAckBeforeInit = 2; conn.transportSettings.rxPacketsBeforeAckAfterInit = 10; @@ -367,7 +372,8 @@ INSTANTIATE_TEST_CASE_P( class QuicStateFunctionsTest : public TestWithParam {}; TEST_F(QuicStateFunctionsTest, RttCalculationNoAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto rttSample = 1100us; updateRtt(conn, rttSample, 0us); EXPECT_EQ(1100, conn.lossState.srtt.count()); @@ -376,7 +382,8 @@ TEST_F(QuicStateFunctionsTest, RttCalculationNoAckDelay) { } TEST_F(QuicStateFunctionsTest, RttCalculationWithAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto rttSample = 1000us; updateRtt(conn, rttSample, 300us); EXPECT_EQ(700, conn.lossState.srtt.count()); @@ -387,7 +394,8 @@ TEST_F(QuicStateFunctionsTest, RttCalculationWithAckDelay) { } TEST_F(QuicStateFunctionsTest, RttCalculationWithMrttAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.mrtt = 100us; auto rttSample = 1000us; updateRtt(conn, rttSample, 300us); @@ -399,7 +407,8 @@ TEST_F(QuicStateFunctionsTest, RttCalculationWithMrttAckDelay) { } TEST_F(QuicStateFunctionsTest, RttCalculationIgnoreAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); conn.lossState.mrtt = 700us; auto rttSample = 900us; updateRtt(conn, rttSample, 300us); @@ -411,7 +420,8 @@ TEST_F(QuicStateFunctionsTest, RttCalculationIgnoreAckDelay) { } TEST_F(QuicStateFunctionsTest, RttCalculationAckDelayLarger) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto rttSample = 10us; updateRtt(conn, rttSample, 300us); EXPECT_EQ(10, conn.lossState.srtt.count()); @@ -422,7 +432,8 @@ TEST_F(QuicStateFunctionsTest, RttCalculationAckDelayLarger) { } TEST_F(QuicStateFunctionsTest, TestInvokeStreamStateMachineConnectionError) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); QuicStreamState stream(1, conn); RstStreamFrame rst(1, GenericApplicationErrorCode::UNKNOWN, 100); stream.finalReadOffset = 1024; @@ -435,7 +446,8 @@ TEST_F(QuicStateFunctionsTest, TestInvokeStreamStateMachineConnectionError) { } TEST_F(QuicStateFunctionsTest, InvokeResetDoesNotSendFlowControl) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); QuicStreamState stream(1, conn); RstStreamFrame rst(1, GenericApplicationErrorCode::UNKNOWN, 90); // this would normally trigger a flow control update. @@ -453,7 +465,8 @@ TEST_F(QuicStateFunctionsTest, InvokeResetDoesNotSendFlowControl) { TEST_F(QuicStateFunctionsTest, TestInvokeStreamStateMachineStreamError) { // We isolate invalid events on streams to affect only the streams. Is that // a good idea? We'll find out. - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); QuicStreamState stream(1, conn); RstStreamFrame rst(1, GenericApplicationErrorCode::UNKNOWN, 100); try { @@ -467,7 +480,8 @@ TEST_F(QuicStateFunctionsTest, TestInvokeStreamStateMachineStreamError) { } TEST_F(QuicStateFunctionsTest, UpdateMinRtt) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); auto qLogger = std::make_shared(VantagePoint::Server); conn.qLogger = qLogger; @@ -507,7 +521,8 @@ TEST_F(QuicStateFunctionsTest, UpdateMinRtt) { } TEST_F(QuicStateFunctionsTest, UpdateMaxAckDelay) { - QuicServerConnectionState conn; + QuicServerConnectionState conn( + std::make_shared()); EXPECT_EQ(0us, conn.lossState.maxAckDelay); auto rttSample = 100us; diff --git a/quic/state/test/QuicStreamFunctionsTest.cpp b/quic/state/test/QuicStreamFunctionsTest.cpp index 36346ad6d..b7836e85a 100644 --- a/quic/state/test/QuicStreamFunctionsTest.cpp +++ b/quic/state/test/QuicStreamFunctionsTest.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include using namespace folly; @@ -52,6 +53,9 @@ class QuicStreamFunctionsTest : public Test { class QuicServerStreamFunctionsTest : public Test { public: + QuicServerStreamFunctionsTest() + : conn(std::make_shared()) {} + void SetUp() override { conn.flowControlState.peerAdvertisedInitialMaxStreamOffsetBidiLocal = kDefaultStreamWindowSize; @@ -1102,7 +1106,8 @@ TEST_F(QuicStreamFunctionsTest, IsBidirectionalStream) { TEST_F(QuicStreamFunctionsTest, IsSendingStream) { QuicClientConnectionState clientState( FizzClientQuicHandshakeContext::Builder().build()); - QuicServerConnectionState serverState; + QuicServerConnectionState serverState( + std::make_shared()); QuicNodeType nodeType; StreamId id; @@ -1130,7 +1135,8 @@ TEST_F(QuicStreamFunctionsTest, IsSendingStream) { TEST_F(QuicStreamFunctionsTest, IsReceivingStream) { QuicClientConnectionState clientState( FizzClientQuicHandshakeContext::Builder().build()); - QuicServerConnectionState serverState; + QuicServerConnectionState serverState( + std::make_shared()); QuicNodeType nodeType; StreamId id; diff --git a/quic/state/test/QuicStreamManagerTest.cpp b/quic/state/test/QuicStreamManagerTest.cpp index 53e976bb6..340ce5396 100644 --- a/quic/state/test/QuicStreamManagerTest.cpp +++ b/quic/state/test/QuicStreamManagerTest.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -20,6 +21,8 @@ namespace test { class QuicStreamManagerTest : public Test { public: + QuicStreamManagerTest() + : conn(std::make_shared()) {} void SetUp() override { conn.flowControlState.peerAdvertisedInitialMaxStreamOffsetBidiLocal = kDefaultStreamWindowSize;