diff --git a/tests/Makefile.am b/tests/Makefile.am index aceb5d33b..a16051f73 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -3,7 +3,7 @@ TESTS_ENVIRONMENT = $(bash) -e extra1 = $(shell pwd)/test-tmp/shared TESTS = init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \ - locking.sh parallel.sh build-hook.sh substitutes.sh substitutes2.sh \ + parallel.sh build-hook.sh substitutes.sh substitutes2.sh \ fallback.sh nix-push.sh gc.sh gc-concurrent.sh verify.sh nix-pull.sh \ referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \ gc-runtime.sh install-package.sh check-refs.sh filter-source.sh \ @@ -20,7 +20,6 @@ EXTRA_DIST = $(TESTS) \ simple.nix simple.builder.sh \ hash-check.nix \ dependencies.nix dependencies.builder*.sh \ - locking.nix locking.builder.sh \ parallel.nix parallel.builder.sh \ build-hook.nix build-hook.hook.sh \ substituter.sh substituter2.sh \ diff --git a/tests/locking.builder.sh b/tests/locking.builder.sh deleted file mode 100644 index 4cb5eb379..000000000 --- a/tests/locking.builder.sh +++ /dev/null @@ -1,6 +0,0 @@ -sleep 3 - -# Use `>>'; without proper locking this will cause text duplication. -echo -n $(cat $inputs)$text >> $out - -sleep 2 \ No newline at end of file diff --git a/tests/locking.nix b/tests/locking.nix deleted file mode 100644 index a0407685b..000000000 --- a/tests/locking.nix +++ /dev/null @@ -1,17 +0,0 @@ -with import ./config.nix; - -let - - mkDrv = text: inputs: mkDerivation { - name = "locking"; - builder = ./locking.builder.sh; - inherit text inputs; - }; - - a = mkDrv "a" []; - b = mkDrv "b" [a]; - c = mkDrv "c" [a b]; - d = mkDrv "d" [a]; - e = mkDrv "e" [c d]; - -in e diff --git a/tests/locking.sh b/tests/locking.sh deleted file mode 100644 index 4b41de391..000000000 --- a/tests/locking.sh +++ /dev/null @@ -1,19 +0,0 @@ -source common.sh - -drvPath=$($nixinstantiate locking.nix) - -echo "derivation is $drvPath" - -for i in 1 2 3 4 5; do - echo "WORKER $i" - $nixstore -rvv "$drvPath" & -done - -sleep 5 - -outPath=$($nixstore -qvvf "$drvPath") - -echo "output path is $outPath" - -text=$(cat "$outPath") -if test "$text" != "aabcade"; then exit 1; fi diff --git a/tests/parallel.sh b/tests/parallel.sh index 798c15f5b..ddfb1523b 100644 --- a/tests/parallel.sh +++ b/tests/parallel.sh @@ -1,5 +1,6 @@ source common.sh + # First, test that -jN performs builds in parallel. echo "testing nix-build -j..." @@ -17,6 +18,7 @@ if test "$text" != "abacade"; 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..." @@ -25,7 +27,9 @@ clearStore rm -f $SHARED.cur $SHARED.max -cmd="$nixbuild -j1 parallel.nix --argstr sleepTime 7" +drvPath=$($nixinstantiate parallel.nix --argstr sleepTime 7) + +cmd="$nixstore -j1 -r $drvPath" $cmd & pid1=$! @@ -39,9 +43,14 @@ $cmd & pid3=$! echo "pid 3 is $pid3" +$cmd & +pid4=$! +echo "pid 4 is $pid4" + wait $pid1 || fail "instance 1 failed: $?" wait $pid2 || fail "instance 2 failed: $?" wait $pid3 || fail "instance 3 failed: $?" +wait $pid4 || fail "instance 4 failed: $?" 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