| Index: net/base/cert_verifier_unittest.cc
|
| ===================================================================
|
| --- net/base/cert_verifier_unittest.cc (revision 107789)
|
| +++ net/base/cert_verifier_unittest.cc (working copy)
|
| @@ -59,6 +59,7 @@
|
| 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());
|
| @@ -69,8 +70,74 @@
|
| 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(CertVerifierTest, DifferentCACerts) {
|
| + TestTimeService* time_service = new TestTimeService;
|
| + base::Time current_time = base::Time::Now();
|
| + time_service->set_current_time(current_time);
|
| + CertVerifier verifier(time_service);
|
| +
|
| + FilePath certs_dir = GetTestCertsDirectory();
|
| +
|
| + scoped_refptr<X509Certificate> server_cert =
|
| + ImportCertFromFile(certs_dir, "salesforce_com_test.pem");
|
| + ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
|
| +
|
| + scoped_refptr<X509Certificate> intermediate_cert1 =
|
| + ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2011.pem");
|
| + ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert1);
|
| +
|
| + scoped_refptr<X509Certificate> intermediate_cert2 =
|
| + ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2016.pem");
|
| + ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert2);
|
| +
|
| + X509Certificate::OSCertHandles intermediates;
|
| + intermediates.push_back(intermediate_cert1->os_cert_handle());
|
| + scoped_refptr<X509Certificate> cert_chain1 =
|
| + X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
|
| + intermediates);
|
| +
|
| + intermediates.clear();
|
| + intermediates.push_back(intermediate_cert2->os_cert_handle());
|
| + scoped_refptr<X509Certificate> cert_chain2 =
|
| + X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
|
| + intermediates);
|
| +
|
| + int error;
|
| + CertVerifyResult verify_result;
|
| + TestCompletionCallback callback;
|
| + CertVerifier::RequestHandle request_handle;
|
| +
|
| + 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(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());
|
| +}
|
| +
|
| // Tests an inflight join.
|
| TEST(CertVerifierTest, InflightJoin) {
|
| TestTimeService* time_service = new TestTimeService;
|
|
|