about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-08-02T15·07+0200
committerEelco Dolstra <edolstra@gmail.com>2019-08-02T16·39+0200
commitec415d7166d607c92cf8f1af688f86e4b4731dff (patch)
treec9c04c9c0a68be28f81a779f47dc6c9108b9cb66 /tests
parent320126aeebc89f8c34ee1668ebacf1fe4b512ed8 (diff)
Add a test for auto-GC
This currently fails because we're using POSIX file locks. So when the
garbage collector opens and closes its own temproots file, it causes
the lock to be released and then deleted by another GC instance.
Diffstat (limited to 'tests')
-rw-r--r--tests/gc-auto.sh59
-rw-r--r--tests/local.mk4
2 files changed, 62 insertions, 1 deletions
diff --git a/tests/gc-auto.sh b/tests/gc-auto.sh
new file mode 100644
index 000000000000..1e91282d0f99
--- /dev/null
+++ b/tests/gc-auto.sh
@@ -0,0 +1,59 @@
+source common.sh
+
+clearStore
+
+garbage1=$(nix add-to-store --name garbage1 ./tarball.sh)
+garbage2=$(nix add-to-store --name garbage2 ./tarball.sh)
+garbage3=$(nix add-to-store --name garbage3 ./tarball.sh)
+
+fake_free=$TEST_ROOT/fake-free
+export _NIX_TEST_FREE_SPACE_FILE=$fake_free
+echo 1100 > $fake_free
+
+expr=$(cat <<EOF
+with import ./config.nix; mkDerivation {
+  name = "gc-A";
+  buildCommand = ''
+    [[ \$(ls \$NIX_STORE/*-garbage? | wc -l) = 3 ]]
+    mkdir \$out
+    echo foo > \$out/bar
+    echo 1...
+    sleep 2
+    echo 100 > $fake_free
+    echo 2...
+    sleep 2
+    echo 3...
+    [[ \$(ls \$NIX_STORE/*-garbage? | wc -l) = 1 ]]
+  '';
+}
+EOF
+)
+
+nix build -o $TEST_ROOT/result-A -L "($expr)" \
+    --min-free 1000 --max-free 2000 --min-free-check-interval 1 &
+pid=$!
+
+expr2=$(cat <<EOF
+with import ./config.nix; mkDerivation {
+  name = "gc-B";
+  buildCommand = ''
+    mkdir \$out
+    echo foo > \$out/bar
+    echo 1...
+    sleep 2
+    echo 100 > $fake_free
+    echo 2...
+    sleep 2
+    echo 3...
+  '';
+}
+EOF
+)
+
+nix build -o $TEST_ROOT/result-B -L "($expr2)" \
+    --min-free 1000 --max-free 2000 --min-free-check-interval 1
+
+wait "$pid"
+
+[[ foo = $(cat $TEST_ROOT/result-A/bar) ]]
+[[ foo = $(cat $TEST_ROOT/result-B/bar) ]]
diff --git a/tests/local.mk b/tests/local.mk
index 1ff68348b3c7..261e4db0de88 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -3,7 +3,9 @@ check:
 
 nix_tests = \
   init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \
-  gc.sh gc-concurrent.sh \
+  gc.sh \
+  gc-concurrent.sh \
+  gc-auto.sh \
   referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
   gc-runtime.sh check-refs.sh filter-source.sh \
   remote-store.sh export.sh export-graph.sh \