* A test to verify that Nix executes build jobs in parallel, if
possible. This test fails right now because this hasn't been implemented right now. Yes, I'm doing Test-Driven Development! ;-)
This commit is contained in:
parent
f044ccf702
commit
a9858c9f26
5 changed files with 81 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
%: %.in Makefile
|
%: %.in Makefile
|
||||||
sed \
|
sed \
|
||||||
|
-e "s^@extra1\@^$(extra1)^g" \
|
||||||
-e "s^@prefix\@^$(prefix)^g" \
|
-e "s^@prefix\@^$(prefix)^g" \
|
||||||
-e "s^@bindir\@^$(bindir)^g" \
|
-e "s^@bindir\@^$(bindir)^g" \
|
||||||
-e "s^@sysconfdir\@^$(sysconfdir)^g" \
|
-e "s^@sysconfdir\@^$(sysconfdir)^g" \
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
TEST_ROOT = $(shell pwd)/test-tmp
|
TEST_ROOT = $(shell pwd)/test-tmp
|
||||||
|
|
||||||
|
extra1 = $(TEST_ROOT)/shared
|
||||||
|
|
||||||
TESTS_ENVIRONMENT = TEST_ROOT=$(TEST_ROOT) \
|
TESTS_ENVIRONMENT = TEST_ROOT=$(TEST_ROOT) \
|
||||||
NIX_STORE_DIR=$(TEST_ROOT)/store \
|
NIX_STORE_DIR=$(TEST_ROOT)/store \
|
||||||
NIX_DATA_DIR=$(TEST_ROOT)/data \
|
NIX_DATA_DIR=$(TEST_ROOT)/data \
|
||||||
|
@ -7,19 +9,23 @@ TESTS_ENVIRONMENT = TEST_ROOT=$(TEST_ROOT) \
|
||||||
NIX_STATE_DIR=$(TEST_ROOT)/state \
|
NIX_STATE_DIR=$(TEST_ROOT)/state \
|
||||||
NIX_DB_DIR=$(TEST_ROOT)/db \
|
NIX_DB_DIR=$(TEST_ROOT)/db \
|
||||||
TOP=$(shell pwd)/.. \
|
TOP=$(shell pwd)/.. \
|
||||||
|
SHARED=$(extra1) \
|
||||||
$(SHELL) -e -x
|
$(SHELL) -e -x
|
||||||
|
|
||||||
simple.sh: simple.nix
|
simple.sh: simple.nix
|
||||||
dependencies.sh: dependencies.nix
|
dependencies.sh: dependencies.nix
|
||||||
locking.sh: locking.nix
|
locking.sh: locking.nix
|
||||||
|
parallel.sh: parallel.nix
|
||||||
|
|
||||||
TESTS = init.sh simple.sh dependencies.sh locking.sh
|
TESTS = init.sh simple.sh dependencies.sh parallel.sh
|
||||||
|
#locking.sh parallel.sh
|
||||||
|
|
||||||
XFAIL_TESTS =
|
XFAIL_TESTS = parallel.sh
|
||||||
|
|
||||||
include ../substitute.mk
|
include ../substitute.mk
|
||||||
|
|
||||||
EXTRA_DIST = $(TESTS) \
|
EXTRA_DIST = $(TESTS) \
|
||||||
simple.nix.in simple.builder.sh \
|
simple.nix.in simple.builder.sh \
|
||||||
dependencies.nix.in dependencies.builder*.sh \
|
dependencies.nix.in dependencies.builder*.sh \
|
||||||
locking.nix.in locking.builder.sh
|
locking.nix.in locking.builder.sh \
|
||||||
|
parallel.nix.in parallel.builder.sh
|
||||||
|
|
32
tests/parallel.builder.sh
Normal file
32
tests/parallel.builder.sh
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
echo "DOING $text"
|
||||||
|
|
||||||
|
|
||||||
|
export PATH=/bin:/usr/bin:$PATH
|
||||||
|
|
||||||
|
|
||||||
|
# increase counter
|
||||||
|
while ! ln -s x $shared.lock; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
test -f $shared.cur || echo 0 > $shared.cur
|
||||||
|
test -f $shared.max || echo 0 > $shared.max
|
||||||
|
new=$(($(cat $shared.cur) + 1))
|
||||||
|
if test $new -gt $(cat $shared.max); then
|
||||||
|
echo $new > $shared.max
|
||||||
|
fi
|
||||||
|
echo $new > $shared.cur
|
||||||
|
rm $shared.lock
|
||||||
|
|
||||||
|
|
||||||
|
echo -n $(cat $inputs)$text > $out
|
||||||
|
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
|
||||||
|
# decrease counter
|
||||||
|
while ! ln -s x $shared.lock; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
test -f $shared.cur || echo 0 > $shared.cur
|
||||||
|
echo $(($(cat $shared.cur) - 1)) > $shared.cur
|
||||||
|
rm $shared.lock
|
19
tests/parallel.nix.in
Normal file
19
tests/parallel.nix.in
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
let {
|
||||||
|
|
||||||
|
mkDrv = text: inputs: derivation {
|
||||||
|
name = "parallel";
|
||||||
|
system = "@system@";
|
||||||
|
builder = "@shell@";
|
||||||
|
args = ["-e" "-x" ./parallel.builder.sh];
|
||||||
|
shared = "@extra1@";
|
||||||
|
inherit text inputs;
|
||||||
|
};
|
||||||
|
|
||||||
|
a = mkDrv "a" [];
|
||||||
|
b = mkDrv "b" [a];
|
||||||
|
c = mkDrv "c" [b];
|
||||||
|
d = mkDrv "d" [c];
|
||||||
|
e = mkDrv "e" [b c d];
|
||||||
|
|
||||||
|
body = e;
|
||||||
|
}
|
20
tests/parallel.sh
Normal file
20
tests/parallel.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
storeExpr=$($TOP/src/nix-instantiate/nix-instantiate parallel.nix)
|
||||||
|
|
||||||
|
echo "store expr is $storeExpr"
|
||||||
|
|
||||||
|
for i in $(seq 1 5); do
|
||||||
|
echo "WORKER $i"
|
||||||
|
$TOP/src/nix-store/nix-store -rvvB "$storeExpr" &
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
outPath=$($TOP/src/nix-store/nix-store -qnfvvvvv "$storeExpr")
|
||||||
|
|
||||||
|
echo "output path is $outPath"
|
||||||
|
|
||||||
|
text=$(cat "$outPath")
|
||||||
|
if test "$text" != "aabcade"; then exit 1; fi
|
||||||
|
|
||||||
|
if test "$(cat $SHARED.cur)" != 0; then exit 1; fi
|
||||||
|
if test "$(cat $SHARED.max)" != 3; then exit 1; fi
|
Loading…
Reference in a new issue