diff options
Diffstat (limited to 'tests/libgit2/stream/registration.c')
-rw-r--r-- | tests/libgit2/stream/registration.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/tests/libgit2/stream/registration.c b/tests/libgit2/stream/registration.c new file mode 100644 index 000000000..bf3c20502 --- /dev/null +++ b/tests/libgit2/stream/registration.c @@ -0,0 +1,119 @@ +#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); +} |