Chromium Code Reviews| Index: net/ssl/client_cert_store_chromeos_unittest.cc |
| diff --git a/net/ssl/client_cert_store_chromeos_unittest.cc b/net/ssl/client_cert_store_chromeos_unittest.cc |
| index 65b668dbb25d21696337db71aeef49b0d5c58ded..0207a82e1a041898449d10591c1cf8de7daa4b0a 100644 |
| --- a/net/ssl/client_cert_store_chromeos_unittest.cc |
| +++ b/net/ssl/client_cert_store_chromeos_unittest.cc |
| @@ -11,8 +11,8 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "crypto/nss_util.h" |
| #include "crypto/nss_util_internal.h" |
| -#include "net/cert/nss_cert_database.h" |
| #include "net/ssl/client_cert_store_unittest-inl.h" |
| +#include "net/test/cert_test_util.h" |
| namespace net { |
| @@ -20,40 +20,50 @@ class ClientCertStoreChromeOSTest : public ::testing::Test { |
| public: |
| scoped_refptr<X509Certificate> ImportCertForUser( |
| const std::string& username_hash, |
| - const std::string& filename, |
| - const std::string& password) { |
| + const std::string& cert_filename, |
| + const std::string& key_filename) { |
| crypto::ScopedPK11Slot slot( |
| crypto::GetPublicSlotForChromeOSUser(username_hash)); |
| EXPECT_TRUE(slot.get()); |
| if (!slot.get()) |
| return NULL; |
| - net::CertificateList cert_list; |
| + ImportSensitiveKeyFromFile( |
| + GetTestCertsDirectory(), key_filename, slot.get()); |
| - base::FilePath p12_path = GetTestCertsDirectory().AppendASCII(filename); |
| - std::string p12_data; |
| - if (!base::ReadFileToString(p12_path, &p12_data)) { |
| - EXPECT_TRUE(false); |
| - return NULL; |
| - } |
| + scoped_refptr<X509Certificate> cert( |
| + ImportCertFromFile(GetTestCertsDirectory(), cert_filename)); |
| - scoped_refptr<net::CryptoModule> module( |
| - net::CryptoModule::CreateFromHandle(slot.get())); |
| - int rv = NSSCertDatabase::GetInstance()->ImportFromPKCS12( |
| - module.get(), p12_data, base::UTF8ToUTF16(password), false, &cert_list); |
| + EXPECT_TRUE(cert) << "Failed to parse cert from file " << cert_filename; |
| + if (!cert) |
| + return NULL; |
| - EXPECT_EQ(0, rv); |
| - EXPECT_EQ(1U, cert_list.size()); |
| - if (rv || cert_list.size() != 1) |
| + CK_OBJECT_HANDLE key; |
| + crypto::ScopedPK11Slot key_slot( |
| + PK11_KeyForCertExists(cert->os_cert_handle(), &key, NULL)); |
| + EXPECT_EQ(slot.get(), key_slot.get()) |
| + << "Did not find key in the right slot, for cert file " |
| + << cert_filename; |
|
Ryan Sleevi
2014/07/16 19:32:18
Note: This is generally a dangerous pattern to put
pneubeck (no reviews)
2014/07/16 19:49:44
I followed the existing style.
I'd actually would
Ryan Sleevi
2014/07/16 19:59:00
I think it's fine, but it means that you need to w
pneubeck (no reviews)
2014/07/17 13:26:43
Yeah, but that would still mean that there are red
|
| + if (slot.get() != key_slot.get()) |
| return NULL; |
| - return cert_list[0]; |
| + // Use some nickname that is unique within this test. |
| + std::string nickname = cert_filename; |
| + { |
| + crypto::AutoNSSWriteLock lock; |
| + SECStatus rv = PK11_ImportCert( |
| + slot.get(), cert->os_cert_handle(), key, nickname.c_str(), PR_FALSE); |
| + EXPECT_EQ(SECSuccess, rv) << "Could not import cert from file " |
| + << cert_filename; |
| + if (rv != SECSuccess) |
| + return NULL; |
| + } |
| + |
| + return cert; |
| } |
| }; |
| -// TODO(mattm): Do better testing of cert_authorities matching below. Update |
| -// net/data/ssl/scripts/generate-client-certificates.sh so that it actually |
| -// saves the .p12 files, and regenerate them. |
| +// TODO(mattm): Do better testing of cert_authorities matching below. |
| TEST_F(ClientCertStoreChromeOSTest, WaitForNSSInit) { |
| crypto::ScopedTestNSSChromeOSUser user("scopeduser"); |
| @@ -61,14 +71,15 @@ TEST_F(ClientCertStoreChromeOSTest, WaitForNSSInit) { |
| ClientCertStoreChromeOS store( |
| user.username_hash(), ClientCertStoreChromeOS::PasswordDelegateFactory()); |
| scoped_refptr<X509Certificate> cert_1( |
| - ImportCertForUser(user.username_hash(), "client.p12", "12345")); |
| + ImportCertForUser(user.username_hash(), "client_1.pem", "client_1.pk8")); |
| + ASSERT_TRUE(cert_1); |
| scoped_refptr<X509Certificate> cert_2( |
| - ImportCertForUser(user.username_hash(), "websocket_client_cert.p12", "")); |
| + ImportCertForUser(user.username_hash(), "client_2.pem", "client_2.pk8")); |
| + ASSERT_TRUE(cert_2); |
| - std::vector<std::string> authority_1( |
| - 1, |
| - std::string(reinterpret_cast<const char*>(kAuthority1DN), |
| - sizeof(kAuthority1DN))); |
| + std::vector<std::string> authority_1; |
| + authority_1.push_back(std::string( |
| + reinterpret_cast<const char*>(kAuthority1DN), sizeof(kAuthority1DN))); |
| scoped_refptr<SSLCertRequestInfo> request_1(new SSLCertRequestInfo()); |
| request_1->cert_authorities = authority_1; |
| @@ -87,7 +98,7 @@ TEST_F(ClientCertStoreChromeOSTest, WaitForNSSInit) { |
| run_loop_1.Run(); |
| run_loop_all.Run(); |
| - ASSERT_EQ(0u, request_1->client_certs.size()); |
| + ASSERT_EQ(1u, request_1->client_certs.size()); |
|
Ryan Sleevi
2014/07/16 19:32:18
Why... is this? Seems wrong to update the test exp
pneubeck (no reviews)
2014/07/16 19:49:44
Because they were wrong? :-)
See Matt's comment ab
Ryan Sleevi
2014/07/16 19:59:00
I don't know what comment you're referring to.
pneubeck (no reviews)
2014/07/16 20:01:39
Line 54 of the old file:
// TODO(mattm): Do bett
pneubeck (no reviews)
2014/07/16 20:15:23
That's fair.
My reasoning was:
Matt commented tha
Ryan Sleevi
2014/07/16 20:46:07
I guess this highlights poor documentation.
I don
pneubeck (no reviews)
2014/07/16 21:29:58
Ok. Let me explain that part then too.
Another thi
|
| ASSERT_EQ(2u, request_all->client_certs.size()); |
| } |
| @@ -99,9 +110,11 @@ TEST_F(ClientCertStoreChromeOSTest, NSSAlreadyInitialized) { |
| ClientCertStoreChromeOS store( |
| user.username_hash(), ClientCertStoreChromeOS::PasswordDelegateFactory()); |
| scoped_refptr<X509Certificate> cert_1( |
| - ImportCertForUser(user.username_hash(), "client.p12", "12345")); |
| + ImportCertForUser(user.username_hash(), "client_1.pem", "client_1.pk8")); |
| + ASSERT_TRUE(cert_1); |
| scoped_refptr<X509Certificate> cert_2( |
| - ImportCertForUser(user.username_hash(), "websocket_client_cert.p12", "")); |
| + ImportCertForUser(user.username_hash(), "client_2.pem", "client_2.pk8")); |
| + ASSERT_TRUE(cert_2); |
| std::vector<std::string> authority_1( |
| 1, |
| @@ -122,7 +135,7 @@ TEST_F(ClientCertStoreChromeOSTest, NSSAlreadyInitialized) { |
| run_loop_1.Run(); |
| run_loop_all.Run(); |
| - ASSERT_EQ(0u, request_1->client_certs.size()); |
| + ASSERT_EQ(1u, request_1->client_certs.size()); |
| ASSERT_EQ(2u, request_all->client_certs.size()); |
| } |
| @@ -138,15 +151,18 @@ TEST_F(ClientCertStoreChromeOSTest, TwoUsers) { |
| user2.username_hash(), |
| ClientCertStoreChromeOS::PasswordDelegateFactory()); |
| scoped_refptr<X509Certificate> cert_1( |
| - ImportCertForUser(user1.username_hash(), "client.p12", "12345")); |
| - scoped_refptr<X509Certificate> cert_2(ImportCertForUser( |
| - user2.username_hash(), "websocket_client_cert.p12", "")); |
| + ImportCertForUser(user1.username_hash(), "client_1.pem", "client_1.pk8")); |
| + ASSERT_TRUE(cert_1); |
| + scoped_refptr<X509Certificate> cert_2( |
| + ImportCertForUser(user2.username_hash(), "client_2.pem", "client_2.pk8")); |
| + ASSERT_TRUE(cert_2); |
| scoped_refptr<SSLCertRequestInfo> request_1(new SSLCertRequestInfo()); |
| scoped_refptr<SSLCertRequestInfo> request_2(new SSLCertRequestInfo()); |
| base::RunLoop run_loop_1; |
| base::RunLoop run_loop_2; |
| + |
| store1.GetClientCerts( |
| *request_1, &request_1->client_certs, run_loop_1.QuitClosure()); |
| store2.GetClientCerts( |
| @@ -161,8 +177,8 @@ TEST_F(ClientCertStoreChromeOSTest, TwoUsers) { |
| ASSERT_EQ(1u, request_1->client_certs.size()); |
| EXPECT_TRUE(cert_1->Equals(request_1->client_certs[0])); |
| - // TODO(mattm): Request for second user will have zero results due to |
| - // crbug.com/315285. Update the test once that is fixed. |
| + ASSERT_EQ(1u, request_2->client_certs.size()); |
| + EXPECT_TRUE(cert_2->Equals(request_2->client_certs[0])); |
| } |
| } // namespace net |