From: Johannes Schindelin <johannes.schindelin@gmx.de>
The SOCKS proxy test introduced in 0ca365c2ed4 (http: do not ignore proxy path, 2024-08-02) creates a Unix domain socket in `$TRASH_DIRECTORY`. When the trash directory path is long (e.g. when running from a deeply nested worktree), the socket path can exceed the 108-character limit for `struct sockaddr_un.sun_path` on Linux, causing the test to fail with "Path length ... is longer than maximum supported length (108)".
Move the socket to `$TMPDIR` (defaulting to `/tmp`) where the path is short, following the same approach used in t7528 for the SSH agent socket in b7fb2194b96 (t7528: work around ETOOMANY in OpenSSH 10.1 and newer, 2025-10-23).
Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
t5564: use a short path for the SOCKS proxy socket
When trying to run the entire test suite in a slightly deeper path than
usual, I was surprised to see that this test failed due to our old
friend, the 108 character limit of Unix sockets.Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2100%2Fdscho%2Favoid-too-long-unix-socket-path-in-socks-proxy-test-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2100/dscho/avoid-too-long-unix-socket-path-in-socks-proxy-test-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/2100
t/t5564-http-proxy.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
Show changes to t/t5564-http-proxy.sh +8 −2
diff --git a/t/t5564-http-proxy.sh b/t/t5564-http-proxy.sh index 3bcbdef409..cb7ede4ca4 100755 --- a/t/t5564-http-proxy.sh +++ b/t/t5564-http-proxy.sh @@ -50,14 +50,19 @@ start_socks() { # The %30 tests that the correct amount of percent-encoding is applied to the # proxy string passed to curl. +# Use a short path for the socket to avoid exceeding the 108-character +# Unix domain socket limit when the trash directory path is long. +SOCKS_SOCK="${TMPDIR:-/tmp}/git-test-socks-%30.sock" + test_lazy_prereq SOCKS_PROXY ' test_have_prereq PERL && - start_socks "$TRASH_DIRECTORY/%30.sock" + start_socks "$SOCKS_SOCK" ' test_atexit ' test ! -e "$TRASH_DIRECTORY/socks.pid" || kill "$(cat "$TRASH_DIRECTORY/socks.pid")" + rm -f "$SOCKS_SOCK" ' # The below tests morally ought to be gated on a prerequisite that Git is @@ -70,7 +75,8 @@ old_libcurl_error() { test_expect_success SOCKS_PROXY 'clone via Unix socket' ' test_when_finished "rm -rf clone" && - test_config_global http.proxy "socks4://localhost$PWD/%2530.sock" && { + socks_proxy_url="socks4://localhost$(echo "$SOCKS_SOCK" | sed "s/%/%25/g")" && + test_config_global http.proxy "$socks_proxy_url" && { { GIT_TRACE_CURL=$PWD/trace \ GIT_TRACE_CURL_COMPONENTS=socks \ base-commit: 94f057755b7941b321fd11fec1b2e3ca5313a4e0
-- gitgitgadget