| Index: chrome/browser/chromeos/policy/policy_cert_verifier_unittest.cc
|
| diff --git a/chrome/browser/chromeos/policy/policy_cert_verifier_unittest.cc b/chrome/browser/chromeos/policy/policy_cert_verifier_unittest.cc
|
| deleted file mode 100644
|
| index 23380a4ddbd01d2689552b790e5a4d0f4f4e4619..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/policy/policy_cert_verifier_unittest.cc
|
| +++ /dev/null
|
| @@ -1,236 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/policy/policy_cert_verifier.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/callback.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/run_loop.h"
|
| -#include "chrome/browser/chromeos/net/cert_verify_proc_chromeos.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "crypto/nss_util.h"
|
| -#include "crypto/nss_util_internal.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/base/test_completion_callback.h"
|
| -#include "net/base/test_data_directory.h"
|
| -#include "net/cert/cert_trust_anchor_provider.h"
|
| -#include "net/cert/cert_verify_result.h"
|
| -#include "net/cert/nss_cert_database_chromeos.h"
|
| -#include "net/cert/x509_certificate.h"
|
| -#include "net/test/cert_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace policy {
|
| -
|
| -class PolicyCertVerifierTest : public testing::Test {
|
| - public:
|
| - PolicyCertVerifierTest()
|
| - : trust_anchor_used_(false), test_nss_user_("user1") {}
|
| -
|
| - virtual ~PolicyCertVerifierTest() {}
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - ASSERT_TRUE(test_nss_user_.constructed_successfully());
|
| - test_nss_user_.FinishInit();
|
| -
|
| - test_cert_db_.reset(new net::NSSCertDatabaseChromeOS(
|
| - crypto::GetPublicSlotForChromeOSUser(test_nss_user_.username_hash()),
|
| - crypto::GetPrivateSlotForChromeOSUser(
|
| - test_nss_user_.username_hash(),
|
| - base::Callback<void(crypto::ScopedPK11Slot)>())));
|
| - test_cert_db_->SetSlowTaskRunnerForTest(base::MessageLoopProxy::current());
|
| -
|
| - cert_verifier_.reset(new PolicyCertVerifier(base::Bind(
|
| - &PolicyCertVerifierTest::OnTrustAnchorUsed, base::Unretained(this))));
|
| - cert_verifier_->InitializeOnIOThread(new chromeos::CertVerifyProcChromeOS(
|
| - crypto::GetPublicSlotForChromeOSUser(test_nss_user_.username_hash())));
|
| -
|
| - test_ca_cert_ = LoadCertificate("root_ca_cert.pem", net::CA_CERT);
|
| - ASSERT_TRUE(test_ca_cert_);
|
| - test_server_cert_ = LoadCertificate("ok_cert.pem", net::SERVER_CERT);
|
| - ASSERT_TRUE(test_server_cert_);
|
| - test_ca_cert_list_.push_back(test_ca_cert_);
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - // Destroy |cert_verifier_| before destroying the ThreadBundle, otherwise
|
| - // BrowserThread::CurrentlyOn checks fail.
|
| - cert_verifier_.reset();
|
| - }
|
| -
|
| - protected:
|
| - int VerifyTestServerCert(const net::TestCompletionCallback& test_callback,
|
| - net::CertVerifyResult* verify_result,
|
| - net::CertVerifier::RequestHandle* request_handle) {
|
| - return cert_verifier_->Verify(test_server_cert_.get(),
|
| - "127.0.0.1",
|
| - 0,
|
| - NULL,
|
| - verify_result,
|
| - test_callback.callback(),
|
| - request_handle,
|
| - net::BoundNetLog());
|
| - }
|
| -
|
| - bool SupportsAdditionalTrustAnchors() {
|
| - scoped_refptr<net::CertVerifyProc> proc =
|
| - net::CertVerifyProc::CreateDefault();
|
| - return proc->SupportsAdditionalTrustAnchors();
|
| - }
|
| -
|
| - // Returns whether |cert_verifier| signalled usage of one of the additional
|
| - // trust anchors (i.e. of |test_ca_cert_|) for the first time or since the
|
| - // last call of this function.
|
| - bool WasTrustAnchorUsedAndReset() {
|
| - base::RunLoop().RunUntilIdle();
|
| - bool result = trust_anchor_used_;
|
| - trust_anchor_used_ = false;
|
| - return result;
|
| - }
|
| -
|
| - // |test_ca_cert_| is the issuer of |test_server_cert_|.
|
| - scoped_refptr<net::X509Certificate> test_ca_cert_;
|
| - scoped_refptr<net::X509Certificate> test_server_cert_;
|
| - net::CertificateList test_ca_cert_list_;
|
| - scoped_ptr<net::NSSCertDatabaseChromeOS> test_cert_db_;
|
| - scoped_ptr<PolicyCertVerifier> cert_verifier_;
|
| -
|
| - private:
|
| - void OnTrustAnchorUsed() {
|
| - trust_anchor_used_ = true;
|
| - }
|
| -
|
| - scoped_refptr<net::X509Certificate> LoadCertificate(const std::string& name,
|
| - net::CertType type) {
|
| - scoped_refptr<net::X509Certificate> cert =
|
| - net::ImportCertFromFile(net::GetTestCertsDirectory(), name);
|
| -
|
| - // No certificate is trusted right after it's loaded.
|
| - net::NSSCertDatabase::TrustBits trust =
|
| - test_cert_db_->GetCertTrust(cert.get(), type);
|
| - EXPECT_EQ(net::NSSCertDatabase::TRUST_DEFAULT, trust);
|
| -
|
| - return cert;
|
| - }
|
| -
|
| - bool trust_anchor_used_;
|
| - crypto::ScopedTestNSSChromeOSUser test_nss_user_;
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| -};
|
| -
|
| -TEST_F(PolicyCertVerifierTest, VerifyUntrustedCert) {
|
| - // |test_server_cert_| is untrusted, so Verify() fails.
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - ASSERT_EQ(net::ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle);
|
| - error = callback.WaitForResult();
|
| - EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, error);
|
| - }
|
| -
|
| - // Issuing the same request again hits the cache. This tests the synchronous
|
| - // path.
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, error);
|
| - }
|
| -
|
| - EXPECT_FALSE(WasTrustAnchorUsedAndReset());
|
| -}
|
| -
|
| -TEST_F(PolicyCertVerifierTest, VerifyTrustedCert) {
|
| - // Make the database trust |test_ca_cert_|.
|
| - net::NSSCertDatabase::ImportCertFailureList failure_list;
|
| - ASSERT_TRUE(test_cert_db_->ImportCACerts(
|
| - test_ca_cert_list_, net::NSSCertDatabase::TRUSTED_SSL, &failure_list));
|
| - ASSERT_TRUE(failure_list.empty());
|
| -
|
| - // Verify that it is now trusted.
|
| - net::NSSCertDatabase::TrustBits trust =
|
| - test_cert_db_->GetCertTrust(test_ca_cert_.get(), net::CA_CERT);
|
| - EXPECT_EQ(net::NSSCertDatabase::TRUSTED_SSL, trust);
|
| -
|
| - // Verify() successfully verifies |test_server_cert_| after it was imported.
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - ASSERT_EQ(net::ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle);
|
| - error = callback.WaitForResult();
|
| - EXPECT_EQ(net::OK, error);
|
| -
|
| - // The additional trust anchors were not used, since the certificate is
|
| - // trusted from the database.
|
| - EXPECT_FALSE(WasTrustAnchorUsedAndReset());
|
| -}
|
| -
|
| -// http://crbug.com/396497
|
| -TEST_F(PolicyCertVerifierTest, DISABLED_VerifyUsingAdditionalTrustAnchor) {
|
| - ASSERT_TRUE(SupportsAdditionalTrustAnchors());
|
| -
|
| - // |test_server_cert_| is untrusted, so Verify() fails.
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - ASSERT_EQ(net::ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle);
|
| - error = callback.WaitForResult();
|
| - EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, error);
|
| - }
|
| - EXPECT_FALSE(WasTrustAnchorUsedAndReset());
|
| -
|
| - // Verify() again with the additional trust anchors.
|
| - cert_verifier_->SetTrustAnchors(test_ca_cert_list_);
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - ASSERT_EQ(net::ERR_IO_PENDING, error);
|
| - EXPECT_TRUE(request_handle);
|
| - error = callback.WaitForResult();
|
| - EXPECT_EQ(net::OK, error);
|
| - }
|
| - EXPECT_TRUE(WasTrustAnchorUsedAndReset());
|
| -
|
| - // Verify() again with the additional trust anchors will hit the cache.
|
| - cert_verifier_->SetTrustAnchors(test_ca_cert_list_);
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - EXPECT_EQ(net::OK, error);
|
| - }
|
| - EXPECT_TRUE(WasTrustAnchorUsedAndReset());
|
| -
|
| - // Verifying after removing the trust anchors should now fail.
|
| - cert_verifier_->SetTrustAnchors(net::CertificateList());
|
| - {
|
| - net::CertVerifyResult verify_result;
|
| - net::TestCompletionCallback callback;
|
| - net::CertVerifier::RequestHandle request_handle = NULL;
|
| - int error = VerifyTestServerCert(callback, &verify_result, &request_handle);
|
| - // Note: this hits the cached result from the first Verify() in this test.
|
| - EXPECT_EQ(net::ERR_CERT_AUTHORITY_INVALID, error);
|
| - }
|
| - // The additional trust anchors were reset, thus |cert_verifier_| should not
|
| - // signal it's usage anymore.
|
| - EXPECT_FALSE(WasTrustAnchorUsedAndReset());
|
| -}
|
| -
|
| -} // namespace policy
|
|
|