t/010-jobserver: add serial/parallel override tests.
This new test validates that you can pass -j1 and -j2 in a sub-redo to create a sub-jobserver with exactly the number of jobs you specified. Now that we have that feature, we can also test for the bug fixed two commits ago where, with -j1, targets would be built in an unexpected order.
This commit is contained in:
parent
19049d52fc
commit
87bac287b6
14 changed files with 87 additions and 2 deletions
6
t/010-jobserver/.gitignore
vendored
Normal file
6
t/010-jobserver/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
*.end
|
||||||
|
*.start
|
||||||
|
*.sub
|
||||||
|
*.spin
|
||||||
|
*.log
|
||||||
|
*.x
|
||||||
13
t/010-jobserver/all.do
Normal file
13
t/010-jobserver/all.do
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# We put the -j options at this toplevel to detect an earlier bug
|
||||||
|
# where the sub-jobserver wasn't inherited by sub-sub-processes, which
|
||||||
|
# accidentally reverted to the parent jobserver instead.
|
||||||
|
|
||||||
|
redo -j1 serialtest
|
||||||
|
|
||||||
|
# Capture log output to parallel.log to hide the (intentional since we're
|
||||||
|
# testing it) scary warning from redo about overriding the jobserver.
|
||||||
|
echo 'parallel test...' >&2
|
||||||
|
if ! redo -j10 paralleltest 2>parallel.log; then
|
||||||
|
cat parallel.log >&2
|
||||||
|
exit 99
|
||||||
|
fi
|
||||||
2
t/010-jobserver/clean.do
Normal file
2
t/010-jobserver/clean.do
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
rm -f *~ .*~ *.log *.sub *.spin *.x *.start *.end \
|
||||||
|
first second parallel parallel2
|
||||||
4
t/010-jobserver/default.spin.do
Normal file
4
t/010-jobserver/default.spin.do
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
|
||||||
|
redo $2.$d.x
|
||||||
|
done
|
||||||
|
echo hello
|
||||||
1
t/010-jobserver/default.x.do
Normal file
1
t/010-jobserver/default.x.do
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
echo world
|
||||||
24
t/010-jobserver/first.do
Normal file
24
t/010-jobserver/first.do
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# in case we're (erroneously) running in parallel, give second.do some
|
||||||
|
# time to start but not finish.
|
||||||
|
echo 'first sleep' >&2
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Because of --shuffle, we can't be sure if first or second ran first, but
|
||||||
|
# because all.do uses -j1, we *should* expect that if second ran first, it
|
||||||
|
# at least ran to completion before we ran at all.
|
||||||
|
if [ -e second.start ]; then
|
||||||
|
echo 'first: second already started before we did...' >&2
|
||||||
|
[ -e second.end ] || exit 21
|
||||||
|
echo 'first: ...and it finished as it should.' >&2
|
||||||
|
# no sense continuing the test; can't test anything if second already
|
||||||
|
# ran.
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo 'first: second has not started yet, good.' >&2
|
||||||
|
|
||||||
|
echo 'first spin' >&2
|
||||||
|
redo 1.a.spin
|
||||||
|
[ -e 1.a.spin ] || exit 11
|
||||||
|
echo 'first spin complete' >&2
|
||||||
|
|
||||||
|
! [ -e second.start ] || exit 22
|
||||||
6
t/010-jobserver/parallel.do
Normal file
6
t/010-jobserver/parallel.do
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# We should be running in parallel with a jobserver shared with second.do.
|
||||||
|
# Give second.do some time to start but not finish.
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
[ -e parallel2.start ] || exit 31
|
||||||
|
! [ -e parallel2.end ] || exit 32
|
||||||
4
t/010-jobserver/parallel2.do
Normal file
4
t/010-jobserver/parallel2.do
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
rm -f $1.start $1.end
|
||||||
|
: >$1.start
|
||||||
|
sleep 2
|
||||||
|
: >$1.end
|
||||||
7
t/010-jobserver/paralleltest.do
Normal file
7
t/010-jobserver/paralleltest.do
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Test that -j2 really gives us parallel builds with their own tokens.
|
||||||
|
# (It's hard to test for sure that we have our own tokens, but if we're
|
||||||
|
# sharing with other tests, we can't be sure that parallel2 will run while
|
||||||
|
# parallel is running, and the race condition will make this test at least
|
||||||
|
# be flakey instead of pass, which means there's a bug.)
|
||||||
|
rm -f *.sub *.spin *.x *.log parallel *.start *.end
|
||||||
|
redo parallel parallel2
|
||||||
8
t/010-jobserver/second.do
Normal file
8
t/010-jobserver/second.do
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
rm -f $1.start $1.end
|
||||||
|
echo 'second start' >&2
|
||||||
|
: >$1.start
|
||||||
|
redo 2.x
|
||||||
|
echo 'second sleep' >&2
|
||||||
|
redo-ifchange first # wait until 'first' finishes, if it's running
|
||||||
|
echo 'second end' >&2
|
||||||
|
: >$1.end
|
||||||
4
t/010-jobserver/serialtest.do
Normal file
4
t/010-jobserver/serialtest.do
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Test that -j1 really serializes all sub-redo processes.
|
||||||
|
rm -f *.sub *.spin *.x first second *.start *.end
|
||||||
|
redo first second
|
||||||
|
|
||||||
1
t/203-make/.gitignore
vendored
1
t/203-make/.gitignore
vendored
|
|
@ -1,2 +1,3 @@
|
||||||
|
*.log
|
||||||
*.out
|
*.out
|
||||||
whichmake
|
whichmake
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,12 @@ run() {
|
||||||
redo y
|
redo y
|
||||||
|
|
||||||
rm -f *.out
|
rm -f *.out
|
||||||
redo -j10 y
|
# Capture output to y.log because we know this intentionally generates
|
||||||
|
# a scary-looking redo warning (overriding the jobserver).
|
||||||
|
if ! redo -j10 y 2>y.log; then
|
||||||
|
cat y.log
|
||||||
|
exit 99
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
run
|
run
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
rm -f *~ .*~ *.out whichmake
|
rm -f *~ .*~ *.out whichmake *.log
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue