summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/transport/register.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/transport/register.c b/tests/transport/register.c
new file mode 100644
index 000000000..937194c1c
--- /dev/null
+++ b/tests/transport/register.c
@@ -0,0 +1,66 @@
+#include "clar_libgit2.h"
+#include "git2/sys/transport.h"
+
+static git_transport _transport = GIT_TRANSPORT_INIT;
+
+static int dummy_transport(git_transport **transport, git_remote *owner, void *param)
+{
+ *transport = &_transport;
+ GIT_UNUSED(owner);
+ GIT_UNUSED(param);
+ return 0;
+}
+
+void test_transport_register__custom_transport(void)
+{
+ git_transport *transport;
+
+ cl_git_pass(git_transport_register("something", dummy_transport, NULL));
+
+ cl_git_pass(git_transport_new(&transport, NULL, "something://somepath"));
+
+ cl_assert(transport == &_transport);
+
+ cl_git_pass(git_transport_unregister("something"));
+}
+
+void test_transport_register__custom_transport_error_doubleregister(void)
+{
+ cl_git_pass(git_transport_register("something", dummy_transport, NULL));
+
+ cl_git_fail_with(git_transport_register("something", dummy_transport, NULL), GIT_EEXISTS);
+
+ cl_git_pass(git_transport_unregister("something"));
+}
+
+void test_transport_register__custom_transport_error_remove_non_existing(void)
+{
+ cl_git_fail_with(git_transport_unregister("something"), GIT_ENOTFOUND);
+}
+
+void test_transport_register__custom_transport_ssh(void)
+{
+ git_transport *transport;
+
+#ifndef GIT_SSH
+ cl_git_fail_with(git_transport_new(&transport, NULL, "ssh://somehost:somepath"), -1);
+ cl_git_fail_with(git_transport_new(&transport, NULL, "git@somehost:somepath"), -1);
+#else
+ cl_git_pass(git_transport_new(&transport, NULL, "git@somehost:somepath"));
+#endif
+
+ cl_git_pass(git_transport_register("ssh", dummy_transport, NULL));
+
+ cl_git_pass(git_transport_new(&transport, NULL, "git@somehost:somepath"));
+
+ cl_assert(transport == &_transport);
+
+ cl_git_pass(git_transport_unregister("ssh"));
+
+#ifndef GIT_SSH
+ cl_git_fail_with(git_transport_new(&transport, NULL, "ssh://somehost:somepath"), -1);
+ cl_git_fail_with(git_transport_new(&transport, NULL, "git@somehost:somepath"), -1);
+#else
+ cl_git_pass(git_transport_new(&transport, NULL, "git@somehost:somepath"));
+#endif
+}