diff options
Diffstat (limited to 'tests/scripts/features')
-rw-r--r-- | tests/scripts/features/parallel-sync | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/scripts/features/parallel-sync b/tests/scripts/features/parallel-sync new file mode 100644 index 0000000..29e5564 --- /dev/null +++ b/tests/scripts/features/parallel-sync @@ -0,0 +1,143 @@ +# -*-perl-*- + +$description = "Test parallel-sync (-P) option."; + +$details = "Test the synchronization of output from parallel jobs."; + +if (!$parallel_jobs) { + return -1; +} + +if ($vos) { + $sleep_command = "sleep -seconds"; +} +else { + $sleep_command = "sleep"; +} + +# The following subdirectories with Makefiles are used in several +# of the following tests. +mkdir('foo', 0777); +mkdir('bar', 0777); + +open(MAKEFILE,"> foo/Makefile"); +print MAKEFILE <<EOF; +all: foo + +foo: + \@echo foo: start; $sleep_command 2; echo foo: end + +foo-fail: + \@$sleep_command 2; false +EOF +close(MAKEFILE); + +open(MAKEFILE,"> bar/Makefile"); +print MAKEFILE <<EOF; +all: bar baz + +bar: + \@echo bar: start; $sleep_command 1; echo bar: end + +baz: + \@echo baz: start; $sleep_command 4; echo baz: end +EOF +close(MAKEFILE); + +# Test coarse synchronization. +run_make_test(' +all: make-foo make-bar + +make-foo: + $(MAKE) -C foo + +make-bar: + $(MAKE) -C bar', +'-j -P2', +"#MAKEPATH# -C foo +#MAKEPATH# -C bar +#MAKE#[1]: Entering directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/foo' +foo: start +foo: end +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/bar' +bar: start +bar: end +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/bar' +baz: start +baz: end +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Leaving directory '#PWD#/bar'\n"); + +# Test fine synchronization. +run_make_test(' +all: make-foo make-bar + +make-foo: + $(MAKE) -C foo + +make-bar: + $(MAKE) -C bar', +'-j -P', +"#MAKEPATH# -C foo +#MAKEPATH# -C bar +#MAKE#[1]: Entering directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/bar' +bar: start +bar: end +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/foo' +foo: start +foo: end +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/bar' +baz: start +baz: end +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Leaving directory '#PWD#/bar'\n"); + +# Test that messages from make itself are enclosed with +# "Entering/Leaving directory" messages. +run_make_test(' +all: make-foo-fail make-bar-bar + +make-foo-fail: + $(MAKE) -C foo foo-fail + +make-bar-bar: + $(MAKE) -C bar bar', +'-j -P', +"#MAKEPATH# -C foo foo-fail +#MAKEPATH# -C bar bar +#MAKE#[1]: Entering directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/bar' +bar: start +bar: end +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Leaving directory '#PWD#/bar' +#MAKE#[1]: Entering directory '#PWD#/foo' +Makefile:7: recipe for target 'foo-fail' failed +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Entering directory '#PWD#/foo' +#MAKE#[1]: *** [foo-fail] Error 1 +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKE#[1]: Leaving directory '#PWD#/foo' +#MAKEFILE#:5: recipe for target 'make-foo-fail' failed +#MAKE#: *** [make-foo-fail] Error 2\n", +512); + +# Remove temporary directories and contents. +rmfiles('foo/Makefile'); +rmdir('foo'); +rmfiles('bar/Makefile'); +rmdir('bar'); + +# This tells the test driver that the perl test script executed properly. +1; |