OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/cros/onc_network_parser.h" | 5 #include "chrome/browser/chromeos/cros/onc_network_parser.h" |
6 | 6 |
7 #include <cert.h> | 7 #include <cert.h> |
| 8 #include <keyhi.h> |
8 #include <pk11pub.h> | 9 #include <pk11pub.h> |
9 | 10 |
10 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
11 #include "base/scoped_temp_dir.h" | 12 #include "base/scoped_temp_dir.h" |
12 #include "base/values.h" | 13 #include "base/values.h" |
13 #include "chrome/browser/chromeos/cros/network_library.h" | 14 #include "chrome/browser/chromeos/cros/network_library.h" |
| 15 #include "chrome/browser/chromeos/system/runtime_environment.h" |
14 #include "crypto/nss_util.h" | 16 #include "crypto/nss_util.h" |
15 #include "net/base/cert_database.h" | 17 #include "net/base/cert_database.h" |
| 18 #include "net/base/cert_type.h" |
16 #include "net/base/crypto_module.h" | 19 #include "net/base/crypto_module.h" |
17 #include "net/base/x509_certificate.h" | 20 #include "net/base/x509_certificate.h" |
| 21 #include "net/third_party/mozilla_security_manager/nsNSSCertTrust.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "third_party/cros_system_api/dbus/service_constants.h" | 23 #include "third_party/cros_system_api/dbus/service_constants.h" |
20 | 24 |
| 25 namespace msm = mozilla_security_manager; |
21 namespace chromeos { | 26 namespace chromeos { |
22 | 27 |
| 28 namespace { |
23 const char kNetworkConfigurationOpenVPN[] = | 29 const char kNetworkConfigurationOpenVPN[] = |
24 " {" | 30 " {" |
25 " \"GUID\": \"{408290ea-9299-4757-ab04-8957d55f0f13}\"," | 31 " \"GUID\": \"{408290ea-9299-4757-ab04-8957d55f0f13}\"," |
26 " \"Type\": \"VPN\"," | 32 " \"Type\": \"VPN\"," |
27 " \"Name\": \"MyVPN\"," | 33 " \"Name\": \"MyVPN\"," |
28 " \"VPN\": {" | 34 " \"VPN\": {" |
29 " \"Host\": \"vpn.acme.org\"," | 35 " \"Host\": \"vpn.acme.org\"," |
30 " \"Type\": \"OpenVPN\"," | 36 " \"Type\": \"OpenVPN\"," |
31 " \"OpenVPN\": {" | 37 " \"OpenVPN\": {" |
32 " \"AuthRetry\": \"interact\"," | 38 " \"AuthRetry\": \"interact\"," |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg" | 101 "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg" |
96 "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM" | 102 "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM" |
97 "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2" | 103 "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2" |
98 "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM" | 104 "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM" |
99 "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi" | 105 "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi" |
100 "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY" | 106 "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY" |
101 "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5" | 107 "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5" |
102 "1kohau6FauQx87by5NIRPdkNPvkQ==\"" | 108 "1kohau6FauQx87by5NIRPdkNPvkQ==\"" |
103 " }"; | 109 " }"; |
104 | 110 |
| 111 const char g_token_name[] = "OncNetworkParserTest token"; |
| 112 |
| 113 net::CertType GetCertType(const net::X509Certificate* cert) { |
| 114 DCHECK(cert); |
| 115 msm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
| 116 if (trust.HasAnyUser()) |
| 117 return net::USER_CERT; |
| 118 if (trust.HasAnyCA() || CERT_IsCACert(cert->os_cert_handle(), NULL)) |
| 119 return net::CA_CERT; |
| 120 if (trust.HasPeer(PR_TRUE, PR_FALSE, PR_FALSE)) |
| 121 return net::SERVER_CERT; |
| 122 return net::UNKNOWN_CERT; |
| 123 } |
| 124 |
| 125 } // namespace |
105 | 126 |
106 class OncNetworkParserTest : public testing::Test { | 127 class OncNetworkParserTest : public testing::Test { |
107 public: | 128 public: |
108 static void SetUpTestCase() { | 129 static void SetUpTestCase() { |
109 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); | 130 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); |
110 // Ideally, we'd open a test DB for each test case, and close it | 131 // Ideally, we'd open a test DB for each test case, and close it |
111 // again, removing the temp dir, but unfortunately, there's a | 132 // again, removing the temp dir, but unfortunately, there's a |
112 // bug in NSS that prevents this from working, so we just open | 133 // bug in NSS that prevents this from working, so we just open |
113 // it once, and empty it for each test case. Here's the bug: | 134 // it once, and empty it for each test case. Here's the bug: |
114 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 | 135 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 |
115 ASSERT_TRUE( | 136 ASSERT_TRUE( |
116 crypto::OpenTestNSSDB(temp_db_dir_.Get().path(), | 137 crypto::OpenTestNSSDB(temp_db_dir_.Get().path(), g_token_name)); |
117 "OncNetworkParserTest db")); | |
118 } | 138 } |
119 | 139 |
120 static void TearDownTestCase() { | 140 static void TearDownTestCase() { |
121 ASSERT_TRUE(temp_db_dir_.Get().Delete()); | 141 ASSERT_TRUE(temp_db_dir_.Get().Delete()); |
122 } | 142 } |
123 | 143 |
124 virtual void SetUp() { | 144 virtual void SetUp() { |
125 slot_ = cert_db_.GetPublicModule(); | 145 slot_ = cert_db_.GetPublicModule(); |
126 | 146 |
127 // Don't run the test if the setup failed. | 147 // Don't run the test if the setup failed. |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 flimflam::kProviderL2tpIpsec); | 459 flimflam::kProviderL2tpIpsec); |
440 EXPECT_EQ("l2tp.acme.org", vpn->server_hostname()); | 460 EXPECT_EQ("l2tp.acme.org", vpn->server_hostname()); |
441 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_HOST, "l2tp.acme.org"); | 461 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_HOST, "l2tp.acme.org"); |
442 CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, ""); | 462 CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, ""); |
443 EXPECT_EQ("passphrase", vpn->psk_passphrase()); | 463 EXPECT_EQ("passphrase", vpn->psk_passphrase()); |
444 CheckStringProperty(vpn, PROPERTY_INDEX_L2TPIPSEC_PSK, "passphrase"); | 464 CheckStringProperty(vpn, PROPERTY_INDEX_L2TPIPSEC_PSK, "passphrase"); |
445 CheckStringProperty(vpn, PROPERTY_INDEX_IPSEC_IKEVERSION, "1"); | 465 CheckStringProperty(vpn, PROPERTY_INDEX_IPSEC_IKEVERSION, "1"); |
446 EXPECT_FALSE(vpn->save_credentials()); | 466 EXPECT_FALSE(vpn->save_credentials()); |
447 } | 467 } |
448 | 468 |
449 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { | |
450 std::string test_blob( | |
451 "{" | |
452 " \"Certificates\": [" | |
453 " {" | |
454 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," | |
455 " \"Type\": \"Server\"," | |
456 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" | |
457 "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzEiMCAGCSqGSIb3DQ" | |
458 "EJARYTZ3NwZW5jZXJAZ29vZ2xlLmNvbTEaMBgGA1UEBxMRTW91bnRhaW4gVmlldywgQ0E" | |
459 "xCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJVUzENMAsGA1UEAxMEbG1hbzAeFw0xMTAzMTYy" | |
460 "MzQ5MzhaFw0xMjAzMTUyMzQ5MzhaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVM" | |
461 "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzENMAsGA1UEAxMEbG" | |
462 "1hbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA31WiJ9LvprrhKtDlW0RdLFAO7Qj" | |
463 "kvs+sG6j2Vp2aBSrlhALG/0BVHUhWi4F/HHJho+ncLHAg5AGO0sdAjYUdQG6tfPqjLsIA" | |
464 "LtoKEZZdFe/JhmqOEaxWsSdu2S2RdPgCQOsP79EH58gXwu2gejCkJDmU22WL4YLuqOc17" | |
465 "nxbDC8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCv4vMD+PMlfnftu4/6Yf/oMLE8yCOqZT" | |
466 "Q/dWCxB9PiJnOefiBeSzSZE6Uv3G7qnblZPVZaFeJMd+ostt0viCyPucFsFgLMyyoV1dM" | |
467 "VPVwJT5Iq1AHehWXnTBbxUK9wioA5jOEKdroKjuSSsg/Q8Wx6cpJmttQz5olGPgstmACR" | |
468 "WA==\"" | |
469 " }" | |
470 " ]," | |
471 "}"); | |
472 OncNetworkParser parser(test_blob); | |
473 | |
474 EXPECT_EQ(1, parser.GetCertificatesSize()); | |
475 EXPECT_TRUE(parser.ParseCertificate(0)); | |
476 } | |
477 | |
478 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { | |
479 const std::string test_blob(std::string("{" | |
480 " \"Certificates\": [") + | |
481 std::string(kCertificateWebAuthority) + std::string( | |
482 " ]," | |
483 "}")); | |
484 OncNetworkParser parser(test_blob); | |
485 | |
486 EXPECT_EQ(1, parser.GetCertificatesSize()); | |
487 EXPECT_TRUE(parser.ParseCertificate(0)); | |
488 } | |
489 | |
490 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { | 469 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { |
491 std::string test_blob( | 470 std::string test_blob( |
492 "{" | 471 "{" |
493 " \"Certificates\": [" | 472 " \"Certificates\": [" |
494 " {" | 473 " {" |
495 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ac}\"," | 474 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ac}\"," |
496 " \"Type\": \"Client\"," | 475 " \"Type\": \"Client\"," |
497 " \"PKCS12\": \"MIIGUQIBAzCCBhcGCSqGSIb3DQEHAaCCBggEggYEMII" | 476 " \"PKCS12\": \"MIIGUQIBAzCCBhcGCSqGSIb3DQEHAaCCBggEggYEMII" |
498 "GADCCAv8GCSqGSIb3DQEHBqCCAvAwggLsAgEAMIIC5QYJKoZIhvcNAQcBMBwGCiqGSIb3" | 477 "GADCCAv8GCSqGSIb3DQEHBqCCAvAwggLsAgEAMIIC5QYJKoZIhvcNAQcBMBwGCiqGSIb3" |
499 "DQEMAQYwDgQIHnFaWM2Y0BgCAggAgIICuG4ou9mxkhpus8WictLJe+JOnSQrdNXV3FMQr" | 478 "DQEMAQYwDgQIHnFaWM2Y0BgCAggAgIICuG4ou9mxkhpus8WictLJe+JOnSQrdNXV3FMQr" |
(...skipping 22 matching lines...) Expand all Loading... |
522 "9jv3n8vSwvA0Xn0okAv1FWYLStiCpNxnD6lmXQvcmL/skAlJJpHY9/58qt/e5sGYrkKBw" | 501 "9jv3n8vSwvA0Xn0okAv1FWYLStiCpNxnD6lmXQvcmL/skAlJJpHY9/58qt/e5sGYrkKBw" |
523 "3jnX40zaK4W7GeJvhij0MRr6yUL2lvaEcWDnK6K1F90G/ybKRCTHBCJzyBe7yHhZCc+Zc" | 502 "3jnX40zaK4W7GeJvhij0MRr6yUL2lvaEcWDnK6K1F90G/ybKRCTHBCJzyBe7yHhZCc+Zc" |
524 "vKK6DTi83fELTyupy08BkXt7oPdapxmKlZxTldo9FpPXSqrdRtAWhDkEkIEf8dMf8QrQr" | 503 "vKK6DTi83fELTyupy08BkXt7oPdapxmKlZxTldo9FpPXSqrdRtAWhDkEkIEf8dMf8QrQr" |
525 "3glCWfbcQ047URYX45AHRnLTLLkJfdY8+Y3KsHoqL2UrOrct+J1u0mmnLbonN3pB2B4nd" | 504 "3glCWfbcQ047URYX45AHRnLTLLkJfdY8+Y3KsHoqL2UrOrct+J1u0mmnLbonN3pB2B4nd" |
526 "9X9vf9/uSFrgvk0iPO0Ro3UPRUIIYEP2Kx51pZZVDd++hl5gXtqe0NIpphGhxLycIdzEl" | 505 "9X9vf9/uSFrgvk0iPO0Ro3UPRUIIYEP2Kx51pZZVDd++hl5gXtqe0NIpphGhxLycIdzEl" |
527 "MCMGCSqGSIb3DQEJFTEWBBR1uVpGjHRddIEYuJhz/FgG4Onh6jAxMCEwCQYFKw4DAhoFA" | 506 "MCMGCSqGSIb3DQEJFTEWBBR1uVpGjHRddIEYuJhz/FgG4Onh6jAxMCEwCQYFKw4DAhoFA" |
528 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" | 507 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" |
529 " }" | 508 " }" |
530 " ]," | 509 " ]," |
531 "}"); | 510 "}"); |
| 511 std::string test_guid("{f998f760-272b-6939-4c2beffe428697ac}"); |
532 OncNetworkParser parser(test_blob); | 512 OncNetworkParser parser(test_blob); |
| 513 ASSERT_EQ(1, parser.GetCertificatesSize()); |
533 | 514 |
534 EXPECT_EQ(1, parser.GetCertificatesSize()); | 515 scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
535 EXPECT_TRUE(parser.ParseCertificate(0)); | 516 EXPECT_TRUE(cert.get() != NULL); |
| 517 EXPECT_EQ(net::USER_CERT, GetCertType(cert.get())); |
| 518 |
| 519 EXPECT_STREQ(test_guid.c_str(), |
| 520 cert->GetDefaultNickname(net::USER_CERT).c_str()); |
| 521 net::CertificateList result_list; |
| 522 OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
| 523 ASSERT_EQ(1ul, result_list.size()); |
| 524 EXPECT_EQ(net::USER_CERT, GetCertType(result_list[0].get())); |
| 525 |
| 526 SECKEYPrivateKeyList* privkey_list = |
| 527 PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
| 528 EXPECT_TRUE(privkey_list); |
| 529 if (privkey_list) { |
| 530 SECKEYPrivateKeyListNode* node = PRIVKEY_LIST_HEAD(privkey_list); |
| 531 int count = 0; |
| 532 while (!PRIVKEY_LIST_END(node, privkey_list)) { |
| 533 char* name = PK11_GetPrivateKeyNickname(node->key); |
| 534 EXPECT_STREQ(test_guid.c_str(), name); |
| 535 PORT_Free(name); |
| 536 count++; |
| 537 node = PRIVKEY_LIST_NEXT(node); |
| 538 } |
| 539 EXPECT_EQ(1, count); |
| 540 SECKEY_DestroyPrivateKeyList(privkey_list); |
| 541 } |
| 542 |
| 543 SECKEYPublicKeyList* pubkey_list = |
| 544 PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
| 545 EXPECT_TRUE(pubkey_list); |
| 546 if (pubkey_list) { |
| 547 SECKEYPublicKeyListNode* node = PUBKEY_LIST_HEAD(pubkey_list); |
| 548 int count = 0; |
| 549 while (!PUBKEY_LIST_END(node, pubkey_list)) { |
| 550 count++; |
| 551 node = PUBKEY_LIST_NEXT(node); |
| 552 } |
| 553 EXPECT_EQ(1, count); |
| 554 SECKEY_DestroyPublicKeyList(pubkey_list); |
| 555 } |
| 556 } |
| 557 |
| 558 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { |
| 559 std::string test_blob( |
| 560 "{" |
| 561 " \"Certificates\": [" |
| 562 " {" |
| 563 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," |
| 564 " \"Type\": \"Server\"," |
| 565 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" |
| 566 "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzEiMCAGCSqGSIb3DQ" |
| 567 "EJARYTZ3NwZW5jZXJAZ29vZ2xlLmNvbTEaMBgGA1UEBxMRTW91bnRhaW4gVmlldywgQ0E" |
| 568 "xCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJVUzENMAsGA1UEAxMEbG1hbzAeFw0xMTAzMTYy" |
| 569 "MzQ5MzhaFw0xMjAzMTUyMzQ5MzhaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVM" |
| 570 "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzENMAsGA1UEAxMEbG" |
| 571 "1hbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA31WiJ9LvprrhKtDlW0RdLFAO7Qj" |
| 572 "kvs+sG6j2Vp2aBSrlhALG/0BVHUhWi4F/HHJho+ncLHAg5AGO0sdAjYUdQG6tfPqjLsIA" |
| 573 "LtoKEZZdFe/JhmqOEaxWsSdu2S2RdPgCQOsP79EH58gXwu2gejCkJDmU22WL4YLuqOc17" |
| 574 "nxbDC8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCv4vMD+PMlfnftu4/6Yf/oMLE8yCOqZT" |
| 575 "Q/dWCxB9PiJnOefiBeSzSZE6Uv3G7qnblZPVZaFeJMd+ostt0viCyPucFsFgLMyyoV1dM" |
| 576 "VPVwJT5Iq1AHehWXnTBbxUK9wioA5jOEKdroKjuSSsg/Q8Wx6cpJmttQz5olGPgstmACR" |
| 577 "WA==\"" |
| 578 " }" |
| 579 " ]," |
| 580 "}"); |
| 581 std::string test_guid("{f998f760-272b-6939-4c2beffe428697aa}"); |
| 582 OncNetworkParser parser(test_blob); |
| 583 ASSERT_EQ(1, parser.GetCertificatesSize()); |
| 584 |
| 585 scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
| 586 EXPECT_TRUE(cert.get() != NULL); |
| 587 EXPECT_EQ(net::SERVER_CERT, GetCertType(cert.get())); |
| 588 |
| 589 EXPECT_STREQ(test_guid.c_str(), |
| 590 cert->GetDefaultNickname(net::SERVER_CERT).c_str()); |
| 591 net::CertificateList result_list; |
| 592 OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
| 593 ASSERT_EQ(1ul, result_list.size()); |
| 594 EXPECT_EQ(net::SERVER_CERT, GetCertType(result_list[0].get())); |
| 595 |
| 596 SECKEYPrivateKeyList* privkey_list = |
| 597 PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
| 598 EXPECT_FALSE(privkey_list); |
| 599 |
| 600 SECKEYPublicKeyList* pubkey_list = |
| 601 PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
| 602 EXPECT_FALSE(pubkey_list); |
| 603 |
| 604 } |
| 605 |
| 606 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { |
| 607 const std::string test_blob(std::string("{" |
| 608 " \"Certificates\": [") + |
| 609 std::string(kCertificateWebAuthority) + std::string( |
| 610 " ]," |
| 611 "}")); |
| 612 std::string test_guid("{f998f760-272b-6939-4c2beffe428697ab}"); |
| 613 OncNetworkParser parser(test_blob); |
| 614 ASSERT_EQ(1, parser.GetCertificatesSize()); |
| 615 |
| 616 scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
| 617 EXPECT_TRUE(cert.get() != NULL); |
| 618 EXPECT_EQ(net::CA_CERT, GetCertType(cert.get())); |
| 619 |
| 620 EXPECT_STREQ(test_guid.c_str(), |
| 621 cert->GetDefaultNickname(net::CA_CERT).c_str()); |
| 622 net::CertificateList result_list; |
| 623 OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
| 624 ASSERT_EQ(1ul, result_list.size()); |
| 625 EXPECT_EQ(net::CA_CERT, GetCertType(result_list[0].get())); |
| 626 |
| 627 SECKEYPrivateKeyList* privkey_list = |
| 628 PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
| 629 EXPECT_FALSE(privkey_list); |
| 630 |
| 631 SECKEYPublicKeyList* pubkey_list = |
| 632 PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
| 633 EXPECT_FALSE(pubkey_list); |
| 634 |
536 } | 635 } |
537 | 636 |
538 TEST_F(OncNetworkParserTest, TestNetworkAndCertificate) { | 637 TEST_F(OncNetworkParserTest, TestNetworkAndCertificate) { |
539 std::string test_blob(std::string( | 638 std::string test_blob(std::string( |
540 "{" | 639 "{" |
541 " \"NetworkConfigurations\": [") + | 640 " \"NetworkConfigurations\": [") + |
542 std::string(kNetworkConfigurationOpenVPN) + std::string( | 641 std::string(kNetworkConfigurationOpenVPN) + std::string( |
543 " ]," | 642 " ]," |
544 " \"Certificates\": [") + | 643 " \"Certificates\": [") + |
545 std::string(kCertificateWebAuthority) + std::string( | 644 std::string(kCertificateWebAuthority) + std::string( |
546 " ]," | 645 " ]," |
547 "}")); | 646 "}")); |
548 OncNetworkParser parser(test_blob); | 647 OncNetworkParser parser(test_blob); |
549 | 648 |
550 EXPECT_EQ(1, parser.GetCertificatesSize()); | 649 EXPECT_EQ(1, parser.GetCertificatesSize()); |
551 EXPECT_TRUE(parser.ParseCertificate(0)); | 650 EXPECT_TRUE(parser.ParseCertificate(0)); |
552 | 651 |
553 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 652 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
554 scoped_ptr<Network> network(parser.ParseNetwork(0)); | 653 scoped_ptr<Network> network(parser.ParseNetwork(0)); |
555 ASSERT_TRUE(network.get() != NULL); | 654 ASSERT_TRUE(network.get() != NULL); |
556 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); | 655 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); |
557 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network.get()); | 656 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network.get()); |
558 EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type()); | 657 EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type()); |
559 } | 658 } |
560 | 659 |
561 } // namespace chromeos | 660 } // namespace chromeos |
OLD | NEW |