LCOV - code coverage report
Current view: top level - tests - test_ssl.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 15 18 83.3 %
Date: 2025-04-29 15:56:08 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // SPDX-FileCopyrightText: 2025 Pairinteraction Developers
       2             : // SPDX-License-Identifier: LGPL-3.0-or-later
       3             : 
       4             : #include <filesystem>
       5             : #include <fstream>
       6             : #include <httplib.h>
       7             : 
       8           1 : int main(int /*argc*/, char ** /*argv*/) {
       9             :     // Store the certificate
      10             :     const std::string cert{R"(Comodo AAA Services root
      11             : ========================
      12             : -----BEGIN CERTIFICATE-----
      13             : MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
      14             : R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
      15             : TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
      16             : MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
      17             : c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
      18             : BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
      19             : ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
      20             : C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
      21             : i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
      22             : Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
      23             : Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
      24             : Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
      25             : BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
      26             : cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
      27             : LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
      28             : 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
      29             : Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
      30             : 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
      31             : 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
      32           1 : -----END CERTIFICATE-----)"};
      33             : 
      34             :     std::filesystem::path cert_path =
      35           1 :         std::filesystem::temp_directory_path() / "pairinteraction-test-ca-bundle.crt";
      36           1 :     if (std::filesystem::exists(cert_path)) {
      37           0 :         std::filesystem::remove(cert_path);
      38             :     }
      39           1 :     std::ofstream out(cert_path);
      40           1 :     if (!out) {
      41           0 :         throw std::runtime_error("Failed to create certificate file at " + cert_path.string());
      42             :     }
      43           1 :     out << cert;
      44           1 :     out.close();
      45             : 
      46             :     // Use the certificate to make a request
      47           1 :     httplib::SSLClient cli("api.github.com");
      48           1 :     cli.set_ca_cert_path(cert_path.string());
      49           1 :     const auto res = cli.Get("/rate_limit");
      50             : 
      51             :     // Clean up
      52           1 :     std::filesystem::remove(cert_path);
      53             : 
      54             :     // Check the response
      55           1 :     if (!res || res->status != 200) {
      56           0 :         throw std::runtime_error("Error: " + httplib::to_string(res.error()));
      57             :     }
      58           1 :     return 0;
      59           1 : }

Generated by: LCOV version 1.16