| Index: net/quic/crypto/crypto_server_test.cc
|
| diff --git a/net/quic/crypto/crypto_server_test.cc b/net/quic/crypto/crypto_server_test.cc
|
| index 5bcbc70350714aabb7ed98580387bd742077ede8..8a02010629281ee86c821e32084d1a09ddcd4af1 100644
|
| --- a/net/quic/crypto/crypto_server_test.cc
|
| +++ b/net/quic/crypto/crypto_server_test.cc
|
| @@ -48,19 +48,23 @@ class QuicCryptoServerConfigPeer {
|
| // Run tests with both parities of
|
| // FLAGS_use_early_return_when_verifying_chlo.
|
| struct TestParams {
|
| - explicit TestParams(bool use_early_return_when_verifying_chlo,
|
| - bool enable_stateless_rejects,
|
| - bool use_stateless_rejects)
|
| + TestParams(bool use_early_return_when_verifying_chlo,
|
| + bool enable_stateless_rejects,
|
| + bool use_stateless_rejects,
|
| + QuicVersionVector supported_versions)
|
| : use_early_return_when_verifying_chlo(
|
| use_early_return_when_verifying_chlo),
|
| enable_stateless_rejects(enable_stateless_rejects),
|
| - use_stateless_rejects(use_stateless_rejects) {}
|
| + use_stateless_rejects(use_stateless_rejects),
|
| + supported_versions(supported_versions) {}
|
|
|
| friend ostream& operator<<(ostream& os, const TestParams& p) {
|
| os << "{ use_early_return_when_verifying_chlo: "
|
| << p.use_early_return_when_verifying_chlo << endl;
|
| os << " enable_stateless_rejects: " << p.enable_stateless_rejects << endl;
|
| - os << " use_stateless_rejects: " << p.use_stateless_rejects << " }";
|
| + os << " use_stateless_rejects: " << p.use_stateless_rejects << endl;
|
| + os << " versions: " << QuicVersionVectorToString(p.supported_versions)
|
| + << " }";
|
| return os;
|
| }
|
|
|
| @@ -72,6 +76,8 @@ struct TestParams {
|
| // rejecting messages. This should be a no-op if
|
| // enable_stateless_rejects is false.
|
| bool use_stateless_rejects;
|
| + // Versions supported by client and server.
|
| + QuicVersionVector supported_versions;
|
| };
|
|
|
| // Constructs various test permutations.
|
| @@ -81,8 +87,14 @@ vector<TestParams> GetTestParams() {
|
| for (bool use_early_return : kTrueFalse) {
|
| for (bool enable_stateless_rejects : kTrueFalse) {
|
| for (bool use_stateless_rejects : kTrueFalse) {
|
| - params.push_back(TestParams(use_early_return, enable_stateless_rejects,
|
| - use_stateless_rejects));
|
| + // Start with all versions, remove highest on each iteration.
|
| + QuicVersionVector supported_versions = QuicSupportedVersions();
|
| + while (!supported_versions.empty()) {
|
| + params.push_back(
|
| + TestParams(use_early_return, enable_stateless_rejects,
|
| + use_stateless_rejects, supported_versions));
|
| + supported_versions.erase(supported_versions.begin());
|
| + }
|
| }
|
| }
|
| }
|
| @@ -100,7 +112,7 @@ class CryptoServerTest : public ::testing::TestWithParam<TestParams> {
|
| #else
|
| config_.SetProofSource(CryptoTestUtils::FakeProofSourceForTesting());
|
| #endif
|
| - supported_versions_ = QuicSupportedVersions();
|
| + supported_versions_ = GetParam().supported_versions;
|
| client_version_ = supported_versions_.front();
|
| client_version_string_ =
|
| QuicUtils::TagToString(QuicVersionToQuicTag(client_version_));
|
| @@ -204,9 +216,9 @@ class CryptoServerTest : public ::testing::TestWithParam<TestParams> {
|
| const QuicTag* versions;
|
| size_t num_versions;
|
| server_hello.GetTaglist(kVER, &versions, &num_versions);
|
| - ASSERT_EQ(QuicSupportedVersions().size(), num_versions);
|
| + ASSERT_EQ(supported_versions_.size(), num_versions);
|
| for (size_t i = 0; i < num_versions; ++i) {
|
| - EXPECT_EQ(QuicVersionToQuicTag(QuicSupportedVersions()[i]), versions[i]);
|
| + EXPECT_EQ(QuicVersionToQuicTag(supported_versions_[i]), versions[i]);
|
| }
|
|
|
| StringPiece address;
|
| @@ -431,15 +443,9 @@ TEST_P(CryptoServerTest, DefaultCert) {
|
| EXPECT_TRUE(out_.GetStringPiece(kPROF, &proof));
|
| EXPECT_NE(0u, cert.size());
|
| EXPECT_NE(0u, proof.size());
|
| - if (client_version_ <= QUIC_VERSION_26) {
|
| - const HandshakeFailureReason kRejectReasons[] = {
|
| - CLIENT_NONCE_INVALID_TIME_FAILURE};
|
| - CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons));
|
| - } else {
|
| - const HandshakeFailureReason kRejectReasons[] = {
|
| - SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
|
| - CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons));
|
| - }
|
| + const HandshakeFailureReason kRejectReasons[] = {
|
| + SERVER_CONFIG_INCHOATE_HELLO_FAILURE};
|
| + CheckRejectReasons(kRejectReasons, arraysize(kRejectReasons));
|
| }
|
|
|
| TEST_P(CryptoServerTest, TooSmall) {
|
| @@ -671,6 +677,10 @@ TEST_P(CryptoServerTest, ReplayProtection) {
|
| }
|
|
|
| TEST_P(CryptoServerTest, RejectInvalidXlct) {
|
| + if (client_version_ <= QUIC_VERSION_25) {
|
| + // XLCT tag introduced in QUIC_VERSION_26.
|
| + return;
|
| + }
|
| // clang-format off
|
| CryptoHandshakeMessage msg = CryptoTestUtils::Message(
|
| "CHLO",
|
|
|