about summary refs log tree commit diff
path: root/tests/gc-runtime.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gc-runtime.sh')
-rw-r--r--tests/gc-runtime.sh39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/gc-runtime.sh b/tests/gc-runtime.sh
new file mode 100644
index 000000000000..5a6e0da8cda2
--- /dev/null
+++ b/tests/gc-runtime.sh
@@ -0,0 +1,39 @@
+source common.sh
+
+case $system in
+    *linux*)
+        ;;
+    *)
+        exit 0;
+esac
+
+set -m # enable job control, needed for kill
+
+profiles="$NIX_STATE_DIR"/profiles
+rm -f $profiles/*
+
+$nixenv -p $profiles/test -f ./gc-runtime.nix -i gc-runtime
+
+outPath=$($nixenv -p $profiles/test -q --no-name --out-path gc-runtime)
+echo $outPath
+
+echo "backgrounding program..."
+$profiles/test/program &
+child=$!
+echo PID=$child
+
+$nixenv -p $profiles/test -e gc-runtime
+$nixenv -p $profiles/test --delete-generations old
+
+cp $TOP/scripts/find-runtime-roots.pl $TEST_ROOT/foo.pl
+chmod +x $TEST_ROOT/foo.pl
+NIX_ROOT_FINDER=$TEST_ROOT/foo.pl $nixstore --gc
+
+kill -- -$child
+
+if ! test -e $outPath; then
+    echo "running program was garbage collected!"
+    exit 1
+fi
+
+exit 0