From: Matthew John Cheetham <mjcheetham@xxxxxxxxxxx> Add the ability to send arbitrary headers in HTTP responses from the test-http-server. This is useful when we want to test 'malformed' response message handling. Add the following option to the server auth config file: [auth] extraHeader = [<value>]* Each `auth.extraHeader` value will be appended to the response headers verbatim. Signed-off-by: Matthew John Cheetham <mjcheetham@xxxxxxxxxxx> --- t/helper/test-http-server.c | 6 ++++++ t/t5556-http-auth.sh | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/t/helper/test-http-server.c b/t/helper/test-http-server.c index 72c6cca7e5c..70bf15c3fa1 100644 --- a/t/helper/test-http-server.c +++ b/t/helper/test-http-server.c @@ -417,6 +417,7 @@ static int allow_anonymous; static struct auth_module **auth_modules = NULL; static size_t auth_modules_nr = 0; static size_t auth_modules_alloc = 0; +static struct strvec extra_headers = STRVEC_INIT; static struct auth_module *get_auth_module(const char *scheme, int create) { @@ -520,6 +521,9 @@ done: string_list_append(&hdrs, challenge); } + for (i = 0; i < extra_headers.nr; i++) + string_list_append(&hdrs, extra_headers.v[i]); + *wr = send_http_error(STDOUT_FILENO, 401, "Unauthorized", -1, &hdrs, *wr); } @@ -585,6 +589,8 @@ static int read_auth_config(const char *name, const char *val, void *data) string_list_clear(mod->tokens, 1); } else if (!strcmp(name, "auth.allowanonymous")) { allow_anonymous = git_config_bool(name, val); + } else if (!strcmp(name, "auth.extraheader")) { + strvec_push(&extra_headers, val); } else { warning("unknown auth config '%s'", name); } diff --git a/t/t5556-http-auth.sh b/t/t5556-http-auth.sh index 20fd9b09aef..2c16c8f72a5 100755 --- a/t/t5556-http-auth.sh +++ b/t/t5556-http-auth.sh @@ -178,6 +178,10 @@ test_expect_success CURL 'http auth server auth config' ' token = reset-tokens:the-only-valid-one allowAnonymous = false + + extraHeader = X-Extra-Header: abc + extraHeader = X-Extra-Header: 123 + extraHeader = X-Another: header\twith\twhitespace! EOF cat >OUT.expected <<-EOF && @@ -185,6 +189,9 @@ test_expect_success CURL 'http auth server auth config' ' WWW-Authenticate: with-params foo="replaced" q=1 WWW-Authenticate: no-explicit-challenge WWW-Authenticate: reset-tokens + X-Extra-Header: abc + X-Extra-Header: 123 + X-Another: header with whitespace! Error: 401 Unauthorized EOF -- gitgitgadget