From 3636c5fcff69e7a5a5afa126a597883db4c781bb Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 12 Nov 2012 17:54:31 +0000 Subject: [PATCH] tests: Replace 'make extra-tests' with individual tests. 'make extra-tests' was a monolithic set of tests that did all sorts of things: valgrind, tests over local guests, tests with upstream qemu, tests with upstream libvirt, tests with the appliance attach method. This made it hard to perform individual tests, eg. just valgrind testing. It was also hard to maintain because the tests were not located in the same directories as the programs and sometimes duplicated tests that were run elsewhere. This commit splits up 'make extra-tests' into 5 separate targets: make check-valgrind # run a subset of tests under valgrind make check-valgrind-local-guests # test under valgrind with local guests make check-with-appliance # test with attach-method == appliance make check-with-upstream-qemu # test with an alternate/upstream qemu make check-with-upstream-libvirt # test with an alternate/upstream libvirt (You can also still run 'make extra-tests' which is now simply a rule that runs the above 5 targets in order). This replaces everything that was in the tests/extra directory, so that has now gone. --- .gitignore | 4 +- Makefile.am | 63 ++++- README | 18 +- align/Makefile.am | 3 + align/test-virt-alignment-scan.sh | 2 +- cat/Makefile.am | 13 +- cat/test-virt-cat.sh | 4 +- cat/test-virt-filesystems.sh | 4 +- cat/test-virt-ls.sh | 8 +- configure.ac | 3 +- df/Makefile.am | 6 + df/test-virt-df.sh | 2 +- fish/Makefile.am | 3 + fish/test-inspect.sh | 2 +- fish/test-prep.sh | 2 +- fish/test-run.sh | 2 +- format/Makefile.am | 3 + format/test-virt-format.sh | 6 +- inspector/Makefile.am | 8 + inspector/test-virt-inspector.sh | 4 +- ocaml/Makefile.am | 4 + .../extra/pick-guests.pl => pick-guests.pl.in | 13 +- resize/Makefile.am | 3 + resize/test-virt-resize.sh | 2 +- sparsify/Makefile.am | 3 + sparsify/test-virt-sparsify.sh | 2 +- src/guestfs.pod | 61 ++++- sysprep/Makefile.am | 8 + sysprep/test-virt-sysprep.sh | 8 +- test-tool/Makefile.am | 3 + tests/c-api/Makefile.am | 3 + tests/extra/Makefile.am | 229 ------------------ tests/extra/test-with-launch-appliance.sh | 27 --- tests/extra/test-with-upstream-libvirt.sh | 38 --- tests/extra/test-with-upstream-qemu.sh | 50 ---- tests/mount-local/Makefile.am | 3 + 36 files changed, 225 insertions(+), 392 deletions(-) rename tests/extra/pick-guests.pl => pick-guests.pl.in (85%) delete mode 100644 tests/extra/Makefile.am delete mode 100755 tests/extra/test-with-launch-appliance.sh delete mode 100755 tests/extra/test-with-upstream-libvirt.sh delete mode 100755 tests/extra/test-with-upstream-qemu.sh diff --git a/.gitignore b/.gitignore index 83cbd52bc..b61e44f64 100644 --- a/.gitignore +++ b/.gitignore @@ -299,6 +299,7 @@ Makefile.in /php/extension/php_guestfs_php.h /php/extension/run-tests.php /php/extension/tmp-php.ini +/pick-guests.pl /po-docs/*/*.1 /po-docs/*/*.3 /po-docs/*/*.8 @@ -316,6 +317,7 @@ Makefile.in /python/guestfs.pyc /python/guestfs.pyo /python/__pycache__ +/qemu-wrapper.sh /rescue/stamp-virt-rescue.pod /rescue/virt-rescue /rescue/virt-rescue.1 @@ -407,8 +409,6 @@ Makefile.in /tests/data/initrd-x86_64.img.gz /tests/data/test-grep.txt.gz /tests/data/test.iso -/tests/extra/qemu-wrapper.sh -/tests/extra/valgrind.log /tests/guests/debian.img /tests/guests/fedora.img /tests/guests/fedora-md1.img diff --git a/Makefile.am b/Makefile.am index e09321072..d484dc15a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -59,9 +59,6 @@ SUBDIRS += tests/hotplug SUBDIRS += tests/regressions endif -# Extra tests don't run by default. You have to do 'make extra-tests'. -SUBDIRS += tests/extra - # libguestfs-test-tool SUBDIRS += test-tool @@ -281,8 +278,9 @@ stamp-guestfs-release-notes.pod: guestfs-release-notes.pod # Make clean. CLEANFILES = \ - pod2htm?.tmp \ html/*.html \ + pod2htm?.tmp \ + qemu-wrapper.sh \ stamp-guestfs-release-notes.pod # If you don't want to run all of the tests ('make check') then this @@ -292,7 +290,60 @@ CLEANFILES = \ quickcheck: $(top_builddir)/run test-tool/libguestfs-test-tool $(QUICKCHECK_TEST_TOOL_ARGS) -# Run extra-tests in tests/extra/ subdirectory. +# Non-standard tests. extra-tests: - make -C tests/extra $@ + $(MAKE) -j1 \ + valgrind \ + valgrind-local-guests \ + check-with-appliance \ + check-with-upstream-qemu \ + check-with-upstream-libvirt + +check-valgrind: build-test-guests + @for f in `grep -l '^$@:' $(SUBDIRS:%=%/Makefile.am)`; do \ + echo $(MAKE) -C `dirname $$f` $@; \ + $(MAKE) -C `dirname $$f` $@ || exit $$?; \ + done + +check-valgrind-local-guests: + @GUESTS=`$(top_builddir)/run ./pick-guests.pl 5`; \ + for f in `grep -l '^$@:' $(SUBDIRS:%=%/Makefile.am)`; do \ + echo $(MAKE) GUESTS="$$GUESTS" -C `dirname $$f` $@; \ + $(MAKE) GUESTS="$$GUESTS" -C `dirname $$f` $@ || exit $$?; \ + done + +build-test-guests: + $(MAKE) -C tests/guests check + +check-with-appliance: + @method=`$(top_builddir)/run ./fish/guestfish get-attach-method`; \ + if [ "$$method" != "appliance" ]; then \ + $(MAKE) LIBGUESTFS_ATTACH_METHOD=appliance check || exit $$?; \ + fi + +QEMUDIR = $(HOME)/d/qemu +QEMUBINARY = $(QEMUDIR)/x86_64-softmmu/qemu-system-x86_64 + +check-with-upstream-qemu: + @if $(QEMUBINARY) --help >/dev/null 2>&1; then \ + $(MAKE) check-with-upstream-qemu-1 || exit $$?; \ + fi + +check-with-upstream-qemu-1: $(top_builddir)/qemu-wrapper.sh + $(QEMUBINARY) --version + $(MAKE) LIBGUESTFS_QEMU=$(top_builddir)/qemu-wrapper.sh check + +$(top_builddir)/qemu-wrapper.sh: Makefile + rm -f $@ $@-t + echo exec "$(QEMUBINARY)" -L "$(QEMUDIR)/pc-bios" "$$@" > $@-t + chmod +x,-w $@-t + mv $@-t $@ + +LIBVIRTDIR = $(HOME)/d/libvirt + +check-with-upstream-libvirt: + @method=`$(top_builddir)/run ./fish/guestfish get-attach-method`; \ + if [ "$$method" = "libvirt" ] && [ -x "$(LIBVIRTDIR)/run" ]; then \ + $(LIBVIRTDIR)/run $(MAKE) check || exit $$?; \ + fi diff --git a/README b/README index 40fe8e462..1c0c6ef50 100644 --- a/README +++ b/README @@ -164,13 +164,19 @@ Finally run the tests: make check -There are some extra tests, but these require that you have some -libvirt guests installed, that these guests' disks are accessible by -the current user, and these tests may fail for other reasons which are -not necessarily because of real problems. If you want to run these -extra tests do: +Also: - make extra-tests + make check-valgrind + +runs a subset of the test suite under valgrind (requires valgrind to +be installed obviously). + + make extra-tests + +runs check-valgrind + even more tests, but these require that you have +some libvirt guests installed, that these guests' disks are accessible +by the current user, and these tests may fail for other reasons which +are not necessarily because of real problems. If everything works, you can install the library and tools by running this command as root: diff --git a/align/Makefile.am b/align/Makefile.am index 4e3fdfe82..c44b8e3eb 100644 --- a/align/Makefile.am +++ b/align/Makefile.am @@ -80,3 +80,6 @@ if ENABLE_APPLIANCE TESTS += \ test-virt-alignment-scan.sh endif + +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check diff --git a/align/test-virt-alignment-scan.sh b/align/test-virt-alignment-scan.sh index 058981eb6..a77990271 100755 --- a/align/test-virt-alignment-scan.sh +++ b/align/test-virt-alignment-scan.sh @@ -16,7 +16,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -./virt-alignment-scan -a ../tests/guests/fedora.img +$VG ./virt-alignment-scan -a ../tests/guests/fedora.img r=$? # 0, 2 and 3 are reasonable non-error exit codes. Others are errors. diff --git a/cat/Makefile.am b/cat/Makefile.am index 3549248c3..daea44618 100644 --- a/cat/Makefile.am +++ b/cat/Makefile.am @@ -134,5 +134,16 @@ stamp-virt-filesystems.pod: virt-filesystems.pod TESTS_ENVIRONMENT = $(top_builddir)/run --test if ENABLE_APPLIANCE -TESTS = test-virt-cat.sh test-virt-filesystems.sh test-virt-ls.sh +TESTS = \ + test-virt-cat.sh \ + test-virt-filesystems.sh \ + test-virt-ls.sh endif ENABLE_APPLIANCE + +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check + +check-valgrind-local-guests: + for g in $(GUESTS); do \ + $(top_builddir)/run --test @VG@ ./virt-filesystems -c "$(libvirt_ro_uri)" -d "$$g" --all --long -h --uuid || exit $$?; \ + done diff --git a/cat/test-virt-cat.sh b/cat/test-virt-cat.sh index 5c0515607..ee306bf7c 100755 --- a/cat/test-virt-cat.sh +++ b/cat/test-virt-cat.sh @@ -20,11 +20,11 @@ export LANG=C set -e # Read out the test files from the image using virt-cat. -if [ "$(./virt-cat ../tests/guests/fedora.img /etc/test1)" != "abcdefg" ]; then +if [ "$($VG ./virt-cat ../tests/guests/fedora.img /etc/test1)" != "abcdefg" ]; then echo "$0: error: mismatch in file test1" exit 1 fi -if [ "$(./virt-cat ../tests/guests/fedora.img /etc/test2)" != "" ]; then +if [ "$($VG ./virt-cat ../tests/guests/fedora.img /etc/test2)" != "" ]; then echo "$0: error: mismatch in file test2" exit 1 fi diff --git a/cat/test-virt-filesystems.sh b/cat/test-virt-filesystems.sh index b413bacf6..96a398e4b 100755 --- a/cat/test-virt-filesystems.sh +++ b/cat/test-virt-filesystems.sh @@ -19,7 +19,7 @@ export LANG=C set -e -output="$(./virt-filesystems -a ../tests/guests/fedora.img | sort)" +output="$($VG ./virt-filesystems -a ../tests/guests/fedora.img | sort)" expected="/dev/VG/LV1 /dev/VG/LV2 /dev/VG/LV3 @@ -32,7 +32,7 @@ if [ "$output" != "$expected" ]; then exit 1 fi -output="$(./virt-filesystems -a ../tests/guests/fedora.img --all --long --uuid -h --no-title | awk '{print $1}' | sort -u)" +output="$($VG ./virt-filesystems -a ../tests/guests/fedora.img --all --long --uuid -h --no-title | awk '{print $1}' | sort -u)" expected="/dev/VG /dev/VG/LV1 /dev/VG/LV2 diff --git a/cat/test-virt-ls.sh b/cat/test-virt-ls.sh index 9cfe9db99..55fc1140a 100755 --- a/cat/test-virt-ls.sh +++ b/cat/test-virt-ls.sh @@ -20,7 +20,7 @@ export LANG=C set -e # Read out the test directory using virt-ls. -if [ "$(./virt-ls ../tests/guests/fedora.img /bin)" != "ls +if [ "$($VG ./virt-ls ../tests/guests/fedora.img /bin)" != "ls test1 test2 test3 @@ -33,7 +33,7 @@ test7" ]; then fi # Try the -lR option. -output="$(./virt-ls -lR ../tests/guests/fedora.img /boot | awk '{print $1 $2 $4}')" +output="$($VG ./virt-ls -lR ../tests/guests/fedora.img /boot | awk '{print $1 $2 $4}')" expected="d0755/boot d0755/boot/grub -0644/boot/grub/grub.conf @@ -47,3 +47,7 @@ if [ "$output" != "$expected" ]; then echo "--------------------------------------------------" exit 1 fi + +# Try the -l and -R options. XXX Should check the output. +$VG ./virt-ls -l ../tests/guests/fedora.img / +$VG ./virt-ls -R ../tests/guests/fedora.img / diff --git a/configure.ac b/configure.ac index 4d6083d02..c3740ba7f 100644 --- a/configure.ac +++ b/configure.ac @@ -1338,6 +1338,8 @@ AC_CONFIG_FILES([appliance/libguestfs-make-fixed-appliance], [chmod +x,-w appliance/libguestfs-make-fixed-appliance]) AC_CONFIG_FILES([inspector/test-xmllint.sh], [chmod +x,-w inspector/test-xmllint.sh]) +AC_CONFIG_FILES([pick-guests.pl], + [chmod +x,-w pick-guests.pl]) AC_CONFIG_FILES([podwrapper.pl], [chmod +x,-w podwrapper.pl]) AC_CONFIG_FILES([run], @@ -1397,7 +1399,6 @@ AC_CONFIG_FILES([Makefile tests/data/Makefile tests/disks/Makefile tests/disk-labels/Makefile - tests/extra/Makefile tests/guests/Makefile tests/hotplug/Makefile tests/luks/Makefile diff --git a/df/Makefile.am b/df/Makefile.am index b91efd383..52ec9b76e 100644 --- a/df/Makefile.am +++ b/df/Makefile.am @@ -80,3 +80,9 @@ TESTS_ENVIRONMENT = $(top_builddir)/run --test if ENABLE_APPLIANCE TESTS = test-virt-df.sh endif ENABLE_APPLIANCE + +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check + +check-valgrind-local-guests: + $(top_builddir)/run --test @VG@ ./virt-df -c "$(libvirt_ro_uri)" diff --git a/df/test-virt-df.sh b/df/test-virt-df.sh index dd5abf666..55f083213 100755 --- a/df/test-virt-df.sh +++ b/df/test-virt-df.sh @@ -20,7 +20,7 @@ export LANG=C set -e # Run virt-df. -output=$(./virt-df ../tests/guests/fedora.img) +output=$($VG ./virt-df ../tests/guests/fedora.img) # Check title is the first line. if [[ ! $output =~ ^Filesystem.* ]]; then diff --git a/fish/Makefile.am b/fish/Makefile.am index 100b1b380..080029672 100644 --- a/fish/Makefile.am +++ b/fish/Makefile.am @@ -270,6 +270,9 @@ TESTS += \ test-upload-to-dir.sh endif +check-valgrind: + $(MAKE) TESTS="test-inspect.sh test-prep.sh test-run.sh" VG="$(top_builddir)/run @VG@" check + EXTRA_DIST += \ test-a.sh \ test-add-domain.sh \ diff --git a/fish/test-inspect.sh b/fish/test-inspect.sh index cea562219..8f8abe67d 100755 --- a/fish/test-inspect.sh +++ b/fish/test-inspect.sh @@ -18,4 +18,4 @@ set -e -./guestfish -a ../tests/guests/fedora.img -i exit +$VG ./guestfish -a ../tests/guests/fedora.img -i exit diff --git a/fish/test-prep.sh b/fish/test-prep.sh index e75b9d417..0107c0da3 100755 --- a/fish/test-prep.sh +++ b/fish/test-prep.sh @@ -22,7 +22,7 @@ rm -f test*.img # It would be nice if we could keep this automatically in sync # with the prepared disk types. XXX -./guestfish \ +$VG ./guestfish \ -N disk -N part -N fs \ -N lv:/dev/VG1/LV \ -N lvfs:/dev/VG2/LV \ diff --git a/fish/test-run.sh b/fish/test-run.sh index 98d5d91e5..ec6e0d390 100755 --- a/fish/test-run.sh +++ b/fish/test-run.sh @@ -18,4 +18,4 @@ set -e -./guestfish -a ../tests/guests/fedora.img run +$VG ./guestfish -a ../tests/guests/fedora.img run diff --git a/format/Makefile.am b/format/Makefile.am index 63cba519e..560598d13 100644 --- a/format/Makefile.am +++ b/format/Makefile.am @@ -74,4 +74,7 @@ if ENABLE_APPLIANCE TESTS = test-virt-format.sh endif ENABLE_APPLIANCE +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check + EXTRA_DIST += test-virt-format.sh diff --git a/format/test-virt-format.sh b/format/test-virt-format.sh index a6f81e00f..1fd5baace 100755 --- a/format/test-virt-format.sh +++ b/format/test-virt-format.sh @@ -27,11 +27,11 @@ fi rm -f test1.img -../fish/guestfish -N bootrootlv exit +$VG ../fish/guestfish -N bootrootlv exit -./virt-format --filesystem=ext3 -a test1.img +$VG ./virt-format --filesystem=ext3 -a test1.img -if [ "$(../cat/virt-filesystems -a test1.img)" != "/dev/sda1" ]; then +if [ "$($VG ../cat/virt-filesystems -a test1.img)" != "/dev/sda1" ]; then echo "$0: unexpected output after using virt-format" exit 1 fi diff --git a/inspector/Makefile.am b/inspector/Makefile.am index a72d7f18c..6004f12cc 100644 --- a/inspector/Makefile.am +++ b/inspector/Makefile.am @@ -99,6 +99,14 @@ if HAVE_XMLLINT TESTS += test-xmllint.sh endif +check-valgrind: + $(MAKE) TESTS="test-virt-inspector.sh" VG="$(top_builddir)/run @VG@" check + +check-valgrind-local-guests: + for g in $(GUESTS); do \ + $(top_builddir)/run --test @VG@ ./virt-inspector -c "$(libvirt_ro_uri)" -d "$$g" || exit $$?; \ + done + endif # These rules require virt-inspector so there is no good time that we diff --git a/inspector/test-virt-inspector.sh b/inspector/test-virt-inspector.sh index 517ae1e4a..fad5e5835 100755 --- a/inspector/test-virt-inspector.sh +++ b/inspector/test-virt-inspector.sh @@ -20,11 +20,11 @@ export LANG=C set -e for f in ../tests/guests/{debian,fedora,ubuntu,windows}.img; do - ./virt-inspector -a $f + $VG ./virt-inspector -a $f done # We could also test this image, but mdadm is problematic for # many users. -# ./virt-inspector \ +# $VG ./virt-inspector \ # -a ../tests/guests/fedora-md1.img \ # -a ../tests/guests/fedora-md2.img diff --git a/ocaml/Makefile.am b/ocaml/Makefile.am index 826457430..a17f6166e 100644 --- a/ocaml/Makefile.am +++ b/ocaml/Makefile.am @@ -183,6 +183,10 @@ t/guestfs_070_threads.cmo: t/guestfs_070_threads.ml mlguestfs.cma t/guestfs_070_threads.cmx: t/guestfs_070_threads.ml mlguestfs.cmxa $(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) -package unix,threads -thread -linkpkg -c $< -o $@ +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check + +# Dependencies. %.cmi: %.mli $(OCAMLFIND) ocamlc $(OCAMLCFLAGS) -package unix -c $< -o $(builddir)/$@ %.cmo: %.ml mlguestfs.cma diff --git a/tests/extra/pick-guests.pl b/pick-guests.pl.in similarity index 85% rename from tests/extra/pick-guests.pl rename to pick-guests.pl.in index d2e4a2252..1ec2c2aa5 100755 --- a/tests/extra/pick-guests.pl +++ b/pick-guests.pl.in @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# libguestfs +# @configure_input@ # Copyright (C) 2009-2012 Red Hat Inc. # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Pick guests at random on the local machine which are accessible. -# Note that the Makefile sets $LIBVIRT_DEFAULT_URI. +# This is used by 'make check-valgrind-local-guests'. use strict; @@ -28,7 +28,7 @@ use List::Util qw(shuffle); die "$0 nr-guests\n" unless @ARGV == 1; my $n = $ARGV[0]; -my $vmm = Sys::Virt->new; +my $vmm = Sys::Virt->new (uri => '@libvirt_ro_uri@'); my @domains = ($vmm->list_domains, $vmm->list_defined_domains); # Only guests which are accessible by the current (non-root) user. On @@ -42,7 +42,8 @@ foreach my $dom (@domains) { my $name = $dom->get_name; my $g = Sys::Guestfs->new; eval { - $g->add_domain ($name, readonly => 1); + $g->add_domain ($name, readonly => 1, + libvirturi => '@libvirt_ro_uri@'); # $g->launch (); - don't actually need to do this }; push @accessible, $name unless $@; @@ -55,5 +56,7 @@ $n = @accessible if @accessible < $n; # Return the first n guests from the list. for (my $i = 0; $i < $n; ++$i) { - print $accessible[$i], "\n"; + print " " if $i > 0; + print $accessible[$i]; } +print "\n"; diff --git a/resize/Makefile.am b/resize/Makefile.am index 7d4cade57..8ba4c5b52 100644 --- a/resize/Makefile.am +++ b/resize/Makefile.am @@ -116,6 +116,9 @@ if ENABLE_APPLIANCE TESTS += test-virt-resize.sh endif +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check + # Dependencies. depend: .depend diff --git a/resize/test-virt-resize.sh b/resize/test-virt-resize.sh index 78b4821e2..0831df4c3 100755 --- a/resize/test-virt-resize.sh +++ b/resize/test-virt-resize.sh @@ -24,7 +24,7 @@ set -e # This exercises a number of interesting codepaths including resizing # LV content, handling GPT, and using qcow2 as a target. -../fish/guestfish -N bootrootlv:/dev/VG/LV:ext2:ext4:400M:32M:gpt . -=head2 FORMATTING CODE AND OTHER CONVENTIONS +=head2 FORMATTING CODE Our C source code generally adheres to some basic code-formatting conventions. The existing code base is not totally consistent on this @@ -3495,6 +3495,8 @@ If you use Emacs, add the following to one of one of your start-up files (buffer-file-name)) (libguestfs-c-mode)))) +=head2 TESTING YOUR CHANGES + Enable warnings when compiling (and fix any problems this finds): @@ -3502,13 +3504,56 @@ finds): Useful targets are: - make syntax-check -j1 -k # checks for various syntax and - # style problems - - make check # runs the test suite - - make extra-tests # in-depth testing using valgrind - # and real guests +=over 4 + +=item C + +Runs the regular test suite. + +=item C + +Checks for various syntax and style problems in the code. + +=item C + +Runs a subset of the test suite under valgrind. + +=item C + +Runs a subset of the test suite under valgrind +using locally installed libvirt guests (read-only). + +=item C + +Runs all tests using default appliance back-end. This only +has any effect if a non-default attach-method was selected +using C<./configure --with-default-attach-method=...> + +=item C + +Runs all tests using a local qemu binary. It looks for the qemu +binary in QEMUDIR (defaults to C<$HOME/d/qemu>), but you can set this +to another directory on the command line, eg: + + make check-with-upstream-qemu QEMUDIR=/usr/src/qemu + +=item C + +Runs all tests using a local libvirt. This only has any effect if the +libvirt attach-method was selected using +C<./configure --with-default-attach-method=libvirt> + +It looks for libvirt in LIBVIRTDIR (defaults to C<$HOME/d/libvirt>), +but you can set this to another directory on the command line, eg: + + make check-with-upstream-libvirt LIBVIRTDIR=/usr/src/libvirt + +=item C + +Equivalent to running all C rules +(but not C). + +=back =head2 DAEMON CUSTOM PRINTF FORMATTERS diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am index 0e2401177..a74792916 100644 --- a/sysprep/Makefile.am +++ b/sysprep/Makefile.am @@ -159,6 +159,14 @@ TESTS = \ test-virt-sysprep-script.sh endif ENABLE_APPLIANCE +check-valgrind: + $(MAKE) TESTS="test-virt-sysprep.sh" VG="$(top_builddir)/run @VG@" check + +check-valgrind-local-guests: + for g in $(GUESTS); do \ + $(top_builddir)/run --test @VG@ ./virt-sysprep -n -c "$(libvirt_ro_uri)" -d "$$g" || exit $$?; \ + done + # Dependencies. depend: .depend diff --git a/sysprep/test-virt-sysprep.sh b/sysprep/test-virt-sysprep.sh index 2443ce23e..8a375f6ff 100755 --- a/sysprep/test-virt-sysprep.sh +++ b/sysprep/test-virt-sysprep.sh @@ -23,5 +23,11 @@ set -e # to be able to sysprep any of our test guests. for f in ../tests/guests/{debian,fedora,ubuntu,windows}.img; do - ./virt-sysprep -q -n -a $f + $VG ./virt-sysprep -q -n -a $f done + +# We could also test this image, but mdadm is problematic for +# many users. +# $VG ./virt-sysprep -q -n \ +# -a ../tests/guests/fedora-md1.img \ +# -a ../tests/guests/fedora-md2.img diff --git a/test-tool/Makefile.am b/test-tool/Makefile.am index 5e2757ebb..50dc8b145 100644 --- a/test-tool/Makefile.am +++ b/test-tool/Makefile.am @@ -42,3 +42,6 @@ stamp-libguestfs-test-tool.pod: libguestfs-test-tool.pod --license GPLv2+ \ $< touch $@ + +check-valgrind: + $(top_builddir)/run --test @VG@ ./libguestfs-test-tool diff --git a/tests/c-api/Makefile.am b/tests/c-api/Makefile.am index 7adedeb7c..5f684f761 100644 --- a/tests/c-api/Makefile.am +++ b/tests/c-api/Makefile.am @@ -169,3 +169,6 @@ test_environment_LDADD = \ # $(top_builddir)/src/libguestfs.la $(LIBVIRT_LIBS) \ # $(LTLIBTHREAD) $(top_builddir)/gnulib/lib/libgnu.la #endif + +check-valgrind: + $(MAKE) VG="$(top_builddir)/run @VG@" check diff --git a/tests/extra/Makefile.am b/tests/extra/Makefile.am deleted file mode 100644 index 41cc54c1f..000000000 --- a/tests/extra/Makefile.am +++ /dev/null @@ -1,229 +0,0 @@ -# libguestfs -# Copyright (C) 2009-2012 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# Extra tests. -# -# Requires: -# - some local libvirt guests are available -# - the disks of these guests are accessible by the current user -# (tip: add yourself to the 'disk' group) -# - valgrind -# - libtool -# Optional: -# - upstream qemu in $QEMUDIR -# - upstream libvirt in $LIBVIRTDIR -# -# These tests may fail for reasons which aren't necessarily real problems. -# -# XXX Not tested: -# -# ../edit/virt-edit -# -# Perl bindings -# ../edit/virt-edit -e -# ../tools/virt-win-reg (Perl) -# ../tools/virt-make-fs (Perl) -# - hard because Perl doesn't cooperate by freeing memory -# -# Python bindings -# - as for Perl -# -# Ruby bindings -# - these look feasible to test using valgrind -# -# Java bindings -# -# ../fuse/guestmount -# - hard to test because guestmount forks into the background, and -# if valgrind reports errors it doesn't stop the test shell script - -# Old RHEL 5 autoconf doesn't have abs_srcdir. -abs_srcdir ?= $(shell cd $(top_srcdir)/tests/extra && pwd) - -# Old RHEL 5 autoconf doesn't have abs_builddir. -abs_builddir ?= $(shell pwd) - -EXTRA_DIST = \ - pick-guests.pl \ - test-with-launch-appliance.sh \ - test-with-upstream-libvirt.sh \ - test-with-upstream-qemu.sh - -VG = @VG@ -RUN_VG = $(abs_top_builddir)/run $(VG) - -# Choose guests at random on each run. -random_guests := \ - $(shell \ - LIBVIRT_DEFAULT_URI="$(libvirt_ro_uri)" \ - $(abs_top_builddir)/run $(srcdir)/pick-guests.pl 5) - -extra-tests-non-recursive: \ - test-guests \ - test-prerequisites \ - test-c-api \ - test-tools-null \ - test-tools-internal \ - test-df-real \ - test-filesystems-real \ - test-inspector-real \ - test-sysprep-real \ - test-ocaml \ - test-resize \ - test-sparsify \ - test-mount-local - -extra-tests: \ - extra-tests-non-recursive \ - extra-tests-with-upstream-qemu \ - extra-tests-with-upstream-libvirt \ - extra-tests-with-launch-appliance - -test-guests: - $(MAKE) -C ../guests check - -test-prerequisites: - @libtool --help >/dev/null 2>&1 || { \ - echo "extra-tests: libtool is not installed"; \ - exit 1; \ - } - @valgrind --help >/dev/null 2>&1 || { \ - echo "extra-tests: valgrind is not installed"; \ - exit 1; \ - } - -# Null invocations of the basic tools shouldn't leak memory. -test-tools-null: - $(RUN_VG) ../../fish/guestfish -N part exit - $(RUN_VG) ../../align/virt-alignment-scan -a test1.img >/dev/null - $(RUN_VG) ../../format/virt-format -a test1.img >/dev/null - rm test1.img - $(RUN_VG) ../../cat/virt-filesystems -a /dev/null >/dev/null - $(RUN_VG) ../../cat/virt-filesystems -a /dev/null --all --long -h --uuid >/dev/null - $(RUN_VG) ../../df/virt-df -a /dev/null >/dev/null - $(RUN_VG) ../../fish/guestfish -a /dev/null run - $(RUN_VG) ../../inspector/virt-inspector -a /dev/null >/dev/null - $(RUN_VG) ../../test-tool/libguestfs-test-tool >/dev/null 2>&1 - -# Invocations of tools on internal images shouldn't leak memory. -test-tools-internal: - $(RUN_VG) ../../cat/virt-cat -a ../guests/fedora.img /etc/fstab >/dev/null - $(RUN_VG) ../../cat/virt-filesystems -a ../guests/fedora.img >/dev/null - $(RUN_VG) ../../cat/virt-filesystems -a ../guests/fedora.img --all --long -h --uuid >/dev/null - $(RUN_VG) ../../cat/virt-ls -a ../guests/fedora.img / >/dev/null - $(RUN_VG) ../../cat/virt-ls -a ../guests/fedora.img -l / >/dev/null - $(RUN_VG) ../../cat/virt-ls -a ../guests/fedora.img -R / >/dev/null - $(RUN_VG) ../../cat/virt-ls -a ../guests/fedora.img -lR / >/dev/null - $(RUN_VG) ../../df/virt-df -a ../guests/fedora.img >/dev/null - $(RUN_VG) ../../df/virt-df -a ../guests/fedora.img -h >/dev/null - $(RUN_VG) ../../fish/guestfish -a ../guests/fedora.img run - $(RUN_VG) ../../fish/guestfish -a ../guests/fedora.img -i exit - $(RUN_VG) ../../inspector/virt-inspector -a ../guests/debian.img >/dev/null - $(RUN_VG) ../../inspector/virt-inspector -a ../guests/fedora.img >/dev/null - $(RUN_VG) ../../inspector/virt-inspector -a ../guests/fedora-md1.img -a ../guests/fedora-md2.img >/dev/null - $(RUN_VG) ../../inspector/virt-inspector -a ../guests/ubuntu.img >/dev/null - $(RUN_VG) ../../inspector/virt-inspector -a ../guests/windows.img >/dev/null - $(RUN_VG) ../../sysprep/virt-sysprep -n -a ../guests/debian.img - $(RUN_VG) ../../sysprep/virt-sysprep -n -a ../guests/fedora.img - $(RUN_VG) ../../sysprep/virt-sysprep -n -a ../guests/fedora-md1.img -a ../guests/fedora-md2.img - $(RUN_VG) ../../sysprep/virt-sysprep -n -a ../guests/ubuntu.img - $(RUN_VG) ../../sysprep/virt-sysprep -n -a ../guests/windows.img - -# Invocations of tools on real images shouldn't leak memory. -test-df-real: - $(RUN_VG) ../../df/virt-df -c "$(libvirt_ro_uri)" >/dev/null - $(RUN_VG) ../../df/virt-df -c "$(libvirt_ro_uri)" -h >/dev/null - -test-filesystems-real: - @for g in $(random_guests); do \ - echo $(RUN_VG) ../../cat/virt-filesystems -c "$(libvirt_ro_uri)" -d $$g --all --long -h --uuid; \ - $(RUN_VG) ../../cat/virt-filesystems -c "$(libvirt_ro_uri)" -d $$g --all --long -h --uuid > /dev/null; \ - r=$$?; \ - if [ $$r -ne 0 ]; then exit $$r; fi; \ - done - -test-inspector-real: - @for g in $(random_guests); do \ - echo $(RUN_VG) ../../inspector/virt-inspector -c "$(libvirt_ro_uri)" -d $$g; \ - $(RUN_VG) ../../inspector/virt-inspector -c "$(libvirt_ro_uri)" -d $$g > /dev/null; \ - r=$$?; \ - if [ $$r -ne 0 ]; then exit $$r; fi; \ - done - -test-sysprep-real: - @for g in $(random_guests); do \ - echo $(RUN_VG) ../../sysprep/virt-sysprep -n -c "$(libvirt_ro_uri)" -d $$g; \ - $(RUN_VG) ../../sysprep/virt-sysprep -n -c "$(libvirt_ro_uri)" -d $$g > /dev/null; \ - r=$$?; \ - if [ $$r -ne 0 ]; then exit $$r; fi; \ - done - -# Run virt-resize tests under valgrind. -test-resize: - $(MAKE) -C ../../resize VG="$(VG)" check - -# Run virt-sparsify tests under valgrind. -test-sparsify: - $(MAKE) -C ../../sparsify VG="$(VG)" check - -# Run c-api tests under valgrind. -test-c-api: - $(MAKE) -C ../c-api VG="$(RUN_VG)" check - -# Run parallel mount-local test under valgrind. -test-mount-local: - $(MAKE) -C ../mount-local VG="$(VG)" check - -# Test OCaml bindings under valgrind. -test-ocaml: - $(MAKE) -C ../../ocaml VG="$(VG)" check - -# When running the extra tests, if directory $QEMUDIR exists then we -# will rerun all the extra-tests using the version of qemu from that -# directory. eg. That might be qemu from git. -# -# The directory name can be overridden using: -# make extra-tests QEMUDIR=/path/to/other/qemu - -QEMUDIR = $(HOME)/d/qemu -export QEMUDIR -export abs_srcdir -export MAKE - -extra-tests-with-upstream-qemu: - ./test-with-upstream-qemu.sh - -# When running the extra tests and ./configure -# --with-default-attach-method=libvirt, if directory $LIBVIRTDIR -# exists, we will rerun all the extra-tests using the version of -# libvirt in that directory. eg. That might be upstream libvirt from -# git. -# -# The directory name can be overridden using: -# make extra-tests LIBVIRTDIR=/path/to/other/libvirt - -LIBVIRTDIR = $(HOME)/d/libvirt -export LIBVIRTDIR - -extra-tests-with-upstream-libvirt: - ./test-with-upstream-libvirt.sh - -# If libvirt is being used as the backend, rerun all the extra-tests -# again using the regular appliance backend. - -extra-tests-with-launch-appliance: - ./test-with-launch-appliance.sh diff --git a/tests/extra/test-with-launch-appliance.sh b/tests/extra/test-with-launch-appliance.sh deleted file mode 100755 index 0a4f51b71..000000000 --- a/tests/extra/test-with-launch-appliance.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2012 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -set -e -#set -x - -method="$(../../fish/guestfish get-attach-method)" -if [ "$method" = "appliance" ]; then - echo "$0: test skipped because attach-method is already 'appliance'" - exit 77 -fi - -exec $MAKE extra-tests-non-recursive LIBGUESTFS_ATTACH_METHOD=appliance diff --git a/tests/extra/test-with-upstream-libvirt.sh b/tests/extra/test-with-upstream-libvirt.sh deleted file mode 100755 index 31b50e8fa..000000000 --- a/tests/extra/test-with-upstream-libvirt.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2012 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -set -e -#set -x - -method="$(../../fish/guestfish get-attach-method)" -if [ "$method" != "libvirt" ]; then - echo "$0: test skipped because attach-method is not 'libvirt'" - exit 77 -fi - -if [ ! -d "$LIBVIRTDIR" ]; then - echo "$0: \$LIBVIRTDIR not a directory, tests against upstream libvirt skipped" - exit 77 -fi - -libvirt_run="$LIBVIRTDIR/run" -if [ ! -x "$libvirt_run" ]; then - echo "$0: $libvirt_run not executable, tests against upstream libvirt skipped" - exit 77 -fi - -exec "$libvirt_run" $MAKE extra-tests-non-recursive diff --git a/tests/extra/test-with-upstream-qemu.sh b/tests/extra/test-with-upstream-qemu.sh deleted file mode 100755 index 7c8832881..000000000 --- a/tests/extra/test-with-upstream-qemu.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2012 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -set -e -#set -x - -if [ ! -d "$QEMUDIR" ]; then - echo "$0: \$QEMUDIR not a directory, tests against upstream qemu skipped" - exit 77 -fi - -upstream_qemu="$QEMUDIR/x86_64-softmmu/qemu-system-x86_64" -if ! "$upstream_qemu" --help >/dev/null 2>&1; then - echo "$0: $upstream_qemu not executable, tests against upstream qemu skipped" - exit 77 -fi - -"$upstream_qemu" --version - -# Write a custom wrapper script for this invocation. (Since multiple -# parallel 'make extra-tests' should not be running in the same -# libguestfs directory, this should be safe). -LIBGUESTFS_QEMU="$abs_srcdir/qemu-wrapper.sh" -rm -f "$LIBGUESTFS_QEMU" "$LIBGUESTFS_QEMU"-t -cat > "$LIBGUESTFS_QEMU"-t <