From dd7414ba7f44a7caa126badfc5a56191b4ec6c1b Mon Sep 17 00:00:00 2001 From: Yueh-Shun Li Date: Wed, 17 Dec 2025 21:47:39 +0800 Subject: [PATCH] tests.fetchurl: add flag-appending tests --- pkgs/build-support/fetchurl/tests.nix | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/pkgs/build-support/fetchurl/tests.nix b/pkgs/build-support/fetchurl/tests.nix index b4baeec9a9e7..320b01a311ee 100644 --- a/pkgs/build-support/fetchurl/tests.nix +++ b/pkgs/build-support/fetchurl/tests.nix @@ -1,11 +1,85 @@ { + lib, testers, fetchurl, + writeShellScriptBin, jq, moreutils, + emptyFile, ... }: +let + testFlagAppending = + args: + testers.invalidateFetcherByDrvHash + (fetchurl.override (previousArgs: { + curl = ( + writeShellScriptBin "curl" '' + set -eu -o pipefail + hasFoo= + hasBar= + echo "curl-mock-expecting-flags: get flags: $*" >&2 + for arg; do + case "$arg" in + -V|--version) + ${lib.getExe previousArgs.curl} "$arg" + exit "$?" + ;; + --foo) + echo "curl-mock-expecting-flags: \`--foo' found in the argument list passed to \`curl'." >&2 + hasFoo=1 + ;; + --bar) + echo "curl-mock-expecting-flags: \`--bar' found in the argument list passed to \`curl'." >&2 + hasBar=1 + ;; + esac + done + if [[ -z "$hasFoo" ]]; then + echo "ERROR: curl-mock-expecting-flags: \`--foo' missing in the argument list passed to \`curl'." >&2 + fi + if [[ -z "$hasBar" ]]; then + echo "ERROR: curl-mock-expecting-flags: \`--bar' missing in the argument list passed to \`curl'." >&2 + fi + if [[ -n "$hasFoo" ]] && [[ -n "$hasBar" ]]; then + touch $out + else + exit 1 + fi + '' + ); + })) + ( + { + url = "https://www.example.com/source"; + hash = emptyFile.outputHash; + recursiveHash = true; # aligned with emptyFile + } + // args + ); +in { + flag-appending-curlOpts = testFlagAppending { + name = "test-fetchurl-flag-appending-curlOpts"; + curlOpts = "--foo --bar"; + }; + + flag-appending-curlOptsList = testFlagAppending { + name = "test-fetchurl-flag-appending-curlOptsList"; + curlOptsList = [ + "--foo" + "--bar" + ]; + }; + + flag-appending-netrcPhase-curlOpts = testFlagAppending { + name = "test-fetchurl-flag-appending-netrcPhase-curlOpts"; + netrcPhase = '' + touch netrc + curlOpts="$curlOpts --foo --bar" + ''; + }; + # Tests that we can send custom headers with spaces in them header = let