mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-25 15:43:13 +03:00
Summary: This implements the connection ID validation via transport parameters. Note we don't do anything with the retry transport parameter yet. This will probably require further surgery to tests when we want the MVFST version to do this, but for now I'm punting on that test plumbing. This retains support for h3-27. Reviewed By: yangchi Differential Revision: D22045631 fbshipit-source-id: e93841e734c0683655c751d808fd90b3b391eb3e
79 lines
2.4 KiB
C++
79 lines
2.4 KiB
C++
/*
|
|
* 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 <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <quic/QuicConstants.h>
|
|
#include <quic/common/test/TestUtils.h>
|
|
#include <quic/server/handshake/ServerTransportParametersExtension.h>
|
|
|
|
#include <fizz/protocol/test/TestMessages.h>
|
|
|
|
using namespace fizz;
|
|
using namespace fizz::test;
|
|
|
|
namespace quic {
|
|
namespace test {
|
|
|
|
static ClientHello getClientHello() {
|
|
auto chlo = TestMessages::clientHello();
|
|
|
|
ClientTransportParameters clientParams;
|
|
clientParams.parameters.emplace_back(
|
|
CustomIntegralTransportParameter(0xffff, 0xffff).encode());
|
|
|
|
chlo.extensions.push_back(encodeExtension(clientParams, QuicVersion::MVFST));
|
|
|
|
return chlo;
|
|
}
|
|
|
|
TEST(ServerTransportParametersTest, TestGetExtensions) {
|
|
ServerTransportParametersExtension ext(
|
|
QuicVersion::MVFST,
|
|
kDefaultConnectionWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
std::numeric_limits<uint32_t>::max(),
|
|
std::numeric_limits<uint32_t>::max(),
|
|
kDefaultIdleTimeout,
|
|
kDefaultAckDelayExponent,
|
|
kDefaultUDPSendPacketLen,
|
|
kDefaultPartialReliability,
|
|
generateStatelessResetToken(),
|
|
ConnectionId(std::vector<uint8_t>{0xff, 0xfe, 0xfd, 0xfc}),
|
|
ConnectionId(std::vector<uint8_t>()));
|
|
auto extensions = ext.getExtensions(getClientHello());
|
|
|
|
EXPECT_EQ(extensions.size(), 1);
|
|
auto serverParams = getServerExtension(extensions, QuicVersion::MVFST);
|
|
EXPECT_TRUE(serverParams.has_value());
|
|
}
|
|
|
|
TEST(ServerTransportParametersTest, TestGetExtensionsMissingClientParams) {
|
|
ServerTransportParametersExtension ext(
|
|
QuicVersion::MVFST,
|
|
kDefaultConnectionWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
kDefaultStreamWindowSize,
|
|
std::numeric_limits<uint32_t>::max(),
|
|
std::numeric_limits<uint32_t>::max(),
|
|
kDefaultIdleTimeout,
|
|
kDefaultAckDelayExponent,
|
|
kDefaultUDPSendPacketLen,
|
|
kDefaultPartialReliability,
|
|
generateStatelessResetToken(),
|
|
ConnectionId(std::vector<uint8_t>{0xff, 0xfe, 0xfd, 0xfc}),
|
|
ConnectionId(std::vector<uint8_t>()));
|
|
EXPECT_THROW(ext.getExtensions(TestMessages::clientHello()), FizzException);
|
|
}
|
|
} // namespace test
|
|
} // namespace quic
|