Index: chrome/browser/chromeos/cros/onc_network_parser_unittest.cc |
diff --git a/chrome/browser/chromeos/cros/onc_network_parser_unittest.cc b/chrome/browser/chromeos/cros/onc_network_parser_unittest.cc |
index b2a2486968353ecd849aefd619f71187fc2230dc..ec5907ab6e5bfb4a3d8cec1311bda5b6abe05a33 100644 |
--- a/chrome/browser/chromeos/cros/onc_network_parser_unittest.cc |
+++ b/chrome/browser/chromeos/cros/onc_network_parser_unittest.cc |
@@ -5,21 +5,27 @@ |
#include "chrome/browser/chromeos/cros/onc_network_parser.h" |
#include <cert.h> |
+#include <keyhi.h> |
#include <pk11pub.h> |
#include "base/lazy_instance.h" |
#include "base/scoped_temp_dir.h" |
#include "base/values.h" |
#include "chrome/browser/chromeos/cros/network_library.h" |
+#include "chrome/browser/chromeos/system/runtime_environment.h" |
#include "crypto/nss_util.h" |
#include "net/base/cert_database.h" |
+#include "net/base/cert_type.h" |
#include "net/base/crypto_module.h" |
#include "net/base/x509_certificate.h" |
+#include "net/third_party/mozilla_security_manager/nsNSSCertTrust.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
+namespace msm = mozilla_security_manager; |
namespace chromeos { |
+namespace { |
const char kNetworkConfigurationOpenVPN[] = |
" {" |
" \"GUID\": \"{408290ea-9299-4757-ab04-8957d55f0f13}\"," |
@@ -102,6 +108,21 @@ const char kCertificateWebAuthority[] = |
"1kohau6FauQx87by5NIRPdkNPvkQ==\"" |
" }"; |
+const char g_token_name[] = "OncNetworkParserTest token"; |
+ |
+net::CertType GetCertType(const net::X509Certificate* cert) { |
+ DCHECK(cert); |
+ msm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
+ if (trust.HasAnyUser()) |
+ return net::USER_CERT; |
+ if (trust.HasAnyCA() || CERT_IsCACert(cert->os_cert_handle(), NULL)) |
+ return net::CA_CERT; |
+ if (trust.HasPeer(PR_TRUE, PR_FALSE, PR_FALSE)) |
+ return net::SERVER_CERT; |
+ return net::UNKNOWN_CERT; |
+} |
+ |
+} // namespace |
class OncNetworkParserTest : public testing::Test { |
public: |
@@ -113,8 +134,7 @@ class OncNetworkParserTest : public testing::Test { |
// it once, and empty it for each test case. Here's the bug: |
// https://bugzilla.mozilla.org/show_bug.cgi?id=588269 |
ASSERT_TRUE( |
- crypto::OpenTestNSSDB(temp_db_dir_.Get().path(), |
- "OncNetworkParserTest db")); |
+ crypto::OpenTestNSSDB(temp_db_dir_.Get().path(), g_token_name)); |
} |
static void TearDownTestCase() { |
@@ -446,47 +466,6 @@ TEST_F(OncNetworkParserTest, TestCreateNetworkL2TPIPsec) { |
EXPECT_FALSE(vpn->save_credentials()); |
} |
-TEST_F(OncNetworkParserTest, TestAddServerCertificate) { |
- std::string test_blob( |
- "{" |
- " \"Certificates\": [" |
- " {" |
- " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," |
- " \"Type\": \"Server\"," |
- " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" |
- "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzEiMCAGCSqGSIb3DQ" |
- "EJARYTZ3NwZW5jZXJAZ29vZ2xlLmNvbTEaMBgGA1UEBxMRTW91bnRhaW4gVmlldywgQ0E" |
- "xCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJVUzENMAsGA1UEAxMEbG1hbzAeFw0xMTAzMTYy" |
- "MzQ5MzhaFw0xMjAzMTUyMzQ5MzhaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVM" |
- "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzENMAsGA1UEAxMEbG" |
- "1hbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA31WiJ9LvprrhKtDlW0RdLFAO7Qj" |
- "kvs+sG6j2Vp2aBSrlhALG/0BVHUhWi4F/HHJho+ncLHAg5AGO0sdAjYUdQG6tfPqjLsIA" |
- "LtoKEZZdFe/JhmqOEaxWsSdu2S2RdPgCQOsP79EH58gXwu2gejCkJDmU22WL4YLuqOc17" |
- "nxbDC8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCv4vMD+PMlfnftu4/6Yf/oMLE8yCOqZT" |
- "Q/dWCxB9PiJnOefiBeSzSZE6Uv3G7qnblZPVZaFeJMd+ostt0viCyPucFsFgLMyyoV1dM" |
- "VPVwJT5Iq1AHehWXnTBbxUK9wioA5jOEKdroKjuSSsg/Q8Wx6cpJmttQz5olGPgstmACR" |
- "WA==\"" |
- " }" |
- " ]," |
- "}"); |
- OncNetworkParser parser(test_blob); |
- |
- EXPECT_EQ(1, parser.GetCertificatesSize()); |
- EXPECT_TRUE(parser.ParseCertificate(0)); |
-} |
- |
-TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { |
- const std::string test_blob(std::string("{" |
- " \"Certificates\": [") + |
- std::string(kCertificateWebAuthority) + std::string( |
- " ]," |
- "}")); |
- OncNetworkParser parser(test_blob); |
- |
- EXPECT_EQ(1, parser.GetCertificatesSize()); |
- EXPECT_TRUE(parser.ParseCertificate(0)); |
-} |
- |
TEST_F(OncNetworkParserTest, TestAddClientCertificate) { |
std::string test_blob( |
"{" |
@@ -529,10 +508,130 @@ TEST_F(OncNetworkParserTest, TestAddClientCertificate) { |
" }" |
" ]," |
"}"); |
+ std::string test_guid("{f998f760-272b-6939-4c2beffe428697ac}"); |
OncNetworkParser parser(test_blob); |
+ ASSERT_EQ(1, parser.GetCertificatesSize()); |
+ |
+ scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
+ EXPECT_TRUE(cert.get() != NULL); |
+ EXPECT_EQ(net::USER_CERT, GetCertType(cert.get())); |
+ |
+ EXPECT_STREQ(test_guid.c_str(), |
+ cert->GetDefaultNickname(net::USER_CERT).c_str()); |
+ net::CertificateList result_list; |
+ OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
+ ASSERT_EQ(1ul, result_list.size()); |
+ EXPECT_EQ(net::USER_CERT, GetCertType(result_list[0].get())); |
+ |
+ SECKEYPrivateKeyList* privkey_list = |
+ PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
+ EXPECT_TRUE(privkey_list); |
+ if (privkey_list) { |
+ SECKEYPrivateKeyListNode* node = PRIVKEY_LIST_HEAD(privkey_list); |
+ int count = 0; |
+ while (!PRIVKEY_LIST_END(node, privkey_list)) { |
+ char* name = PK11_GetPrivateKeyNickname(node->key); |
+ EXPECT_STREQ(test_guid.c_str(), name); |
+ PORT_Free(name); |
+ count++; |
+ node = PRIVKEY_LIST_NEXT(node); |
+ } |
+ EXPECT_EQ(1, count); |
+ SECKEY_DestroyPrivateKeyList(privkey_list); |
+ } |
+ |
+ SECKEYPublicKeyList* pubkey_list = |
+ PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
+ EXPECT_TRUE(pubkey_list); |
+ if (pubkey_list) { |
+ SECKEYPublicKeyListNode* node = PUBKEY_LIST_HEAD(pubkey_list); |
+ int count = 0; |
+ while (!PUBKEY_LIST_END(node, pubkey_list)) { |
+ count++; |
+ node = PUBKEY_LIST_NEXT(node); |
+ } |
+ EXPECT_EQ(1, count); |
+ SECKEY_DestroyPublicKeyList(pubkey_list); |
+ } |
+} |
+ |
+TEST_F(OncNetworkParserTest, TestAddServerCertificate) { |
+ std::string test_blob( |
+ "{" |
+ " \"Certificates\": [" |
+ " {" |
+ " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," |
+ " \"Type\": \"Server\"," |
+ " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" |
+ "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzEiMCAGCSqGSIb3DQ" |
+ "EJARYTZ3NwZW5jZXJAZ29vZ2xlLmNvbTEaMBgGA1UEBxMRTW91bnRhaW4gVmlldywgQ0E" |
+ "xCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJVUzENMAsGA1UEAxMEbG1hbzAeFw0xMTAzMTYy" |
+ "MzQ5MzhaFw0xMjAzMTUyMzQ5MzhaMFMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEVM" |
+ "BMGA1UEChMMR29vZ2xlLCBJbmMuMREwDwYDVQQLEwhDaHJvbWVPUzENMAsGA1UEAxMEbG" |
+ "1hbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA31WiJ9LvprrhKtDlW0RdLFAO7Qj" |
+ "kvs+sG6j2Vp2aBSrlhALG/0BVHUhWi4F/HHJho+ncLHAg5AGO0sdAjYUdQG6tfPqjLsIA" |
+ "LtoKEZZdFe/JhmqOEaxWsSdu2S2RdPgCQOsP79EH58gXwu2gejCkJDmU22WL4YLuqOc17" |
+ "nxbDC8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCv4vMD+PMlfnftu4/6Yf/oMLE8yCOqZT" |
+ "Q/dWCxB9PiJnOefiBeSzSZE6Uv3G7qnblZPVZaFeJMd+ostt0viCyPucFsFgLMyyoV1dM" |
+ "VPVwJT5Iq1AHehWXnTBbxUK9wioA5jOEKdroKjuSSsg/Q8Wx6cpJmttQz5olGPgstmACR" |
+ "WA==\"" |
+ " }" |
+ " ]," |
+ "}"); |
+ std::string test_guid("{f998f760-272b-6939-4c2beffe428697aa}"); |
+ OncNetworkParser parser(test_blob); |
+ ASSERT_EQ(1, parser.GetCertificatesSize()); |
+ |
+ scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
+ EXPECT_TRUE(cert.get() != NULL); |
+ EXPECT_EQ(net::SERVER_CERT, GetCertType(cert.get())); |
+ |
+ EXPECT_STREQ(test_guid.c_str(), |
+ cert->GetDefaultNickname(net::SERVER_CERT).c_str()); |
+ net::CertificateList result_list; |
+ OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
+ ASSERT_EQ(1ul, result_list.size()); |
+ EXPECT_EQ(net::SERVER_CERT, GetCertType(result_list[0].get())); |
+ |
+ SECKEYPrivateKeyList* privkey_list = |
+ PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
+ EXPECT_FALSE(privkey_list); |
+ |
+ SECKEYPublicKeyList* pubkey_list = |
+ PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
+ EXPECT_FALSE(pubkey_list); |
+ |
+} |
+ |
+TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { |
+ const std::string test_blob(std::string("{" |
+ " \"Certificates\": [") + |
+ std::string(kCertificateWebAuthority) + std::string( |
+ " ]," |
+ "}")); |
+ std::string test_guid("{f998f760-272b-6939-4c2beffe428697ab}"); |
+ OncNetworkParser parser(test_blob); |
+ ASSERT_EQ(1, parser.GetCertificatesSize()); |
+ |
+ scoped_refptr<net::X509Certificate> cert = parser.ParseCertificate(0).get(); |
+ EXPECT_TRUE(cert.get() != NULL); |
+ EXPECT_EQ(net::CA_CERT, GetCertType(cert.get())); |
+ |
+ EXPECT_STREQ(test_guid.c_str(), |
+ cert->GetDefaultNickname(net::CA_CERT).c_str()); |
+ net::CertificateList result_list; |
+ OncNetworkParser::ListCertsWithNickname(test_guid, &result_list); |
+ ASSERT_EQ(1ul, result_list.size()); |
+ EXPECT_EQ(net::CA_CERT, GetCertType(result_list[0].get())); |
+ |
+ SECKEYPrivateKeyList* privkey_list = |
+ PK11_ListPrivKeysInSlot(slot_->os_module_handle(), NULL, NULL); |
+ EXPECT_FALSE(privkey_list); |
+ |
+ SECKEYPublicKeyList* pubkey_list = |
+ PK11_ListPublicKeysInSlot(slot_->os_module_handle(), NULL); |
+ EXPECT_FALSE(pubkey_list); |
- EXPECT_EQ(1, parser.GetCertificatesSize()); |
- EXPECT_TRUE(parser.ParseCertificate(0)); |
} |
TEST_F(OncNetworkParserTest, TestNetworkAndCertificate) { |