Add default version for QuicTransport and use it in all unit tests.
This currently uses draft25, as draft27 doesn't yet has a quic_verions codepoint.
gfe-relnote: n/a (not used in production)
PiperOrigin-RevId: 298468043
Change-Id: I5dfd78a05717f166c56092b0ca3d868afb257072
diff --git a/quic/quic_transport/quic_transport_client_session_test.cc b/quic/quic_transport/quic_transport_client_session_test.cc
index 312b132..ba65ce2 100644
--- a/quic/quic_transport/quic_transport_client_session_test.cc
+++ b/quic/quic_transport/quic_transport_client_session_test.cc
@@ -36,15 +36,7 @@
}
ParsedQuicVersionVector GetVersions() {
- for (const ParsedQuicVersion& version : AllSupportedVersions()) {
- // Find the first version that supports IETF QUIC.
- if (version.HasIetfQuicFrames() &&
- version.handshake_protocol == quic::PROTOCOL_TLS1_3) {
- return {version};
- }
- }
- CHECK(false);
- return {};
+ return {DefaultVersionForQuicTransport()};
}
std::string DataInStream(QuicStream* stream) {
@@ -65,6 +57,7 @@
Perspective::IS_CLIENT,
GetVersions()),
crypto_config_(crypto_test_utils::ProofVerifierForTesting()) {
+ QuicEnableVersion(DefaultVersionForQuicTransport());
CreateSession(GetTestOrigin(), "");
}
diff --git a/quic/quic_transport/quic_transport_integration_test.cc b/quic/quic_transport/quic_transport_integration_test.cc
index 2da47fa..355f6cc 100644
--- a/quic/quic_transport/quic_transport_integration_test.cc
+++ b/quic/quic_transport/quic_transport_integration_test.cc
@@ -49,15 +49,7 @@
}
ParsedQuicVersionVector GetVersions() {
- for (const ParsedQuicVersion& version : AllSupportedVersions()) {
- // Find the first version that supports IETF QUIC.
- if (version.HasIetfQuicFrames() &&
- version.handshake_protocol == quic::PROTOCOL_TLS1_3) {
- return {version};
- }
- }
- CHECK(false);
- return {};
+ return {DefaultVersionForQuicTransport()};
}
class QuicTransportEndpointBase : public QuicEndpointBase {
@@ -67,6 +59,7 @@
const std::string& peer_name,
Perspective perspective)
: QuicEndpointBase(simulator, name, peer_name) {
+ QuicEnableVersion(DefaultVersionForQuicTransport());
connection_ = std::make_unique<QuicConnection>(
TestConnectionId(0x10), simulator::GetAddressFromName(peer_name),
simulator, simulator->GetAlarmFactory(), &writer_,
diff --git a/quic/quic_transport/quic_transport_protocol.h b/quic/quic_transport/quic_transport_protocol.h
index 23f0d8d..6d95acc 100644
--- a/quic/quic_transport/quic_transport_protocol.h
+++ b/quic/quic_transport/quic_transport_protocol.h
@@ -6,7 +6,9 @@
#define QUICHE_QUIC_QUIC_TRANSPORT_QUIC_TRANSPORT_PROTOCOL_H_
#include "net/third_party/quiche/src/quic/core/quic_types.h"
+#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
namespace quic {
@@ -31,6 +33,23 @@
kPath = 0x0001,
};
+// Returns if the specified QUIC version can be used by QuicTransport.
+QUIC_EXPORT_PRIVATE constexpr bool IsVersionValidForQuicTransport(
+ const ParsedQuicVersion& version) {
+ return VersionSupportsMessageFrames(version.transport_version) &&
+ VersionHasIetfQuicFrames(version.transport_version) &&
+ version.handshake_protocol == PROTOCOL_TLS1_3;
+}
+
+// Returns default QUIC version used for QuicTransport.
+QUIC_EXPORT_PRIVATE inline ParsedQuicVersion DefaultVersionForQuicTransport() {
+ constexpr ParsedQuicVersion version(PROTOCOL_TLS1_3,
+ QUIC_VERSION_IETF_DRAFT_25);
+ static_assert(IsVersionValidForQuicTransport(version),
+ "Default QUIC version used by QuicTransport is invalid");
+ return version;
+}
+
} // namespace quic
#endif // QUICHE_QUIC_QUIC_TRANSPORT_QUIC_TRANSPORT_PROTOCOL_H_
diff --git a/quic/quic_transport/quic_transport_server_session_test.cc b/quic/quic_transport/quic_transport_server_session_test.cc
index c8ef5c7..8176b03 100644
--- a/quic/quic_transport/quic_transport_server_session_test.cc
+++ b/quic/quic_transport/quic_transport_server_session_test.cc
@@ -51,15 +51,7 @@
}
ParsedQuicVersionVector GetVersions() {
- for (const ParsedQuicVersion& version : AllSupportedVersions()) {
- // Find the first version that supports IETF QUIC.
- if (version.HasIetfQuicFrames() &&
- version.handshake_protocol == quic::PROTOCOL_TLS1_3) {
- return {version};
- }
- }
- CHECK(false);
- return {};
+ return {DefaultVersionForQuicTransport()};
}
class QuicTransportServerSessionTest : public QuicTest {
@@ -75,6 +67,7 @@
KeyExchangeSource::Default()),
compressed_certs_cache_(
QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) {
+ QuicEnableVersion(DefaultVersionForQuicTransport());
connection_.AdvanceTime(QuicTime::Delta::FromSeconds(100000));
crypto_test_utils::SetupCryptoServerConfigForTest(
helper_.GetClock(), helper_.GetRandomGenerator(), &crypto_config_);
diff --git a/quic/quic_transport/quic_transport_stream_test.cc b/quic/quic_transport/quic_transport_stream_test.cc
index 3c92101..6a91702 100644
--- a/quic/quic_transport/quic_transport_stream_test.cc
+++ b/quic/quic_transport/quic_transport_stream_test.cc
@@ -24,15 +24,7 @@
using testing::Return;
ParsedQuicVersionVector GetVersions() {
- for (const ParsedQuicVersion& version : AllSupportedVersions()) {
- // Find the first version that supports IETF QUIC.
- if (version.HasIetfQuicFrames() &&
- version.handshake_protocol == quic::PROTOCOL_TLS1_3) {
- return {version};
- }
- }
- CHECK(false);
- return {};
+ return {DefaultVersionForQuicTransport()};
}
class MockQuicTransportSessionInterface : public QuicTransportSessionInterface {
@@ -48,6 +40,7 @@
Perspective::IS_CLIENT,
GetVersions())),
session_(connection_) {
+ QuicEnableVersion(DefaultVersionForQuicTransport());
session_.Initialize();
stream_ = new QuicTransportStream(0, &session_, &interface_);
diff --git a/quic/test_tools/crypto_test_utils.cc b/quic/test_tools/crypto_test_utils.cc
index 9537ec7..bfe4a5e 100644
--- a/quic/test_tools/crypto_test_utils.cc
+++ b/quic/test_tools/crypto_test_utils.cc
@@ -4,6 +4,7 @@
#include "net/third_party/quiche/src/quic/test_tools/crypto_test_utils.h"
+#include <algorithm>
#include <memory>
#include <string>
#include <utility>
@@ -271,24 +272,26 @@
const QuicServerId& server_id,
const FakeClientOptions& options,
std::string alpn) {
- ParsedQuicVersionVector supported_versions = AllSupportedVersions();
+ // This function does not do version negotiation; read the supported versions
+ // directly from the server connection instead.
+ ParsedQuicVersionVector supported_versions =
+ server_conn->supported_versions();
if (options.only_tls_versions) {
- supported_versions.clear();
- for (ParsedQuicVersion version : AllSupportedVersions()) {
- if (version.handshake_protocol != PROTOCOL_TLS1_3) {
- continue;
- }
- supported_versions.push_back(version);
- }
+ supported_versions.erase(
+ std::remove_if(supported_versions.begin(), supported_versions.end(),
+ [](const ParsedQuicVersion& version) {
+ return version.handshake_protocol != PROTOCOL_TLS1_3;
+ }),
+ supported_versions.end());
CHECK(!options.only_quic_crypto_versions);
} else if (options.only_quic_crypto_versions) {
- supported_versions.clear();
- for (ParsedQuicVersion version : AllSupportedVersions()) {
- if (version.handshake_protocol != PROTOCOL_QUIC_CRYPTO) {
- continue;
- }
- supported_versions.push_back(version);
- }
+ supported_versions.erase(
+ std::remove_if(supported_versions.begin(), supported_versions.end(),
+ [](const ParsedQuicVersion& version) {
+ return version.handshake_protocol !=
+ PROTOCOL_QUIC_CRYPTO;
+ }),
+ supported_versions.end());
}
PacketSavingConnection* client_conn = new PacketSavingConnection(
helper, alarm_factory, Perspective::IS_CLIENT, supported_versions);