remote: test honoring configuration option Test that we honor `http.followRedirects` when set to initial or false.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
diff --git a/tests/online/fetch.c b/tests/online/fetch.c
index 9142910..e09d338 100644
--- a/tests/online/fetch.c
+++ b/tests/online/fetch.c
@@ -7,15 +7,19 @@ static char *_remote_proxy_scheme = NULL;
static char *_remote_proxy_host = NULL;
static char *_remote_proxy_user = NULL;
static char *_remote_proxy_pass = NULL;
+static char *_remote_redirect_initial = NULL;
+static char *_remote_redirect_subsequent = NULL;
void test_online_fetch__initialize(void)
{
cl_git_pass(git_repository_init(&_repo, "./fetch", 0));
- _remote_proxy_scheme = cl_getenv("GITTEST_REMOTE_PROXY_SCHEME");
- _remote_proxy_host = cl_getenv("GITTEST_REMOTE_PROXY_HOST");
- _remote_proxy_user = cl_getenv("GITTEST_REMOTE_PROXY_USER");
- _remote_proxy_pass = cl_getenv("GITTEST_REMOTE_PROXY_PASS");
+ _remote_proxy_scheme = cl_getenv("GITTEST_REMOTE_PROXY_SCHEME");
+ _remote_proxy_host = cl_getenv("GITTEST_REMOTE_PROXY_HOST");
+ _remote_proxy_user = cl_getenv("GITTEST_REMOTE_PROXY_USER");
+ _remote_proxy_pass = cl_getenv("GITTEST_REMOTE_PROXY_PASS");
+ _remote_redirect_initial = cl_getenv("GITTEST_REMOTE_REDIRECT_INITIAL");
+ _remote_redirect_subsequent = cl_getenv("GITTEST_REMOTE_REDIRECT_SUBSEQUENT");
}
void test_online_fetch__cleanup(void)
@@ -24,11 +28,14 @@ void test_online_fetch__cleanup(void)
_repo = NULL;
cl_fixture_cleanup("./fetch");
-
- git__free(_remote_proxy_scheme);
- git__free(_remote_proxy_host);
- git__free(_remote_proxy_user);
- git__free(_remote_proxy_pass);
+ cl_fixture_cleanup("./redirected");
+
+ git__free(_remote_proxy_scheme);
+ git__free(_remote_proxy_host);
+ git__free(_remote_proxy_user);
+ git__free(_remote_proxy_pass);
+ git__free(_remote_redirect_initial);
+ git__free(_remote_redirect_subsequent);
}
static int update_tips(const char *refname, const git_oid *a, const git_oid *b, void *data)
@@ -247,3 +254,44 @@ void test_online_fetch__proxy(void)
git_remote_free(remote);
git_str_dispose(&url);
}
+
+static int do_redirected_fetch(const char *url, const char *name, const char *config)
+{
+ git_repository *repo;
+ git_remote *remote;
+ int error;
+
+ cl_git_pass(git_repository_init(&repo, "./redirected", 0));
+ cl_fixture_cleanup(name);
+
+ if (config)
+ cl_repo_set_string(repo, "http.followRedirects", config);
+
+ cl_git_pass(git_remote_create(&remote, repo, name, url));
+ error = git_remote_fetch(remote, NULL, NULL, NULL);
+
+ git_remote_free(remote);
+ git_repository_free(repo);
+
+ cl_fixture_cleanup("./redirected");
+
+ return error;
+}
+
+void test_online_fetch__redirect_config(void)
+{
+ if (!_remote_redirect_initial || !_remote_redirect_subsequent)
+ cl_skip();
+
+ /* config defaults */
+ cl_git_pass(do_redirected_fetch(_remote_redirect_initial, "initial", NULL));
+ cl_git_fail(do_redirected_fetch(_remote_redirect_subsequent, "subsequent", NULL));
+
+ /* redirect=initial */
+ cl_git_pass(do_redirected_fetch(_remote_redirect_initial, "initial", "initial"));
+ cl_git_fail(do_redirected_fetch(_remote_redirect_subsequent, "subsequent", "initial"));
+
+ /* redirect=false */
+ cl_git_fail(do_redirected_fetch(_remote_redirect_initial, "initial", "false"));
+ cl_git_fail(do_redirected_fetch(_remote_redirect_subsequent, "subsequent", "false"));
+}