Index: chromeos/network/network_cert_migrator_unittest.cc |
diff --git a/chromeos/network/network_cert_migrator_unittest.cc b/chromeos/network/network_cert_migrator_unittest.cc |
index 02220d4162b2ef7ac3866673c675aec021bc4136..9ddb0840ad555b8d9cd4b51dba5619e647bee694 100644 |
--- a/chromeos/network/network_cert_migrator_unittest.cc |
+++ b/chromeos/network/network_cert_migrator_unittest.cc |
@@ -5,9 +5,10 @@ |
#include "chromeos/network/network_cert_migrator.h" |
#include <cert.h> |
+#include <pk11pub.h> |
+#include <string> |
#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
#include "base/run_loop.h" |
#include "base/strings/string_number_conversions.h" |
#include "chromeos/cert_loader.h" |
@@ -15,11 +16,8 @@ |
#include "chromeos/dbus/shill_profile_client.h" |
#include "chromeos/dbus/shill_service_client.h" |
#include "chromeos/network/network_state_handler.h" |
-#include "chromeos/tpm/tpm_token_loader.h" |
-#include "crypto/nss_util_internal.h" |
-#include "crypto/scoped_test_nss_chromeos_user.h" |
-#include "net/base/crypto_module.h" |
-#include "net/base/net_errors.h" |
+#include "crypto/scoped_nss_types.h" |
+#include "crypto/scoped_test_nss_db.h" |
#include "net/base/test_data_directory.h" |
#include "net/cert/nss_cert_database_chromeos.h" |
#include "net/cert/x509_certificate.h" |
@@ -27,9 +25,6 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
-// http://crbug.com/418369 |
-#ifdef NDEBUG |
- |
namespace chromeos { |
namespace { |
@@ -37,29 +32,23 @@ namespace { |
const char* kWifiStub = "wifi_stub"; |
const char* kEthernetEapStub = "ethernet_eap_stub"; |
const char* kVPNStub = "vpn_stub"; |
-const char* kNSSNickname = "nss_nickname"; |
-const char* kFakePEM = "pem"; |
const char* kProfile = "/profile/profile1"; |
} // namespace |
class NetworkCertMigratorTest : public testing::Test { |
public: |
- NetworkCertMigratorTest() : service_test_(NULL), |
- user_("user_hash") { |
- } |
- virtual ~NetworkCertMigratorTest() {} |
- |
- virtual void SetUp() override { |
- // Initialize NSS db for the user. |
- ASSERT_TRUE(user_.constructed_successfully()); |
- user_.FinishInit(); |
- test_nssdb_.reset(new net::NSSCertDatabaseChromeOS( |
- crypto::GetPublicSlotForChromeOSUser(user_.username_hash()), |
- crypto::GetPrivateSlotForChromeOSUser( |
- user_.username_hash(), |
- base::Callback<void(crypto::ScopedPK11Slot)>()))); |
- test_nssdb_->SetSlowTaskRunnerForTest(message_loop_.message_loop_proxy()); |
+ NetworkCertMigratorTest() : service_test_(nullptr) {} |
+ ~NetworkCertMigratorTest() override {} |
+ |
+ void SetUp() override { |
+ ASSERT_TRUE(test_nssdb_.is_open()); |
+ // Use the same DB for public and private slot. |
+ test_nsscertdb_.reset(new net::NSSCertDatabaseChromeOS( |
+ crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())), |
+ crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())))); |
+ test_nsscertdb_->SetSlowTaskRunnerForTest( |
+ message_loop_.message_loop_proxy()); |
DBusThreadManager::Initialize(); |
service_test_ = |
@@ -74,58 +63,22 @@ class NetworkCertMigratorTest : public testing::Test { |
CertLoader::Initialize(); |
CertLoader* cert_loader_ = CertLoader::Get(); |
- cert_loader_->StartWithNSSDB(test_nssdb_.get()); |
+ cert_loader_->StartWithNSSDB(test_nsscertdb_.get()); |
} |
- virtual void TearDown() override { |
+ void TearDown() override { |
network_cert_migrator_.reset(); |
network_state_handler_.reset(); |
CertLoader::Shutdown(); |
DBusThreadManager::Shutdown(); |
- CleanupTestCert(); |
} |
protected: |
- void SetupTestCACert() { |
- scoped_refptr<net::X509Certificate> cert_wo_nickname = |
- net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), |
- "eku-test-root.pem", |
- net::X509Certificate::FORMAT_AUTO) |
- .back(); |
- net::X509Certificate::GetPEMEncoded(cert_wo_nickname->os_cert_handle(), |
- &test_ca_cert_pem_); |
- std::string der_encoded; |
- net::X509Certificate::GetDEREncoded(cert_wo_nickname->os_cert_handle(), |
- &der_encoded); |
- cert_wo_nickname = NULL; |
- |
- test_ca_cert_ = net::X509Certificate::CreateFromBytesWithNickname( |
- der_encoded.data(), der_encoded.size(), kNSSNickname); |
- net::CertificateList cert_list; |
- cert_list.push_back(test_ca_cert_); |
- net::NSSCertDatabase::ImportCertFailureList failures; |
- EXPECT_TRUE(test_nssdb_->ImportCACerts( |
- cert_list, net::NSSCertDatabase::TRUST_DEFAULT, &failures)); |
- ASSERT_TRUE(failures.empty()) << net::ErrorToString(failures[0].net_error); |
- } |
- |
void SetupTestClientCert() { |
- std::string pkcs12_data; |
- ASSERT_TRUE(base::ReadFileToString( |
- net::GetTestCertsDirectory().Append("websocket_client_cert.p12"), |
- &pkcs12_data)); |
- |
- net::CertificateList client_cert_list; |
- scoped_refptr<net::CryptoModule> module(net::CryptoModule::CreateFromHandle( |
- test_nssdb_->GetPrivateSlot().get())); |
- ASSERT_EQ(net::OK, |
- test_nssdb_->ImportFromPKCS12(module.get(), |
- pkcs12_data, |
- base::string16(), |
- false, |
- &client_cert_list)); |
- ASSERT_TRUE(!client_cert_list.empty()); |
- test_client_cert_ = client_cert_list[0]; |
+ test_client_cert_ = net::ImportClientCertAndKeyFromFile( |
+ net::GetTestCertsDirectory(), "client_1.pem", "client_1.pk8", |
+ test_nssdb_.slot()); |
+ ASSERT_TRUE(test_client_cert_.get()); |
int slot_id = -1; |
test_client_cert_pkcs11_id_ = CertLoader::GetPkcs11IdAndSlotForCert( |
@@ -157,13 +110,6 @@ class NetworkCertMigratorTest : public testing::Test { |
network_id, shill::kProfileProperty, base::StringValue(kProfile)); |
} |
- void SetupWifiWithNss() { |
- AddService(kWifiStub, shill::kTypeWifi, shill::kStateOnline); |
- service_test_->SetServiceProperty(kWifiStub, |
- shill::kEapCaCertNssProperty, |
- base::StringValue(kNSSNickname)); |
- } |
- |
void SetupNetworkWithEapCertId(bool wifi, const std::string& cert_id) { |
std::string type = wifi ? shill::kTypeWifi: shill::kTypeEthernetEap; |
std::string name = wifi ? kWifiStub : kEthernetEapStub; |
@@ -222,7 +168,7 @@ class NetworkCertMigratorTest : public testing::Test { |
const base::DictionaryValue* properties = |
service_test_->GetServiceProperties(kVPNStub); |
ASSERT_TRUE(properties); |
- const base::DictionaryValue* provider = NULL; |
+ const base::DictionaryValue* provider = nullptr; |
properties->GetDictionaryWithoutPathExpansion(shill::kProviderProperty, |
&provider); |
if (!provider) |
@@ -238,150 +184,34 @@ class NetworkCertMigratorTest : public testing::Test { |
} |
} |
- void GetEapCACertProperties(std::string* nss_nickname, std::string* ca_pem) { |
- nss_nickname->clear(); |
- ca_pem->clear(); |
- const base::DictionaryValue* properties = |
- service_test_->GetServiceProperties(kWifiStub); |
- properties->GetStringWithoutPathExpansion(shill::kEapCaCertNssProperty, |
- nss_nickname); |
- const base::ListValue* ca_pems = NULL; |
- properties->GetListWithoutPathExpansion(shill::kEapCaCertPemProperty, |
- &ca_pems); |
- if (ca_pems && !ca_pems->empty()) |
- ca_pems->GetString(0, ca_pem); |
- } |
- |
- void SetupVpnWithNss(bool open_vpn) { |
- AddService(kVPNStub, shill::kTypeVPN, shill::kStateIdle); |
- base::DictionaryValue provider; |
- const char* nss_property = open_vpn ? shill::kOpenVPNCaCertNSSProperty |
- : shill::kL2tpIpsecCaCertNssProperty; |
- provider.SetStringWithoutPathExpansion(nss_property, kNSSNickname); |
- service_test_->SetServiceProperty( |
- kVPNStub, shill::kProviderProperty, provider); |
- } |
- |
- void GetVpnCACertProperties(bool open_vpn, |
- std::string* nss_nickname, |
- std::string* ca_pem) { |
- nss_nickname->clear(); |
- ca_pem->clear(); |
- const base::DictionaryValue* properties = |
- service_test_->GetServiceProperties(kVPNStub); |
- const base::DictionaryValue* provider = NULL; |
- properties->GetDictionaryWithoutPathExpansion(shill::kProviderProperty, |
- &provider); |
- if (!provider) |
- return; |
- const char* nss_property = open_vpn ? shill::kOpenVPNCaCertNSSProperty |
- : shill::kL2tpIpsecCaCertNssProperty; |
- provider->GetStringWithoutPathExpansion(nss_property, nss_nickname); |
- const base::ListValue* ca_pems = NULL; |
- const char* pem_property = open_vpn ? shill::kOpenVPNCaCertPemProperty |
- : shill::kL2tpIpsecCaCertPemProperty; |
- provider->GetListWithoutPathExpansion(pem_property, &ca_pems); |
- if (ca_pems && !ca_pems->empty()) |
- ca_pems->GetString(0, ca_pem); |
- } |
- |
ShillServiceClient::TestInterface* service_test_; |
- scoped_refptr<net::X509Certificate> test_ca_cert_; |
scoped_refptr<net::X509Certificate> test_client_cert_; |
std::string test_client_cert_pkcs11_id_; |
std::string test_client_cert_slot_id_; |
- std::string test_ca_cert_pem_; |
base::MessageLoop message_loop_; |
private: |
- void CleanupTestCert() { |
- if (test_ca_cert_.get()) |
- ASSERT_TRUE(test_nssdb_->DeleteCertAndKey(test_ca_cert_.get())); |
- |
- if (test_client_cert_.get()) |
- ASSERT_TRUE(test_nssdb_->DeleteCertAndKey(test_client_cert_.get())); |
- } |
- |
scoped_ptr<NetworkStateHandler> network_state_handler_; |
scoped_ptr<NetworkCertMigrator> network_cert_migrator_; |
- crypto::ScopedTestNSSChromeOSUser user_; |
- scoped_ptr<net::NSSCertDatabaseChromeOS> test_nssdb_; |
+ crypto::ScopedTestNSSDB test_nssdb_; |
+ scoped_ptr<net::NSSCertDatabaseChromeOS> test_nsscertdb_; |
DISALLOW_COPY_AND_ASSIGN(NetworkCertMigratorTest); |
}; |
-TEST_F(NetworkCertMigratorTest, MigrateNssOnInitialization) { |
- // Add a new network for migration before the handlers are initialized. |
- SetupWifiWithNss(); |
- SetupTestCACert(); |
- SetupNetworkHandlers(); |
- |
- base::RunLoop().RunUntilIdle(); |
- std::string nss_nickname, ca_pem; |
- GetEapCACertProperties(&nss_nickname, &ca_pem); |
- EXPECT_TRUE(nss_nickname.empty()); |
- EXPECT_EQ(test_ca_cert_pem_, ca_pem); |
-} |
- |
-TEST_F(NetworkCertMigratorTest, MigrateNssOnNetworkAppearance) { |
- SetupTestCACert(); |
- SetupNetworkHandlers(); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Add a new network for migration after the handlers are initialized. |
- SetupWifiWithNss(); |
- |
- base::RunLoop().RunUntilIdle(); |
- std::string nss_nickname, ca_pem; |
- GetEapCACertProperties(&nss_nickname, &ca_pem); |
- EXPECT_TRUE(nss_nickname.empty()); |
- EXPECT_EQ(test_ca_cert_pem_, ca_pem); |
-} |
- |
-TEST_F(NetworkCertMigratorTest, DoNotMigrateNssIfPemSet) { |
- // Add a new network with an already set PEM property. |
- SetupWifiWithNss(); |
- base::ListValue ca_pems; |
- ca_pems.AppendString(kFakePEM); |
- service_test_->SetServiceProperty( |
- kWifiStub, shill::kEapCaCertPemProperty, ca_pems); |
- |
- SetupTestCACert(); |
- SetupNetworkHandlers(); |
- base::RunLoop().RunUntilIdle(); |
- |
- std::string nss_nickname, ca_pem; |
- GetEapCACertProperties(&nss_nickname, &ca_pem); |
- EXPECT_TRUE(nss_nickname.empty()); |
- EXPECT_EQ(kFakePEM, ca_pem); |
-} |
- |
-TEST_F(NetworkCertMigratorTest, MigrateNssOpenVpn) { |
- // Add a new network for migration before the handlers are initialized. |
- SetupVpnWithNss(true /* OpenVPN */); |
- |
- SetupTestCACert(); |
+TEST_F(NetworkCertMigratorTest, MigrateOnInitialization) { |
+ SetupTestClientCert(); |
+ // Add a network for migration before the handlers are initialized. |
+ SetupNetworkWithEapCertId(true /* wifi */, |
+ "123:" + test_client_cert_pkcs11_id_); |
SetupNetworkHandlers(); |
- |
base::RunLoop().RunUntilIdle(); |
- std::string nss_nickname, ca_pem; |
- GetVpnCACertProperties(true /* OpenVPN */, &nss_nickname, &ca_pem); |
- EXPECT_TRUE(nss_nickname.empty()); |
- EXPECT_EQ(test_ca_cert_pem_, ca_pem); |
-} |
- |
-TEST_F(NetworkCertMigratorTest, MigrateNssIpsecVpn) { |
- // Add a new network for migration before the handlers are initialized. |
- SetupVpnWithNss(false /* not OpenVPN */); |
- |
- SetupTestCACert(); |
- SetupNetworkHandlers(); |
- base::RunLoop().RunUntilIdle(); |
- std::string nss_nickname, ca_pem; |
- GetVpnCACertProperties(false /* not OpenVPN */, &nss_nickname, &ca_pem); |
- EXPECT_TRUE(nss_nickname.empty()); |
- EXPECT_EQ(test_ca_cert_pem_, ca_pem); |
+ std::string cert_id; |
+ GetEapCertId(true /* wifi */, &cert_id); |
+ std::string expected_cert_id = |
+ test_client_cert_slot_id_ + ":" + test_client_cert_pkcs11_id_; |
+ EXPECT_EQ(expected_cert_id, cert_id); |
} |
TEST_F(NetworkCertMigratorTest, MigrateEapCertIdNoMatchingCert) { |
@@ -508,5 +338,3 @@ TEST_F(NetworkCertMigratorTest, MigrateIpsecCertIdWrongSlotId) { |
} |
} // namespace chromeos |
- |
-#endif |