summaryrefslogtreecommitdiffstats
path: root/pkgs/test/make-binary-wrapper/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/test/make-binary-wrapper/default.nix')
-rw-r--r--pkgs/test/make-binary-wrapper/default.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/pkgs/test/make-binary-wrapper/default.nix b/pkgs/test/make-binary-wrapper/default.nix
new file mode 100644
index 000000000000..c5bb6970aac0
--- /dev/null
+++ b/pkgs/test/make-binary-wrapper/default.nix
@@ -0,0 +1,54 @@
+{ lib, coreutils, python3, gcc, writeText, writeScript, runCommand, makeBinaryWrapper }:
+
+let
+ env = { nativeBuildInputs = [ makeBinaryWrapper ]; };
+ envCheck = runCommand "envcheck" env ''
+ ${gcc}/bin/cc -Wall -Werror -Wpedantic -o $out ${./envcheck.c}
+ '';
+ makeGoldenTest = testname: runCommand "test-wrapper_${testname}" env ''
+ mkdir -p /tmp/foo
+
+ params=$(<"${./.}/${testname}.cmdline")
+ eval "makeCWrapper /send/me/flags $params" > wrapper.c
+
+ diff wrapper.c "${./.}/${testname}.c"
+
+ if [ -f "${./.}/${testname}.env" ]; then
+ eval "makeWrapper ${envCheck} wrapped $params"
+ env -i ./wrapped > env.txt
+ sed "s#SUBST_ARGV0#${envCheck}#;s#SUBST_CWD#$PWD#" \
+ "${./.}/${testname}.env" > golden-env.txt
+ if ! diff env.txt golden-env.txt; then
+ echo "env/argv should be:"
+ cat golden-env.txt
+ echo "env/argv output is:"
+ cat env.txt
+ exit 1
+ fi
+ else
+ # without a golden env, we expect the wrapper compilation to fail
+ ! eval "makeWrapper ${envCheck} wrapped $params" &> error.txt
+ fi
+
+ cp wrapper.c $out
+ '';
+ tests = let
+ names = [
+ "add-flags"
+ "argv0"
+ "basic"
+ "chdir"
+ "combination"
+ "env"
+ "inherit-argv0"
+ "invalid-env"
+ "prefix"
+ "suffix"
+ ];
+ f = name: lib.nameValuePair name (makeGoldenTest name);
+ in builtins.listToAttrs (builtins.map f names);
+in writeText "make-binary-wrapper-test" ''
+ ${lib.concatStringsSep "\n" (lib.mapAttrsToList (_: test: ''
+ "${test.name}" "${test}"
+ '') tests)}
+'' // tests