mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 16:45:49 +00:00
120 lines
2.9 KiB
C
120 lines
2.9 KiB
C
#include "clar_libgit2.h"
|
|
#include "git2/sys/stream.h"
|
|
#include "streams/tls.h"
|
|
#include "streams/socket.h"
|
|
#include "stream.h"
|
|
|
|
static git_stream test_stream;
|
|
static int ctor_called;
|
|
|
|
void test_stream_registration__cleanup(void)
|
|
{
|
|
cl_git_pass(git_stream_register(GIT_STREAM_TLS | GIT_STREAM_STANDARD, NULL));
|
|
}
|
|
|
|
static int test_stream_init(git_stream **out, const char *host, const char *port)
|
|
{
|
|
GIT_UNUSED(host);
|
|
GIT_UNUSED(port);
|
|
|
|
ctor_called = 1;
|
|
*out = &test_stream;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int test_stream_wrap(git_stream **out, git_stream *in, const char *host)
|
|
{
|
|
GIT_UNUSED(in);
|
|
GIT_UNUSED(host);
|
|
|
|
ctor_called = 1;
|
|
*out = &test_stream;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void test_stream_registration__insecure(void)
|
|
{
|
|
git_stream *stream;
|
|
git_stream_registration registration = {0};
|
|
|
|
registration.version = 1;
|
|
registration.init = test_stream_init;
|
|
registration.wrap = test_stream_wrap;
|
|
|
|
ctor_called = 0;
|
|
cl_git_pass(git_stream_register(GIT_STREAM_STANDARD, ®istration));
|
|
cl_git_pass(git_socket_stream_new(&stream, "localhost", "80"));
|
|
cl_assert_equal_i(1, ctor_called);
|
|
cl_assert_equal_p(&test_stream, stream);
|
|
|
|
ctor_called = 0;
|
|
stream = NULL;
|
|
cl_git_pass(git_stream_register(GIT_STREAM_STANDARD, NULL));
|
|
cl_git_pass(git_socket_stream_new(&stream, "localhost", "80"));
|
|
|
|
cl_assert_equal_i(0, ctor_called);
|
|
cl_assert(&test_stream != stream);
|
|
|
|
git_stream_free(stream);
|
|
}
|
|
|
|
void test_stream_registration__tls(void)
|
|
{
|
|
git_stream *stream;
|
|
git_stream_registration registration = {0};
|
|
int error;
|
|
|
|
registration.version = 1;
|
|
registration.init = test_stream_init;
|
|
registration.wrap = test_stream_wrap;
|
|
|
|
ctor_called = 0;
|
|
cl_git_pass(git_stream_register(GIT_STREAM_TLS, ®istration));
|
|
cl_git_pass(git_tls_stream_new(&stream, "localhost", "443"));
|
|
cl_assert_equal_i(1, ctor_called);
|
|
cl_assert_equal_p(&test_stream, stream);
|
|
|
|
ctor_called = 0;
|
|
stream = NULL;
|
|
cl_git_pass(git_stream_register(GIT_STREAM_TLS, NULL));
|
|
error = git_tls_stream_new(&stream, "localhost", "443");
|
|
|
|
/* We don't have TLS support enabled, or we're on Windows,
|
|
* which has no arbitrary TLS stream support.
|
|
*/
|
|
#if defined(GIT_WIN32) || !defined(GIT_HTTPS)
|
|
cl_git_fail_with(-1, error);
|
|
#else
|
|
cl_git_pass(error);
|
|
#endif
|
|
|
|
cl_assert_equal_i(0, ctor_called);
|
|
cl_assert(&test_stream != stream);
|
|
|
|
git_stream_free(stream);
|
|
}
|
|
|
|
void test_stream_registration__both(void)
|
|
{
|
|
git_stream *stream;
|
|
git_stream_registration registration = {0};
|
|
|
|
registration.version = 1;
|
|
registration.init = test_stream_init;
|
|
registration.wrap = test_stream_wrap;
|
|
|
|
cl_git_pass(git_stream_register(GIT_STREAM_STANDARD | GIT_STREAM_TLS, ®istration));
|
|
|
|
ctor_called = 0;
|
|
cl_git_pass(git_tls_stream_new(&stream, "localhost", "443"));
|
|
cl_assert_equal_i(1, ctor_called);
|
|
cl_assert_equal_p(&test_stream, stream);
|
|
|
|
ctor_called = 0;
|
|
cl_git_pass(git_socket_stream_new(&stream, "localhost", "80"));
|
|
cl_assert_equal_i(1, ctor_called);
|
|
cl_assert_equal_p(&test_stream, stream);
|
|
}
|