about summary refs log tree commit diff
path: root/tests/referrers.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/referrers.sh')
-rw-r--r--tests/referrers.sh48
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/referrers.sh b/tests/referrers.sh
index 4d2aaab5a2b8..2fdf0cf7c47e 100644
--- a/tests/referrers.sh
+++ b/tests/referrers.sh
@@ -9,12 +9,50 @@ reference=$NIX_STORE_DIR/abcdef
 touch $reference
 (echo $reference && echo && echo 0) | $nixstore --register-validity 
 
-echo "registering..."
-time for ((n = 0; n < $max; n++)); do
+echo "making registration..."
+
+for ((n = 0; n < $max; n++)); do
     storePath=$NIX_STORE_DIR/$n
     touch $storePath
-    (echo $storePath && echo && echo 1 && echo $reference)
-done | $nixstore --register-validity 
+    ref2=$NIX_STORE_DIR/$((n+1))
+    if test $((n+1)) = $max; then
+        ref2=$reference
+    fi
+    (echo $storePath && echo && echo 2 && echo $reference && echo $ref2)
+done > $TEST_ROOT/reg_info
+
+echo "registering..."
+
+time $nixstore --register-validity < $TEST_ROOT/reg_info
+
+oldTime=$(cat test-tmp/db/info/1 | grep Registered-At)
+
+echo "sleeping..."
+
+sleep 2
+
+echo "reregistering..."
+
+time $nixstore --register-validity --reregister < $TEST_ROOT/reg_info
+
+newTime=$(cat test-tmp/db/info/1 | grep Registered-At)
+
+if test "$newTime" != "$oldTime"; then
+    echo "reregistration changed original registration time"
+    exit 1
+fi
+
+if test "$(cat test-tmp/db/referrer/1 | wc -w)" != 1; then
+    echo "reregistration duplicated referrers"
+    exit 1
+fi
 
 echo "collecting garbage..."
-time $nixstore --gc 2> /dev/null
+ln -sfn $reference "$NIX_STATE_DIR"/gcroots/ref
+time $nixstore --gc
+
+if test "$(cat test-tmp/db/referrer/abcdef | wc -w)" != 0; then
+    echo "referrers not cleaned up"
+    exit 1
+fi
+