Index: net/cert/nss_cert_database_chromeos_unittest.cc |
diff --git a/net/cert/nss_cert_database_chromeos_unittest.cc b/net/cert/nss_cert_database_chromeos_unittest.cc |
deleted file mode 100644 |
index cf41185f1b0cf56cbcd3d28d3f5b95945c9a3c50..0000000000000000000000000000000000000000 |
--- a/net/cert/nss_cert_database_chromeos_unittest.cc |
+++ /dev/null |
@@ -1,323 +0,0 @@ |
-// Copyright 2013 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 "net/cert/nss_cert_database_chromeos.h" |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/message_loop/message_loop_proxy.h" |
-#include "base/run_loop.h" |
-#include "crypto/nss_util_internal.h" |
-#include "crypto/scoped_test_nss_chromeos_user.h" |
-#include "crypto/scoped_test_nss_db.h" |
-#include "net/base/test_data_directory.h" |
-#include "net/cert/cert_database.h" |
-#include "net/test/cert_test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-bool IsCertInCertificateList(const X509Certificate* cert, |
- const CertificateList& cert_list) { |
- for (CertificateList::const_iterator it = cert_list.begin(); |
- it != cert_list.end(); |
- ++it) { |
- if (X509Certificate::IsSameOSCert((*it)->os_cert_handle(), |
- cert->os_cert_handle())) |
- return true; |
- } |
- return false; |
-} |
- |
-void SwapCertLists(CertificateList* destination, |
- scoped_ptr<CertificateList> source) { |
- ASSERT_TRUE(destination); |
- ASSERT_TRUE(source); |
- |
- destination->swap(*source); |
-} |
- |
-} // namespace |
- |
-class NSSCertDatabaseChromeOSTest : public testing::Test, |
- public CertDatabase::Observer { |
- public: |
- NSSCertDatabaseChromeOSTest() |
- : observer_added_(false), user_1_("user1"), user_2_("user2") {} |
- |
- void SetUp() override { |
- // Initialize nss_util slots. |
- ASSERT_TRUE(user_1_.constructed_successfully()); |
- ASSERT_TRUE(user_2_.constructed_successfully()); |
- user_1_.FinishInit(); |
- user_2_.FinishInit(); |
- |
- // Create NSSCertDatabaseChromeOS for each user. |
- db_1_.reset(new NSSCertDatabaseChromeOS( |
- crypto::GetPublicSlotForChromeOSUser(user_1_.username_hash()), |
- crypto::GetPrivateSlotForChromeOSUser( |
- user_1_.username_hash(), |
- base::Callback<void(crypto::ScopedPK11Slot)>()))); |
- db_1_->SetSlowTaskRunnerForTest(base::MessageLoopProxy::current()); |
- db_1_->SetSystemSlot( |
- crypto::ScopedPK11Slot(PK11_ReferenceSlot(system_db_.slot()))); |
- db_2_.reset(new NSSCertDatabaseChromeOS( |
- crypto::GetPublicSlotForChromeOSUser(user_2_.username_hash()), |
- crypto::GetPrivateSlotForChromeOSUser( |
- user_2_.username_hash(), |
- base::Callback<void(crypto::ScopedPK11Slot)>()))); |
- db_2_->SetSlowTaskRunnerForTest(base::MessageLoopProxy::current()); |
- |
- // Add observer to CertDatabase for checking that notifications from |
- // NSSCertDatabaseChromeOS are proxied to the CertDatabase. |
- CertDatabase::GetInstance()->AddObserver(this); |
- observer_added_ = true; |
- } |
- |
- void TearDown() override { |
- if (observer_added_) |
- CertDatabase::GetInstance()->RemoveObserver(this); |
- } |
- |
- // CertDatabase::Observer: |
- void OnCertAdded(const X509Certificate* cert) override { |
- added_.push_back(cert ? cert->os_cert_handle() : NULL); |
- } |
- |
- void OnCertRemoved(const X509Certificate* cert) override {} |
- |
- void OnCACertChanged(const X509Certificate* cert) override { |
- added_ca_.push_back(cert ? cert->os_cert_handle() : NULL); |
- } |
- |
- protected: |
- bool observer_added_; |
- // Certificates that were passed to the CertDatabase observers. |
- std::vector<CERTCertificate*> added_ca_; |
- std::vector<CERTCertificate*> added_; |
- |
- crypto::ScopedTestNSSChromeOSUser user_1_; |
- crypto::ScopedTestNSSChromeOSUser user_2_; |
- crypto::ScopedTestNSSDB system_db_; |
- scoped_ptr<NSSCertDatabaseChromeOS> db_1_; |
- scoped_ptr<NSSCertDatabaseChromeOS> db_2_; |
-}; |
- |
-// Test that ListModules() on each user includes that user's NSS software slot, |
-// and does not include the software slot of the other user. (Does not check the |
-// private slot, since it is the same as the public slot in tests.) |
-TEST_F(NSSCertDatabaseChromeOSTest, ListModules) { |
- CryptoModuleList modules_1; |
- CryptoModuleList modules_2; |
- |
- db_1_->ListModules(&modules_1, false /* need_rw */); |
- db_2_->ListModules(&modules_2, false /* need_rw */); |
- |
- bool found_1 = false; |
- for (CryptoModuleList::iterator it = modules_1.begin(); it != modules_1.end(); |
- ++it) { |
- EXPECT_NE(db_2_->GetPublicSlot().get(), (*it)->os_module_handle()); |
- if ((*it)->os_module_handle() == db_1_->GetPublicSlot().get()) |
- found_1 = true; |
- } |
- EXPECT_TRUE(found_1); |
- |
- bool found_2 = false; |
- for (CryptoModuleList::iterator it = modules_2.begin(); it != modules_2.end(); |
- ++it) { |
- EXPECT_NE(db_1_->GetPublicSlot().get(), (*it)->os_module_handle()); |
- if ((*it)->os_module_handle() == db_2_->GetPublicSlot().get()) |
- found_2 = true; |
- } |
- EXPECT_TRUE(found_2); |
-} |
- |
-// Test that ImportCACerts imports the cert to the correct slot, and that |
-// ListCerts includes the added cert for the correct user, and does not include |
-// it for the other user. |
-TEST_F(NSSCertDatabaseChromeOSTest, ImportCACerts) { |
- // Load test certs from disk. |
- CertificateList certs_1 = |
- CreateCertificateListFromFile(GetTestCertsDirectory(), |
- "root_ca_cert.pem", |
- X509Certificate::FORMAT_AUTO); |
- ASSERT_EQ(1U, certs_1.size()); |
- |
- CertificateList certs_2 = |
- CreateCertificateListFromFile(GetTestCertsDirectory(), |
- "2048-rsa-root.pem", |
- X509Certificate::FORMAT_AUTO); |
- ASSERT_EQ(1U, certs_2.size()); |
- |
- // Import one cert for each user. |
- NSSCertDatabase::ImportCertFailureList failed; |
- EXPECT_TRUE( |
- db_1_->ImportCACerts(certs_1, NSSCertDatabase::TRUSTED_SSL, &failed)); |
- EXPECT_EQ(0U, failed.size()); |
- failed.clear(); |
- EXPECT_TRUE( |
- db_2_->ImportCACerts(certs_2, NSSCertDatabase::TRUSTED_SSL, &failed)); |
- EXPECT_EQ(0U, failed.size()); |
- |
- // Get cert list for each user. |
- CertificateList user_1_certlist; |
- CertificateList user_2_certlist; |
- db_1_->ListCertsSync(&user_1_certlist); |
- db_2_->ListCertsSync(&user_2_certlist); |
- |
- // Check that the imported certs only shows up in the list for the user that |
- // imported them. |
- EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); |
- EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); |
- EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); |
- |
- // Run the message loop so the observer notifications get processed. |
- base::RunLoop().RunUntilIdle(); |
- // Should have gotten two OnCACertChanged notifications. |
- ASSERT_EQ(2U, added_ca_.size()); |
- // TODO(mattm): make NSSCertDatabase actually pass the cert to the callback, |
- // and enable these checks: |
- // EXPECT_EQ(certs_1[0]->os_cert_handle(), added_ca_[0]); |
- // EXPECT_EQ(certs_2[0]->os_cert_handle(), added_ca_[1]); |
- EXPECT_EQ(0U, added_.size()); |
- |
- // Tests that the new certs are loaded by async ListCerts method. |
- CertificateList user_1_certlist_async; |
- CertificateList user_2_certlist_async; |
- db_1_->ListCerts( |
- base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); |
- db_2_->ListCerts( |
- base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist_async)); |
- EXPECT_FALSE( |
- IsCertInCertificateList(certs_1[0].get(), user_2_certlist_async)); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist_async)); |
- EXPECT_FALSE( |
- IsCertInCertificateList(certs_2[0].get(), user_1_certlist_async)); |
-} |
- |
-// Test that ImportServerCerts imports the cert to the correct slot, and that |
-// ListCerts includes the added cert for the correct user, and does not include |
-// it for the other user. |
-TEST_F(NSSCertDatabaseChromeOSTest, ImportServerCert) { |
- // Load test certs from disk. |
- CertificateList certs_1 = CreateCertificateListFromFile( |
- GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); |
- ASSERT_EQ(1U, certs_1.size()); |
- |
- CertificateList certs_2 = |
- CreateCertificateListFromFile(GetTestCertsDirectory(), |
- "2048-rsa-ee-by-2048-rsa-intermediate.pem", |
- X509Certificate::FORMAT_AUTO); |
- ASSERT_EQ(1U, certs_2.size()); |
- |
- // Import one cert for each user. |
- NSSCertDatabase::ImportCertFailureList failed; |
- EXPECT_TRUE( |
- db_1_->ImportServerCert(certs_1, NSSCertDatabase::TRUSTED_SSL, &failed)); |
- EXPECT_EQ(0U, failed.size()); |
- failed.clear(); |
- EXPECT_TRUE( |
- db_2_->ImportServerCert(certs_2, NSSCertDatabase::TRUSTED_SSL, &failed)); |
- EXPECT_EQ(0U, failed.size()); |
- |
- // Get cert list for each user. |
- CertificateList user_1_certlist; |
- CertificateList user_2_certlist; |
- db_1_->ListCertsSync(&user_1_certlist); |
- db_2_->ListCertsSync(&user_2_certlist); |
- |
- // Check that the imported certs only shows up in the list for the user that |
- // imported them. |
- EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist)); |
- EXPECT_FALSE(IsCertInCertificateList(certs_1[0].get(), user_2_certlist)); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist)); |
- EXPECT_FALSE(IsCertInCertificateList(certs_2[0].get(), user_1_certlist)); |
- |
- // Run the message loop so the observer notifications get processed. |
- base::RunLoop().RunUntilIdle(); |
- // TODO(mattm): ImportServerCert doesn't actually cause any observers to |
- // fire. Is that correct? |
- EXPECT_EQ(0U, added_ca_.size()); |
- EXPECT_EQ(0U, added_.size()); |
- |
- // Tests that the new certs are loaded by async ListCerts method. |
- CertificateList user_1_certlist_async; |
- CertificateList user_2_certlist_async; |
- db_1_->ListCerts( |
- base::Bind(&SwapCertLists, base::Unretained(&user_1_certlist_async))); |
- db_2_->ListCerts( |
- base::Bind(&SwapCertLists, base::Unretained(&user_2_certlist_async))); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_1[0].get(), user_1_certlist_async)); |
- EXPECT_FALSE( |
- IsCertInCertificateList(certs_1[0].get(), user_2_certlist_async)); |
- |
- EXPECT_TRUE(IsCertInCertificateList(certs_2[0].get(), user_2_certlist_async)); |
- EXPECT_FALSE( |
- IsCertInCertificateList(certs_2[0].get(), user_1_certlist_async)); |
-} |
- |
-// Tests that There is no crash if the database is deleted while ListCerts |
-// is being processed on the worker pool. |
-TEST_F(NSSCertDatabaseChromeOSTest, NoCrashIfShutdownBeforeDoneOnWorkerPool) { |
- CertificateList certlist; |
- db_1_->ListCerts(base::Bind(&SwapCertLists, base::Unretained(&certlist))); |
- EXPECT_EQ(0U, certlist.size()); |
- |
- db_1_.reset(); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_LT(0U, certlist.size()); |
-} |
- |
-TEST_F(NSSCertDatabaseChromeOSTest, ListCertsReadsSystemSlot) { |
- scoped_refptr<X509Certificate> cert_1( |
- ImportClientCertAndKeyFromFile(GetTestCertsDirectory(), |
- "client_1.pem", |
- "client_1.pk8", |
- db_1_->GetPublicSlot().get())); |
- |
- scoped_refptr<X509Certificate> cert_2( |
- ImportClientCertAndKeyFromFile(GetTestCertsDirectory(), |
- "client_2.pem", |
- "client_2.pk8", |
- db_1_->GetSystemSlot().get())); |
- CertificateList certs; |
- db_1_->ListCertsSync(&certs); |
- EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); |
- EXPECT_TRUE(IsCertInCertificateList(cert_2.get(), certs)); |
-} |
- |
-TEST_F(NSSCertDatabaseChromeOSTest, ListCertsDoesNotCrossReadSystemSlot) { |
- scoped_refptr<X509Certificate> cert_1( |
- ImportClientCertAndKeyFromFile(GetTestCertsDirectory(), |
- "client_1.pem", |
- "client_1.pk8", |
- db_2_->GetPublicSlot().get())); |
- |
- scoped_refptr<X509Certificate> cert_2( |
- ImportClientCertAndKeyFromFile(GetTestCertsDirectory(), |
- "client_2.pem", |
- "client_2.pk8", |
- system_db_.slot())); |
- CertificateList certs; |
- db_2_->ListCertsSync(&certs); |
- EXPECT_TRUE(IsCertInCertificateList(cert_1.get(), certs)); |
- EXPECT_FALSE(IsCertInCertificateList(cert_2.get(), certs)); |
-} |
- |
-} // namespace net |