| Index: net/base/cert_database_nss_unittest.cc
|
| diff --git a/net/base/cert_database_nss_unittest.cc b/net/base/cert_database_nss_unittest.cc
|
| index 7a1138b6ebc141a55494123f03ea0b2231240313..7ff4346d35886c30ecefdb89dc51c37467bd0f48 100644
|
| --- a/net/base/cert_database_nss_unittest.cc
|
| +++ b/net/base/cert_database_nss_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include <cert.h>
|
| #include <pk11pub.h>
|
|
|
| +#include "base/crypto/scoped_nss_types.h"
|
| #include "base/file_path.h"
|
| #include "base/file_util.h"
|
| #include "base/nss_util.h"
|
| @@ -34,8 +35,30 @@ FilePath GetTestCertsDirectory() {
|
| return certs_dir;
|
| }
|
|
|
| -} // namespace
|
| +CertificateList ListCertsInSlot(PK11SlotInfo* slot) {
|
| + CertificateList result;
|
| + CERTCertList* cert_list = PK11_ListCertsInSlot(slot);
|
| + for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list);
|
| + !CERT_LIST_END(node, cert_list);
|
| + node = CERT_LIST_NEXT(node)) {
|
| + result.push_back(
|
| + X509Certificate::CreateFromHandle(
|
| + node->cert,
|
| + X509Certificate::SOURCE_LONE_CERT_IMPORT,
|
| + X509Certificate::OSCertHandles()));
|
| + }
|
| + CERT_DestroyCertList(cert_list);
|
| + return result;
|
| +}
|
|
|
| +std::string ReadTestFile(const std::string& name) {
|
| + std::string result;
|
| + FilePath cert_path = GetTestCertsDirectory().AppendASCII(name);
|
| + EXPECT_TRUE(file_util::ReadFileToString(cert_path, &result));
|
| + return result;
|
| +}
|
| +
|
| +} // namespace
|
|
|
| class CertDatabaseNSSTest : public testing::Test {
|
| public:
|
| @@ -43,75 +66,51 @@ class CertDatabaseNSSTest : public testing::Test {
|
| ASSERT_TRUE(temp_db_dir_.CreateUniqueTempDir());
|
| ASSERT_TRUE(
|
| base::OpenTestNSSDB(temp_db_dir_.path(), "CertDatabaseNSSTest db"));
|
| + slot_.reset(base::GetDefaultNSSKeySlot());
|
| +
|
| + // Test db should be empty at start of test.
|
| + EXPECT_EQ(0U, ListCertsInSlot(slot_.get()).size());
|
| }
|
| virtual void TearDown() {
|
| base::CloseTestNSSDB();
|
| }
|
| +
|
| + protected:
|
| + base::ScopedPK11Slot slot_;
|
| + CertDatabase cert_db_;
|
| +
|
| private:
|
| ScopedTempDir temp_db_dir_;
|
| };
|
|
|
| TEST_F(CertDatabaseNSSTest, ImportFromPKCS12WrongPassword) {
|
| - PK11SlotInfo* slot = base::GetDefaultNSSKeySlot();
|
| - CertDatabase cert_db;
|
| + std::string pkcs12_data = ReadTestFile("client.p12");
|
|
|
| - CERTCertList* cert_list = PK11_ListCertsInSlot(slot);
|
| - // Test db should be empty at start of test.
|
| - EXPECT_TRUE(CERT_LIST_END(CERT_LIST_HEAD(cert_list), cert_list));
|
| - CERT_DestroyCertList(cert_list);
|
| -
|
| - FilePath cert_path = GetTestCertsDirectory().AppendASCII("client.p12");
|
| - std::string cert_data;
|
| - ASSERT_TRUE(file_util::ReadFileToString(cert_path, &cert_data));
|
| EXPECT_EQ(ERR_PKCS12_IMPORT_BAD_PASSWORD,
|
| - cert_db.ImportFromPKCS12(cert_data, ASCIIToUTF16("")));
|
| + cert_db_.ImportFromPKCS12(pkcs12_data, ASCIIToUTF16("")));
|
|
|
| -
|
| - cert_list = PK11_ListCertsInSlot(slot);
|
| // Test db should still be empty.
|
| - EXPECT_TRUE(CERT_LIST_END(CERT_LIST_HEAD(cert_list), cert_list));
|
| - CERT_DestroyCertList(cert_list);
|
| -
|
| - PK11_FreeSlot(slot);
|
| + EXPECT_EQ(0U, ListCertsInSlot(slot_.get()).size());
|
| }
|
|
|
| TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AndExportAgain) {
|
| - PK11SlotInfo* slot = base::GetDefaultNSSKeySlot();
|
| - CertDatabase cert_db;
|
| + std::string pkcs12_data = ReadTestFile("client.p12");
|
|
|
| - CERTCertList* cert_list = PK11_ListCertsInSlot(slot);
|
| - // Test db should be empty at start of test.
|
| - EXPECT_TRUE(CERT_LIST_END(CERT_LIST_HEAD(cert_list), cert_list));
|
| - CERT_DestroyCertList(cert_list);
|
| + EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(pkcs12_data, ASCIIToUTF16("12345")));
|
|
|
| - FilePath cert_path = GetTestCertsDirectory().AppendASCII("client.p12");
|
| - std::string cert_data;
|
| - ASSERT_TRUE(file_util::ReadFileToString(cert_path, &cert_data));
|
| - EXPECT_EQ(OK, cert_db.ImportFromPKCS12(cert_data, ASCIIToUTF16("12345")));
|
| -
|
| - cert_list = PK11_ListCertsInSlot(slot);
|
| - // Test db should be empty at start of test.
|
| - ASSERT_FALSE(CERT_LIST_END(CERT_LIST_HEAD(cert_list), cert_list));
|
| - scoped_refptr<X509Certificate> cert(
|
| - X509Certificate::CreateFromHandle(
|
| - CERT_LIST_HEAD(cert_list)->cert,
|
| - X509Certificate::SOURCE_LONE_CERT_IMPORT,
|
| - X509Certificate::OSCertHandles()));
|
| - CERT_DestroyCertList(cert_list);
|
| + CertificateList cert_list = ListCertsInSlot(slot_.get());
|
| + ASSERT_EQ(1U, cert_list.size());
|
| + scoped_refptr<X509Certificate> cert(cert_list[0]);
|
|
|
| EXPECT_EQ("testusercert",
|
| cert->subject().common_name);
|
|
|
| // TODO(mattm): move export test to seperate test case?
|
| - CertificateList certs;
|
| - certs.push_back(cert);
|
| std::string exported_data;
|
| - EXPECT_EQ(1, cert_db.ExportToPKCS12(certs, ASCIIToUTF16("exportpw"),
|
| - &exported_data));
|
| + EXPECT_EQ(1, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"),
|
| + &exported_data));
|
| ASSERT_LT(0U, exported_data.size());
|
| // TODO(mattm): further verification of exported data?
|
| -
|
| - PK11_FreeSlot(slot);
|
| }
|
|
|
| } // namespace net
|
|
|