about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/parallel.sh36
1 files changed, 34 insertions, 2 deletions
diff --git a/tests/parallel.sh b/tests/parallel.sh
index c41a28b1ad1a..26411649d1e6 100644
--- a/tests/parallel.sh
+++ b/tests/parallel.sh
@@ -1,7 +1,12 @@
 source common.sh
 
+# First, test that -jN performs builds in parallel.
+echo "testing nix-build -j..."
+
 clearStore
 
+rm -f $SHARED.cur $SHARED.max
+
 outPath=$($nixbuild -j10000 parallel.nix)
 
 echo "output path is $outPath"
@@ -9,5 +14,32 @@ echo "output path is $outPath"
 text=$(cat "$outPath")
 if test "$text" != "abacade"; then exit 1; fi
 
-if test "$(cat $SHARED.cur)" != 0; then exit 1; fi
-if test "$(cat $SHARED.max)" != 3; then exit 1; fi
+if test "$(cat $SHARED.cur)" != 0; then fail "wrong current process count"; fi
+if test "$(cat $SHARED.max)" != 3; then fail "not enough parallelism"; fi
+
+# Second, test that parallel invocations of nix-build perform builds
+# in parallel, and don't block waiting on locks held by the others.
+echo "testing multiple nix-build -j1..."
+
+clearStore
+
+rm -f $SHARED.cur $SHARED.max
+
+$nixbuild -j1 parallel.nix &
+pid1=$!
+echo "pid 1 is $pid1"
+
+$nixbuild -j1 parallel.nix &
+pid2=$!
+echo "pid 2 is $pid2"
+
+$nixbuild -j1 parallel.nix &
+pid3=$!
+echo "pid 3 is $pid3"
+
+wait $pid1
+wait $pid2
+wait $pid3
+
+if test "$(cat $SHARED.cur)" != 0; then fail "wrong current process count"; fi
+if test "$(cat $SHARED.max)" != 3; then fail "not enough parallelism"; fi