| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <ostream> | 5 #include <ostream> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "crypto/secure_hash.h" | 10 #include "crypto/secure_hash.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 : server_config_(server_config) {} | 35 : server_config_(server_config) {} |
| 36 | 36 |
| 37 base::Lock* GetStrikeRegisterClientLock() { | 37 base::Lock* GetStrikeRegisterClientLock() { |
| 38 return &server_config_->strike_register_client_lock_; | 38 return &server_config_->strike_register_client_lock_; |
| 39 } | 39 } |
| 40 | 40 |
| 41 private: | 41 private: |
| 42 QuicCryptoServerConfig* server_config_; | 42 QuicCryptoServerConfig* server_config_; |
| 43 }; | 43 }; |
| 44 | 44 |
| 45 // Run tests with combinations of | 45 // Run tests with both parities of |
| 46 // {FLAGS_use_early_return_when_verifying_chlo, | 46 // FLAGS_use_early_return_when_verifying_chlo. |
| 47 // FLAGS_send_quic_crypto_reject_reason}. | |
| 48 struct TestParams { | 47 struct TestParams { |
| 49 TestParams(bool use_early_return_when_verifying_chlo, | 48 explicit TestParams(bool use_early_return_when_verifying_chlo) |
| 50 bool send_quic_crypto_reject_reason) | |
| 51 : use_early_return_when_verifying_chlo( | 49 : use_early_return_when_verifying_chlo( |
| 52 use_early_return_when_verifying_chlo), | 50 use_early_return_when_verifying_chlo) {} |
| 53 send_quic_crypto_reject_reason(send_quic_crypto_reject_reason) { | |
| 54 } | |
| 55 | 51 |
| 56 friend ostream& operator<<(ostream& os, const TestParams& p) { | 52 friend ostream& operator<<(ostream& os, const TestParams& p) { |
| 57 os << "{ use_early_return_when_verifying_chlo: " | 53 os << "{ use_early_return_when_verifying_chlo: " |
| 58 << p.use_early_return_when_verifying_chlo | 54 << p.use_early_return_when_verifying_chlo << " }"; |
| 59 << " send_quic_crypto_reject_reason: " | |
| 60 << p.send_quic_crypto_reject_reason << " }"; | |
| 61 return os; | 55 return os; |
| 62 } | 56 } |
| 63 | 57 |
| 64 bool use_early_return_when_verifying_chlo; | 58 bool use_early_return_when_verifying_chlo; |
| 65 bool send_quic_crypto_reject_reason; | |
| 66 }; | 59 }; |
| 67 | 60 |
| 68 // Constructs various test permutations. | 61 // Constructs various test permutations. |
| 69 vector<TestParams> GetTestParams() { | 62 vector<TestParams> GetTestParams() { |
| 70 vector<TestParams> params; | 63 vector<TestParams> params; |
| 71 params.push_back(TestParams(false, false)); | 64 params.push_back(TestParams(false)); |
| 72 params.push_back(TestParams(false, true)); | 65 params.push_back(TestParams(true)); |
| 73 params.push_back(TestParams(true, false)); | |
| 74 params.push_back(TestParams(true, true)); | |
| 75 return params; | 66 return params; |
| 76 } | 67 } |
| 77 | 68 |
| 78 class CryptoServerTest : public ::testing::TestWithParam<TestParams> { | 69 class CryptoServerTest : public ::testing::TestWithParam<TestParams> { |
| 79 public: | 70 public: |
| 80 CryptoServerTest() | 71 CryptoServerTest() |
| 81 : rand_(QuicRandom::GetInstance()), | 72 : rand_(QuicRandom::GetInstance()), |
| 82 client_address_(Loopback4(), 1234), | 73 client_address_(Loopback4(), 1234), |
| 83 config_(QuicCryptoServerConfig::TESTING, rand_) { | 74 config_(QuicCryptoServerConfig::TESTING, rand_) { |
| 84 config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); | 75 config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); |
| 85 supported_versions_ = QuicSupportedVersions(); | 76 supported_versions_ = QuicSupportedVersions(); |
| 86 client_version_ = QuicUtils::TagToString( | 77 client_version_ = QuicUtils::TagToString( |
| 87 QuicVersionToQuicTag(supported_versions_.front())); | 78 QuicVersionToQuicTag(supported_versions_.front())); |
| 88 | 79 |
| 89 FLAGS_use_early_return_when_verifying_chlo = | 80 FLAGS_use_early_return_when_verifying_chlo = |
| 90 GetParam().use_early_return_when_verifying_chlo; | 81 GetParam().use_early_return_when_verifying_chlo; |
| 91 FLAGS_send_quic_crypto_reject_reason = | |
| 92 GetParam().send_quic_crypto_reject_reason; | |
| 93 } | 82 } |
| 94 | 83 |
| 95 void SetUp() override { | 84 void SetUp() override { |
| 96 scoped_ptr<CryptoHandshakeMessage> msg( | 85 scoped_ptr<CryptoHandshakeMessage> msg( |
| 97 config_.AddDefaultConfig(rand_, &clock_, | 86 config_.AddDefaultConfig(rand_, &clock_, |
| 98 config_options_)); | 87 config_options_)); |
| 99 | 88 |
| 100 StringPiece orbit; | 89 StringPiece orbit; |
| 101 CHECK(msg->GetStringPiece(kORBT, &orbit)); | 90 CHECK(msg->GetStringPiece(kORBT, &orbit)); |
| 102 CHECK_EQ(sizeof(orbit_), orbit.size()); | 91 CHECK_EQ(sizeof(orbit_), orbit.size()); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 StringPiece(reinterpret_cast<const char*>(orbit_), sizeof(orbit_)), | 255 StringPiece(reinterpret_cast<const char*>(orbit_), sizeof(orbit_)), |
| 267 &nonce); | 256 &nonce); |
| 268 return nonce; | 257 return nonce; |
| 269 } | 258 } |
| 270 | 259 |
| 271 void CheckRejectReasons( | 260 void CheckRejectReasons( |
| 272 const HandshakeFailureReason* expected_handshake_failures, | 261 const HandshakeFailureReason* expected_handshake_failures, |
| 273 size_t expected_count) { | 262 size_t expected_count) { |
| 274 const uint32* reject_reasons; | 263 const uint32* reject_reasons; |
| 275 size_t num_reject_reasons; | 264 size_t num_reject_reasons; |
| 276 COMPILE_ASSERT(sizeof(QuicTag) == sizeof(uint32), header_out_of_sync); | 265 static_assert(sizeof(QuicTag) == sizeof(uint32), "header out of sync"); |
| 277 QuicErrorCode error_code = out_.GetTaglist(kRREJ, &reject_reasons, | 266 QuicErrorCode error_code = out_.GetTaglist(kRREJ, &reject_reasons, |
| 278 &num_reject_reasons); | 267 &num_reject_reasons); |
| 279 if (!FLAGS_send_quic_crypto_reject_reason) { | |
| 280 ASSERT_EQ(QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, error_code); | |
| 281 return; | |
| 282 } | |
| 283 ASSERT_EQ(QUIC_NO_ERROR, error_code); | 268 ASSERT_EQ(QUIC_NO_ERROR, error_code); |
| 284 | 269 |
| 285 if (FLAGS_use_early_return_when_verifying_chlo) { | 270 if (FLAGS_use_early_return_when_verifying_chlo) { |
| 286 EXPECT_EQ(1u, num_reject_reasons); | 271 EXPECT_EQ(1u, num_reject_reasons); |
| 287 } else { | 272 } else { |
| 288 EXPECT_EQ(expected_count, num_reject_reasons); | 273 EXPECT_EQ(expected_count, num_reject_reasons); |
| 289 } | 274 } |
| 290 for (size_t i = 0; i < num_reject_reasons; ++i) { | 275 for (size_t i = 0; i < num_reject_reasons; ++i) { |
| 291 EXPECT_EQ(expected_handshake_failures[i], reject_reasons[i]); | 276 EXPECT_EQ(expected_handshake_failures[i], reject_reasons[i]); |
| 292 } | 277 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 303 QuicCryptoNegotiatedParameters params_; | 288 QuicCryptoNegotiatedParameters params_; |
| 304 CryptoHandshakeMessage out_; | 289 CryptoHandshakeMessage out_; |
| 305 uint8 orbit_[kOrbitSize]; | 290 uint8 orbit_[kOrbitSize]; |
| 306 | 291 |
| 307 // These strings contain hex escaped values from the server suitable for | 292 // These strings contain hex escaped values from the server suitable for |
| 308 // passing to |InchoateClientHello| when constructing client hello messages. | 293 // passing to |InchoateClientHello| when constructing client hello messages. |
| 309 string nonce_hex_, pub_hex_, srct_hex_, scid_hex_; | 294 string nonce_hex_, pub_hex_, srct_hex_, scid_hex_; |
| 310 scoped_ptr<CryptoHandshakeMessage> server_config_; | 295 scoped_ptr<CryptoHandshakeMessage> server_config_; |
| 311 }; | 296 }; |
| 312 | 297 |
| 313 // Run all CryptoServerTest with all combinations of | 298 // Run all CryptoServerTest with both values of |
| 314 // FLAGS_use_early_return_when_verifying_chlo and | 299 // FLAGS_use_early_return_when_verifying_chlo |
| 315 // FLAGS_send_quic_crypto_reject_reason. | |
| 316 INSTANTIATE_TEST_CASE_P(CryptoServerTests, | 300 INSTANTIATE_TEST_CASE_P(CryptoServerTests, |
| 317 CryptoServerTest, | 301 CryptoServerTest, |
| 318 ::testing::ValuesIn(GetTestParams())); | 302 ::testing::ValuesIn(GetTestParams())); |
| 319 | 303 |
| 320 TEST_P(CryptoServerTest, BadSNI) { | 304 TEST_P(CryptoServerTest, BadSNI) { |
| 321 static const char* kBadSNIs[] = { | 305 static const char* kBadSNIs[] = { |
| 322 "", | 306 "", |
| 323 "foo", | 307 "foo", |
| 324 "#00", | 308 "#00", |
| 325 "#ff00", | 309 "#ff00", |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 | 703 |
| 720 strike_register_client_->RunPendingVerifications(); | 704 strike_register_client_->RunPendingVerifications(); |
| 721 ASSERT_TRUE(called); | 705 ASSERT_TRUE(called); |
| 722 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); | 706 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); |
| 723 // The message should be rejected now. | 707 // The message should be rejected now. |
| 724 EXPECT_EQ(kREJ, out_.tag()); | 708 EXPECT_EQ(kREJ, out_.tag()); |
| 725 } | 709 } |
| 726 | 710 |
| 727 } // namespace test | 711 } // namespace test |
| 728 } // namespace net | 712 } // namespace net |
| OLD | NEW |