summaryrefslogtreecommitdiff
path: root/tests/remote/create.c
diff options
context:
space:
mode:
authorEtienne Samson <samson.etienne@gmail.com>2018-06-20 02:26:50 +0200
committerEtienne Samson <samson.etienne@gmail.com>2018-11-02 14:58:02 +0100
commit10fa2dd61c383e1d920a78cc12aa72f6e0bf7b65 (patch)
tree5b4bf756bfe5c11811f1ac81d7d4f8fdf08ed351 /tests/remote/create.c
parent798be87ee5fb8a8bd10ffac158ab6bd2fa84f2af (diff)
downloadlibgit2-10fa2dd61c383e1d920a78cc12aa72f6e0bf7b65.tar.gz
tests: consolidate all remote creation tests in one test suite
Diffstat (limited to 'tests/remote/create.c')
-rw-r--r--tests/remote/create.c73
1 files changed, 70 insertions, 3 deletions
diff --git a/tests/remote/create.c b/tests/remote/create.c
index 0aa0f8355..79e5d3f86 100644
--- a/tests/remote/create.c
+++ b/tests/remote/create.c
@@ -2,7 +2,17 @@
static git_repository *_repo;
static git_config *_config;
-static char url[] = "http://github.com/libgit2/libgit2.git";
+
+#define TEST_URL "http://github.com/libgit2/libgit2.git"
+
+#define cl_git_assert_cannot_create_remote(expected, creation_expr) \
+ do { \
+ git_remote *r = NULL; \
+ int res = ((creation_expr)); \
+ cl_git_fail_with(expected, res); \
+ cl_assert_equal_p(r, NULL); \
+ } while (0);
+
void test_remote_create__initialize(void)
{
@@ -27,11 +37,68 @@ void test_remote_create__manual(void)
{
git_remote *remote;
cl_git_pass(git_config_set_string(_config, "remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*"));
- cl_git_pass(git_config_set_string(_config, "remote.origin.url", url));
+ cl_git_pass(git_config_set_string(_config, "remote.origin.url", TEST_URL));
cl_git_pass(git_remote_lookup(&remote, _repo, "origin"));
cl_assert_equal_s(git_remote_name(remote), "origin");
- cl_assert_equal_s(git_remote_url(remote), url);
+ cl_assert_equal_s(git_remote_url(remote), TEST_URL);
+
+ git_remote_free(remote);
+}
+
+void test_remote_create__named(void)
+{
+ git_remote *remote;
+ git_config *cfg;
+ const char *cfg_val;
+ cl_git_pass(git_remote_create(&remote, _repo, "valid-name", TEST_URL));
+
+ cl_assert_equal_s(git_remote_name(remote), "valid-name");
+ cl_assert_equal_s(git_remote_url(remote), TEST_URL);
+
+ cl_git_pass(git_repository_config_snapshot(&cfg, _repo));
+
+ cl_git_pass(git_config_get_string(&cfg_val, cfg, "remote.valid-name.fetch"));
+ cl_assert_equal_s(cfg_val, "+refs/heads/*:refs/remotes/valid-name/*");
+
+ cl_git_pass(git_config_get_string(&cfg_val, cfg, "remote.valid-name.url"));
+ cl_assert_equal_s(cfg_val, TEST_URL);
+
+ git_config_free(cfg);
+ git_remote_free(remote);
+}
+
+void test_remote_create__named_fail_on_invalid_name(void)
+{
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, NULL, TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, "Inv@{id", TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, "", TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, "/", TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, "//", TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, ".lock", TEST_URL));
+ cl_git_assert_cannot_create_remote(GIT_EINVALIDSPEC, git_remote_create(&r, _repo, "a.lock", TEST_URL));
+}
+
+void test_remote_create__named_fail_on_invalid_url(void)
+{
+ cl_git_assert_cannot_create_remote(GIT_ERROR, git_remote_create(&r, _repo, "bad-url", ""));
+}
+
+void test_remote_create__named_fail_on_conflicting_name(void)
+{
+ cl_git_assert_cannot_create_remote(GIT_EEXISTS, git_remote_create(&r, _repo, "test", TEST_URL));
+}
+
+void test_remote_create__with_fetchspec(void)
+{
+ git_remote *remote;
+ git_strarray array;
+
+ cl_git_pass(git_remote_create_with_fetchspec(&remote, _repo, "test-new", "git://github.com/libgit2/libgit2", "+refs/*:refs/*"));
+ cl_git_pass(git_remote_get_fetch_refspecs(&array, remote));
+ cl_assert_equal_s("+refs/*:refs/*", array.strings[0]);
+ cl_assert_equal_i(1, array.count);
+ git_strarray_free(&array);
git_remote_free(remote);
}