registration.c 2.87 KB
Newer Older
1 2
#include "clar_libgit2.h"
#include "git2/sys/stream.h"
3
#include "streams/tls.h"
4
#include "streams/socket.h"
5 6 7 8 9
#include "stream.h"

static git_stream test_stream;
static int ctor_called;

10
void test_stream_registration__cleanup(void)
11 12 13 14
{
	cl_git_pass(git_stream_register(GIT_STREAM_TLS | GIT_STREAM_STANDARD, NULL));
}

15
static int test_stream_init(git_stream **out, const char *host, const char *port)
16 17 18 19 20 21 22 23 24 25
{
	GIT_UNUSED(host);
	GIT_UNUSED(port);

	ctor_called = 1;
	*out = &test_stream;

	return 0;
}

26 27 28 29 30 31 32 33 34 35 36
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;
}

37
void test_stream_registration__insecure(void)
38 39 40 41 42 43 44 45 46
{
	git_stream *stream;
	git_stream_registration registration = {0};

	registration.version = 1;
	registration.init = test_stream_init;
	registration.wrap = test_stream_wrap;

	ctor_called = 0;
47
	cl_git_pass(git_stream_register(GIT_STREAM_STANDARD, &registration));
48 49 50 51 52 53
	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;
54
	cl_git_pass(git_stream_register(GIT_STREAM_STANDARD, NULL));
55 56 57 58 59 60 61 62
	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);
}

63
void test_stream_registration__tls(void)
64 65
{
	git_stream *stream;
66
	git_stream_registration registration = {0};
67 68
	int error;

69 70 71 72
	registration.version = 1;
	registration.init = test_stream_init;
	registration.wrap = test_stream_wrap;

73
	ctor_called = 0;
74
	cl_git_pass(git_stream_register(GIT_STREAM_TLS, &registration));
75 76 77 78 79 80
	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;
81
	cl_git_pass(git_stream_register(GIT_STREAM_TLS, NULL));
82 83
	error = git_tls_stream_new(&stream, "localhost", "443");

84 85
	/* We don't have TLS support enabled, or we're on Windows,
	 * which has no arbitrary TLS stream support.
86
	 */
87
#if defined(GIT_WIN32) || !defined(GIT_HTTPS)
88 89 90 91 92 93 94 95 96 97
	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);
}
98

99
void test_stream_registration__both(void)
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
{
	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, &registration));

	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);
}