1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-09 10:00:57 +03:00
Files
mvfst/quic/fizz/handshake/test/FizzTransportParametersTest.cpp
Matt Joras d1a3652a4c Iterate QuicVersion::MVFST
Summary:
This iterates the mvfst version to be semantically equivalent to draft-27, and leaves support for the old mvfst version.

The client will not yet be moved to draft-27 by default.

Reviewed By: lnicco

Differential Revision: D20182452

fbshipit-source-id: 1e11ad7296a6cd8d15ca5ed359d9ed82af79bb17
2020-03-04 22:08:34 -08:00

143 lines
4.7 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 <folly/portability/GMock.h>
#include <folly/portability/GTest.h>
#include <fizz/record/test/ExtensionTestsBase.h>
#include <quic/common/test/TestUtils.h>
#include <quic/fizz/handshake/FizzTransportParameters.h>
using namespace fizz;
using namespace fizz::test;
using namespace folly;
namespace quic {
namespace test {
class QuicExtensionsTest : public testing::Test {
protected:
Buf getBuf(folly::StringPiece hex) {
auto data = unhexlify(hex);
return folly::IOBuf::copyBuffer(data.data(), data.size());
}
std::vector<Extension> getExtensions(folly::StringPiece hex) {
auto buf = QuicExtensionsTest::getBuf(hex);
folly::io::Cursor cursor(buf.get());
Extension ext;
EXPECT_EQ(fizz::detail::read(ext, cursor), buf->computeChainDataLength());
EXPECT_TRUE(cursor.isAtEnd());
std::vector<Extension> exts;
exts.push_back(std::move(ext));
return exts;
}
template <class T>
void checkEncode(
T&& ext,
folly::StringPiece expectedHex,
QuicVersion encodingVersion) {
auto encoded = encodeExtension(std::forward<T>(ext), encodingVersion);
auto buf = folly::IOBuf::create(0);
folly::io::Appender appender(buf.get(), 10);
fizz::detail::write(encoded, appender);
EXPECT_TRUE(folly::IOBufEqualTo()(buf, getBuf(expectedHex)));
}
};
StringPiece clientParamsD24{"ffa5000a0008000400049d7f3e7d"};
StringPiece clientParamsD27{"ffa5000604049d7f3e7d"};
StringPiece serverParamsD24{"ffa5000a0008000400049d7f3e7d"};
StringPiece serverParamsD27{"ffa5000604049d7f3e7d"};
StringPiece ticketParamsD24{"ffa5000a0008000400049d7f3e7d"};
StringPiece ticketParamsD27{"ffa5000604049d7f3e7d"};
TEST_F(QuicExtensionsTest, TestClientParamsD24) {
auto exts = getExtensions(clientParamsD24);
auto ext = getClientExtension(exts, QuicVersion::MVFST_D24);
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), clientParamsD24, QuicVersion::MVFST_D24);
}
TEST_F(QuicExtensionsTest, TestClientParamsD27) {
auto exts = getExtensions(clientParamsD27);
auto ext = getClientExtension(exts, QuicVersion::QUIC_DRAFT);
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), clientParamsD27, QuicVersion::QUIC_DRAFT);
}
TEST_F(QuicExtensionsTest, TestServerParamsD24) {
auto exts = getExtensions(serverParamsD24);
auto ext = getServerExtension(exts, QuicVersion::MVFST_D24);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
checkEncode(std::move(*ext), serverParamsD24, QuicVersion::MVFST_D24);
}
TEST_F(QuicExtensionsTest, TestServerParamsD27) {
auto exts = getExtensions(serverParamsD27);
auto ext = getServerExtension(exts, QuicVersion::QUIC_DRAFT);
EXPECT_EQ(
ext->parameters[0].parameter, TransportParameterId::initial_max_data);
EXPECT_EQ(
*getIntegerParameter(
TransportParameterId::initial_max_data, ext->parameters),
494878333ULL);
checkEncode(std::move(*ext), serverParamsD27, QuicVersion::QUIC_DRAFT);
}
TEST_F(QuicExtensionsTest, TestTicketParamsD24) {
auto exts = getExtensions(ticketParamsD24);
auto ext = getTicketExtension(exts, QuicVersion::MVFST_D24);
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), ticketParamsD24, QuicVersion::MVFST_D24);
}
TEST_F(QuicExtensionsTest, TestTicketParamsD27) {
auto exts = getExtensions(ticketParamsD27);
auto ext = getTicketExtension(exts, QuicVersion::QUIC_DRAFT);
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), ticketParamsD27, QuicVersion::QUIC_DRAFT);
}
} // namespace test
} // namespace quic