Introduce QUIC_VERSION_IETF_DRAFT_25
To prepare for the arrival of draft-26 while still supporting draft-25, this CL prepares a new version that will stay on draft-25, while T099 while keep tracking the latest draft.
gfe-relnote: introduce QUIC version draft-25, protected by new disabled flag gfe2_reloadable_flag_quic_enable_version_draft_25
PiperOrigin-RevId: 296099999
Change-Id: I1c111929ebe0c09ba098ff3f6030fb1799df3344
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index ae48f1b..55c38bd 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -267,9 +267,10 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsAllVersions) {
- static_assert(SupportedTransportVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 8u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, true);
+ SetQuicReloadableFlag(quic_enable_version_draft_25, true);
SetQuicReloadableFlag(quic_enable_version_t050, true);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
@@ -291,6 +292,8 @@
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99));
expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
+ expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
ASSERT_EQ(expected_parsed_versions,
@@ -299,9 +302,10 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsNo99) {
- static_assert(SupportedTransportVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 8u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, false);
+ SetQuicReloadableFlag(quic_enable_version_draft_25, true);
SetQuicReloadableFlag(quic_enable_version_t050, true);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
@@ -321,6 +325,8 @@
expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43));
expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25));
+ expected_parsed_versions.push_back(
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50));
ASSERT_EQ(expected_parsed_versions,
@@ -328,9 +334,10 @@
}
TEST_F(QuicVersionsTest, FilterSupportedVersionsNoFlags) {
- static_assert(SupportedTransportVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 8u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_t099, false);
+ SetQuicReloadableFlag(quic_enable_version_draft_25, false);
SetQuicReloadableFlag(quic_enable_version_t050, false);
SetQuicReloadableFlag(quic_disable_version_q050, false);
SetQuicReloadableFlag(quic_disable_version_q049, false);
@@ -392,19 +399,20 @@
// This test may appear to be so simplistic as to be unnecessary,
// yet a typo was made in doing the #defines and it was caught
// only in some test far removed from here... Better safe than sorry.
-TEST_F(QuicVersionsTest, CheckVersionNumbersForTypos) {
- static_assert(SupportedTransportVersions().size() == 6u,
+TEST_F(QuicVersionsTest, CheckTransportVersionNumbersForTypos) {
+ static_assert(SupportedTransportVersions().size() == 7u,
"Supported versions out of sync");
EXPECT_EQ(QUIC_VERSION_43, 43);
EXPECT_EQ(QUIC_VERSION_46, 46);
EXPECT_EQ(QUIC_VERSION_48, 48);
EXPECT_EQ(QUIC_VERSION_49, 49);
EXPECT_EQ(QUIC_VERSION_50, 50);
+ EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_25, 70);
EXPECT_EQ(QUIC_VERSION_99, 99);
}
TEST_F(QuicVersionsTest, AlpnForVersion) {
- static_assert(SupportedTransportVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 8u,
"Supported versions out of sync");
ParsedQuicVersion parsed_version_q048 =
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48);
@@ -414,6 +422,8 @@
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50);
ParsedQuicVersion parsed_version_t050 =
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50);
+ ParsedQuicVersion parsed_version_draft_25 =
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25);
ParsedQuicVersion parsed_version_t099 =
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99);
@@ -421,16 +431,19 @@
EXPECT_EQ("h3-Q049", AlpnForVersion(parsed_version_q049));
EXPECT_EQ("h3-Q050", AlpnForVersion(parsed_version_q050));
EXPECT_EQ("h3-T050", AlpnForVersion(parsed_version_t050));
- EXPECT_EQ("h3-25", AlpnForVersion(parsed_version_t099));
- static_assert(kQuicIetfDraftVersion == 25,
+ EXPECT_EQ("h3-25", AlpnForVersion(parsed_version_draft_25));
+ EXPECT_EQ("h3-26", AlpnForVersion(parsed_version_t099));
+ static_assert(kQuicIetfDraftVersion == 26,
"ALPN does not match draft version");
}
TEST_F(QuicVersionsTest, QuicEnableVersion) {
- static_assert(SupportedTransportVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 8u,
"Supported versions out of sync");
ParsedQuicVersion parsed_version_t099 =
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99);
+ ParsedQuicVersion parsed_version_draft_25 =
+ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25);
ParsedQuicVersion parsed_version_q050 =
ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50);
ParsedQuicVersion parsed_version_t050 =
@@ -445,6 +458,13 @@
{
QuicFlagSaver flag_saver;
+ SetQuicReloadableFlag(quic_enable_version_draft_25, false);
+ QuicEnableVersion(parsed_version_draft_25);
+ EXPECT_TRUE(GetQuicReloadableFlag(quic_enable_version_draft_25));
+ }
+
+ {
+ QuicFlagSaver flag_saver;
SetQuicReloadableFlag(quic_disable_version_q050, true);
QuicEnableVersion(parsed_version_q050);
EXPECT_FALSE(GetQuicReloadableFlag(quic_disable_version_q050));
@@ -456,6 +476,14 @@
QuicEnableVersion(parsed_version_t050);
EXPECT_TRUE(GetQuicReloadableFlag(quic_enable_version_t050));
}
+
+ {
+ QuicFlagSaver flag_saver;
+ for (const ParsedQuicVersion& version : SupportedVersions()) {
+ QuicEnableVersion(version);
+ }
+ ASSERT_EQ(AllSupportedVersions(), CurrentSupportedVersions());
+ }
}
TEST_F(QuicVersionsTest, ReservedForNegotiation) {
@@ -484,6 +512,22 @@
EXPECT_EQ(SupportedVersions().size(), index);
}
+TEST_F(QuicVersionsTest, SupportedVersionsAllDistinct) {
+ for (size_t index1 = 0; index1 < SupportedVersions().size(); ++index1) {
+ ParsedQuicVersion version1 = SupportedVersions()[index1];
+ for (size_t index2 = index1 + 1; index2 < SupportedVersions().size();
+ ++index2) {
+ ParsedQuicVersion version2 = SupportedVersions()[index2];
+ EXPECT_NE(version1, version2) << version1 << " " << version2;
+ EXPECT_NE(CreateQuicVersionLabel(version1),
+ CreateQuicVersionLabel(version2))
+ << version1 << " " << version2;
+ EXPECT_NE(AlpnForVersion(version1), AlpnForVersion(version2))
+ << version1 << " " << version2;
+ }
+ }
+}
+
} // namespace
} // namespace test
} // namespace quic