about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/Makefile.am9
-rw-r--r--tests/gc.sh14
-rw-r--r--tests/init.sh3
-rwxr-xr-xtests/substituter2.sh19
4 files changed, 25 insertions, 20 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 92c0a836970a..f58dfa48608c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -33,10 +33,11 @@ substitutes2.sh: substitutes2.nix
 fallback.sh: fallback.nix
 nix-push.sh: dependencies.nix
 nix-pull.sh: dependencies.nix
+gc.sh: dependencies.nix
 
 TESTS = init.sh hash.sh lang.sh simple.sh dependencies.sh locking.sh parallel.sh \
-  build-hook.sh substitutes.sh substitutes2.sh fallback.sh nix-push.sh verify.sh \
-  nix-pull.sh
+  build-hook.sh substitutes.sh substitutes2.sh fallback.sh nix-push.sh gc.sh \
+  verify.sh nix-pull.sh
 
 XFAIL_TESTS =
 
@@ -51,5 +52,7 @@ EXTRA_DIST = $(TESTS) \
   locking.nix.in locking.builder.sh \
   parallel.nix.in parallel.builder.sh \
   build-hook.nix.in build-hook.hook.sh \
-  substitutes.nix.in substitutes2.nix.in fallback.nix.in \
+  substitutes.nix.in substituter.sh \
+  substitutes2.nix.in substituter2.sh \
+  fallback.nix.in \
   $(wildcard lang/*.nix) $(wildcard lang/*.exp)
diff --git a/tests/gc.sh b/tests/gc.sh
new file mode 100644
index 000000000000..9aeda43e7101
--- /dev/null
+++ b/tests/gc.sh
@@ -0,0 +1,14 @@
+storeExpr=$($TOP/src/nix-instantiate/nix-instantiate dependencies.nix)
+outPath=$($TOP/src/nix-store/nix-store -rvv "$storeExpr")
+
+# Set a GC root.
+ln -s $outPath "$NIX_LOCALSTATE_DIR"/nix/gcroots/foo
+
+$NIX_BIN_DIR/nix-collect-garbage
+
+# Check that the root and its dependencies haven't been deleted.
+cat $outPath/foobar
+cat $outPath/input-2/bar
+
+# Check that the derivation has been GC'd.
+if cat $storeExpr > /dev/null; then false; fi
diff --git a/tests/init.sh b/tests/init.sh
index 504cb14f12dc..fa3092f9ae9f 100644
--- a/tests/init.sh
+++ b/tests/init.sh
@@ -18,11 +18,13 @@ ln -s $TOP/src/nix-store/nix-store $NIX_BIN_DIR/
 ln -s $TOP/src/nix-instantiate/nix-instantiate $NIX_BIN_DIR/
 ln -s $TOP/src/nix-hash/nix-hash $NIX_BIN_DIR/
 ln -s $TOP/scripts/nix-prefetch-url $NIX_BIN_DIR/
+ln -s $TOP/scripts/nix-collect-garbage $NIX_BIN_DIR/
 mkdir $NIX_BIN_DIR/nix
 ln -s $TOP/scripts/download-using-manifests.pl $NIX_BIN_DIR/nix/
 ln -s $TOP/scripts/readmanifest.pm $NIX_BIN_DIR/nix/
 
 mkdir -p "$NIX_LOCALSTATE_DIR"/nix/manifests
+mkdir -p "$NIX_LOCALSTATE_DIR"/nix/gcroots
 mkdir -p "$NIX_LOCALSTATE_DIR"/log/nix
 
 mkdir $NIX_DATA_DIR/nix
@@ -31,6 +33,7 @@ cp -prd $TOP/corepkgs $NIX_DATA_DIR/nix/
 for i in $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh \
     $NIX_BIN_DIR/nix/download-using-manifests.pl \
     $NIX_BIN_DIR/nix-prefetch-url \
+    $NIX_BIN_DIR/nix-collect-garbage \
     ; do
     echo "$REAL_BIN_DIR"
     sed < $i > $i.tmp \
diff --git a/tests/substituter2.sh b/tests/substituter2.sh
index 84925b94405f..c4e1bfec7b39 100755
--- a/tests/substituter2.sh
+++ b/tests/substituter2.sh
@@ -1,18 +1,3 @@
-# Set a PATH (!!! impure).
-export PATH=/bin:/usr/bin:$PATH
-
-mkdir $out
-
-cat > $out/substituter <<EOF
 #! /bin/sh -ex
-echo \$*
-
-case \$* in
-    *)
-        exit 1
-        ;;
-esac        
-EOF
-
-chmod +x $out/substituter
-
+echo $*
+exit 1