| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/network/network_cert_migrator.h" | 5 #include "chromeos/network/network_cert_migrator.h" |
| 6 | 6 |
| 7 #include <cert.h> | 7 #include <cert.h> |
| 8 #include <pk11pub.h> |
| 9 #include <string> |
| 8 | 10 |
| 9 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 10 #include "base/files/file_util.h" | |
| 11 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 12 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
| 13 #include "chromeos/cert_loader.h" | 14 #include "chromeos/cert_loader.h" |
| 14 #include "chromeos/dbus/dbus_thread_manager.h" | 15 #include "chromeos/dbus/dbus_thread_manager.h" |
| 15 #include "chromeos/dbus/shill_profile_client.h" | 16 #include "chromeos/dbus/shill_profile_client.h" |
| 16 #include "chromeos/dbus/shill_service_client.h" | 17 #include "chromeos/dbus/shill_service_client.h" |
| 17 #include "chromeos/network/network_state_handler.h" | 18 #include "chromeos/network/network_state_handler.h" |
| 18 #include "chromeos/tpm/tpm_token_loader.h" | 19 #include "crypto/scoped_nss_types.h" |
| 19 #include "crypto/nss_util_internal.h" | 20 #include "crypto/scoped_test_nss_db.h" |
| 20 #include "crypto/scoped_test_nss_chromeos_user.h" | |
| 21 #include "net/base/crypto_module.h" | |
| 22 #include "net/base/net_errors.h" | |
| 23 #include "net/base/test_data_directory.h" | 21 #include "net/base/test_data_directory.h" |
| 24 #include "net/cert/nss_cert_database_chromeos.h" | 22 #include "net/cert/nss_cert_database_chromeos.h" |
| 25 #include "net/cert/x509_certificate.h" | 23 #include "net/cert/x509_certificate.h" |
| 26 #include "net/test/cert_test_util.h" | 24 #include "net/test/cert_test_util.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "third_party/cros_system_api/dbus/service_constants.h" | 26 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 29 | 27 |
| 30 // http://crbug.com/418369 | |
| 31 #ifdef NDEBUG | |
| 32 | |
| 33 namespace chromeos { | 28 namespace chromeos { |
| 34 | 29 |
| 35 namespace { | 30 namespace { |
| 36 | 31 |
| 37 const char* kWifiStub = "wifi_stub"; | 32 const char* kWifiStub = "wifi_stub"; |
| 38 const char* kEthernetEapStub = "ethernet_eap_stub"; | 33 const char* kEthernetEapStub = "ethernet_eap_stub"; |
| 39 const char* kVPNStub = "vpn_stub"; | 34 const char* kVPNStub = "vpn_stub"; |
| 40 const char* kNSSNickname = "nss_nickname"; | |
| 41 const char* kFakePEM = "pem"; | |
| 42 const char* kProfile = "/profile/profile1"; | 35 const char* kProfile = "/profile/profile1"; |
| 43 | 36 |
| 44 } // namespace | 37 } // namespace |
| 45 | 38 |
| 46 class NetworkCertMigratorTest : public testing::Test { | 39 class NetworkCertMigratorTest : public testing::Test { |
| 47 public: | 40 public: |
| 48 NetworkCertMigratorTest() : service_test_(NULL), | 41 NetworkCertMigratorTest() : service_test_(nullptr) {} |
| 49 user_("user_hash") { | 42 ~NetworkCertMigratorTest() override {} |
| 50 } | |
| 51 virtual ~NetworkCertMigratorTest() {} | |
| 52 | 43 |
| 53 virtual void SetUp() override { | 44 void SetUp() override { |
| 54 // Initialize NSS db for the user. | 45 ASSERT_TRUE(test_nssdb_.is_open()); |
| 55 ASSERT_TRUE(user_.constructed_successfully()); | 46 // Use the same DB for public and private slot. |
| 56 user_.FinishInit(); | 47 test_nsscertdb_.reset(new net::NSSCertDatabaseChromeOS( |
| 57 test_nssdb_.reset(new net::NSSCertDatabaseChromeOS( | 48 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())), |
| 58 crypto::GetPublicSlotForChromeOSUser(user_.username_hash()), | 49 crypto::ScopedPK11Slot(PK11_ReferenceSlot(test_nssdb_.slot())))); |
| 59 crypto::GetPrivateSlotForChromeOSUser( | 50 test_nsscertdb_->SetSlowTaskRunnerForTest( |
| 60 user_.username_hash(), | 51 message_loop_.message_loop_proxy()); |
| 61 base::Callback<void(crypto::ScopedPK11Slot)>()))); | |
| 62 test_nssdb_->SetSlowTaskRunnerForTest(message_loop_.message_loop_proxy()); | |
| 63 | 52 |
| 64 DBusThreadManager::Initialize(); | 53 DBusThreadManager::Initialize(); |
| 65 service_test_ = | 54 service_test_ = |
| 66 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | 55 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
| 67 DBusThreadManager::Get() | 56 DBusThreadManager::Get() |
| 68 ->GetShillProfileClient() | 57 ->GetShillProfileClient() |
| 69 ->GetTestInterface() | 58 ->GetTestInterface() |
| 70 ->AddProfile(kProfile, "" /* userhash */); | 59 ->AddProfile(kProfile, "" /* userhash */); |
| 71 base::RunLoop().RunUntilIdle(); | 60 base::RunLoop().RunUntilIdle(); |
| 72 service_test_->ClearServices(); | 61 service_test_->ClearServices(); |
| 73 base::RunLoop().RunUntilIdle(); | 62 base::RunLoop().RunUntilIdle(); |
| 74 | 63 |
| 75 CertLoader::Initialize(); | 64 CertLoader::Initialize(); |
| 76 CertLoader* cert_loader_ = CertLoader::Get(); | 65 CertLoader* cert_loader_ = CertLoader::Get(); |
| 77 cert_loader_->StartWithNSSDB(test_nssdb_.get()); | 66 cert_loader_->StartWithNSSDB(test_nsscertdb_.get()); |
| 78 } | 67 } |
| 79 | 68 |
| 80 virtual void TearDown() override { | 69 void TearDown() override { |
| 81 network_cert_migrator_.reset(); | 70 network_cert_migrator_.reset(); |
| 82 network_state_handler_.reset(); | 71 network_state_handler_.reset(); |
| 83 CertLoader::Shutdown(); | 72 CertLoader::Shutdown(); |
| 84 DBusThreadManager::Shutdown(); | 73 DBusThreadManager::Shutdown(); |
| 85 CleanupTestCert(); | |
| 86 } | 74 } |
| 87 | 75 |
| 88 protected: | 76 protected: |
| 89 void SetupTestCACert() { | |
| 90 scoped_refptr<net::X509Certificate> cert_wo_nickname = | |
| 91 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), | |
| 92 "eku-test-root.pem", | |
| 93 net::X509Certificate::FORMAT_AUTO) | |
| 94 .back(); | |
| 95 net::X509Certificate::GetPEMEncoded(cert_wo_nickname->os_cert_handle(), | |
| 96 &test_ca_cert_pem_); | |
| 97 std::string der_encoded; | |
| 98 net::X509Certificate::GetDEREncoded(cert_wo_nickname->os_cert_handle(), | |
| 99 &der_encoded); | |
| 100 cert_wo_nickname = NULL; | |
| 101 | |
| 102 test_ca_cert_ = net::X509Certificate::CreateFromBytesWithNickname( | |
| 103 der_encoded.data(), der_encoded.size(), kNSSNickname); | |
| 104 net::CertificateList cert_list; | |
| 105 cert_list.push_back(test_ca_cert_); | |
| 106 net::NSSCertDatabase::ImportCertFailureList failures; | |
| 107 EXPECT_TRUE(test_nssdb_->ImportCACerts( | |
| 108 cert_list, net::NSSCertDatabase::TRUST_DEFAULT, &failures)); | |
| 109 ASSERT_TRUE(failures.empty()) << net::ErrorToString(failures[0].net_error); | |
| 110 } | |
| 111 | |
| 112 void SetupTestClientCert() { | 77 void SetupTestClientCert() { |
| 113 std::string pkcs12_data; | 78 test_client_cert_ = net::ImportClientCertAndKeyFromFile( |
| 114 ASSERT_TRUE(base::ReadFileToString( | 79 net::GetTestCertsDirectory(), "client_1.pem", "client_1.pk8", |
| 115 net::GetTestCertsDirectory().Append("websocket_client_cert.p12"), | 80 test_nssdb_.slot()); |
| 116 &pkcs12_data)); | 81 ASSERT_TRUE(test_client_cert_.get()); |
| 117 | |
| 118 net::CertificateList client_cert_list; | |
| 119 scoped_refptr<net::CryptoModule> module(net::CryptoModule::CreateFromHandle( | |
| 120 test_nssdb_->GetPrivateSlot().get())); | |
| 121 ASSERT_EQ(net::OK, | |
| 122 test_nssdb_->ImportFromPKCS12(module.get(), | |
| 123 pkcs12_data, | |
| 124 base::string16(), | |
| 125 false, | |
| 126 &client_cert_list)); | |
| 127 ASSERT_TRUE(!client_cert_list.empty()); | |
| 128 test_client_cert_ = client_cert_list[0]; | |
| 129 | 82 |
| 130 int slot_id = -1; | 83 int slot_id = -1; |
| 131 test_client_cert_pkcs11_id_ = CertLoader::GetPkcs11IdAndSlotForCert( | 84 test_client_cert_pkcs11_id_ = CertLoader::GetPkcs11IdAndSlotForCert( |
| 132 *test_client_cert_, &slot_id); | 85 *test_client_cert_, &slot_id); |
| 133 ASSERT_FALSE(test_client_cert_pkcs11_id_.empty()); | 86 ASSERT_FALSE(test_client_cert_pkcs11_id_.empty()); |
| 134 ASSERT_NE(-1, slot_id); | 87 ASSERT_NE(-1, slot_id); |
| 135 test_client_cert_slot_id_ = base::IntToString(slot_id); | 88 test_client_cert_slot_id_ = base::IntToString(slot_id); |
| 136 } | 89 } |
| 137 | 90 |
| 138 void SetupNetworkHandlers() { | 91 void SetupNetworkHandlers() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 150 type, | 103 type, |
| 151 state, | 104 state, |
| 152 true /* add_to_visible */); | 105 true /* add_to_visible */); |
| 153 | 106 |
| 154 // Ensure that the service appears as 'configured', i.e. is associated to a | 107 // Ensure that the service appears as 'configured', i.e. is associated to a |
| 155 // Shill profile. | 108 // Shill profile. |
| 156 service_test_->SetServiceProperty( | 109 service_test_->SetServiceProperty( |
| 157 network_id, shill::kProfileProperty, base::StringValue(kProfile)); | 110 network_id, shill::kProfileProperty, base::StringValue(kProfile)); |
| 158 } | 111 } |
| 159 | 112 |
| 160 void SetupWifiWithNss() { | |
| 161 AddService(kWifiStub, shill::kTypeWifi, shill::kStateOnline); | |
| 162 service_test_->SetServiceProperty(kWifiStub, | |
| 163 shill::kEapCaCertNssProperty, | |
| 164 base::StringValue(kNSSNickname)); | |
| 165 } | |
| 166 | |
| 167 void SetupNetworkWithEapCertId(bool wifi, const std::string& cert_id) { | 113 void SetupNetworkWithEapCertId(bool wifi, const std::string& cert_id) { |
| 168 std::string type = wifi ? shill::kTypeWifi: shill::kTypeEthernetEap; | 114 std::string type = wifi ? shill::kTypeWifi: shill::kTypeEthernetEap; |
| 169 std::string name = wifi ? kWifiStub : kEthernetEapStub; | 115 std::string name = wifi ? kWifiStub : kEthernetEapStub; |
| 170 AddService(name, type, shill::kStateOnline); | 116 AddService(name, type, shill::kStateOnline); |
| 171 service_test_->SetServiceProperty( | 117 service_test_->SetServiceProperty( |
| 172 name, shill::kEapCertIdProperty, base::StringValue(cert_id)); | 118 name, shill::kEapCertIdProperty, base::StringValue(cert_id)); |
| 173 service_test_->SetServiceProperty( | 119 service_test_->SetServiceProperty( |
| 174 name, shill::kEapKeyIdProperty, base::StringValue(cert_id)); | 120 name, shill::kEapKeyIdProperty, base::StringValue(cert_id)); |
| 175 | 121 |
| 176 if (wifi) { | 122 if (wifi) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 161 |
| 216 void GetVpnCertId(bool open_vpn, | 162 void GetVpnCertId(bool open_vpn, |
| 217 std::string* slot_id, | 163 std::string* slot_id, |
| 218 std::string* pkcs11_id) { | 164 std::string* pkcs11_id) { |
| 219 slot_id->clear(); | 165 slot_id->clear(); |
| 220 pkcs11_id->clear(); | 166 pkcs11_id->clear(); |
| 221 | 167 |
| 222 const base::DictionaryValue* properties = | 168 const base::DictionaryValue* properties = |
| 223 service_test_->GetServiceProperties(kVPNStub); | 169 service_test_->GetServiceProperties(kVPNStub); |
| 224 ASSERT_TRUE(properties); | 170 ASSERT_TRUE(properties); |
| 225 const base::DictionaryValue* provider = NULL; | 171 const base::DictionaryValue* provider = nullptr; |
| 226 properties->GetDictionaryWithoutPathExpansion(shill::kProviderProperty, | 172 properties->GetDictionaryWithoutPathExpansion(shill::kProviderProperty, |
| 227 &provider); | 173 &provider); |
| 228 if (!provider) | 174 if (!provider) |
| 229 return; | 175 return; |
| 230 if (open_vpn) { | 176 if (open_vpn) { |
| 231 provider->GetStringWithoutPathExpansion( | 177 provider->GetStringWithoutPathExpansion( |
| 232 shill::kOpenVPNClientCertIdProperty, pkcs11_id); | 178 shill::kOpenVPNClientCertIdProperty, pkcs11_id); |
| 233 } else { | 179 } else { |
| 234 provider->GetStringWithoutPathExpansion( | 180 provider->GetStringWithoutPathExpansion( |
| 235 shill::kL2tpIpsecClientCertSlotProperty, slot_id); | 181 shill::kL2tpIpsecClientCertSlotProperty, slot_id); |
| 236 provider->GetStringWithoutPathExpansion( | 182 provider->GetStringWithoutPathExpansion( |
| 237 shill::kL2tpIpsecClientCertIdProperty, pkcs11_id); | 183 shill::kL2tpIpsecClientCertIdProperty, pkcs11_id); |
| 238 } | 184 } |
| 239 } | 185 } |
| 240 | 186 |
| 241 void GetEapCACertProperties(std::string* nss_nickname, std::string* ca_pem) { | |
| 242 nss_nickname->clear(); | |
| 243 ca_pem->clear(); | |
| 244 const base::DictionaryValue* properties = | |
| 245 service_test_->GetServiceProperties(kWifiStub); | |
| 246 properties->GetStringWithoutPathExpansion(shill::kEapCaCertNssProperty, | |
| 247 nss_nickname); | |
| 248 const base::ListValue* ca_pems = NULL; | |
| 249 properties->GetListWithoutPathExpansion(shill::kEapCaCertPemProperty, | |
| 250 &ca_pems); | |
| 251 if (ca_pems && !ca_pems->empty()) | |
| 252 ca_pems->GetString(0, ca_pem); | |
| 253 } | |
| 254 | |
| 255 void SetupVpnWithNss(bool open_vpn) { | |
| 256 AddService(kVPNStub, shill::kTypeVPN, shill::kStateIdle); | |
| 257 base::DictionaryValue provider; | |
| 258 const char* nss_property = open_vpn ? shill::kOpenVPNCaCertNSSProperty | |
| 259 : shill::kL2tpIpsecCaCertNssProperty; | |
| 260 provider.SetStringWithoutPathExpansion(nss_property, kNSSNickname); | |
| 261 service_test_->SetServiceProperty( | |
| 262 kVPNStub, shill::kProviderProperty, provider); | |
| 263 } | |
| 264 | |
| 265 void GetVpnCACertProperties(bool open_vpn, | |
| 266 std::string* nss_nickname, | |
| 267 std::string* ca_pem) { | |
| 268 nss_nickname->clear(); | |
| 269 ca_pem->clear(); | |
| 270 const base::DictionaryValue* properties = | |
| 271 service_test_->GetServiceProperties(kVPNStub); | |
| 272 const base::DictionaryValue* provider = NULL; | |
| 273 properties->GetDictionaryWithoutPathExpansion(shill::kProviderProperty, | |
| 274 &provider); | |
| 275 if (!provider) | |
| 276 return; | |
| 277 const char* nss_property = open_vpn ? shill::kOpenVPNCaCertNSSProperty | |
| 278 : shill::kL2tpIpsecCaCertNssProperty; | |
| 279 provider->GetStringWithoutPathExpansion(nss_property, nss_nickname); | |
| 280 const base::ListValue* ca_pems = NULL; | |
| 281 const char* pem_property = open_vpn ? shill::kOpenVPNCaCertPemProperty | |
| 282 : shill::kL2tpIpsecCaCertPemProperty; | |
| 283 provider->GetListWithoutPathExpansion(pem_property, &ca_pems); | |
| 284 if (ca_pems && !ca_pems->empty()) | |
| 285 ca_pems->GetString(0, ca_pem); | |
| 286 } | |
| 287 | |
| 288 ShillServiceClient::TestInterface* service_test_; | 187 ShillServiceClient::TestInterface* service_test_; |
| 289 scoped_refptr<net::X509Certificate> test_ca_cert_; | |
| 290 scoped_refptr<net::X509Certificate> test_client_cert_; | 188 scoped_refptr<net::X509Certificate> test_client_cert_; |
| 291 std::string test_client_cert_pkcs11_id_; | 189 std::string test_client_cert_pkcs11_id_; |
| 292 std::string test_client_cert_slot_id_; | 190 std::string test_client_cert_slot_id_; |
| 293 std::string test_ca_cert_pem_; | |
| 294 base::MessageLoop message_loop_; | 191 base::MessageLoop message_loop_; |
| 295 | 192 |
| 296 private: | 193 private: |
| 297 void CleanupTestCert() { | |
| 298 if (test_ca_cert_.get()) | |
| 299 ASSERT_TRUE(test_nssdb_->DeleteCertAndKey(test_ca_cert_.get())); | |
| 300 | |
| 301 if (test_client_cert_.get()) | |
| 302 ASSERT_TRUE(test_nssdb_->DeleteCertAndKey(test_client_cert_.get())); | |
| 303 } | |
| 304 | |
| 305 scoped_ptr<NetworkStateHandler> network_state_handler_; | 194 scoped_ptr<NetworkStateHandler> network_state_handler_; |
| 306 scoped_ptr<NetworkCertMigrator> network_cert_migrator_; | 195 scoped_ptr<NetworkCertMigrator> network_cert_migrator_; |
| 307 crypto::ScopedTestNSSChromeOSUser user_; | 196 crypto::ScopedTestNSSDB test_nssdb_; |
| 308 scoped_ptr<net::NSSCertDatabaseChromeOS> test_nssdb_; | 197 scoped_ptr<net::NSSCertDatabaseChromeOS> test_nsscertdb_; |
| 309 | 198 |
| 310 DISALLOW_COPY_AND_ASSIGN(NetworkCertMigratorTest); | 199 DISALLOW_COPY_AND_ASSIGN(NetworkCertMigratorTest); |
| 311 }; | 200 }; |
| 312 | 201 |
| 313 TEST_F(NetworkCertMigratorTest, MigrateNssOnInitialization) { | 202 TEST_F(NetworkCertMigratorTest, MigrateOnInitialization) { |
| 314 // Add a new network for migration before the handlers are initialized. | 203 SetupTestClientCert(); |
| 315 SetupWifiWithNss(); | 204 // Add a network for migration before the handlers are initialized. |
| 316 SetupTestCACert(); | 205 SetupNetworkWithEapCertId(true /* wifi */, |
| 317 SetupNetworkHandlers(); | 206 "123:" + test_client_cert_pkcs11_id_); |
| 318 | |
| 319 base::RunLoop().RunUntilIdle(); | |
| 320 std::string nss_nickname, ca_pem; | |
| 321 GetEapCACertProperties(&nss_nickname, &ca_pem); | |
| 322 EXPECT_TRUE(nss_nickname.empty()); | |
| 323 EXPECT_EQ(test_ca_cert_pem_, ca_pem); | |
| 324 } | |
| 325 | |
| 326 TEST_F(NetworkCertMigratorTest, MigrateNssOnNetworkAppearance) { | |
| 327 SetupTestCACert(); | |
| 328 SetupNetworkHandlers(); | 207 SetupNetworkHandlers(); |
| 329 base::RunLoop().RunUntilIdle(); | 208 base::RunLoop().RunUntilIdle(); |
| 330 | 209 |
| 331 // Add a new network for migration after the handlers are initialized. | 210 std::string cert_id; |
| 332 SetupWifiWithNss(); | 211 GetEapCertId(true /* wifi */, &cert_id); |
| 333 | 212 std::string expected_cert_id = |
| 334 base::RunLoop().RunUntilIdle(); | 213 test_client_cert_slot_id_ + ":" + test_client_cert_pkcs11_id_; |
| 335 std::string nss_nickname, ca_pem; | 214 EXPECT_EQ(expected_cert_id, cert_id); |
| 336 GetEapCACertProperties(&nss_nickname, &ca_pem); | |
| 337 EXPECT_TRUE(nss_nickname.empty()); | |
| 338 EXPECT_EQ(test_ca_cert_pem_, ca_pem); | |
| 339 } | |
| 340 | |
| 341 TEST_F(NetworkCertMigratorTest, DoNotMigrateNssIfPemSet) { | |
| 342 // Add a new network with an already set PEM property. | |
| 343 SetupWifiWithNss(); | |
| 344 base::ListValue ca_pems; | |
| 345 ca_pems.AppendString(kFakePEM); | |
| 346 service_test_->SetServiceProperty( | |
| 347 kWifiStub, shill::kEapCaCertPemProperty, ca_pems); | |
| 348 | |
| 349 SetupTestCACert(); | |
| 350 SetupNetworkHandlers(); | |
| 351 base::RunLoop().RunUntilIdle(); | |
| 352 | |
| 353 std::string nss_nickname, ca_pem; | |
| 354 GetEapCACertProperties(&nss_nickname, &ca_pem); | |
| 355 EXPECT_TRUE(nss_nickname.empty()); | |
| 356 EXPECT_EQ(kFakePEM, ca_pem); | |
| 357 } | |
| 358 | |
| 359 TEST_F(NetworkCertMigratorTest, MigrateNssOpenVpn) { | |
| 360 // Add a new network for migration before the handlers are initialized. | |
| 361 SetupVpnWithNss(true /* OpenVPN */); | |
| 362 | |
| 363 SetupTestCACert(); | |
| 364 SetupNetworkHandlers(); | |
| 365 | |
| 366 base::RunLoop().RunUntilIdle(); | |
| 367 std::string nss_nickname, ca_pem; | |
| 368 GetVpnCACertProperties(true /* OpenVPN */, &nss_nickname, &ca_pem); | |
| 369 EXPECT_TRUE(nss_nickname.empty()); | |
| 370 EXPECT_EQ(test_ca_cert_pem_, ca_pem); | |
| 371 } | |
| 372 | |
| 373 TEST_F(NetworkCertMigratorTest, MigrateNssIpsecVpn) { | |
| 374 // Add a new network for migration before the handlers are initialized. | |
| 375 SetupVpnWithNss(false /* not OpenVPN */); | |
| 376 | |
| 377 SetupTestCACert(); | |
| 378 SetupNetworkHandlers(); | |
| 379 | |
| 380 base::RunLoop().RunUntilIdle(); | |
| 381 std::string nss_nickname, ca_pem; | |
| 382 GetVpnCACertProperties(false /* not OpenVPN */, &nss_nickname, &ca_pem); | |
| 383 EXPECT_TRUE(nss_nickname.empty()); | |
| 384 EXPECT_EQ(test_ca_cert_pem_, ca_pem); | |
| 385 } | 215 } |
| 386 | 216 |
| 387 TEST_F(NetworkCertMigratorTest, MigrateEapCertIdNoMatchingCert) { | 217 TEST_F(NetworkCertMigratorTest, MigrateEapCertIdNoMatchingCert) { |
| 388 SetupTestClientCert(); | 218 SetupTestClientCert(); |
| 389 SetupNetworkHandlers(); | 219 SetupNetworkHandlers(); |
| 390 base::RunLoop().RunUntilIdle(); | 220 base::RunLoop().RunUntilIdle(); |
| 391 | 221 |
| 392 // Add a new network for migration after the handlers are initialized. | 222 // Add a new network for migration after the handlers are initialized. |
| 393 SetupNetworkWithEapCertId(true /* wifi */, "unknown pkcs11 id"); | 223 SetupNetworkWithEapCertId(true /* wifi */, "unknown pkcs11 id"); |
| 394 | 224 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 base::RunLoop().RunUntilIdle(); | 331 base::RunLoop().RunUntilIdle(); |
| 502 | 332 |
| 503 std::string pkcs11_id; | 333 std::string pkcs11_id; |
| 504 std::string slot_id; | 334 std::string slot_id; |
| 505 GetVpnCertId(false /* IPsec */, &slot_id, &pkcs11_id); | 335 GetVpnCertId(false /* IPsec */, &slot_id, &pkcs11_id); |
| 506 EXPECT_EQ(test_client_cert_pkcs11_id_, pkcs11_id); | 336 EXPECT_EQ(test_client_cert_pkcs11_id_, pkcs11_id); |
| 507 EXPECT_EQ(test_client_cert_slot_id_, slot_id); | 337 EXPECT_EQ(test_client_cert_slot_id_, slot_id); |
| 508 } | 338 } |
| 509 | 339 |
| 510 } // namespace chromeos | 340 } // namespace chromeos |
| 511 | |
| 512 #endif | |
| OLD | NEW |