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

Side by Side Diff: rtc_base/opensslidentity_unittest.cc

Issue 3010363002: Implement GetChain for OpenSSLCertificate.
Patch Set: Adding unit tests and clean up. Created 3 years, 2 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 | « rtc_base/opensslidentity.cc ('k') | rtc_base/opensslstreamadapter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2017 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "rtc_base/opensslidentity.h"
12 #include "rtc_base/gunit.h"
13 #include "rtc_base/openssl.h"
14 #include "rtc_base/ptr_util.h"
15
16 using rtc::OpenSSLCertificate;
17 using rtc::SSLCertChain;
18
19 namespace {
20 const char kCert1[] =
21 "-----BEGIN CERTIFICATE-----\n"
22 "MIIB8TCCAZugAwIBAgIJAL9GDdi6iSRZMA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV\n"
23 "BAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n"
24 "aWRnaXRzIFB0eSBMdGQxDTALBgNVBAMMBFRFU1QwHhcNMTcwOTI3MTgwMzQ5WhcN\n"
25 "MjcwOTI1MTgwMzQ5WjBUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKU29tZS1TdGF0\n"
26 "ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYDVQQDDARU\n"
27 "RVNUMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMgT+ilZ4v5mKjZ+JWmNjPJZ4C6o\n"
28 "T3y9+/0SRRW6+hlDrVcxOcmOsZlTDLotBBBrN2P0faUA/A4suPvHVQJVG40CAwEA\n"
29 "AaNQME4wHQYDVR0OBBYEFM1kyOTdSRaP/1WI+IlNtsBE/B4+MB8GA1UdIwQYMBaA\n"
30 "FM1kyOTdSRaP/1WI+IlNtsBE/B4+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL\n"
31 "BQADQQABvqSHEQCo6vgZCJj6sCoDGe0i0eKeIcvKFxED8V0XideZYJe1631sjTf6\n"
32 "rEMVuoAszWVBiIRlhfL2Ng7d2lFs\n"
33 "-----END CERTIFICATE-----\n";
34 const char kCert2[] =
35 "-----BEGIN CERTIFICATE-----\n"
36 "MIIB8zCCAZ2gAwIBAgIJAM/U3cfUNJArMA0GCSqGSIb3DQEBCwUAMFUxCzAJBgNV\n"
37 "BAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n"
38 "aWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMMBVRFU1QyMB4XDTE3MDkyNzE4MDQxOFoX\n"
39 "DTI3MDkyNTE4MDQxOFowVTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUtU3Rh\n"
40 "dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEOMAwGA1UEAwwF\n"
41 "VEVTVDIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxBhQ0F+T8ykg8qve7un4wso3\n"
42 "8xWs1sCCIVaXmEbBL1boY33wFwcu+/e8ux+4QhMzoivd+1MH2vlKEyZ+06uNMwID\n"
43 "AQABo1AwTjAdBgNVHQ4EFgQUsIfPUvDOqAbTVVRhaFvOiDz0NAgwHwYDVR0jBBgw\n"
44 "FoAUsIfPUvDOqAbTVVRhaFvOiDz0NAgwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B\n"
45 "AQsFAANBAKjdk11ufKiL4glzBKDpO3VGUGTbvSgftgD53DYbFzFKpxlXosO9BClR\n"
46 "bblOKyeuExziGR0hAQZVgiZFL+66gYw=\n"
47 "-----END CERTIFICATE-----\n";
48
49 const char kCert3[] =
50 "-----BEGIN CERTIFICATE-----\n"
51 "MIIEUjCCAjqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBljELMAkGA1UEBhMCVVMx\n"
52 "EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFDAS\n"
53 "BgNVBAoMC0dvb2dsZSwgSW5jMQwwCgYDVQQLDANHVFAxFzAVBgNVBAMMDnRlbGVw\n"
54 "aG9ueS5nb29nMR0wGwYJKoZIhvcNAQkBFg5ndHBAZ29vZ2xlLmNvbTAeFw0xNzA5\n"
55 "MjYwNDA5MDNaFw0yMDA2MjIwNDA5MDNaMGQxCzAJBgNVBAYTAlVTMQswCQYDVQQI\n"
56 "DAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEXMBUGA1UECgwOdGVsZXBob255\n"
57 "Lmdvb2cxFzAVBgNVBAMMDnRlbGVwaG9ueS5nb29nMIGfMA0GCSqGSIb3DQEBAQUA\n"
58 "A4GNADCBiQKBgQDJXWeeU1v1+wlqkVobzI3aN7Uh2iVQA9YCdq5suuabtiD/qoOD\n"
59 "NKpmQqsx7WZGGWSZTDFEBaUpvIK7Hb+nzRqk6iioPCFOFuarm6GxO1xVneImMuE6\n"
60 "tuWb3YZPr+ikChJbl11y5UcSbg0QsbeUc+jHl5umNvrL85Y+z8SP0rxbBwIDAQAB\n"
61 "o2AwXjAdBgNVHQ4EFgQU7tdZobqlN8R8V72FQnRxmqq8tKswHwYDVR0jBBgwFoAU\n"
62 "5GgKMUtcxkQ2dJrtNR5YOlIAPDswDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMC\n"
63 "AQYwDQYJKoZIhvcNAQELBQADggIBADObh9Z+z14FmP9zSenhFtq7hFnmNrSkklk8\n"
64 "eyYWXKfOuIriEQQBZsz76ZcnzStih8Rj+yQ0AXydk4fJ5LOwC2cUqQBar17g6Pd2\n"
65 "8g4SIL4azR9WvtiSvpuGlwp25b+yunaacDne6ebnf/MUiiKT5w61Xo3cEPVfl38e\n"
66 "/Up2l0bioid5enUTmg6LY6RxDO6tnZQkz3XD+nNSwT4ehtkqFpHYWjErj0BbkDM2\n"
67 "hiVc/JsYOZn3DmuOlHVHU6sKwqh3JEyvHO/d7DGzMGWHpHwv2mCTJq6l/sR95Tc2\n"
68 "GaQZgGDVNs9pdEouJCDm9e/PbQWRYhnat82PTkXx/6mDAAwdZlIi/pACzq8K4p7e\n"
69 "6hF0t8uKGnXJubHPXxlnJU6yxZ0yWmivAGjwWK4ur832gKlho4jeMDhiI/T3QPpl\n"
70 "iMNsIvxRhdD+GxJkQP1ezayw8s+Uc9KwKglrkBSRRDLCJUfPOvMmXLUDSTMX7kp4\n"
71 "/Ak1CA8dVLJIlfEjLBUuvAttlP7+7lsKNgxAjCxZkWLXIyGULzNPQwVWkGfCbrQs\n"
72 "XyMvSbFsSIb7blV7eLlmf9a+2RprUUkc2ALXLLCI9YQXmxm2beBfMyNmmebwBJzT\n"
73 "B0OR+5pFFNTJPoNlqpdrDsGrDu7JlUtk0ZLZzYyKXbgy2qXxfd4OWzXXjxpLMszZ\n"
74 "LDIpOAkj\n"
75 "-----END CERTIFICATE-----\n";
76 } // namespace
77
78 class OpenSSLCertificateTest : public testing::Test {
79 public:
80 OpenSSLCertificateTest() {}
81 ~OpenSSLCertificateTest() {}
82
83 void SetUp() override {
84 leaf_cert = rtc::WrapUnique<OpenSSLCertificate>(
85 OpenSSLCertificate::FromPEMString(kCert3));
86 int_cert1 = rtc::WrapUnique<OpenSSLCertificate>(
87 OpenSSLCertificate::FromPEMString(kCert1));
88 int_cert2 = rtc::WrapUnique<OpenSSLCertificate>(
89 OpenSSLCertificate::FromPEMString(kCert2));
90 x509s = sk_X509_new_null();
91 sk_X509_push(x509s, leaf_cert->x509());
92 sk_X509_push(x509s, int_cert1->x509());
93 sk_X509_push(x509s, int_cert2->x509());
94 }
95 std::unique_ptr<OpenSSLCertificate> leaf_cert;
96 std::unique_ptr<OpenSSLCertificate> int_cert1;
97 std::unique_ptr<OpenSSLCertificate> int_cert2;
98
99 STACK_OF(X509) * x509s;
100 };
101
102 TEST_F(OpenSSLCertificateTest, OneCert) {
103 auto leaf_cert = rtc::WrapUnique<OpenSSLCertificate>(
104 OpenSSLCertificate::FromPEMString(kCert3));
105 std::unique_ptr<SSLCertChain> chain = leaf_cert->GetChain();
106 EXPECT_EQ(chain, nullptr);
107 }
108
109 TEST_F(OpenSSLCertificateTest, ThreeCert) {
110 auto certificate =
111 rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s));
112 std::unique_ptr<SSLCertChain> chain = certificate->GetChain();
113 ASSERT_EQ(chain->GetSize(), (size_t)2);
114 ASSERT_EQ(chain->Get(0).ToPEMString(), kCert1);
115 ASSERT_EQ(chain->Get(1).ToPEMString(), kCert2);
116 }
117
118 TEST_F(OpenSSLCertificateTest, CompareCert) {
119 auto cert1 =
120 rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s));
121 auto cert2 =
122 rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s));
123 auto cert3 = rtc::WrapUnique<OpenSSLCertificate>(
124 new OpenSSLCertificate(sk_X509_value(x509s, 0)));
125 ASSERT_TRUE(*cert1 == *cert2);
126 ASSERT_TRUE(*cert1 != *cert3);
127 }
128
129 TEST_F(OpenSSLCertificateTest, ToPEMString) {
130 auto cert1 =
131 rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s));
132 auto cert2 = rtc::WrapUnique<OpenSSLCertificate>(
133 new OpenSSLCertificate(sk_X509_value(x509s, 0)));
134 ASSERT_EQ(cert1->ToPEMString(), std::string(kCert3) + kCert1 + kCert2);
135 ASSERT_EQ(cert2->ToPEMString(), kCert3);
136 }
137
138 TEST_F(OpenSSLCertificateTest, FromPEMString) {
139 auto cert1 = rtc::WrapUnique<OpenSSLCertificate>(
140 OpenSSLCertificate::FromPEMString(kCert1));
141 auto chain_cert2 = rtc::WrapUnique<OpenSSLCertificate>(
142 OpenSSLCertificate::FromPEMString(std::string(kCert1) + kCert2));
143 ASSERT_EQ(cert1->ToPEMString(), kCert1);
144 ASSERT_EQ(chain_cert2->GetChain()->GetSize(), (size_t)1);
145 ASSERT_EQ(chain_cert2->GetChain()->Get(0).ToPEMString(), kCert2);
146 }
OLDNEW
« no previous file with comments | « rtc_base/opensslidentity.cc ('k') | rtc_base/opensslstreamadapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698