| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/cert/multi_threaded_cert_verifier.h" | 5 #include "net/cert/multi_threaded_cert_verifier.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 virtual ~MultiThreadedCertVerifierTest() {} | 72 virtual ~MultiThreadedCertVerifierTest() {} |
| 73 | 73 |
| 74 protected: | 74 protected: |
| 75 MultiThreadedCertVerifier verifier_; | 75 MultiThreadedCertVerifier verifier_; |
| 76 }; | 76 }; |
| 77 | 77 |
| 78 TEST_F(MultiThreadedCertVerifierTest, CacheHit) { | 78 TEST_F(MultiThreadedCertVerifierTest, CacheHit) { |
| 79 base::FilePath certs_dir = GetTestCertsDirectory(); | 79 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 80 scoped_refptr<X509Certificate> test_cert( | 80 scoped_refptr<X509Certificate> test_cert( |
| 81 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 81 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
| 82 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); | 82 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); |
| 83 | 83 |
| 84 int error; | 84 int error; |
| 85 CertVerifyResult verify_result; | 85 CertVerifyResult verify_result; |
| 86 TestCompletionCallback callback; | 86 TestCompletionCallback callback; |
| 87 CertVerifier::RequestHandle request_handle; | 87 CertVerifier::RequestHandle request_handle; |
| 88 | 88 |
| 89 error = verifier_.Verify(test_cert.get(), | 89 error = verifier_.Verify(test_cert.get(), |
| 90 "www.example.com", | 90 "www.example.com", |
| 91 0, | 91 0, |
| 92 NULL, | 92 NULL, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 122 } | 122 } |
| 123 | 123 |
| 124 // Tests the same server certificate with different intermediate CA | 124 // Tests the same server certificate with different intermediate CA |
| 125 // certificates. These should be treated as different certificate chains even | 125 // certificates. These should be treated as different certificate chains even |
| 126 // though the two X509Certificate objects contain the same server certificate. | 126 // though the two X509Certificate objects contain the same server certificate. |
| 127 TEST_F(MultiThreadedCertVerifierTest, DifferentCACerts) { | 127 TEST_F(MultiThreadedCertVerifierTest, DifferentCACerts) { |
| 128 base::FilePath certs_dir = GetTestCertsDirectory(); | 128 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 129 | 129 |
| 130 scoped_refptr<X509Certificate> server_cert = | 130 scoped_refptr<X509Certificate> server_cert = |
| 131 ImportCertFromFile(certs_dir, "salesforce_com_test.pem"); | 131 ImportCertFromFile(certs_dir, "salesforce_com_test.pem"); |
| 132 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 132 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert.get()); |
| 133 | 133 |
| 134 scoped_refptr<X509Certificate> intermediate_cert1 = | 134 scoped_refptr<X509Certificate> intermediate_cert1 = |
| 135 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2011.pem"); | 135 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2011.pem"); |
| 136 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert1); | 136 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert1.get()); |
| 137 | 137 |
| 138 scoped_refptr<X509Certificate> intermediate_cert2 = | 138 scoped_refptr<X509Certificate> intermediate_cert2 = |
| 139 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2016.pem"); | 139 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2016.pem"); |
| 140 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert2); | 140 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert2.get()); |
| 141 | 141 |
| 142 X509Certificate::OSCertHandles intermediates; | 142 X509Certificate::OSCertHandles intermediates; |
| 143 intermediates.push_back(intermediate_cert1->os_cert_handle()); | 143 intermediates.push_back(intermediate_cert1->os_cert_handle()); |
| 144 scoped_refptr<X509Certificate> cert_chain1 = | 144 scoped_refptr<X509Certificate> cert_chain1 = |
| 145 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 145 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), |
| 146 intermediates); | 146 intermediates); |
| 147 | 147 |
| 148 intermediates.clear(); | 148 intermediates.clear(); |
| 149 intermediates.push_back(intermediate_cert2->os_cert_handle()); | 149 intermediates.push_back(intermediate_cert2->os_cert_handle()); |
| 150 scoped_refptr<X509Certificate> cert_chain2 = | 150 scoped_refptr<X509Certificate> cert_chain2 = |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 ASSERT_EQ(0u, verifier_.cache_hits()); | 189 ASSERT_EQ(0u, verifier_.cache_hits()); |
| 190 ASSERT_EQ(0u, verifier_.inflight_joins()); | 190 ASSERT_EQ(0u, verifier_.inflight_joins()); |
| 191 ASSERT_EQ(2u, verifier_.GetCacheSize()); | 191 ASSERT_EQ(2u, verifier_.GetCacheSize()); |
| 192 } | 192 } |
| 193 | 193 |
| 194 // Tests an inflight join. | 194 // Tests an inflight join. |
| 195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { | 195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { |
| 196 base::FilePath certs_dir = GetTestCertsDirectory(); | 196 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 197 scoped_refptr<X509Certificate> test_cert( | 197 scoped_refptr<X509Certificate> test_cert( |
| 198 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 198 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
| 199 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); | 199 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); |
| 200 | 200 |
| 201 int error; | 201 int error; |
| 202 CertVerifyResult verify_result; | 202 CertVerifyResult verify_result; |
| 203 TestCompletionCallback callback; | 203 TestCompletionCallback callback; |
| 204 CertVerifier::RequestHandle request_handle; | 204 CertVerifier::RequestHandle request_handle; |
| 205 CertVerifyResult verify_result2; | 205 CertVerifyResult verify_result2; |
| 206 TestCompletionCallback callback2; | 206 TestCompletionCallback callback2; |
| 207 CertVerifier::RequestHandle request_handle2; | 207 CertVerifier::RequestHandle request_handle2; |
| 208 | 208 |
| 209 error = verifier_.Verify(test_cert.get(), | 209 error = verifier_.Verify(test_cert.get(), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 233 ASSERT_EQ(2u, verifier_.requests()); | 233 ASSERT_EQ(2u, verifier_.requests()); |
| 234 ASSERT_EQ(0u, verifier_.cache_hits()); | 234 ASSERT_EQ(0u, verifier_.cache_hits()); |
| 235 ASSERT_EQ(1u, verifier_.inflight_joins()); | 235 ASSERT_EQ(1u, verifier_.inflight_joins()); |
| 236 } | 236 } |
| 237 | 237 |
| 238 // Tests that the callback of a canceled request is never made. | 238 // Tests that the callback of a canceled request is never made. |
| 239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { | 239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { |
| 240 base::FilePath certs_dir = GetTestCertsDirectory(); | 240 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 241 scoped_refptr<X509Certificate> test_cert( | 241 scoped_refptr<X509Certificate> test_cert( |
| 242 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 242 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
| 243 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); | 243 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); |
| 244 | 244 |
| 245 int error; | 245 int error; |
| 246 CertVerifyResult verify_result; | 246 CertVerifyResult verify_result; |
| 247 CertVerifier::RequestHandle request_handle; | 247 CertVerifier::RequestHandle request_handle; |
| 248 | 248 |
| 249 error = verifier_.Verify(test_cert.get(), | 249 error = verifier_.Verify(test_cert.get(), |
| 250 "www.example.com", | 250 "www.example.com", |
| 251 0, | 251 0, |
| 252 NULL, | 252 NULL, |
| 253 &verify_result, | 253 &verify_result, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 282 #if !defined(LEAK_SANITIZER) | 282 #if !defined(LEAK_SANITIZER) |
| 283 #define MAYBE_CancelRequestThenQuit CancelRequestThenQuit | 283 #define MAYBE_CancelRequestThenQuit CancelRequestThenQuit |
| 284 #else | 284 #else |
| 285 // See PR303886. LeakSanitizer flags a leak here. | 285 // See PR303886. LeakSanitizer flags a leak here. |
| 286 #define MAYBE_CancelRequestThenQuit DISABLED_CancelRequestThenQuit | 286 #define MAYBE_CancelRequestThenQuit DISABLED_CancelRequestThenQuit |
| 287 #endif | 287 #endif |
| 288 TEST_F(MultiThreadedCertVerifierTest, MAYBE_CancelRequestThenQuit) { | 288 TEST_F(MultiThreadedCertVerifierTest, MAYBE_CancelRequestThenQuit) { |
| 289 base::FilePath certs_dir = GetTestCertsDirectory(); | 289 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 290 scoped_refptr<X509Certificate> test_cert( | 290 scoped_refptr<X509Certificate> test_cert( |
| 291 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 291 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
| 292 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); | 292 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); |
| 293 | 293 |
| 294 int error; | 294 int error; |
| 295 CertVerifyResult verify_result; | 295 CertVerifyResult verify_result; |
| 296 TestCompletionCallback callback; | 296 TestCompletionCallback callback; |
| 297 CertVerifier::RequestHandle request_handle; | 297 CertVerifier::RequestHandle request_handle; |
| 298 | 298 |
| 299 error = verifier_.Verify(test_cert.get(), | 299 error = verifier_.Verify(test_cert.get(), |
| 300 "www.example.com", | 300 "www.example.com", |
| 301 0, | 301 0, |
| 302 NULL, | 302 NULL, |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 Mock::VerifyAndClearExpectations(&trust_provider); | 476 Mock::VerifyAndClearExpectations(&trust_provider); |
| 477 ASSERT_EQ(ERR_IO_PENDING, error); | 477 ASSERT_EQ(ERR_IO_PENDING, error); |
| 478 EXPECT_TRUE(request_handle); | 478 EXPECT_TRUE(request_handle); |
| 479 error = callback.WaitForResult(); | 479 error = callback.WaitForResult(); |
| 480 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 480 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
| 481 ASSERT_EQ(3u, verifier_.requests()); | 481 ASSERT_EQ(3u, verifier_.requests()); |
| 482 ASSERT_EQ(1u, verifier_.cache_hits()); | 482 ASSERT_EQ(1u, verifier_.cache_hits()); |
| 483 } | 483 } |
| 484 | 484 |
| 485 } // namespace net | 485 } // namespace net |
| OLD | NEW |