Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 22.05 55 lines 1.6 kB view raw
1{ lib, coreutils, python3, gcc, writeText, writeScript, runCommand, makeBinaryWrapper }: 2 3let 4 env = { buildInputs = [ makeBinaryWrapper ]; }; 5 envCheck = runCommand "envcheck" env '' 6 ${gcc}/bin/cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c} 7 ''; 8 makeGoldenTest = testname: runCommand "test-wrapper_${testname}" env '' 9 mkdir -p ./tmp/foo 10 11 params=$(<"${./.}/${testname}.cmdline") 12 eval "makeCWrapper /send/me/flags $params" > wrapper.c 13 14 diff wrapper.c "${./.}/${testname}.c" 15 16 if [ -f "${./.}/${testname}.env" ]; then 17 eval "makeWrapper ${envCheck} wrapped $params" 18 env -i ./wrapped > env.txt 19 sed "s#SUBST_ARGV0#${envCheck}#;s#SUBST_CWD#$PWD#" \ 20 "${./.}/${testname}.env" > golden-env.txt 21 if ! diff env.txt golden-env.txt; then 22 echo "env/argv should be:" 23 cat golden-env.txt 24 echo "env/argv output is:" 25 cat env.txt 26 exit 1 27 fi 28 else 29 # without a golden env, we expect the wrapper compilation to fail 30 ! eval "makeWrapper ${envCheck} wrapped $params" &> error.txt 31 fi 32 33 cp wrapper.c $out 34 ''; 35 tests = let 36 names = [ 37 "add-flags" 38 "argv0" 39 "basic" 40 "chdir" 41 "combination" 42 "env" 43 "inherit-argv0" 44 "invalid-env" 45 "prefix" 46 "suffix" 47 "overlength-strings" 48 ]; 49 f = name: lib.nameValuePair name (makeGoldenTest name); 50 in builtins.listToAttrs (builtins.map f names); 51in writeText "make-binary-wrapper-test" '' 52 ${lib.concatStringsSep "\n" (lib.mapAttrsToList (_: test: '' 53 "${test.name}" "${test}" 54 '') tests)} 55'' // tests