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

Unified Diff: net/cert/x509_util_ios_and_mac_unittest.cc

Issue 2864133002: Convert iOS to use X509CertificateBytes. (Closed)
Patch Set: static_cast, more unittest Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/cert/x509_util_ios_and_mac.cc ('k') | net/cert/x509_util_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/cert/x509_util_ios_and_mac_unittest.cc
diff --git a/net/cert/x509_util_ios_and_mac_unittest.cc b/net/cert/x509_util_ios_and_mac_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bab29235c7690be5c31d48fe2788cdb7c51c6170
--- /dev/null
+++ b/net/cert/x509_util_ios_and_mac_unittest.cc
@@ -0,0 +1,152 @@
+// Copyright 2017 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_util_ios_and_mac.h"
+
+#include "net/cert/x509_certificate.h"
+#include "net/test/cert_test_util.h"
+#include "net/test/test_data_directory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if defined(OS_IOS)
+#include "net/cert/x509_util_ios.h"
+#else
+#include "net/cert/x509_util_mac.h"
+#endif
+
+namespace net {
+
+namespace x509_util {
+
+namespace {
+
+std::string BytesForSecCert(SecCertificateRef sec_cert) {
+ std::string result;
+ base::ScopedCFTypeRef<CFDataRef> der_data(SecCertificateCopyData(sec_cert));
+ if (!der_data) {
+ ADD_FAILURE();
+ return result;
+ }
+ result.assign(reinterpret_cast<const char*>(CFDataGetBytePtr(der_data)),
+ CFDataGetLength(der_data));
+ return result;
+}
+
+std::string BytesForSecCert(const void* sec_cert) {
+ return BytesForSecCert(
+ reinterpret_cast<SecCertificateRef>(const_cast<void*>(sec_cert)));
+}
+
+std::string BytesForX509CertHandle(X509Certificate::OSCertHandle handle) {
+ std::string result;
+ if (!X509Certificate::GetDEREncoded(handle, &result))
+ ADD_FAILURE();
+ return result;
+}
+
+std::string BytesForX509Cert(X509Certificate* cert) {
+ return BytesForX509CertHandle(cert->os_cert_handle());
+}
+
+} // namespace
+
+TEST(X509UtilTest, CreateSecCertificateArrayForX509Certificate) {
+ scoped_refptr<X509Certificate> cert = CreateCertificateChainFromFile(
+ GetTestCertsDirectory(), "multi-root-chain1.pem",
+ X509Certificate::FORMAT_PEM_CERT_SEQUENCE);
+ ASSERT_TRUE(cert);
+ EXPECT_EQ(3U, cert->GetIntermediateCertificates().size());
+
+ base::ScopedCFTypeRef<CFMutableArrayRef> sec_certs(
+ CreateSecCertificateArrayForX509Certificate(cert.get()));
+ ASSERT_TRUE(sec_certs);
+ ASSERT_EQ(4, CFArrayGetCount(sec_certs.get()));
+ for (int i = 0; i < 4; ++i)
+ ASSERT_TRUE(CFArrayGetValueAtIndex(sec_certs.get(), i));
+
+ EXPECT_EQ(BytesForX509Cert(cert.get()),
+ BytesForSecCert(CFArrayGetValueAtIndex(sec_certs.get(), 0)));
+ EXPECT_EQ(BytesForX509CertHandle(cert->GetIntermediateCertificates()[0]),
+ BytesForSecCert(CFArrayGetValueAtIndex(sec_certs.get(), 1)));
+ EXPECT_EQ(BytesForX509CertHandle(cert->GetIntermediateCertificates()[1]),
+ BytesForSecCert(CFArrayGetValueAtIndex(sec_certs.get(), 2)));
+ EXPECT_EQ(BytesForX509CertHandle(cert->GetIntermediateCertificates()[2]),
+ BytesForSecCert(CFArrayGetValueAtIndex(sec_certs.get(), 3)));
+}
+
+TEST(X509UtilTest,
+ CreateSecCertificateFromBytesAndCreateX509CertificateFromSecCertificate) {
+ CertificateList certs = CreateCertificateListFromFile(
+ GetTestCertsDirectory(), "multi-root-chain1.pem",
+ X509Certificate::FORMAT_PEM_CERT_SEQUENCE);
+ ASSERT_EQ(4u, certs.size());
+
+ std::string bytes_cert0 = BytesForX509CertHandle(certs[0]->os_cert_handle());
+ std::string bytes_cert1 = BytesForX509CertHandle(certs[1]->os_cert_handle());
+ std::string bytes_cert2 = BytesForX509CertHandle(certs[2]->os_cert_handle());
+ std::string bytes_cert3 = BytesForX509CertHandle(certs[3]->os_cert_handle());
+
+ base::ScopedCFTypeRef<SecCertificateRef> sec_cert0(
+ CreateSecCertificateFromBytes(
+ reinterpret_cast<const uint8_t*>(bytes_cert0.data()),
+ bytes_cert0.length()));
+ ASSERT_TRUE(sec_cert0);
+ EXPECT_EQ(bytes_cert0, BytesForSecCert(sec_cert0));
+
+ base::ScopedCFTypeRef<SecCertificateRef> sec_cert1(
+ CreateSecCertificateFromBytes(
+ reinterpret_cast<const uint8_t*>(bytes_cert1.data()),
+ bytes_cert1.length()));
+ ASSERT_TRUE(sec_cert1);
+ EXPECT_EQ(bytes_cert1, BytesForSecCert(sec_cert1));
+
+ base::ScopedCFTypeRef<SecCertificateRef> sec_cert2(
+ CreateSecCertificateFromX509Certificate(certs[2].get()));
+ ASSERT_TRUE(sec_cert2);
+ EXPECT_EQ(bytes_cert2, BytesForSecCert(sec_cert2));
+
+ base::ScopedCFTypeRef<SecCertificateRef> sec_cert3(
+ CreateSecCertificateFromX509Certificate(certs[3].get()));
+ ASSERT_TRUE(sec_cert3);
+ EXPECT_EQ(bytes_cert3, BytesForSecCert(sec_cert3));
+
+ scoped_refptr<X509Certificate> x509_cert_no_intermediates =
+ CreateX509CertificateFromSecCertificate(sec_cert0.get(), {});
+ ASSERT_TRUE(x509_cert_no_intermediates);
+ EXPECT_EQ(0U,
+ x509_cert_no_intermediates->GetIntermediateCertificates().size());
+ EXPECT_EQ(bytes_cert0, BytesForX509CertHandle(
+ x509_cert_no_intermediates->os_cert_handle()));
+
+ scoped_refptr<X509Certificate> x509_cert_one_intermediate =
+ CreateX509CertificateFromSecCertificate(sec_cert0.get(),
+ {sec_cert1.get()});
+ ASSERT_TRUE(x509_cert_one_intermediate);
+ EXPECT_EQ(bytes_cert0, BytesForX509CertHandle(
+ x509_cert_one_intermediate->os_cert_handle()));
+ ASSERT_EQ(1U,
+ x509_cert_one_intermediate->GetIntermediateCertificates().size());
+ EXPECT_EQ(bytes_cert1,
+ BytesForX509CertHandle(
+ x509_cert_one_intermediate->GetIntermediateCertificates()[0]));
+
+ scoped_refptr<X509Certificate> x509_cert_two_intermediates =
+ CreateX509CertificateFromSecCertificate(
+ sec_cert0.get(), {sec_cert1.get(), sec_cert2.get()});
+ ASSERT_TRUE(x509_cert_two_intermediates);
+ EXPECT_EQ(bytes_cert0, BytesForX509CertHandle(
+ x509_cert_two_intermediates->os_cert_handle()));
+ ASSERT_EQ(2U,
+ x509_cert_two_intermediates->GetIntermediateCertificates().size());
+ EXPECT_EQ(bytes_cert1,
+ BytesForX509CertHandle(
+ x509_cert_two_intermediates->GetIntermediateCertificates()[0]));
+ EXPECT_EQ(bytes_cert2,
+ BytesForX509CertHandle(
+ x509_cert_two_intermediates->GetIntermediateCertificates()[1]));
+}
+
+} // namespace x509_util
+
+} // namespace net
« no previous file with comments | « net/cert/x509_util_ios_and_mac.cc ('k') | net/cert/x509_util_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698