customcert.c 1.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
#include "clar_libgit2.h"

#include "path.h"
#include "git2/clone.h"
#include "git2/cred_helpers.h"
#include "remote.h"
#include "futils.h"
#include "refs.h"

/*
 * Certificate one is in the `certs` folder; certificate two is in the
 * `self-signed.pem` file.
 */
#define CUSTOM_CERT_ONE_URL "https://test.libgit2.org:1443/anonymous/test.git"
#define CUSTOM_CERT_ONE_PATH "certs"

#define CUSTOM_CERT_TWO_URL "https://test.libgit2.org:2443/anonymous/test.git"
#define CUSTOM_CERT_TWO_FILE "self-signed.pem"

#if (GIT_OPENSSL || GIT_MBEDTLS)
static git_repository *g_repo;
static int initialized = false;
#endif

void test_online_customcert__initialize(void)
{
#if (GIT_OPENSSL || GIT_MBEDTLS)
	g_repo = NULL;

	if (!initialized) {
		git_buf path = GIT_BUF_INIT, file = GIT_BUF_INIT;
		char cwd[GIT_PATH_MAX];

		cl_fixture_sandbox(CUSTOM_CERT_ONE_PATH);
		cl_fixture_sandbox(CUSTOM_CERT_TWO_FILE);

		cl_must_pass(p_getcwd(cwd, GIT_PATH_MAX));
		cl_git_pass(git_buf_joinpath(&path, cwd, CUSTOM_CERT_ONE_PATH));
		cl_git_pass(git_buf_joinpath(&file, cwd, CUSTOM_CERT_TWO_FILE));

		cl_git_pass(git_libgit2_opts(GIT_OPT_SET_SSL_CERT_LOCATIONS,
		                             file.ptr, path.ptr));
		initialized = true;

		git_buf_dispose(&file);
		git_buf_dispose(&path);
	}
#endif
}

void test_online_customcert__cleanup(void)
{
#if (GIT_OPENSSL || GIT_MBEDTLS)
	if (g_repo) {
		git_repository_free(g_repo);
		g_repo = NULL;
	}

	cl_fixture_cleanup("./cloned");
	cl_fixture_cleanup(CUSTOM_CERT_ONE_PATH);
	cl_fixture_cleanup(CUSTOM_CERT_TWO_FILE);
#endif
}

void test_online_customcert__file(void)
{
#if (GIT_OPENSSL || GIT_MBEDTLS)
	cl_git_pass(git_clone(&g_repo, CUSTOM_CERT_ONE_URL, "./cloned", NULL));
	cl_assert(git_path_exists("./cloned/master.txt"));
#endif
}

void test_online_customcert__path(void)
{
#if (GIT_OPENSSL || GIT_MBEDTLS)
	cl_git_pass(git_clone(&g_repo, CUSTOM_CERT_TWO_URL, "./cloned", NULL));
	cl_assert(git_path_exists("./cloned/master.txt"));
#endif
}