summaryrefslogtreecommitdiff
path: root/chromium/net/cert/x509_cert_types_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/cert/x509_cert_types_unittest.cc')
-rw-r--r--chromium/net/cert/x509_cert_types_unittest.cc243
1 files changed, 243 insertions, 0 deletions
diff --git a/chromium/net/cert/x509_cert_types_unittest.cc b/chromium/net/cert/x509_cert_types_unittest.cc
new file mode 100644
index 00000000000..38fd3e95266
--- /dev/null
+++ b/chromium/net/cert/x509_cert_types_unittest.cc
@@ -0,0 +1,243 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/cert/x509_cert_types.h"
+
+#include "base/basictypes.h"
+#include "base/strings/string_piece.h"
+#include "base/time/time.h"
+#include "net/test/test_certificate_data.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+namespace {
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+TEST(X509TypesTest, Matching) {
+ CertPrincipal spamco;
+ spamco.common_name = "SpamCo Dept. Of Certificization";
+ spamco.country_name = "EB";
+ spamco.organization_names.push_back("SpamCo Holding Company, LLC");
+ spamco.organization_names.push_back("SpamCo Evil Masterminds");
+ spamco.organization_unit_names.push_back("Class Z Obfuscation Authority");
+ ASSERT_TRUE(spamco.Matches(spamco));
+
+ CertPrincipal bogus;
+ EXPECT_FALSE(bogus.Matches(spamco));
+ EXPECT_FALSE(spamco.Matches(bogus));
+
+ bogus = spamco;
+ EXPECT_TRUE(bogus.Matches(spamco));
+ EXPECT_TRUE(spamco.Matches(bogus));
+
+ bogus.organization_names.erase(bogus.organization_names.begin(),
+ bogus.organization_names.end());
+ EXPECT_FALSE(bogus.Matches(spamco));
+ EXPECT_FALSE(spamco.Matches(bogus));
+
+ bogus.organization_names.push_back("SpamCo Holding Company, LLC");
+ bogus.organization_names.push_back("SpamCo Evil Masterminds");
+ EXPECT_TRUE(bogus.Matches(spamco));
+ EXPECT_TRUE(spamco.Matches(bogus));
+
+ bogus.locality_name = "Elbosdorf";
+ EXPECT_FALSE(bogus.Matches(spamco));
+ EXPECT_FALSE(spamco.Matches(bogus));
+
+ bogus.locality_name = "";
+ bogus.organization_unit_names.push_back("Q Division");
+ EXPECT_FALSE(bogus.Matches(spamco));
+ EXPECT_FALSE(spamco.Matches(bogus));
+}
+#endif
+
+#if (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_WIN)
+TEST(X509TypesTest, ParseDNVerisign) {
+ CertPrincipal verisign;
+ EXPECT_TRUE(verisign.ParseDistinguishedName(VerisignDN, sizeof(VerisignDN)));
+ EXPECT_EQ("", verisign.common_name);
+ EXPECT_EQ("US", verisign.country_name);
+ ASSERT_EQ(1U, verisign.organization_names.size());
+ EXPECT_EQ("VeriSign, Inc.", verisign.organization_names[0]);
+ ASSERT_EQ(1U, verisign.organization_unit_names.size());
+ EXPECT_EQ("Class 1 Public Primary Certification Authority",
+ verisign.organization_unit_names[0]);
+}
+
+TEST(X509TypesTest, ParseDNStartcom) {
+ CertPrincipal startcom;
+ EXPECT_TRUE(startcom.ParseDistinguishedName(StartComDN, sizeof(StartComDN)));
+ EXPECT_EQ("StartCom Certification Authority", startcom.common_name);
+ EXPECT_EQ("IL", startcom.country_name);
+ ASSERT_EQ(1U, startcom.organization_names.size());
+ EXPECT_EQ("StartCom Ltd.", startcom.organization_names[0]);
+ ASSERT_EQ(1U, startcom.organization_unit_names.size());
+ EXPECT_EQ("Secure Digital Certificate Signing",
+ startcom.organization_unit_names[0]);
+}
+
+TEST(X509TypesTest, ParseDNUserTrust) {
+ CertPrincipal usertrust;
+ EXPECT_TRUE(usertrust.ParseDistinguishedName(UserTrustDN,
+ sizeof(UserTrustDN)));
+ EXPECT_EQ("UTN-USERFirst-Client Authentication and Email",
+ usertrust.common_name);
+ EXPECT_EQ("US", usertrust.country_name);
+ EXPECT_EQ("UT", usertrust.state_or_province_name);
+ EXPECT_EQ("Salt Lake City", usertrust.locality_name);
+ ASSERT_EQ(1U, usertrust.organization_names.size());
+ EXPECT_EQ("The USERTRUST Network", usertrust.organization_names[0]);
+ ASSERT_EQ(1U, usertrust.organization_unit_names.size());
+ EXPECT_EQ("http://www.usertrust.com",
+ usertrust.organization_unit_names[0]);
+}
+
+TEST(X509TypesTest, ParseDNTurkTrust) {
+ // Note: This tests parsing UTF8STRINGs.
+ CertPrincipal turktrust;
+ EXPECT_TRUE(turktrust.ParseDistinguishedName(TurkTrustDN,
+ sizeof(TurkTrustDN)));
+ EXPECT_EQ("TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı",
+ turktrust.common_name);
+ EXPECT_EQ("TR", turktrust.country_name);
+ EXPECT_EQ("Ankara", turktrust.locality_name);
+ ASSERT_EQ(1U, turktrust.organization_names.size());
+ EXPECT_EQ("TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005",
+ turktrust.organization_names[0]);
+}
+
+TEST(X509TypesTest, ParseDNATrust) {
+ // Note: This tests parsing 16-bit BMPSTRINGs.
+ CertPrincipal atrust;
+ EXPECT_TRUE(atrust.ParseDistinguishedName(ATrustQual01DN,
+ sizeof(ATrustQual01DN)));
+ EXPECT_EQ("A-Trust-Qual-01",
+ atrust.common_name);
+ EXPECT_EQ("AT", atrust.country_name);
+ ASSERT_EQ(1U, atrust.organization_names.size());
+ EXPECT_EQ("A-Trust Ges. für Sicherheitssysteme im elektr. Datenverkehr GmbH",
+ atrust.organization_names[0]);
+ ASSERT_EQ(1U, atrust.organization_unit_names.size());
+ EXPECT_EQ("A-Trust-Qual-01",
+ atrust.organization_unit_names[0]);
+}
+
+TEST(X509TypesTest, ParseDNEntrust) {
+ // Note: This tests parsing T61STRINGs and fields with multiple values.
+ CertPrincipal entrust;
+ EXPECT_TRUE(entrust.ParseDistinguishedName(EntrustDN,
+ sizeof(EntrustDN)));
+ EXPECT_EQ("Entrust.net Certification Authority (2048)",
+ entrust.common_name);
+ EXPECT_EQ("", entrust.country_name);
+ ASSERT_EQ(1U, entrust.organization_names.size());
+ EXPECT_EQ("Entrust.net",
+ entrust.organization_names[0]);
+ ASSERT_EQ(2U, entrust.organization_unit_names.size());
+ EXPECT_EQ("www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)",
+ entrust.organization_unit_names[0]);
+ EXPECT_EQ("(c) 1999 Entrust.net Limited",
+ entrust.organization_unit_names[1]);
+}
+#endif
+
+const struct CertDateTestData {
+ CertDateFormat format;
+ const char* date_string;
+ bool is_valid;
+ base::Time::Exploded expected_result;
+} kCertDateTimeData[] = {
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "120101000000Z",
+ true,
+ { 2012, 1, 0, 1, 0, 0, 0 } },
+ { CERT_DATE_FORMAT_GENERALIZED_TIME,
+ "20120101000000Z",
+ true,
+ { 2012, 1, 0, 1, 0, 0, 0 } },
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "490101000000Z",
+ true,
+ { 2049, 1, 0, 1, 0, 0, 0 } },
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "500101000000Z",
+ true,
+ { 1950, 1, 0, 1, 0, 0, 0 } },
+ { CERT_DATE_FORMAT_GENERALIZED_TIME,
+ "19500101000000Z",
+ true,
+ { 1950, 1, 0, 1, 0, 0, 0 } },
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "AB0101000000Z",
+ false,
+ { 0 } },
+ { CERT_DATE_FORMAT_GENERALIZED_TIME,
+ "19AB0101000000Z",
+ false,
+ { 0 } },
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "",
+ false,
+ { 0 } },
+ { CERT_DATE_FORMAT_UTC_TIME,
+ "A",
+ false,
+ { 0 } },
+ { CERT_DATE_FORMAT_GENERALIZED_TIME,
+ "20121301000000Z",
+ false,
+ { 0 } },
+ { CERT_DATE_FORMAT_GENERALIZED_TIME,
+ "20120101123000Z",
+ true,
+ { 2012, 1, 0, 1, 12, 30, 0 } },
+};
+
+// GTest pretty printer.
+void PrintTo(const CertDateTestData& data, std::ostream* os) {
+ *os << " format: " << data.format
+ << "; date string: " << base::StringPiece(data.date_string)
+ << "; valid: " << data.is_valid
+ << "; expected date: "
+ << (data.is_valid ?
+ base::Time::FromUTCExploded(data.expected_result)
+ .ToInternalValue() :
+ 0U);
+}
+
+class X509CertTypesDateTest : public testing::TestWithParam<CertDateTestData> {
+ public:
+ virtual ~X509CertTypesDateTest() {}
+ virtual void SetUp() {
+ test_data_ = GetParam();
+ }
+
+ protected:
+ CertDateTestData test_data_;
+};
+
+TEST_P(X509CertTypesDateTest, Parse) {
+ base::Time parsed_date;
+ bool parsed = ParseCertificateDate(
+ test_data_.date_string, test_data_.format, &parsed_date);
+ EXPECT_EQ(test_data_.is_valid, parsed);
+ if (!test_data_.is_valid)
+ return;
+ // Convert the expected value to a base::Time(). This ensures that systems
+ // systems that only support 32-bit times will pass the tests, by ensuring at
+ // least that the times have the same truncating behaviour.
+ // Note: Compared as internal values so that mismatches can be cleanly
+ // printed by GTest (eg: without PrintTo overrides).
+ EXPECT_EQ(base::Time::FromUTCExploded(test_data_.expected_result)
+ .ToInternalValue(),
+ parsed_date.ToInternalValue());
+}
+INSTANTIATE_TEST_CASE_P(,
+ X509CertTypesDateTest,
+ testing::ValuesIn(kCertDateTimeData));
+
+} // namespace
+
+} // namespace net