Use (implicitly) parallel tests on new enough automake. The tests run
a bit quicker with this change. On my laptop, I measured 27 mins down
to 18 mins.
Change the ./run function so that ./run --test no longer spools the
test output to a file. That is not necessary when using parallel
tests, since the test harness does the same thing.
Fix a few tests that either shouldn't be run in parallel, or weren't
using uniquely named test files and so would break when tests were run
in parallel.
Note: This commit breaks the $RUN_OUTPUT_FILE functionality.
---
.gitignore | 4 ++--
builder/test-virt-builder.sh | 8 ++++----
configure.ac | 19 ++-----------------
fish/test-events.sh | 10 +++++-----
fish/test-file-attrs.sh | 10 +++++-----
fish/test-find0.sh | 10 +++++-----
fish/test-read-file.sh | 8 ++++----
run.in | 34 +++++++++++++---------------------
tests/btrfs/test-btrfs-replace.sh | 8 ++++----
tests/qemu/Makefile.am | 4 ++++
tests/regressions/rhbz563450.sh | 10 +++++-----
tests/regressions/rhbz563450b.sh | 10 +++++-----
tests/regressions/rhbz789960.sh | 10 +++++-----
v2v/test-v2v-oa-option.sh | 2 +-
v2v/test-v2v-of-option.sh | 2 +-
v2v/test-v2v-on-option.sh | 2 +-
16 files changed, 66 insertions(+), 85 deletions(-)
diff --git a/.gitignore b/.gitignore
index 091a943..8091608 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,11 +14,13 @@
*.jar
*.la
*.lo
+*.log
*.o
*.orig
*.patch
*.rej
*.swp
+*.trs
bindtests.tmp
cscope.out
@@ -462,8 +464,6 @@ Makefile.in
/sysprep/sysprep-operations.pod
/sysprep/virt-sysprep
/sysprep/virt-sysprep.1
-/test.err
-/test.out
/tests/c-api/test-add-drive-opts
/tests/c-api/test-add-libvirt-dom
/tests/c-api/test-backend-settings
diff --git a/builder/test-virt-builder.sh b/builder/test-virt-builder.sh
index f357d12..2a9227b 100755
--- a/builder/test-virt-builder.sh
+++ b/builder/test-virt-builder.sh
@@ -74,7 +74,7 @@ $VG virt-builder phony-fedora \
--firstboot-install "minicom,inkscape"
# Check that some modifications were made.
-$VG guestfish --ro -i -a $output > test.out <<EOF
+$VG guestfish --ro -i -a $output > test-virt-builder.out <<EOF
# Uploaded files
is-file /etc/foo/bar/baz/Makefile
cat /etc/foo/bar/baz/foo
@@ -99,7 +99,7 @@ is-file /etc/shadow
cat /etc/shadow | sed -r '/^root:/!d;s,^(root:\\\$6\\\$).*,\\1,g'
EOF
-if [ "$(cat test.out)" != "true
+if [ "$(cat test-virt-builder.out)" != "true
Hello World
true
true
@@ -115,9 +115,9 @@ true
true
root:\$6\$" ]; then
echo "$0: unexpected output:"
- cat test.out
+ cat test-virt-builder.out
exit 1
fi
rm $output
-rm test.out
+rm test-virt-builder.out
diff --git a/configure.ac b/configure.ac
index 88f5568..bd3e5e9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,23 +30,8 @@ AC_SUBST([RELEASE_DATE], [2015-11-04])
AC_CONFIG_AUX_DIR([build-aux])
-dnl Initialize automake. automake < 1.12 didn't have serial-tests and
-dnl gives an error if it sees this, but for automake >= 1.13
-dnl serial-tests is required so we have to include it. Solution is to
-dnl test for the version of automake (by running an external command)
-dnl and provide it if necessary. Note we have to do this entirely using
-dnl m4 macros since automake queries this macro by running
-dnl 'autoconf --trace'.
-m4_define([serial_tests], [
- m4_esyscmd([automake --version | head -1 | awk '
- {
- split ($NF, version, ".");
- if (version[1] == 1 && version[2] >= 12)
- print "serial-tests";
- }'
- ])
-])
-AM_INIT_AUTOMAKE(foreign serial_tests subdir-objects) dnl NB: Do not [quote] this
parameter.
+dnl Initialize automake.
+AM_INIT_AUTOMAKE(foreign subdir-objects) dnl NB: Do not [quote] this parameter.
m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
diff --git a/fish/test-events.sh b/fish/test-events.sh
index 3f65164..7d4cd82 100755
--- a/fish/test-events.sh
+++ b/fish/test-events.sh
@@ -20,9 +20,9 @@
set -e
-rm -f test.out
+rm -f test-events.out
-$VG guestfish -a /dev/null <<'EOF' | grep -v get_verbose | grep -v
get_trace | grep -v 'library .*0x' | grep -v 'library command' | grep -v
'get_path' > test.out
+$VG guestfish -a /dev/null <<'EOF' | grep -v get_verbose | grep -v
get_trace | grep -v 'library .*0x' | grep -v 'library command' | grep -v
'get_path' > test-events.out
trace true
event ev1 * "echo $EVENT $@"
@@ -49,7 +49,7 @@ list-events
EOF
-if [ "$(cat test.out)" != '"ev1" (0): *: echo $EVENT $@
+if [ "$(cat test-events.out)" != '"ev1" (0): *: echo $EVENT $@
"ev1" (1): *: echo $EVENT $@
"ev2" (2): *: echo $EVENT $@
"ev2" (2): *: echo $EVENT $@
@@ -75,8 +75,8 @@ close
"ev2" (1): close,subprocess_quit: echo $EVENT $@
close' ]; then
echo "$0: unexpected output from guestfish events"
- cat test.out
+ cat test-events.out
exit 1
fi
-rm test.out
+rm test-events.out
diff --git a/fish/test-file-attrs.sh b/fish/test-file-attrs.sh
index 55d602c..7f34348 100755
--- a/fish/test-file-attrs.sh
+++ b/fish/test-file-attrs.sh
@@ -21,9 +21,9 @@
set -e
export LANG=C
-rm -f test.out
+rm -f test-file-attrs.out
-$VG guestfish > test.out <<EOF
+$VG guestfish > test-file-attrs.out <<EOF
scratch 50MB
run
part-disk /dev/sda mbr
@@ -72,7 +72,7 @@ copy-attributes /foo /new mode:true
stat /new | grep mode:
EOF
-if [ "$(cat test.out)" != "mode: 33226
+if [ "$(cat test-file-attrs.out)" != "mode: 33226
mode: 33226
-----
uid: 0
@@ -150,8 +150,8 @@ gid: 11
}
mode: 33226" ]; then
echo "$0: unexpected output:"
- cat test.out
+ cat test-file-attrs.out
exit 1
fi
-rm test.out
+rm test-file-attrs.out
diff --git a/fish/test-find0.sh b/fish/test-find0.sh
index 042e4ef..f327761 100755
--- a/fish/test-find0.sh
+++ b/fish/test-find0.sh
@@ -20,20 +20,20 @@
set -e
-rm -f test.out
+rm -f test-find0.out
$VG guestfish <<'EOF'
add-ro ../test-data/test.iso
run
mount-ro /dev/sda /
-find0 / test.out
+find0 / test-find0.out
EOF
-n=$(tr '\0' '\n' < test.out | grep '^known-[1-5]' | wc -l)
+n=$(tr '\0' '\n' < test-find0.out | grep '^known-[1-5]' | wc
-l)
[ "$n" = 5 ] || {
echo find0: Invalid list of files
- tr '\0' '\n' < test.out
+ tr '\0' '\n' < test-find0.out
exit 1
}
-rm -f test.out
+rm -f test-find0.out
diff --git a/fish/test-read-file.sh b/fish/test-read-file.sh
index 7819041..b83faa9 100755
--- a/fish/test-read-file.sh
+++ b/fish/test-read-file.sh
@@ -20,15 +20,15 @@
set -e
-rm -f test.out
+rm -f test-read-file.out
-$VG guestfish <<'EOF' > test.out
+$VG guestfish <<'EOF' > test-read-file.out
add-ro ../test-data/test.iso
run
mount-ro /dev/sda /
read-file /helloworld.tar
EOF
-cmp $srcdir/../test-data/files/helloworld.tar test.out
+cmp $srcdir/../test-data/files/helloworld.tar test-read-file.out
-rm -f test.out
+rm -f test-read-file.out
diff --git a/run.in b/run.in
index 46dbaf0..d59da7f 100755
--- a/run.in
+++ b/run.in
@@ -31,15 +31,20 @@
# For lots more ways to use this script, see the libguestfs README
# file.
#
-# The script can also be used to make the output of tests shorter:
+# The script should also be used for tests like this:
+#
# TESTS_ENVIRONMENT = ... $(top_builddir)/run --test [$(VG)]
-# (Use the optional $(VG) when the tests must also be run under
-# valgrind).
+#
+# The --test parameter introduces a timeout, stopping tests from
+# running forever.
+#
+# Use the optional $(VG) when the tests must also be run under
+# valgrind.
#----------------------------------------------------------------------
if [ "$1" = "--test" ]; then
- test_mode=1
+ timeout_mode=1
shift
fi
@@ -223,14 +228,11 @@ export GNOME_KEYRING_CONTROL=
export GNOME_KEYRING_PID=
# Run the program.
-if [ -z "$test_mode" ]; then
+if [ -z "$timeout_mode" ]; then
exec $libtool "$@"
fi
# For tests (./run --test):
-# - redirect all output to a file, and only print the file if the
-# test fails
-# - print how long it takes to run the test
# - timeout if the test takes too long to run
# Originally 1h, but that is not long enough to run the C API
@@ -246,28 +248,19 @@ if timeout --foreground 2 sleep 0 >/dev/null 2>&1; then
fi
fi
-pid=$$
-tmpout=$b/tmp/run-$pid
-rm -f $tmpout
-start_t="$(date +'%s')"
-$timeout $libtool "$@" > $tmpout 2>&1
+$timeout $libtool "$@"
fail=$?
-end_t="$(date +'%s')"
if [ "$fail" -eq 0 ]; then
# Test successful.
- echo $(($end_t - $start_t)) seconds: "$@"
+ :
elif [ "$fail" -eq 77 ]; then
# Tests return 77 to mean skipped.
- cat $tmpout
+ :
elif [ "$fail" -eq 124 ]; then
# Timed out.
- echo "$b/run --test" "$@"
- cat $tmpout
echo "$b/run: command timed out after $timeout_period"
else
# Test failed.
- echo "$b/run --test" "$@"
- cat $tmpout
echo "$b/run: command failed with exit code $fail"
fi
if [ -n "$RUN_OUTPUT_FILE" ]; then
@@ -282,5 +275,4 @@ if [ -n "$RUN_OUTPUT_FILE" ]; then
echo "]]>" >> $RUN_OUTPUT_FILE
echo "</test>" >> $RUN_OUTPUT_FILE
fi
-rm -f $tmpout
exit $fail
diff --git a/tests/btrfs/test-btrfs-replace.sh b/tests/btrfs/test-btrfs-replace.sh
index b0f4a1e..77aeb46 100755
--- a/tests/btrfs/test-btrfs-replace.sh
+++ b/tests/btrfs/test-btrfs-replace.sh
@@ -32,12 +32,12 @@ if ! guestfish -a /dev/null run : available btrfs; then
exit 77
fi
-rm -f test-btrfs-devices-{1,2}.img replace.output
+rm -f test-btrfs-replace-{1,2}.img replace.output
guestfish <<EOF > replace.output
# Add 2 empty disks
-sparse test-btrfs-devices-1.img 1G
-sparse test-btrfs-devices-2.img 1G
+sparse test-btrfs-replace-1.img 1G
+sparse test-btrfs-replace-2.img 1G
run
mkfs-btrfs /dev/sda
@@ -63,4 +63,4 @@ filesanddirs-10M.tar.xz" ]; then
exit 1
fi
-rm test-btrfs-devices-{1,2}.img replace.output
+rm test-btrfs-replace-{1,2}.img replace.output
diff --git a/tests/qemu/Makefile.am b/tests/qemu/Makefile.am
index 478b3f1..6c72b18 100644
--- a/tests/qemu/Makefile.am
+++ b/tests/qemu/Makefile.am
@@ -75,3 +75,7 @@ qemu_speed_test_LDADD = \
$(LIBVIRT_LIBS) \
$(LTLIBINTL) \
$(top_builddir)/gnulib/lib/libgnu.la
+
+# Don't run these tests in parallel, since they are designed to check
+# the integrity of qemu.
+.NOTPARALLEL:
diff --git a/tests/regressions/rhbz563450.sh b/tests/regressions/rhbz563450.sh
index 90397a2..5215676 100755
--- a/tests/regressions/rhbz563450.sh
+++ b/tests/regressions/rhbz563450.sh
@@ -27,9 +27,9 @@ if [ ! -s ../../test-data/phony-guests/fedora.img -o ! -s
../../test-data/test.i
exit 77
fi
-rm -f test.out
+rm -f rhbz563450.out
-guestfish --ro > test.out <<EOF
+guestfish --ro > rhbz563450.out <<EOF
add-drive-ro ../../test-data/phony-guests/fedora.img
add-cdrom ../../test-data/test.iso
add-drive-ro ../../test-data/phony-guests/debian.img
@@ -43,7 +43,7 @@ list-partitions | sed -r 's,^/dev/[abce-ln-z]+d,/dev/sd,'
ping-daemon
EOF
-if [ "$(cat test.out)" != "/dev/sda
+if [ "$(cat rhbz563450.out)" != "/dev/sda
/dev/sdb
/dev/sdc
----
@@ -52,8 +52,8 @@ if [ "$(cat test.out)" != "/dev/sda
/dev/sdc1
/dev/sdc2" ]; then
echo "$0: unexpected output:"
- cat test.out
+ cat rhbz563450.out
exit 1
fi
-rm -f test.out
+rm -f rhbz563450.out
diff --git a/tests/regressions/rhbz563450b.sh b/tests/regressions/rhbz563450b.sh
index f17b8f3..30f07b0 100755
--- a/tests/regressions/rhbz563450b.sh
+++ b/tests/regressions/rhbz563450b.sh
@@ -27,9 +27,9 @@ if [ ! -s ../../test-data/test.iso ]; then
exit 77
fi
-rm -f test.out
+rm -f rhbz563450b.out
-guestfish --ro > test.out <<EOF
+guestfish --ro > rhbz563450b.out <<EOF
add-cdrom ../../test-data/test.iso
run
@@ -39,10 +39,10 @@ list-devices | sed -r 's,^/dev/[abce-ln-z]+d,/dev/sd,'
ping-daemon
EOF
-if [ "$(cat test.out)" != "/dev/sda" ]; then
+if [ "$(cat rhbz563450b.out)" != "/dev/sda" ]; then
echo "$0: unexpected output:"
- cat test.out
+ cat rhbz563450b.out
exit 1
fi
-rm -f test.out
+rm -f rhbz563450b.out
diff --git a/tests/regressions/rhbz789960.sh b/tests/regressions/rhbz789960.sh
index adfb10a..57c04c3 100755
--- a/tests/regressions/rhbz789960.sh
+++ b/tests/regressions/rhbz789960.sh
@@ -22,9 +22,9 @@
set -e
export LANG=C
-rm -f test.out
+rm -f rhbz789960.out
-guestfish -a ../../test-data/phony-guests/fedora.img --ro > test.out <<EOF
+guestfish -a ../../test-data/phony-guests/fedora.img --ro > rhbz789960.out
<<EOF
run
# Not a device at all, should fail.
@@ -59,10 +59,10 @@ echo done
EOF
-if [ "$(cat test.out)" != "done" ]; then
+if [ "$(cat rhbz789960.out)" != "done" ]; then
echo "$0: unexpected output:"
- cat test.out
+ cat rhbz789960.out
exit 1
fi
-rm -f test.out
+rm -f rhbz789960.out
diff --git a/v2v/test-v2v-oa-option.sh b/v2v/test-v2v-oa-option.sh
index 5648f95..f3ffed8 100755
--- a/v2v/test-v2v-oa-option.sh
+++ b/v2v/test-v2v-oa-option.sh
@@ -43,7 +43,7 @@ fi
export VIRT_TOOLS_DATA_DIR="$PWD/fake-virt-tools"
-d=test-v2v-windows-conversion.d
+d=test-v2v-oa-option.d
rm -rf $d
mkdir $d
diff --git a/v2v/test-v2v-of-option.sh b/v2v/test-v2v-of-option.sh
index a151c73..16e2fd0 100755
--- a/v2v/test-v2v-of-option.sh
+++ b/v2v/test-v2v-of-option.sh
@@ -43,7 +43,7 @@ fi
export VIRT_TOOLS_DATA_DIR="$PWD/fake-virt-tools"
-d=test-v2v-windows-conversion.d
+d=test-v2v-of-option.d
rm -rf $d
mkdir $d
diff --git a/v2v/test-v2v-on-option.sh b/v2v/test-v2v-on-option.sh
index 5aaad2f..da55fe3 100755
--- a/v2v/test-v2v-on-option.sh
+++ b/v2v/test-v2v-on-option.sh
@@ -43,7 +43,7 @@ fi
export VIRT_TOOLS_DATA_DIR="$PWD/fake-virt-tools"
-d=test-v2v-windows-conversion.d
+d=test-v2v-on-option.d
rm -rf $d
mkdir $d
--
2.5.0