From ceab2087c000905c9b88f18723b0e5ef3bd29abe Mon Sep 17 00:00:00 2001 From: Sergey Kazmin Date: Mon, 30 Sep 2024 15:12:28 +0300 Subject: [PATCH] test impl --- tests/libgit2/online/customcert.c | 33 ++++++++++++++++++++++++++++- tests/resources/self-signed.pem.raw | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/resources/self-signed.pem.raw diff --git a/tests/libgit2/online/customcert.c b/tests/libgit2/online/customcert.c index 7932a9e68..d25b6282b 100644 --- a/tests/libgit2/online/customcert.c +++ b/tests/libgit2/online/customcert.c @@ -1,3 +1,4 @@ +#include "clar.h" #include "clar_libgit2.h" #include "path.h" @@ -6,6 +7,8 @@ #include "remote.h" #include "futils.h" #include "refs.h" +#include "str.h" +#include "streams/openssl.h" /* * Certificate one is in the `certs` folder; certificate two is in the @@ -17,6 +20,9 @@ #define CUSTOM_CERT_TWO_URL "https://test.libgit2.org:2443/anonymous/test.git" #define CUSTOM_CERT_TWO_FILE "self-signed.pem" +#define CUSTOM_CERT_THREE_URL "https://test.libgit2.org:3443/anonymous/test.git" +#define CUSTOM_CERT_THREE_FILE "self-signed.pem.raw" + #if (GIT_OPENSSL || GIT_MBEDTLS) static git_repository *g_repo; static int initialized = false; @@ -28,22 +34,38 @@ void test_online_customcert__initialize(void) g_repo = NULL; if (!initialized) { - git_str path = GIT_STR_INIT, file = GIT_STR_INIT; + git_str path = GIT_STR_INIT, file = GIT_STR_INIT, raw_file = GIT_STR_INIT, raw_file_buf = GIT_STR_INIT, raw_cert = GIT_STR_INIT; char cwd[GIT_PATH_MAX]; + const unsigned char* raw_cert_bytes = NULL; + X509* x509_cert = NULL; cl_fixture_sandbox(CUSTOM_CERT_ONE_PATH); cl_fixture_sandbox(CUSTOM_CERT_TWO_FILE); + cl_fixture_sandbox(CUSTOM_CERT_THREE_FILE); cl_must_pass(p_getcwd(cwd, GIT_PATH_MAX)); cl_git_pass(git_str_joinpath(&path, cwd, CUSTOM_CERT_ONE_PATH)); cl_git_pass(git_str_joinpath(&file, cwd, CUSTOM_CERT_TWO_FILE)); + cl_git_pass(git_str_joinpath(&raw_file, cwd, CUSTOM_CERT_THREE_FILE)); cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, file.ptr, path.ptr)); + +#if (GIT_OPENSSL) + cl_git_pass(git_futils_readbuffer(&raw_file_buf, git_str_cstr(&raw_file))); + cl_git_pass(git_str_decode_base64(&raw_cert, git_str_cstr(&raw_file_buf), git_str_len(&raw_file_buf))); + + raw_cert_bytes = (const unsigned char*)git_str_cstr(&raw_cert); + x509_cert = d2i_X509(NULL, &raw_cert_bytes, git_str_len(&raw_cert)); + cl_git_pass(git_libgit2_opts(GIT_OPT_ADD_SSL_X509_CERT, x509_cert)); + X509_free(x509_cert); +#endif + initialized = true; git_str_dispose(&file); git_str_dispose(&path); + git_str_dispose(&raw_file); } #endif } @@ -59,6 +81,7 @@ void test_online_customcert__cleanup(void) cl_fixture_cleanup("./cloned"); cl_fixture_cleanup(CUSTOM_CERT_ONE_PATH); cl_fixture_cleanup(CUSTOM_CERT_TWO_FILE); + cl_fixture_cleanup(CUSTOM_CERT_THREE_FILE); #endif } @@ -77,3 +100,11 @@ void test_online_customcert__path(void) cl_assert(git_fs_path_exists("./cloned/master.txt")); #endif } + +void test_online_customcert__raw_x509(void) +{ +#if (GIT_OPENSSL) + cl_git_pass(git_clone(&g_repo, CUSTOM_CERT_THREE_URL, "./cloned", NULL)); + cl_assert(git_fs_path_exists("./cloned/master.txt")); +#endif +} diff --git a/tests/resources/self-signed.pem.raw b/tests/resources/self-signed.pem.raw new file mode 100644 index 000000000..d16446ba0 --- /dev/null +++ b/tests/resources/self-signed.pem.raw @@ -0,0 +1 @@ +MIIDUzCCAjsCFAb11im6DYQyGJ0GNQCIehXtegq6MA0GCSqGSIb3DQEBCwUAMGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRIwEAYDVQQHDAlDYW1icmlkZ2UxEDAOBgNVBAoMB2xpYmdpdDIxGTAXBgNVBAMMEHRlc3QubGliZ2l0Mi5vcmcwHhcNMjEwODMwMDAyMTQyWhcNMzEwODI4MDAyMTQyWjBmMQswCQYDVQQGEwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czESMBAGA1UEBwwJQ2FtYnJpZGdlMRAwDgYDVQQKDAdsaWJnaXQyMRkwFwYDVQQDDBB0ZXN0LmxpYmdpdDIub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtqe6b1vnMni+z8Z+a2bGtykIITvBged15rn+0qG6Fz+sn9bYG+ceFupztFfoN3cVpUgQDBTzr3CaAx036BlV0z8iCrG0Oh/XGL+9TITQLumEe4iGi8NoMSujBAyXPSNgmpzDmCTGrNFfmq3HzUtO8t3xi8OT7d9qCVjFimLvZbgnfHGQ38xvt1XyPgYIVqDQczmMEZ5BdYWB0A1VmnWuP2dHBgjwPEC3HwMmm1+PL0VoPTdvE5Su092Qdt8QsiA56466DQyll1d/omnOJfrK7z0NOnfDmnDpARSTy6vDofEAYUQoc3dyvBUk8IIzv2UDcR7fTVvYqseQReIOTEnXmQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBmUEq+JhwWTbB5ODGOKrMG1fKJ+sf6ZH6Mc4BgLEcdoi/nOTfPuw+ols72LuhH7NKaEcqxWev0jGF0WKqMcM8AGVbywZJ3mBWosKdh6rAGFNkikW4TzhjtDfFbMR45Didl28Be7ieHQL4CQ0Lse3RMOxp250WpiEYVW2hIKMwIqOLKGShVD7lI+eHlv+QSH4yOYKHfRHve8s82Tac5OXinc8CJm9ySOtkOMfLgfkHtHdFBnV6OVbf4p/596MfMXdwT/bBxT6WPkDGc1AYhoDlmLFTpRgHIDCSK2wgV+qHppl7Kn+p3mFQ9sW/1IaRd+jNZOrgZ8Uu5tJ00OaqR/LVG \ No newline at end of file