1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-25 15:43:13 +03:00
Files
mvfst/quic/handshake/test/TransportParametersTest.cpp
Matt Joras b2e1eedfd3 Mostly remove version negotiation
Summary:
Draft-19 onwards effectively punted version negotiation to QUICv2. Now receiving version negotiation on clients is treated as an immediate termination of the connection.

The transport parameter format has also changed to no longer include any reference to the QUIC version. To avoid us (Facebook) having to turn off QUIC traffic in production, our server needs to be able to parse these transport parameters from our older clients. To achieve this when parsing the transport parameters we will, as a temporary measure, check for the Facebook QUIC version to determine which transport parameter format we are parsing. Luckily for us the version we chose maps nicely to an implausible length for the transport parameters (0xface).

Note that this diff still has the client send the old transport parameter format, so that the rollout can be staged.

Reviewed By: yangchi

Differential Revision: D15203481

fbshipit-source-id: dfaaddc3acc76434461b04430b82a0902138c060
2019-05-10 12:55:28 -07:00

103 lines
3.3 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/common/test/TestUtils.h>
#include <quic/handshake/TransportParameters.h>
#include <fizz/record/test/ExtensionTestsBase.h>
using namespace folly;
using namespace fizz;
using namespace fizz::test;
namespace quic {
namespace test {
StringPiece clientParams{"ffa5000a0008000400049d7f3e7d"};
StringPiece d18ClientParams{"ffa5000efaceb0000008000400049d7f3e7d"};
StringPiece serverParams{"ffa5000a0008000400049d7f3e7d"};
StringPiece ticketParams{"ffa5000a0008000400049d7f3e7d"};
StringPiece d18TicketParams{"ffa5000efaceb0000008000400049d7f3e7d"};
TEST_F(ExtensionsTest, TestClientParams) {
auto exts = getExtensions(clientParams);
auto ext = getExtension<ClientTransportParameters>(exts);
EXPECT_EQ(ext->initial_version, folly::none);
EXPECT_EQ(ext->parameters.size(), 1);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
checkEncode(std::move(*ext), clientParams);
}
// We still need to be able to parse draft-18 client parameters.
TEST_F(ExtensionsTest, TestD18ClientParams) {
auto exts = getExtensions(d18ClientParams);
auto ext = getExtension<ClientTransportParameters>(exts);
EXPECT_EQ(ext->initial_version.value(), QuicVersion::MVFST);
EXPECT_EQ(ext->parameters.size(), 1);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
}
TEST_F(ExtensionsTest, TestServerParams) {
auto exts = getExtensions(serverParams);
auto ext = getExtension<ServerTransportParameters>(exts);
EXPECT_EQ(ext->negotiated_version, folly::none);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
checkEncode(std::move(*ext), serverParams);
}
TEST_F(ExtensionsTest, TestTicketParams) {
auto exts = getExtensions(ticketParams);
auto ext = getExtension<TicketTransportParameters>(exts);
EXPECT_EQ(ext->negotiated_version, folly::none);
EXPECT_EQ(ext->parameters.size(), 1);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
checkEncode(std::move(*ext), ticketParams);
}
// We still need to be able to parse draft-18 ticket parameters.
TEST_F(ExtensionsTest, TestD18TicketParams) {
auto exts = getExtensions(d18TicketParams);
auto ext = getExtension<TicketTransportParameters>(exts);
EXPECT_EQ(ext->negotiated_version.value(), QuicVersion::MVFST);
EXPECT_EQ(ext->parameters.size(), 1);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
}
}
}