Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: net/cert/nss_cert_database_unittest.cc

Issue 2109503009: Refactor net tests to use GMock matchers for checking net::Error results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to contents.txt files Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cert/multi_threaded_cert_verifier_unittest.cc ('k') | net/cert/test_root_certs_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "net/cert/nss_cert_database.h" 5 #include "net/cert/nss_cert_database.h"
6 6
7 #include <cert.h> 7 #include <cert.h>
8 #include <certdb.h> 8 #include <certdb.h>
9 #include <pk11pub.h> 9 #include <pk11pub.h>
10 10
(...skipping 12 matching lines...) Expand all
23 #include "crypto/scoped_nss_types.h" 23 #include "crypto/scoped_nss_types.h"
24 #include "crypto/scoped_test_nss_db.h" 24 #include "crypto/scoped_test_nss_db.h"
25 #include "net/base/crypto_module.h" 25 #include "net/base/crypto_module.h"
26 #include "net/base/hash_value.h" 26 #include "net/base/hash_value.h"
27 #include "net/base/net_errors.h" 27 #include "net/base/net_errors.h"
28 #include "net/cert/cert_status_flags.h" 28 #include "net/cert/cert_status_flags.h"
29 #include "net/cert/cert_verify_proc_nss.h" 29 #include "net/cert/cert_verify_proc_nss.h"
30 #include "net/cert/cert_verify_result.h" 30 #include "net/cert/cert_verify_result.h"
31 #include "net/cert/x509_certificate.h" 31 #include "net/cert/x509_certificate.h"
32 #include "net/test/cert_test_util.h" 32 #include "net/test/cert_test_util.h"
33 #include "net/test/gtest_util.h"
33 #include "net/test/test_data_directory.h" 34 #include "net/test/test_data_directory.h"
34 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" 35 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h"
36 #include "testing/gmock/include/gmock/gmock.h"
35 #include "testing/gtest/include/gtest/gtest.h" 37 #include "testing/gtest/include/gtest/gtest.h"
36 38
39 using net::test::IsError;
40 using net::test::IsOk;
41
37 // In NSS 3.13, CERTDB_VALID_PEER was renamed CERTDB_TERMINAL_RECORD. So we use 42 // In NSS 3.13, CERTDB_VALID_PEER was renamed CERTDB_TERMINAL_RECORD. So we use
38 // the new name of the macro. 43 // the new name of the macro.
39 #if !defined(CERTDB_TERMINAL_RECORD) 44 #if !defined(CERTDB_TERMINAL_RECORD)
40 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER 45 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER
41 #endif 46 #endif
42 47
43 using base::ASCIIToUTF16; 48 using base::ASCIIToUTF16;
44 49
45 namespace net { 50 namespace net {
46 51
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 388
384 // Import it. 389 // Import it.
385 NSSCertDatabase::ImportCertFailureList failed; 390 NSSCertDatabase::ImportCertFailureList failed;
386 EXPECT_TRUE(cert_db_->ImportCACerts(certs, NSSCertDatabase::TRUSTED_SSL, 391 EXPECT_TRUE(cert_db_->ImportCACerts(certs, NSSCertDatabase::TRUSTED_SSL,
387 &failed)); 392 &failed));
388 ASSERT_EQ(1U, failed.size()); 393 ASSERT_EQ(1U, failed.size());
389 // Note: this compares pointers directly. It's okay in this case because 394 // Note: this compares pointers directly. It's okay in this case because
390 // ImportCACerts returns the same pointers that were passed in. In the 395 // ImportCACerts returns the same pointers that were passed in. In the
391 // general case IsSameOSCert should be used. 396 // general case IsSameOSCert should be used.
392 EXPECT_EQ(certs[0], failed[0].certificate); 397 EXPECT_EQ(certs[0], failed[0].certificate);
393 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[0].net_error); 398 EXPECT_THAT(failed[0].net_error, IsError(ERR_IMPORT_CA_CERT_NOT_CA));
394 399
395 EXPECT_EQ(0U, ListCerts().size()); 400 EXPECT_EQ(0U, ListCerts().size());
396 } 401 }
397 402
398 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchy) { 403 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchy) {
399 CertificateList certs; 404 CertificateList certs;
400 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); 405 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs));
401 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); 406 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs));
402 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs)); 407 ASSERT_TRUE(ReadCertIntoList("www_us_army_mil_cert.der", &certs));
403 408
404 // Import it. 409 // Import it.
405 NSSCertDatabase::ImportCertFailureList failed; 410 NSSCertDatabase::ImportCertFailureList failed;
406 // Have to specify email trust for the cert verification of the child cert to 411 // Have to specify email trust for the cert verification of the child cert to
407 // work (see 412 // work (see
408 // http://mxr.mozilla.org/mozilla/source/security/nss/lib/certhigh/certvfy.c#7 52 413 // http://mxr.mozilla.org/mozilla/source/security/nss/lib/certhigh/certvfy.c#7 52
409 // "XXX This choice of trustType seems arbitrary.") 414 // "XXX This choice of trustType seems arbitrary.")
410 EXPECT_TRUE(cert_db_->ImportCACerts( 415 EXPECT_TRUE(cert_db_->ImportCACerts(
411 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL, 416 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL,
412 &failed)); 417 &failed));
413 418
414 ASSERT_EQ(2U, failed.size()); 419 ASSERT_EQ(2U, failed.size());
415 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); 420 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name);
416 EXPECT_EQ(ERR_FAILED, failed[0].net_error); // The certificate expired. 421 EXPECT_THAT(failed[0].net_error,
422 IsError(ERR_FAILED)); // The certificate expired.
417 EXPECT_EQ("www.us.army.mil", failed[1].certificate->subject().common_name); 423 EXPECT_EQ("www.us.army.mil", failed[1].certificate->subject().common_name);
418 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[1].net_error); 424 EXPECT_THAT(failed[1].net_error, IsError(ERR_IMPORT_CA_CERT_NOT_CA));
419 425
420 CertificateList cert_list = ListCerts(); 426 CertificateList cert_list = ListCerts();
421 ASSERT_EQ(1U, cert_list.size()); 427 ASSERT_EQ(1U, cert_list.size());
422 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); 428 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name);
423 } 429 }
424 430
425 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyDupeRoot) { 431 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyDupeRoot) {
426 CertificateList certs; 432 CertificateList certs;
427 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); 433 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs));
428 434
(...skipping 13 matching lines...) Expand all
442 448
443 // Now import with the other certs in the list too. Even though the root is 449 // Now import with the other certs in the list too. Even though the root is
444 // already present, we should still import the rest. 450 // already present, we should still import the rest.
445 failed.clear(); 451 failed.clear();
446 EXPECT_TRUE(cert_db_->ImportCACerts( 452 EXPECT_TRUE(cert_db_->ImportCACerts(
447 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL, 453 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL,
448 &failed)); 454 &failed));
449 455
450 ASSERT_EQ(3U, failed.size()); 456 ASSERT_EQ(3U, failed.size());
451 EXPECT_EQ("DoD Root CA 2", failed[0].certificate->subject().common_name); 457 EXPECT_EQ("DoD Root CA 2", failed[0].certificate->subject().common_name);
452 EXPECT_EQ(ERR_IMPORT_CERT_ALREADY_EXISTS, failed[0].net_error); 458 EXPECT_THAT(failed[0].net_error, IsError(ERR_IMPORT_CERT_ALREADY_EXISTS));
453 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); 459 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name);
454 EXPECT_EQ(ERR_FAILED, failed[1].net_error); // The certificate expired. 460 EXPECT_THAT(failed[1].net_error,
461 IsError(ERR_FAILED)); // The certificate expired.
455 EXPECT_EQ("www.us.army.mil", failed[2].certificate->subject().common_name); 462 EXPECT_EQ("www.us.army.mil", failed[2].certificate->subject().common_name);
456 EXPECT_EQ(ERR_IMPORT_CA_CERT_NOT_CA, failed[2].net_error); 463 EXPECT_THAT(failed[2].net_error, IsError(ERR_IMPORT_CA_CERT_NOT_CA));
457 464
458 cert_list = ListCerts(); 465 cert_list = ListCerts();
459 ASSERT_EQ(1U, cert_list.size()); 466 ASSERT_EQ(1U, cert_list.size());
460 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); 467 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name);
461 } 468 }
462 469
463 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { 470 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) {
464 CertificateList certs; 471 CertificateList certs;
465 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); 472 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs));
466 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); 473 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs));
467 474
468 // Import it. 475 // Import it.
469 NSSCertDatabase::ImportCertFailureList failed; 476 NSSCertDatabase::ImportCertFailureList failed;
470 EXPECT_TRUE(cert_db_->ImportCACerts(certs, NSSCertDatabase::TRUST_DEFAULT, 477 EXPECT_TRUE(cert_db_->ImportCACerts(certs, NSSCertDatabase::TRUST_DEFAULT,
471 &failed)); 478 &failed));
472 479
473 ASSERT_EQ(1U, failed.size()); 480 ASSERT_EQ(1U, failed.size());
474 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); 481 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name);
475 // TODO(mattm): should check for net error equivalent of 482 // TODO(mattm): should check for net error equivalent of
476 // SEC_ERROR_UNTRUSTED_ISSUER 483 // SEC_ERROR_UNTRUSTED_ISSUER
477 EXPECT_EQ(ERR_FAILED, failed[0].net_error); 484 EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED));
478 485
479 CertificateList cert_list = ListCerts(); 486 CertificateList cert_list = ListCerts();
480 ASSERT_EQ(1U, cert_list.size()); 487 ASSERT_EQ(1U, cert_list.size());
481 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); 488 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name);
482 } 489 }
483 490
484 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyTree) { 491 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyTree) {
485 CertificateList certs; 492 CertificateList certs;
486 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); 493 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs));
487 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); 494 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs));
488 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); 495 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs));
489 496
490 // Import it. 497 // Import it.
491 NSSCertDatabase::ImportCertFailureList failed; 498 NSSCertDatabase::ImportCertFailureList failed;
492 EXPECT_TRUE(cert_db_->ImportCACerts( 499 EXPECT_TRUE(cert_db_->ImportCACerts(
493 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL, 500 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL,
494 &failed)); 501 &failed));
495 502
496 EXPECT_EQ(2U, failed.size()); 503 EXPECT_EQ(2U, failed.size());
497 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); 504 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name);
498 EXPECT_EQ(ERR_FAILED, failed[0].net_error); // The certificate expired. 505 EXPECT_THAT(failed[0].net_error,
506 IsError(ERR_FAILED)); // The certificate expired.
499 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); 507 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name);
500 EXPECT_EQ(ERR_FAILED, failed[1].net_error); // The certificate expired. 508 EXPECT_THAT(failed[1].net_error,
509 IsError(ERR_FAILED)); // The certificate expired.
501 510
502 CertificateList cert_list = ListCerts(); 511 CertificateList cert_list = ListCerts();
503 ASSERT_EQ(1U, cert_list.size()); 512 ASSERT_EQ(1U, cert_list.size());
504 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); 513 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name);
505 } 514 }
506 515
507 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { 516 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) {
508 CertificateList certs = CreateCertificateListFromFile( 517 CertificateList certs = CreateCertificateListFromFile(
509 GetTestCertsDirectory(), "root_ca_cert.pem", 518 GetTestCertsDirectory(), "root_ca_cert.pem",
510 X509Certificate::FORMAT_AUTO); 519 X509Certificate::FORMAT_AUTO);
511 ASSERT_EQ(1U, certs.size()); 520 ASSERT_EQ(1U, certs.size());
512 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); 521 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs));
513 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); 522 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs));
514 523
515 // Import it. 524 // Import it.
516 NSSCertDatabase::ImportCertFailureList failed; 525 NSSCertDatabase::ImportCertFailureList failed;
517 EXPECT_TRUE(cert_db_->ImportCACerts( 526 EXPECT_TRUE(cert_db_->ImportCACerts(
518 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL | 527 certs, NSSCertDatabase::TRUSTED_SSL | NSSCertDatabase::TRUSTED_EMAIL |
519 NSSCertDatabase::TRUSTED_OBJ_SIGN, &failed)); 528 NSSCertDatabase::TRUSTED_OBJ_SIGN, &failed));
520 529
521 ASSERT_EQ(2U, failed.size()); 530 ASSERT_EQ(2U, failed.size());
522 // TODO(mattm): should check for net error equivalent of 531 // TODO(mattm): should check for net error equivalent of
523 // SEC_ERROR_UNKNOWN_ISSUER 532 // SEC_ERROR_UNKNOWN_ISSUER
524 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); 533 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name);
525 EXPECT_EQ(ERR_FAILED, failed[0].net_error); 534 EXPECT_THAT(failed[0].net_error, IsError(ERR_FAILED));
526 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); 535 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name);
527 EXPECT_EQ(ERR_FAILED, failed[1].net_error); 536 EXPECT_THAT(failed[1].net_error, IsError(ERR_FAILED));
528 537
529 CertificateList cert_list = ListCerts(); 538 CertificateList cert_list = ListCerts();
530 ASSERT_EQ(1U, cert_list.size()); 539 ASSERT_EQ(1U, cert_list.size());
531 EXPECT_EQ("Test Root CA", cert_list[0]->subject().common_name); 540 EXPECT_EQ("Test Root CA", cert_list[0]->subject().common_name);
532 } 541 }
533 542
534 // http://crbug.com/108009 - Disabled, as google.chain.pem is an expired 543 // http://crbug.com/108009 - Disabled, as google.chain.pem is an expired
535 // certificate. 544 // certificate.
536 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) { 545 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) {
537 // Need to import intermediate cert for the verify of google cert, otherwise 546 // Need to import intermediate cert for the verify of google cert, otherwise
(...skipping 21 matching lines...) Expand all
559 cert_db_->GetCertTrust(goog_cert.get(), SERVER_CERT)); 568 cert_db_->GetCertTrust(goog_cert.get(), SERVER_CERT));
560 569
561 EXPECT_EQ(0U, goog_cert->os_cert_handle()->trust->sslFlags); 570 EXPECT_EQ(0U, goog_cert->os_cert_handle()->trust->sslFlags);
562 571
563 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 572 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
564 int flags = 0; 573 int flags = 0;
565 CertVerifyResult verify_result; 574 CertVerifyResult verify_result;
566 int error = 575 int error =
567 verify_proc->Verify(goog_cert.get(), "www.google.com", std::string(), 576 verify_proc->Verify(goog_cert.get(), "www.google.com", std::string(),
568 flags, NULL, empty_cert_list_, &verify_result); 577 flags, NULL, empty_cert_list_, &verify_result);
569 EXPECT_EQ(OK, error); 578 EXPECT_THAT(error, IsOk());
570 EXPECT_EQ(0U, verify_result.cert_status); 579 EXPECT_EQ(0U, verify_result.cert_status);
571 } 580 }
572 581
573 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { 582 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) {
574 CertificateList certs; 583 CertificateList certs;
575 ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs)); 584 ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs));
576 585
577 NSSCertDatabase::ImportCertFailureList failed; 586 NSSCertDatabase::ImportCertFailureList failed;
578 EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT, 587 EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUST_DEFAULT,
579 &failed)); 588 &failed));
580 589
581 EXPECT_EQ(0U, failed.size()); 590 EXPECT_EQ(0U, failed.size());
582 591
583 CertificateList cert_list = ListCerts(); 592 CertificateList cert_list = ListCerts();
584 ASSERT_EQ(1U, cert_list.size()); 593 ASSERT_EQ(1U, cert_list.size());
585 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); 594 scoped_refptr<X509Certificate> puny_cert(cert_list[0]);
586 595
587 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 596 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
588 cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT)); 597 cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT));
589 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->sslFlags); 598 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->sslFlags);
590 599
591 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 600 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
592 int flags = 0; 601 int flags = 0;
593 CertVerifyResult verify_result; 602 CertVerifyResult verify_result;
594 int error = 603 int error =
595 verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(), 604 verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(),
596 flags, NULL, empty_cert_list_, &verify_result); 605 flags, NULL, empty_cert_list_, &verify_result);
597 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 606 EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID));
598 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); 607 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status);
599 } 608 }
600 609
601 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned_Trusted) { 610 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned_Trusted) {
602 CertificateList certs; 611 CertificateList certs;
603 ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs)); 612 ASSERT_TRUE(ReadCertIntoList("punycodetest.pem", &certs));
604 613
605 NSSCertDatabase::ImportCertFailureList failed; 614 NSSCertDatabase::ImportCertFailureList failed;
606 EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUSTED_SSL, 615 EXPECT_TRUE(cert_db_->ImportServerCert(certs, NSSCertDatabase::TRUSTED_SSL,
607 &failed)); 616 &failed));
608 617
609 EXPECT_EQ(0U, failed.size()); 618 EXPECT_EQ(0U, failed.size());
610 619
611 CertificateList cert_list = ListCerts(); 620 CertificateList cert_list = ListCerts();
612 ASSERT_EQ(1U, cert_list.size()); 621 ASSERT_EQ(1U, cert_list.size());
613 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); 622 scoped_refptr<X509Certificate> puny_cert(cert_list[0]);
614 623
615 EXPECT_EQ(NSSCertDatabase::TRUSTED_SSL, 624 EXPECT_EQ(NSSCertDatabase::TRUSTED_SSL,
616 cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT)); 625 cert_db_->GetCertTrust(puny_cert.get(), SERVER_CERT));
617 EXPECT_EQ(unsigned(CERTDB_TRUSTED | CERTDB_TERMINAL_RECORD), 626 EXPECT_EQ(unsigned(CERTDB_TRUSTED | CERTDB_TERMINAL_RECORD),
618 puny_cert->os_cert_handle()->trust->sslFlags); 627 puny_cert->os_cert_handle()->trust->sslFlags);
619 628
620 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 629 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
621 int flags = 0; 630 int flags = 0;
622 CertVerifyResult verify_result; 631 CertVerifyResult verify_result;
623 int error = 632 int error =
624 verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(), 633 verify_proc->Verify(puny_cert.get(), "xn--wgv71a119e.com", std::string(),
625 flags, NULL, empty_cert_list_, &verify_result); 634 flags, NULL, empty_cert_list_, &verify_result);
626 EXPECT_EQ(OK, error); 635 EXPECT_THAT(error, IsOk());
627 EXPECT_EQ(0U, verify_result.cert_status); 636 EXPECT_EQ(0U, verify_result.cert_status);
628 } 637 }
629 638
630 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert) { 639 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert) {
631 CertificateList ca_certs = CreateCertificateListFromFile( 640 CertificateList ca_certs = CreateCertificateListFromFile(
632 GetTestCertsDirectory(), "root_ca_cert.pem", 641 GetTestCertsDirectory(), "root_ca_cert.pem",
633 X509Certificate::FORMAT_AUTO); 642 X509Certificate::FORMAT_AUTO);
634 ASSERT_EQ(1U, ca_certs.size()); 643 ASSERT_EQ(1U, ca_certs.size());
635 644
636 // Import CA cert and trust it. 645 // Import CA cert and trust it.
(...skipping 12 matching lines...) Expand all
649 &failed)); 658 &failed));
650 EXPECT_EQ(0U, failed.size()); 659 EXPECT_EQ(0U, failed.size());
651 660
652 // Server cert should verify. 661 // Server cert should verify.
653 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 662 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
654 int flags = 0; 663 int flags = 0;
655 CertVerifyResult verify_result; 664 CertVerifyResult verify_result;
656 int error = 665 int error =
657 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 666 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
658 NULL, empty_cert_list_, &verify_result); 667 NULL, empty_cert_list_, &verify_result);
659 EXPECT_EQ(OK, error); 668 EXPECT_THAT(error, IsOk());
660 EXPECT_EQ(0U, verify_result.cert_status); 669 EXPECT_EQ(0U, verify_result.cert_status);
661 } 670 }
662 671
663 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert_DistrustServer) { 672 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert_DistrustServer) {
664 CertificateList ca_certs = CreateCertificateListFromFile( 673 CertificateList ca_certs = CreateCertificateListFromFile(
665 GetTestCertsDirectory(), "root_ca_cert.pem", 674 GetTestCertsDirectory(), "root_ca_cert.pem",
666 X509Certificate::FORMAT_AUTO); 675 X509Certificate::FORMAT_AUTO);
667 ASSERT_EQ(1U, ca_certs.size()); 676 ASSERT_EQ(1U, ca_certs.size());
668 677
669 // Import CA cert and trust it. 678 // Import CA cert and trust it.
(...skipping 18 matching lines...) Expand all
688 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), 697 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD),
689 certs[0]->os_cert_handle()->trust->sslFlags); 698 certs[0]->os_cert_handle()->trust->sslFlags);
690 699
691 // Server cert should fail to verify. 700 // Server cert should fail to verify.
692 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 701 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
693 int flags = 0; 702 int flags = 0;
694 CertVerifyResult verify_result; 703 CertVerifyResult verify_result;
695 int error = 704 int error =
696 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 705 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
697 NULL, empty_cert_list_, &verify_result); 706 NULL, empty_cert_list_, &verify_result);
698 EXPECT_EQ(ERR_CERT_REVOKED, error); 707 EXPECT_THAT(error, IsError(ERR_CERT_REVOKED));
699 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); 708 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status);
700 } 709 }
701 710
702 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa) { 711 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa) {
703 CertificateList ca_certs = CreateCertificateListFromFile( 712 CertificateList ca_certs = CreateCertificateListFromFile(
704 GetTestCertsDirectory(), "2048-rsa-root.pem", 713 GetTestCertsDirectory(), "2048-rsa-root.pem",
705 X509Certificate::FORMAT_AUTO); 714 X509Certificate::FORMAT_AUTO);
706 ASSERT_EQ(1U, ca_certs.size()); 715 ASSERT_EQ(1U, ca_certs.size());
707 716
708 // Import Root CA cert and distrust it. 717 // Import Root CA cert and distrust it.
(...skipping 24 matching lines...) Expand all
733 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 742 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
734 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); 743 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT));
735 744
736 // Server cert should verify. 745 // Server cert should verify.
737 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 746 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
738 int flags = 0; 747 int flags = 0;
739 CertVerifyResult verify_result; 748 CertVerifyResult verify_result;
740 int error = 749 int error =
741 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 750 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
742 NULL, empty_cert_list_, &verify_result); 751 NULL, empty_cert_list_, &verify_result);
743 EXPECT_EQ(OK, error); 752 EXPECT_THAT(error, IsOk());
744 EXPECT_EQ(0U, verify_result.cert_status); 753 EXPECT_EQ(0U, verify_result.cert_status);
745 754
746 // Trust the root cert and distrust the intermediate. 755 // Trust the root cert and distrust the intermediate.
747 EXPECT_TRUE(cert_db_->SetCertTrust( 756 EXPECT_TRUE(cert_db_->SetCertTrust(
748 ca_certs[0].get(), CA_CERT, NSSCertDatabase::TRUSTED_SSL)); 757 ca_certs[0].get(), CA_CERT, NSSCertDatabase::TRUSTED_SSL));
749 EXPECT_TRUE(cert_db_->SetCertTrust( 758 EXPECT_TRUE(cert_db_->SetCertTrust(
750 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::DISTRUSTED_SSL)); 759 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::DISTRUSTED_SSL));
751 EXPECT_EQ( 760 EXPECT_EQ(
752 unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), 761 unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA),
753 ca_certs[0]->os_cert_handle()->trust->sslFlags); 762 ca_certs[0]->os_cert_handle()->trust->sslFlags);
754 EXPECT_EQ(unsigned(CERTDB_VALID_CA), 763 EXPECT_EQ(unsigned(CERTDB_VALID_CA),
755 ca_certs[0]->os_cert_handle()->trust->emailFlags); 764 ca_certs[0]->os_cert_handle()->trust->emailFlags);
756 EXPECT_EQ(unsigned(CERTDB_VALID_CA), 765 EXPECT_EQ(unsigned(CERTDB_VALID_CA),
757 ca_certs[0]->os_cert_handle()->trust->objectSigningFlags); 766 ca_certs[0]->os_cert_handle()->trust->objectSigningFlags);
758 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), 767 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD),
759 intermediate_certs[0]->os_cert_handle()->trust->sslFlags); 768 intermediate_certs[0]->os_cert_handle()->trust->sslFlags);
760 EXPECT_EQ(unsigned(CERTDB_VALID_CA), 769 EXPECT_EQ(unsigned(CERTDB_VALID_CA),
761 intermediate_certs[0]->os_cert_handle()->trust->emailFlags); 770 intermediate_certs[0]->os_cert_handle()->trust->emailFlags);
762 EXPECT_EQ( 771 EXPECT_EQ(
763 unsigned(CERTDB_VALID_CA), 772 unsigned(CERTDB_VALID_CA),
764 intermediate_certs[0]->os_cert_handle()->trust->objectSigningFlags); 773 intermediate_certs[0]->os_cert_handle()->trust->objectSigningFlags);
765 774
766 // Server cert should fail to verify. 775 // Server cert should fail to verify.
767 CertVerifyResult verify_result2; 776 CertVerifyResult verify_result2;
768 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 777 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
769 NULL, empty_cert_list_, &verify_result2); 778 NULL, empty_cert_list_, &verify_result2);
770 EXPECT_EQ(ERR_CERT_REVOKED, error); 779 EXPECT_THAT(error, IsError(ERR_CERT_REVOKED));
771 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result2.cert_status); 780 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result2.cert_status);
772 } 781 }
773 782
774 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa2) { 783 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa2) {
775 if (NSS_VersionCheck("3.14.2") && !NSS_VersionCheck("3.15")) { 784 if (NSS_VersionCheck("3.14.2") && !NSS_VersionCheck("3.15")) {
776 // See http://bugzil.la/863947 for details. 785 // See http://bugzil.la/863947 for details.
777 LOG(INFO) << "Skipping test for NSS 3.14.2 - NSS 3.15"; 786 LOG(INFO) << "Skipping test for NSS 3.14.2 - NSS 3.15";
778 return; 787 return;
779 } 788 }
780 789
(...skipping 21 matching lines...) Expand all
802 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 811 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
803 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); 812 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT));
804 813
805 // Server cert should verify. 814 // Server cert should verify.
806 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 815 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
807 int flags = 0; 816 int flags = 0;
808 CertVerifyResult verify_result; 817 CertVerifyResult verify_result;
809 int error = 818 int error =
810 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 819 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
811 NULL, empty_cert_list_, &verify_result); 820 NULL, empty_cert_list_, &verify_result);
812 EXPECT_EQ(OK, error); 821 EXPECT_THAT(error, IsOk());
813 EXPECT_EQ(0U, verify_result.cert_status); 822 EXPECT_EQ(0U, verify_result.cert_status);
814 823
815 // Without explicit trust of the intermediate, verification should fail. 824 // Without explicit trust of the intermediate, verification should fail.
816 EXPECT_TRUE(cert_db_->SetCertTrust( 825 EXPECT_TRUE(cert_db_->SetCertTrust(
817 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT)); 826 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT));
818 827
819 // Server cert should fail to verify. 828 // Server cert should fail to verify.
820 CertVerifyResult verify_result2; 829 CertVerifyResult verify_result2;
821 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 830 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
822 NULL, empty_cert_list_, &verify_result2); 831 NULL, empty_cert_list_, &verify_result2);
823 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 832 EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID));
824 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); 833 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status);
825 } 834 }
826 835
827 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa3) { 836 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa3) {
828 if (NSS_VersionCheck("3.14.2") && !NSS_VersionCheck("3.15")) { 837 if (NSS_VersionCheck("3.14.2") && !NSS_VersionCheck("3.15")) {
829 // See http://bugzil.la/863947 for details. 838 // See http://bugzil.la/863947 for details.
830 LOG(INFO) << "Skipping test for NSS 3.14.2 - NSS 3.15"; 839 LOG(INFO) << "Skipping test for NSS 3.14.2 - NSS 3.15";
831 return; 840 return;
832 } 841 }
833 842
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 874 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
866 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); 875 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT));
867 876
868 // Server cert should verify. 877 // Server cert should verify.
869 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 878 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
870 int flags = 0; 879 int flags = 0;
871 CertVerifyResult verify_result; 880 CertVerifyResult verify_result;
872 int error = 881 int error =
873 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 882 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
874 NULL, empty_cert_list_, &verify_result); 883 NULL, empty_cert_list_, &verify_result);
875 EXPECT_EQ(OK, error); 884 EXPECT_THAT(error, IsOk());
876 EXPECT_EQ(0U, verify_result.cert_status); 885 EXPECT_EQ(0U, verify_result.cert_status);
877 886
878 // Without explicit trust of the intermediate, verification should fail. 887 // Without explicit trust of the intermediate, verification should fail.
879 EXPECT_TRUE(cert_db_->SetCertTrust( 888 EXPECT_TRUE(cert_db_->SetCertTrust(
880 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT)); 889 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT));
881 890
882 // Server cert should fail to verify. 891 // Server cert should fail to verify.
883 CertVerifyResult verify_result2; 892 CertVerifyResult verify_result2;
884 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 893 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
885 NULL, empty_cert_list_, &verify_result2); 894 NULL, empty_cert_list_, &verify_result2);
886 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 895 EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID));
887 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); 896 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status);
888 } 897 }
889 898
890 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa4) { 899 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa4) {
891 NSSCertDatabase::ImportCertFailureList failed; 900 NSSCertDatabase::ImportCertFailureList failed;
892 901
893 CertificateList ca_certs = CreateCertificateListFromFile( 902 CertificateList ca_certs = CreateCertificateListFromFile(
894 GetTestCertsDirectory(), "2048-rsa-root.pem", 903 GetTestCertsDirectory(), "2048-rsa-root.pem",
895 X509Certificate::FORMAT_AUTO); 904 X509Certificate::FORMAT_AUTO);
896 ASSERT_EQ(1U, ca_certs.size()); 905 ASSERT_EQ(1U, ca_certs.size());
(...skipping 25 matching lines...) Expand all
922 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 931 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
923 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT)); 932 cert_db_->GetCertTrust(certs[0].get(), SERVER_CERT));
924 933
925 // Server cert should not verify. 934 // Server cert should not verify.
926 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS()); 935 scoped_refptr<CertVerifyProc> verify_proc(new CertVerifyProcNSS());
927 int flags = 0; 936 int flags = 0;
928 CertVerifyResult verify_result; 937 CertVerifyResult verify_result;
929 int error = 938 int error =
930 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 939 verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
931 NULL, empty_cert_list_, &verify_result); 940 NULL, empty_cert_list_, &verify_result);
932 EXPECT_EQ(ERR_CERT_REVOKED, error); 941 EXPECT_THAT(error, IsError(ERR_CERT_REVOKED));
933 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); 942 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status);
934 943
935 // Without explicit distrust of the intermediate, verification should succeed. 944 // Without explicit distrust of the intermediate, verification should succeed.
936 EXPECT_TRUE(cert_db_->SetCertTrust( 945 EXPECT_TRUE(cert_db_->SetCertTrust(
937 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT)); 946 intermediate_certs[0].get(), CA_CERT, NSSCertDatabase::TRUST_DEFAULT));
938 947
939 // Server cert should verify. 948 // Server cert should verify.
940 CertVerifyResult verify_result2; 949 CertVerifyResult verify_result2;
941 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags, 950 error = verify_proc->Verify(certs[0].get(), "127.0.0.1", std::string(), flags,
942 NULL, empty_cert_list_, &verify_result2); 951 NULL, empty_cert_list_, &verify_result2);
943 EXPECT_EQ(OK, error); 952 EXPECT_THAT(error, IsOk());
944 EXPECT_EQ(0U, verify_result2.cert_status); 953 EXPECT_EQ(0U, verify_result2.cert_status);
945 } 954 }
946 955
947 // Importing two certificates with the same issuer and subject common name, 956 // Importing two certificates with the same issuer and subject common name,
948 // but overall distinct subject names, should succeed and generate a unique 957 // but overall distinct subject names, should succeed and generate a unique
949 // nickname for the second certificate. 958 // nickname for the second certificate.
950 TEST_F(CertDatabaseNSSTest, ImportDuplicateCommonName) { 959 TEST_F(CertDatabaseNSSTest, ImportDuplicateCommonName) {
951 CertificateList certs = 960 CertificateList certs =
952 CreateCertificateListFromFile(GetTestCertsDirectory(), 961 CreateCertificateListFromFile(GetTestCertsDirectory(),
953 "duplicate_cn_1.pem", 962 "duplicate_cn_1.pem",
(...skipping 27 matching lines...) Expand all
981 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT, 990 EXPECT_EQ(NSSCertDatabase::TRUST_DEFAULT,
982 cert_db_->GetCertTrust(certs2[0].get(), SERVER_CERT)); 991 cert_db_->GetCertTrust(certs2[0].get(), SERVER_CERT));
983 992
984 new_certs = ListCerts(); 993 new_certs = ListCerts();
985 ASSERT_EQ(2U, new_certs.size()); 994 ASSERT_EQ(2U, new_certs.size());
986 EXPECT_STRNE(new_certs[0]->os_cert_handle()->nickname, 995 EXPECT_STRNE(new_certs[0]->os_cert_handle()->nickname,
987 new_certs[1]->os_cert_handle()->nickname); 996 new_certs[1]->os_cert_handle()->nickname);
988 } 997 }
989 998
990 } // namespace net 999 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/multi_threaded_cert_verifier_unittest.cc ('k') | net/cert/test_root_certs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698