| #include "clar_libgit2.h" |
| |
| CL_IN_CATEGORY("network") |
| |
| static git_repository *_repo; |
| static int counter; |
| |
| void test_network_fetch__initialize(void) |
| { |
| cl_git_pass(git_repository_init(&_repo, "./fetch", 0)); |
| } |
| |
| void test_network_fetch__cleanup(void) |
| { |
| git_repository_free(_repo); |
| cl_fixture_cleanup("./fetch"); |
| } |
| |
| static int update_tips(const char *refname, const git_oid *a, const git_oid *b, void *data) |
| { |
| GIT_UNUSED(refname); GIT_UNUSED(a); GIT_UNUSED(b); GIT_UNUSED(data); |
| |
| ++counter; |
| |
| return 0; |
| } |
| |
| static void progress(const git_transfer_progress *stats, void *payload) |
| { |
| int *bytes_received = (int*)payload; |
| *bytes_received = stats->received_bytes; |
| } |
| |
| static void do_fetch(const char *url, int flag, int n) |
| { |
| git_remote *remote; |
| git_remote_callbacks callbacks; |
| int bytes_received = 0; |
| |
| memset(&callbacks, 0, sizeof(git_remote_callbacks)); |
| callbacks.update_tips = update_tips; |
| counter = 0; |
| |
| cl_git_pass(git_remote_add(&remote, _repo, "test", url)); |
| git_remote_set_callbacks(remote, &callbacks); |
| git_remote_set_autotag(remote, flag); |
| cl_git_pass(git_remote_connect(remote, GIT_DIR_FETCH)); |
| cl_git_pass(git_remote_download(remote, progress, &bytes_received)); |
| cl_git_pass(git_remote_update_tips(remote)); |
| git_remote_disconnect(remote); |
| cl_assert_equal_i(counter, n); |
| cl_assert(bytes_received > 0); |
| |
| git_remote_free(remote); |
| } |
| |
| void test_network_fetch__default_git(void) |
| { |
| do_fetch("git://github.com/libgit2/TestGitRepository.git", GIT_REMOTE_DOWNLOAD_TAGS_AUTO, 6); |
| } |
| |
| void test_network_fetch__default_http(void) |
| { |
| do_fetch("http://github.com/libgit2/TestGitRepository.git", GIT_REMOTE_DOWNLOAD_TAGS_AUTO, 6); |
| } |
| |
| void test_network_fetch__no_tags_git(void) |
| { |
| do_fetch("git://github.com/libgit2/TestGitRepository.git", GIT_REMOTE_DOWNLOAD_TAGS_NONE, 3); |
| } |
| |
| void test_network_fetch__no_tags_http(void) |
| { |
| do_fetch("http://github.com/libgit2/TestGitRepository.git", GIT_REMOTE_DOWNLOAD_TAGS_NONE, 3); |
| } |