OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_connection_handler.h" | 5 #include "chromeos/network/network_connection_handler.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 CertLoader::Get()->StartWithNSSDB(test_nssdb_.get()); | 198 CertLoader::Get()->StartWithNSSDB(test_nssdb_.get()); |
199 base::RunLoop().RunUntilIdle(); | 199 base::RunLoop().RunUntilIdle(); |
200 } | 200 } |
201 | 201 |
202 void LoginToRegularUser() { | 202 void LoginToRegularUser() { |
203 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, | 203 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, |
204 LoginState::LOGGED_IN_USER_REGULAR); | 204 LoginState::LOGGED_IN_USER_REGULAR); |
205 base::RunLoop().RunUntilIdle(); | 205 base::RunLoop().RunUntilIdle(); |
206 } | 206 } |
207 | 207 |
208 void ImportClientCertAndKey(const std::string& pkcs12_file, | 208 scoped_refptr<net::X509Certificate> ImportTestClientCert() { |
209 net::NSSCertDatabase* nssdb, | 209 net::CertificateList ca_cert_list = |
210 net::CertificateList* loaded_certs) { | 210 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), |
| 211 "websocket_cacert.pem", |
| 212 net::X509Certificate::FORMAT_AUTO); |
| 213 if (ca_cert_list.empty()) { |
| 214 LOG(ERROR) << "No CA cert loaded."; |
| 215 return NULL; |
| 216 } |
| 217 net::NSSCertDatabase::ImportCertFailureList failures; |
| 218 EXPECT_TRUE(test_nssdb_->ImportCACerts( |
| 219 ca_cert_list, net::NSSCertDatabase::TRUST_DEFAULT, &failures)); |
| 220 if (!failures.empty()) { |
| 221 LOG(ERROR) << net::ErrorToString(failures[0].net_error); |
| 222 return NULL; |
| 223 } |
| 224 |
211 std::string pkcs12_data; | 225 std::string pkcs12_data; |
212 base::FilePath pkcs12_path = | 226 base::FilePath pkcs12_path = |
213 net::GetTestCertsDirectory().Append(pkcs12_file); | 227 net::GetTestCertsDirectory().Append("websocket_client_cert.p12"); |
214 ASSERT_TRUE(base::ReadFileToString(pkcs12_path, &pkcs12_data)); | 228 if (!base::ReadFileToString(pkcs12_path, &pkcs12_data)) |
| 229 return NULL; |
215 | 230 |
216 scoped_refptr<net::CryptoModule> module( | 231 net::CertificateList loaded_certs; |
217 net::CryptoModule::CreateFromHandle(nssdb->GetPrivateSlot().get())); | 232 scoped_refptr<net::CryptoModule> module(net::CryptoModule::CreateFromHandle( |
218 ASSERT_EQ( | 233 test_nssdb_->GetPrivateSlot().get())); |
219 net::OK, | 234 if (test_nssdb_->ImportFromPKCS12( |
220 nssdb->ImportFromPKCS12(module, pkcs12_data, base::string16(), false, | 235 module, pkcs12_data, base::string16(), false, &loaded_certs) != |
221 loaded_certs)); | 236 net::OK) { |
222 ASSERT_EQ(1U, loaded_certs->size()); | 237 LOG(ERROR) << "Error while importing to NSSDB."; |
| 238 return NULL; |
| 239 } |
| 240 |
| 241 // File contains two certs, the client cert first and the CA cert second. |
| 242 if (loaded_certs.size() != 2U) { |
| 243 LOG(ERROR) << "Expected two certs in file, found " << loaded_certs.size(); |
| 244 return NULL; |
| 245 } |
| 246 return loaded_certs[0]; |
223 } | 247 } |
224 | 248 |
225 void SetupPolicy(const std::string& network_configs_json, | 249 void SetupPolicy(const std::string& network_configs_json, |
226 const base::DictionaryValue& global_config, | 250 const base::DictionaryValue& global_config, |
227 bool user_policy) { | 251 bool user_policy) { |
228 std::string error; | 252 std::string error; |
229 scoped_ptr<base::Value> network_configs_value( | 253 scoped_ptr<base::Value> network_configs_value( |
230 base::JSONReader::ReadAndReturnError(network_configs_json, | 254 base::JSONReader::ReadAndReturnError(network_configs_json, |
231 base::JSON_ALLOW_TRAILING_COMMAS, | 255 base::JSON_ALLOW_TRAILING_COMMAS, |
232 NULL, | 256 NULL, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 base::DictionaryValue(), // no global config | 372 base::DictionaryValue(), // no global config |
349 true); // load as user policy | 373 true); // load as user policy |
350 | 374 |
351 Connect("wifi4"); | 375 Connect("wifi4"); |
352 EXPECT_EQ(NetworkConnectionHandler::kErrorCertificateRequired, | 376 EXPECT_EQ(NetworkConnectionHandler::kErrorCertificateRequired, |
353 GetResultAndReset()); | 377 GetResultAndReset()); |
354 } | 378 } |
355 | 379 |
356 TEST_F(NetworkConnectionHandlerTest, ConnectWithCertificateSuccess) { | 380 TEST_F(NetworkConnectionHandlerTest, ConnectWithCertificateSuccess) { |
357 StartCertLoader(); | 381 StartCertLoader(); |
358 | 382 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); |
359 net::CertificateList certs; | 383 ASSERT_TRUE(cert); |
360 ImportClientCertAndKey("websocket_client_cert.p12", | |
361 test_nssdb_.get(), | |
362 &certs); | |
363 | 384 |
364 SetupPolicy(base::StringPrintf(kPolicyWithCertPatternTemplate, | 385 SetupPolicy(base::StringPrintf(kPolicyWithCertPatternTemplate, |
365 certs[0]->subject().common_name.c_str()), | 386 cert->subject().common_name.c_str()), |
366 base::DictionaryValue(), // no global config | 387 base::DictionaryValue(), // no global config |
367 true); // load as user policy | 388 true); // load as user policy |
368 | 389 |
369 Connect("wifi4"); | 390 Connect("wifi4"); |
370 EXPECT_EQ(kSuccessResult, GetResultAndReset()); | 391 EXPECT_EQ(kSuccessResult, GetResultAndReset()); |
371 } | 392 } |
372 | 393 |
373 // Disabled, see http://crbug.com/396729. | 394 // Disabled, see http://crbug.com/396729. |
374 TEST_F(NetworkConnectionHandlerTest, | 395 TEST_F(NetworkConnectionHandlerTest, |
375 DISABLED_ConnectWithCertificateRequestedBeforeCertsAreLoaded) { | 396 DISABLED_ConnectWithCertificateRequestedBeforeCertsAreLoaded) { |
376 net::CertificateList certs; | 397 scoped_refptr<net::X509Certificate> cert = ImportTestClientCert(); |
377 ImportClientCertAndKey("websocket_client_cert.p12", | 398 ASSERT_TRUE(cert); |
378 test_nssdb_.get(), | |
379 &certs); | |
380 | 399 |
381 SetupPolicy(base::StringPrintf(kPolicyWithCertPatternTemplate, | 400 SetupPolicy(base::StringPrintf(kPolicyWithCertPatternTemplate, |
382 certs[0]->subject().common_name.c_str()), | 401 cert->subject().common_name.c_str()), |
383 base::DictionaryValue(), // no global config | 402 base::DictionaryValue(), // no global config |
384 true); // load as user policy | 403 true); // load as user policy |
385 | 404 |
386 Connect("wifi4"); | 405 Connect("wifi4"); |
387 | 406 |
388 // Connect request came before the cert loader loaded certificates, so the | 407 // Connect request came before the cert loader loaded certificates, so the |
389 // connect request should have been throttled until the certificates are | 408 // connect request should have been throttled until the certificates are |
390 // loaded. | 409 // loaded. |
391 EXPECT_EQ("", GetResultAndReset()); | 410 EXPECT_EQ("", GetResultAndReset()); |
392 | 411 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 true); | 511 true); |
493 | 512 |
494 SetupPolicy(kPolicy, global_config, false /* load as device policy */); | 513 SetupPolicy(kPolicy, global_config, false /* load as device policy */); |
495 EXPECT_EQ(shill::kStateIdle, | 514 EXPECT_EQ(shill::kStateIdle, |
496 GetServiceStringProperty("wifi0", shill::kStateProperty)); | 515 GetServiceStringProperty("wifi0", shill::kStateProperty)); |
497 EXPECT_EQ(shill::kStateOnline, | 516 EXPECT_EQ(shill::kStateOnline, |
498 GetServiceStringProperty("wifi1", shill::kStateProperty)); | 517 GetServiceStringProperty("wifi1", shill::kStateProperty)); |
499 } | 518 } |
500 | 519 |
501 } // namespace chromeos | 520 } // namespace chromeos |
OLD | NEW |