| Index: net/base/multi_threaded_cert_verifier_unittest.cc
|
| diff --git a/net/base/multi_threaded_cert_verifier_unittest.cc b/net/base/multi_threaded_cert_verifier_unittest.cc
|
| index 17eed9904a6d6604c2e8b9b020caa1e01e6d55e0..ae7d684fb3994e544990d141a85f2d091547e093 100644
|
| --- a/net/base/multi_threaded_cert_verifier_unittest.cc
|
| +++ b/net/base/multi_threaded_cert_verifier_unittest.cc
|
| @@ -9,6 +9,8 @@
|
| #include "base/format_macros.h"
|
| #include "base/stringprintf.h"
|
| #include "net/base/cert_test_util.h"
|
| +#include "net/base/cert_verify_proc.h"
|
| +#include "net/base/cert_verify_result.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/net_log.h"
|
| #include "net/base/test_completion_callback.h"
|
| @@ -23,7 +25,38 @@ void FailTest(int /* result */) {
|
| FAIL();
|
| }
|
|
|
| -} // namespace;
|
| +class MockCertVerifyProc : public CertVerifyProc {
|
| + public:
|
| + MockCertVerifyProc() {}
|
| +
|
| + private:
|
| + virtual ~MockCertVerifyProc() {}
|
| +
|
| + // CertVerifyProc implementation
|
| + virtual int VerifyInternal(X509Certificate* cert,
|
| + const std::string& hostname,
|
| + int flags,
|
| + CRLSet* crl_set,
|
| + CertVerifyResult* verify_result) OVERRIDE {
|
| + verify_result->Reset();
|
| + verify_result->verified_cert = cert;
|
| + verify_result->cert_status = CERT_STATUS_COMMON_NAME_INVALID;
|
| + return ERR_CERT_COMMON_NAME_INVALID;
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class MultiThreadedCertVerifierTest : public ::testing::Test {
|
| + public:
|
| + MultiThreadedCertVerifierTest() {
|
| + verifier_.SetCertVerifyProc(new MockCertVerifyProc());
|
| + }
|
| + virtual ~MultiThreadedCertVerifierTest() {}
|
| +
|
| + protected:
|
| + MultiThreadedCertVerifier verifier_;
|
| +};
|
|
|
| // Tests a cache hit, which should result in synchronous completion.
|
| #if defined(OS_MACOSX)
|
| @@ -32,9 +65,7 @@ void FailTest(int /* result */) {
|
| #else
|
| #define MAYBE_CacheHit CacheHit
|
| #endif // defined(OS_MACOSX)
|
| -TEST(MultiThreadedCertVerifierTest, MAYBE_CacheHit) {
|
| - MultiThreadedCertVerifier verifier;
|
| -
|
| +TEST_F(MultiThreadedCertVerifierTest, MAYBE_CacheHit) {
|
| FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "ok_cert.pem"));
|
| @@ -45,35 +76,35 @@ TEST(MultiThreadedCertVerifierTest, MAYBE_CacheHit) {
|
| TestCompletionCallback callback;
|
| CertVerifier::RequestHandle request_handle;
|
|
|
| - error = verifier.Verify(test_cert, "www.example.com", 0, NULL, &verify_result,
|
| - callback.callback(), &request_handle, BoundNetLog());
|
| + error = verifier_.Verify(test_cert, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| error = callback.WaitForResult();
|
| ASSERT_TRUE(IsCertificateError(error));
|
| - ASSERT_EQ(1u, verifier.requests());
|
| - ASSERT_EQ(0u, verifier.cache_hits());
|
| - ASSERT_EQ(0u, verifier.inflight_joins());
|
| - ASSERT_EQ(1u, verifier.GetCacheSize());
|
| -
|
| - error = verifier.Verify(test_cert, "www.example.com", 0, NULL, &verify_result,
|
| - callback.callback(), &request_handle, BoundNetLog());
|
| + ASSERT_EQ(1u, verifier_.requests());
|
| + ASSERT_EQ(0u, verifier_.cache_hits());
|
| + ASSERT_EQ(0u, verifier_.inflight_joins());
|
| + ASSERT_EQ(1u, verifier_.GetCacheSize());
|
| +
|
| + error = verifier_.Verify(test_cert, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| // Synchronous completion.
|
| ASSERT_NE(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(IsCertificateError(error));
|
| ASSERT_TRUE(request_handle == NULL);
|
| - ASSERT_EQ(2u, verifier.requests());
|
| - ASSERT_EQ(1u, verifier.cache_hits());
|
| - ASSERT_EQ(0u, verifier.inflight_joins());
|
| - ASSERT_EQ(1u, verifier.GetCacheSize());
|
| + ASSERT_EQ(2u, verifier_.requests());
|
| + ASSERT_EQ(1u, verifier_.cache_hits());
|
| + ASSERT_EQ(0u, verifier_.inflight_joins());
|
| + ASSERT_EQ(1u, verifier_.GetCacheSize());
|
| }
|
|
|
| // Tests the same server certificate with different intermediate CA
|
| // certificates. These should be treated as different certificate chains even
|
| // though the two X509Certificate objects contain the same server certificate.
|
| -TEST(MultiThreadedCertVerifierTest, DifferentCACerts) {
|
| - MultiThreadedCertVerifier verifier;
|
| -
|
| +TEST_F(MultiThreadedCertVerifierTest, DifferentCACerts) {
|
| FilePath certs_dir = GetTestCertsDirectory();
|
|
|
| scoped_refptr<X509Certificate> server_cert =
|
| @@ -105,35 +136,33 @@ TEST(MultiThreadedCertVerifierTest, DifferentCACerts) {
|
| TestCompletionCallback callback;
|
| CertVerifier::RequestHandle request_handle;
|
|
|
| - error = verifier.Verify(cert_chain1, "www.example.com", 0, NULL,
|
| - &verify_result, callback.callback(),
|
| - &request_handle, BoundNetLog());
|
| + error = verifier_.Verify(cert_chain1, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| error = callback.WaitForResult();
|
| ASSERT_TRUE(IsCertificateError(error));
|
| - ASSERT_EQ(1u, verifier.requests());
|
| - ASSERT_EQ(0u, verifier.cache_hits());
|
| - ASSERT_EQ(0u, verifier.inflight_joins());
|
| - ASSERT_EQ(1u, verifier.GetCacheSize());
|
| -
|
| - error = verifier.Verify(cert_chain2, "www.example.com", 0, NULL,
|
| - &verify_result, callback.callback(),
|
| - &request_handle, BoundNetLog());
|
| + ASSERT_EQ(1u, verifier_.requests());
|
| + ASSERT_EQ(0u, verifier_.cache_hits());
|
| + ASSERT_EQ(0u, verifier_.inflight_joins());
|
| + ASSERT_EQ(1u, verifier_.GetCacheSize());
|
| +
|
| + error = verifier_.Verify(cert_chain2, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| error = callback.WaitForResult();
|
| ASSERT_TRUE(IsCertificateError(error));
|
| - ASSERT_EQ(2u, verifier.requests());
|
| - ASSERT_EQ(0u, verifier.cache_hits());
|
| - ASSERT_EQ(0u, verifier.inflight_joins());
|
| - ASSERT_EQ(2u, verifier.GetCacheSize());
|
| + ASSERT_EQ(2u, verifier_.requests());
|
| + ASSERT_EQ(0u, verifier_.cache_hits());
|
| + ASSERT_EQ(0u, verifier_.inflight_joins());
|
| + ASSERT_EQ(2u, verifier_.GetCacheSize());
|
| }
|
|
|
| // Tests an inflight join.
|
| -TEST(MultiThreadedCertVerifierTest, InflightJoin) {
|
| - MultiThreadedCertVerifier verifier;
|
| -
|
| +TEST_F(MultiThreadedCertVerifierTest, InflightJoin) {
|
| FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "ok_cert.pem"));
|
| @@ -147,11 +176,12 @@ TEST(MultiThreadedCertVerifierTest, InflightJoin) {
|
| TestCompletionCallback callback2;
|
| CertVerifier::RequestHandle request_handle2;
|
|
|
| - error = verifier.Verify(test_cert, "www.example.com", 0, NULL, &verify_result,
|
| - callback.callback(), &request_handle, BoundNetLog());
|
| + error = verifier_.Verify(test_cert, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| - error = verifier.Verify(
|
| + error = verifier_.Verify(
|
| test_cert, "www.example.com", 0, NULL, &verify_result2,
|
| callback2.callback(), &request_handle2, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| @@ -160,15 +190,13 @@ TEST(MultiThreadedCertVerifierTest, InflightJoin) {
|
| ASSERT_TRUE(IsCertificateError(error));
|
| error = callback2.WaitForResult();
|
| ASSERT_TRUE(IsCertificateError(error));
|
| - ASSERT_EQ(2u, verifier.requests());
|
| - ASSERT_EQ(0u, verifier.cache_hits());
|
| - ASSERT_EQ(1u, verifier.inflight_joins());
|
| + ASSERT_EQ(2u, verifier_.requests());
|
| + ASSERT_EQ(0u, verifier_.cache_hits());
|
| + ASSERT_EQ(1u, verifier_.inflight_joins());
|
| }
|
|
|
| // Tests that the callback of a canceled request is never made.
|
| -TEST(MultiThreadedCertVerifierTest, CancelRequest) {
|
| - MultiThreadedCertVerifier verifier;
|
| -
|
| +TEST_F(MultiThreadedCertVerifierTest, CancelRequest) {
|
| FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "ok_cert.pem"));
|
| @@ -178,32 +206,30 @@ TEST(MultiThreadedCertVerifierTest, CancelRequest) {
|
| CertVerifyResult verify_result;
|
| CertVerifier::RequestHandle request_handle;
|
|
|
| - error = verifier.Verify(
|
| + error = verifier_.Verify(
|
| test_cert, "www.example.com", 0, NULL, &verify_result,
|
| base::Bind(&FailTest), &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| - verifier.CancelRequest(request_handle);
|
| + verifier_.CancelRequest(request_handle);
|
|
|
| // Issue a few more requests to the worker pool and wait for their
|
| // completion, so that the task of the canceled request (which runs on a
|
| // worker thread) is likely to complete by the end of this test.
|
| TestCompletionCallback callback;
|
| for (int i = 0; i < 5; ++i) {
|
| - error = verifier.Verify(
|
| + error = verifier_.Verify(
|
| test_cert, "www2.example.com", 0, NULL, &verify_result,
|
| callback.callback(), &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| error = callback.WaitForResult();
|
| - verifier.ClearCache();
|
| + verifier_.ClearCache();
|
| }
|
| }
|
|
|
| // Tests that a canceled request is not leaked.
|
| -TEST(MultiThreadedCertVerifierTest, CancelRequestThenQuit) {
|
| - MultiThreadedCertVerifier verifier;
|
| -
|
| +TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) {
|
| FilePath certs_dir = GetTestCertsDirectory();
|
| scoped_refptr<X509Certificate> test_cert(
|
| ImportCertFromFile(certs_dir, "ok_cert.pem"));
|
| @@ -214,15 +240,16 @@ TEST(MultiThreadedCertVerifierTest, CancelRequestThenQuit) {
|
| TestCompletionCallback callback;
|
| CertVerifier::RequestHandle request_handle;
|
|
|
| - error = verifier.Verify(test_cert, "www.example.com", 0, NULL, &verify_result,
|
| - callback.callback(), &request_handle, BoundNetLog());
|
| + error = verifier_.Verify(test_cert, "www.example.com", 0, NULL,
|
| + &verify_result, callback.callback(),
|
| + &request_handle, BoundNetLog());
|
| ASSERT_EQ(ERR_IO_PENDING, error);
|
| ASSERT_TRUE(request_handle != NULL);
|
| - verifier.CancelRequest(request_handle);
|
| + verifier_.CancelRequest(request_handle);
|
| // Destroy |verifier| by going out of scope.
|
| }
|
|
|
| -TEST(MultiThreadedCertVerifierTest, RequestParamsComparators) {
|
| +TEST_F(MultiThreadedCertVerifierTest, RequestParamsComparators) {
|
| SHA1Fingerprint a_key;
|
| memset(a_key.data, 'a', sizeof(a_key.data));
|
|
|
|
|