Index: rtc_base/opensslidentity_unittest.cc |
diff --git a/rtc_base/opensslidentity_unittest.cc b/rtc_base/opensslidentity_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..05da9c3a60d9b896b6b0e2f36f04a5e2b72be0bf |
--- /dev/null |
+++ b/rtc_base/opensslidentity_unittest.cc |
@@ -0,0 +1,146 @@ |
+/* |
+ * Copyright 2017 The WebRTC Project Authors. All rights reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#include "rtc_base/opensslidentity.h" |
+#include "rtc_base/gunit.h" |
+#include "rtc_base/openssl.h" |
+#include "rtc_base/ptr_util.h" |
+ |
+using rtc::OpenSSLCertificate; |
+using rtc::SSLCertChain; |
+ |
+namespace { |
+const char kCert1[] = |
+ "-----BEGIN CERTIFICATE-----\n" |
+ "MIIB8TCCAZugAwIBAgIJAL9GDdi6iSRZMA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV\n" |
+ "BAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" |
+ "aWRnaXRzIFB0eSBMdGQxDTALBgNVBAMMBFRFU1QwHhcNMTcwOTI3MTgwMzQ5WhcN\n" |
+ "MjcwOTI1MTgwMzQ5WjBUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKU29tZS1TdGF0\n" |
+ "ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQ0wCwYDVQQDDARU\n" |
+ "RVNUMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMgT+ilZ4v5mKjZ+JWmNjPJZ4C6o\n" |
+ "T3y9+/0SRRW6+hlDrVcxOcmOsZlTDLotBBBrN2P0faUA/A4suPvHVQJVG40CAwEA\n" |
+ "AaNQME4wHQYDVR0OBBYEFM1kyOTdSRaP/1WI+IlNtsBE/B4+MB8GA1UdIwQYMBaA\n" |
+ "FM1kyOTdSRaP/1WI+IlNtsBE/B4+MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL\n" |
+ "BQADQQABvqSHEQCo6vgZCJj6sCoDGe0i0eKeIcvKFxED8V0XideZYJe1631sjTf6\n" |
+ "rEMVuoAszWVBiIRlhfL2Ng7d2lFs\n" |
+ "-----END CERTIFICATE-----\n"; |
+const char kCert2[] = |
+ "-----BEGIN CERTIFICATE-----\n" |
+ "MIIB8zCCAZ2gAwIBAgIJAM/U3cfUNJArMA0GCSqGSIb3DQEBCwUAMFUxCzAJBgNV\n" |
+ "BAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" |
+ "aWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMMBVRFU1QyMB4XDTE3MDkyNzE4MDQxOFoX\n" |
+ "DTI3MDkyNTE4MDQxOFowVTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUtU3Rh\n" |
+ "dGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEOMAwGA1UEAwwF\n" |
+ "VEVTVDIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAxBhQ0F+T8ykg8qve7un4wso3\n" |
+ "8xWs1sCCIVaXmEbBL1boY33wFwcu+/e8ux+4QhMzoivd+1MH2vlKEyZ+06uNMwID\n" |
+ "AQABo1AwTjAdBgNVHQ4EFgQUsIfPUvDOqAbTVVRhaFvOiDz0NAgwHwYDVR0jBBgw\n" |
+ "FoAUsIfPUvDOqAbTVVRhaFvOiDz0NAgwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B\n" |
+ "AQsFAANBAKjdk11ufKiL4glzBKDpO3VGUGTbvSgftgD53DYbFzFKpxlXosO9BClR\n" |
+ "bblOKyeuExziGR0hAQZVgiZFL+66gYw=\n" |
+ "-----END CERTIFICATE-----\n"; |
+ |
+const char kCert3[] = |
+ "-----BEGIN CERTIFICATE-----\n" |
+ "MIIEUjCCAjqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBljELMAkGA1UEBhMCVVMx\n" |
+ "EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFDAS\n" |
+ "BgNVBAoMC0dvb2dsZSwgSW5jMQwwCgYDVQQLDANHVFAxFzAVBgNVBAMMDnRlbGVw\n" |
+ "aG9ueS5nb29nMR0wGwYJKoZIhvcNAQkBFg5ndHBAZ29vZ2xlLmNvbTAeFw0xNzA5\n" |
+ "MjYwNDA5MDNaFw0yMDA2MjIwNDA5MDNaMGQxCzAJBgNVBAYTAlVTMQswCQYDVQQI\n" |
+ "DAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEXMBUGA1UECgwOdGVsZXBob255\n" |
+ "Lmdvb2cxFzAVBgNVBAMMDnRlbGVwaG9ueS5nb29nMIGfMA0GCSqGSIb3DQEBAQUA\n" |
+ "A4GNADCBiQKBgQDJXWeeU1v1+wlqkVobzI3aN7Uh2iVQA9YCdq5suuabtiD/qoOD\n" |
+ "NKpmQqsx7WZGGWSZTDFEBaUpvIK7Hb+nzRqk6iioPCFOFuarm6GxO1xVneImMuE6\n" |
+ "tuWb3YZPr+ikChJbl11y5UcSbg0QsbeUc+jHl5umNvrL85Y+z8SP0rxbBwIDAQAB\n" |
+ "o2AwXjAdBgNVHQ4EFgQU7tdZobqlN8R8V72FQnRxmqq8tKswHwYDVR0jBBgwFoAU\n" |
+ "5GgKMUtcxkQ2dJrtNR5YOlIAPDswDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMC\n" |
+ "AQYwDQYJKoZIhvcNAQELBQADggIBADObh9Z+z14FmP9zSenhFtq7hFnmNrSkklk8\n" |
+ "eyYWXKfOuIriEQQBZsz76ZcnzStih8Rj+yQ0AXydk4fJ5LOwC2cUqQBar17g6Pd2\n" |
+ "8g4SIL4azR9WvtiSvpuGlwp25b+yunaacDne6ebnf/MUiiKT5w61Xo3cEPVfl38e\n" |
+ "/Up2l0bioid5enUTmg6LY6RxDO6tnZQkz3XD+nNSwT4ehtkqFpHYWjErj0BbkDM2\n" |
+ "hiVc/JsYOZn3DmuOlHVHU6sKwqh3JEyvHO/d7DGzMGWHpHwv2mCTJq6l/sR95Tc2\n" |
+ "GaQZgGDVNs9pdEouJCDm9e/PbQWRYhnat82PTkXx/6mDAAwdZlIi/pACzq8K4p7e\n" |
+ "6hF0t8uKGnXJubHPXxlnJU6yxZ0yWmivAGjwWK4ur832gKlho4jeMDhiI/T3QPpl\n" |
+ "iMNsIvxRhdD+GxJkQP1ezayw8s+Uc9KwKglrkBSRRDLCJUfPOvMmXLUDSTMX7kp4\n" |
+ "/Ak1CA8dVLJIlfEjLBUuvAttlP7+7lsKNgxAjCxZkWLXIyGULzNPQwVWkGfCbrQs\n" |
+ "XyMvSbFsSIb7blV7eLlmf9a+2RprUUkc2ALXLLCI9YQXmxm2beBfMyNmmebwBJzT\n" |
+ "B0OR+5pFFNTJPoNlqpdrDsGrDu7JlUtk0ZLZzYyKXbgy2qXxfd4OWzXXjxpLMszZ\n" |
+ "LDIpOAkj\n" |
+ "-----END CERTIFICATE-----\n"; |
+} // namespace |
+ |
+class OpenSSLCertificateTest : public testing::Test { |
+ public: |
+ OpenSSLCertificateTest() {} |
+ ~OpenSSLCertificateTest() {} |
+ |
+ void SetUp() override { |
+ leaf_cert = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(kCert3)); |
+ int_cert1 = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(kCert1)); |
+ int_cert2 = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(kCert2)); |
+ x509s = sk_X509_new_null(); |
+ sk_X509_push(x509s, leaf_cert->x509()); |
+ sk_X509_push(x509s, int_cert1->x509()); |
+ sk_X509_push(x509s, int_cert2->x509()); |
+ } |
+ std::unique_ptr<OpenSSLCertificate> leaf_cert; |
+ std::unique_ptr<OpenSSLCertificate> int_cert1; |
+ std::unique_ptr<OpenSSLCertificate> int_cert2; |
+ |
+ STACK_OF(X509) * x509s; |
+}; |
+ |
+TEST_F(OpenSSLCertificateTest, OneCert) { |
+ auto leaf_cert = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(kCert3)); |
+ std::unique_ptr<SSLCertChain> chain = leaf_cert->GetChain(); |
+ EXPECT_EQ(chain, nullptr); |
+} |
+ |
+TEST_F(OpenSSLCertificateTest, ThreeCert) { |
+ auto certificate = |
+ rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s)); |
+ std::unique_ptr<SSLCertChain> chain = certificate->GetChain(); |
+ ASSERT_EQ(chain->GetSize(), (size_t)2); |
+ ASSERT_EQ(chain->Get(0).ToPEMString(), kCert1); |
+ ASSERT_EQ(chain->Get(1).ToPEMString(), kCert2); |
+} |
+ |
+TEST_F(OpenSSLCertificateTest, CompareCert) { |
+ auto cert1 = |
+ rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s)); |
+ auto cert2 = |
+ rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s)); |
+ auto cert3 = rtc::WrapUnique<OpenSSLCertificate>( |
+ new OpenSSLCertificate(sk_X509_value(x509s, 0))); |
+ ASSERT_TRUE(*cert1 == *cert2); |
+ ASSERT_TRUE(*cert1 != *cert3); |
+} |
+ |
+TEST_F(OpenSSLCertificateTest, ToPEMString) { |
+ auto cert1 = |
+ rtc::WrapUnique<OpenSSLCertificate>(new OpenSSLCertificate(x509s)); |
+ auto cert2 = rtc::WrapUnique<OpenSSLCertificate>( |
+ new OpenSSLCertificate(sk_X509_value(x509s, 0))); |
+ ASSERT_EQ(cert1->ToPEMString(), std::string(kCert3) + kCert1 + kCert2); |
+ ASSERT_EQ(cert2->ToPEMString(), kCert3); |
+} |
+ |
+TEST_F(OpenSSLCertificateTest, FromPEMString) { |
+ auto cert1 = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(kCert1)); |
+ auto chain_cert2 = rtc::WrapUnique<OpenSSLCertificate>( |
+ OpenSSLCertificate::FromPEMString(std::string(kCert1) + kCert2)); |
+ ASSERT_EQ(cert1->ToPEMString(), kCert1); |
+ ASSERT_EQ(chain_cert2->GetChain()->GetSize(), (size_t)1); |
+ ASSERT_EQ(chain_cert2->GetChain()->Get(0).ToPEMString(), kCert2); |
+} |