The libvirtd tests have a number of bugs causing them to fail & generally do bad things. They all currently fail on RHEL5 hosts. - daemon-conf - the abs_topbuild_dir env var was not being set correctly so it failed to find config.h. It also broken by changes in stderr debug output from libvirtd. This patch fixes the env var, and changes it to it just looks for the desired error message, not doing a diff across entire of stdout/err. - libvirtd-fail - again fails because it is diffing the whole of stdout/err and coming across warning messages its not expecting. Change it to look for daemon error exit status because that reliably indicates whether it quit as expected on bogus configs - libvirtd-pool - running the QEMU driver which does not exist, just to test virsh's XML generation capabilities. This adds a --print-xml arg to virsh and uses the test:///default driver for testing, so we avoid the QEMU driver & daemon during tests - libvirt-net-persist - again trying to rnu the QEMU driver which does not exist, and its writing config files into the user's home directory. There's no easy fix for this, so I'm killing it off. It can be tested in the separate integration test suite where you can be sure to arrange for correct pre-requisites and safe working environment src/virsh.c | 51 ++++++++++++++++++++++++--------------- tests/Makefile.am | 3 -- tests/daemon-conf | 13 +++------- tests/libvirtd-fail | 9 ++---- tests/libvirtd-net-persist | 58 --------------------------------------------- tests/libvirtd-pool | 41 ++++++------------------------- 6 files changed, 48 insertions(+), 127 deletions(-) Daniel Index: src/virsh.c =================================================================== RCS file: /data/cvs/libvirt/src/virsh.c,v retrieving revision 1.195 diff -u -p -u -p -r1.195 virsh.c --- src/virsh.c 3 Mar 2009 09:59:02 -0000 1.195 +++ src/virsh.c 3 Mar 2009 19:23:01 -0000 @@ -2923,6 +2923,7 @@ cmdPoolCreate(vshControl *ctl, const vsh */ static const vshCmdOptDef opts_pool_X_as[] = { {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the pool")}, + {"print-xml", VSH_OT_BOOL, 0, gettext_noop("print XML document, but don't define/create")}, {"type", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("type of the pool")}, {"source-host", VSH_OT_DATA, 0, gettext_noop("source-host for underlying storage")}, {"source-path", VSH_OT_DATA, 0, gettext_noop("source path for underlying storage")}, @@ -3002,6 +3003,7 @@ cmdPoolCreateAs(vshControl *ctl, const v { virStoragePoolPtr pool; char *xml, *name; + int printXML = vshCommandOptBool(cmd, "print-xml"); if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE; @@ -3009,18 +3011,22 @@ cmdPoolCreateAs(vshControl *ctl, const v if (!buildPoolXML(cmd, &name, &xml)) return FALSE; - pool = virStoragePoolCreateXML(ctl->conn, xml, 0); - free (xml); - - if (pool != NULL) { - vshPrint(ctl, _("Pool %s created\n"), name); - virStoragePoolFree(pool); - return TRUE; + if (printXML) { + printf("%s", xml); + free (xml); } else { - vshError(ctl, FALSE, _("Failed to create pool %s"), name); - } + pool = virStoragePoolCreateXML(ctl->conn, xml, 0); + free (xml); - return FALSE; + if (pool != NULL) { + vshPrint(ctl, _("Pool %s created\n"), name); + virStoragePoolFree(pool); + } else { + vshError(ctl, FALSE, _("Failed to create pool %s"), name); + return FALSE; + } + } + return TRUE; } @@ -3085,6 +3091,7 @@ cmdPoolDefineAs(vshControl *ctl, const v { virStoragePoolPtr pool; char *xml, *name; + int printXML = vshCommandOptBool(cmd, "print-xml"); if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE; @@ -3092,18 +3099,22 @@ cmdPoolDefineAs(vshControl *ctl, const v if (!buildPoolXML(cmd, &name, &xml)) return FALSE; - pool = virStoragePoolDefineXML(ctl->conn, xml, 0); - free (xml); - - if (pool != NULL) { - vshPrint(ctl, _("Pool %s defined\n"), name); - virStoragePoolFree(pool); - return TRUE; + if (printXML) { + printf("%s", xml); + free (xml); } else { - vshError(ctl, FALSE, _("Failed to define pool %s"), name); - } + pool = virStoragePoolDefineXML(ctl->conn, xml, 0); + free (xml); - return FALSE; + if (pool != NULL) { + vshPrint(ctl, _("Pool %s defined\n"), name); + virStoragePoolFree(pool); + } else { + vshError(ctl, FALSE, _("Failed to define pool %s"), name); + return FALSE; + } + } + return TRUE; } Index: tests/Makefile.am =================================================================== RCS file: /data/cvs/libvirt/tests/Makefile.am,v retrieving revision 1.76 diff -u -p -u -p -r1.76 Makefile.am --- tests/Makefile.am 3 Mar 2009 17:00:18 -0000 1.76 +++ tests/Makefile.am 3 Mar 2009 19:23:01 -0000 @@ -82,7 +82,6 @@ test_scripts += \ define-dev-segfault \ int-overflow \ libvirtd-fail \ - libvirtd-net-persist \ libvirtd-pool \ read-bufsiz \ read-non-seekable \ @@ -127,7 +126,7 @@ TESTS_ENVIRONMENT = \ abs_top_srcdir=`cd '$(top_srcdir)'; pwd` \ abs_builddir=`cd '$(builddir)'; pwd` \ abs_srcdir=`cd '$(srcdir)'; pwd` \ - CONFIG_HEADER='$(abs_top_builddir)/config.h' \ + CONFIG_HEADER="`cd '$(top_builddir)'; pwd`/config.h" \ PATH="$(path_add)$(PATH_SEPARATOR)$$PATH" \ SHELL="$(SHELL)" \ LIBVIRT_DRIVER_DIR="$(abs_top_builddir)/src/.libs" \ Index: tests/daemon-conf =================================================================== RCS file: /data/cvs/libvirt/tests/daemon-conf,v retrieving revision 1.6 diff -u -p -u -p -r1.6 daemon-conf --- tests/daemon-conf 2 Mar 2009 20:01:26 -0000 1.6 +++ tests/daemon-conf 3 Mar 2009 19:23:01 -0000 @@ -52,15 +52,10 @@ while :; do test $i = $n && break - # Filter out some ignorable diagnostics and drop timestamps - sed \ - -e 's/.*: error : //' \ - -e '/^Cannot set group when not running as root$/d' \ - -e '/^libnuma: Warning: .sys not mounted or no numa system/d' \ - err > k && mv k err - - printf '%s\n\n' "remoteReadConfigFile: $f: $param_name: $msg" > expected-err - diff -u expected-err err || fail=1 + # Check that the diagnostic we want appears + grep "$msg" err 1>/dev/null 2>&1 + RET=$? + test "$RET" = "0" || fail=1 i=$(expr $i + 1) done Index: tests/libvirtd-fail =================================================================== RCS file: /data/cvs/libvirt/tests/libvirtd-fail,v retrieving revision 1.1 diff -u -p -u -p -r1.1 libvirtd-fail --- tests/libvirtd-fail 2 Mar 2009 20:01:05 -0000 1.1 +++ tests/libvirtd-fail 3 Mar 2009 19:23:01 -0000 @@ -12,10 +12,7 @@ test -z "$abs_top_srcdir" && abs_top_src fail=0 -libvirtd --config=no-such-file > log 2>&1 && fail=1 -cat <<\EOF > exp -Failed to open file 'no-such-file': No such file or directory -EOF +libvirtd --config=no-such-conf --timeout=5 2> log +RET=$? -compare exp log || fail=1 -exit $fail +test "$RET" != "0" && exit 0 || exit 1 Index: tests/libvirtd-net-persist =================================================================== RCS file: tests/libvirtd-net-persist diff -N tests/libvirtd-net-persist --- tests/libvirtd-net-persist 2 Mar 2009 18:41:00 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,58 +0,0 @@ -#!/bin/sh -# ensure that net-destroy doesn't make network disappear (persistence-related) - -if test "$VERBOSE" = yes; then - set -x - libvirtd --version - virsh --version -fi - -test -z "$srcdir" && srcdir=$(pwd) -test -z "$abs_top_srcdir" && abs_top_srcdir=$(pwd)/.. -. "$srcdir/test-lib.sh" - -fail=0 - -pwd=$(pwd) || fail=1 -sock_dir="$pwd" -cat > conf <<EOF || fail=1 -unix_sock_dir = "$sock_dir" -log_outputs = "3:file:$pwd/log" -EOF - -cat > net.xml <<EOF || fail=1 -<network> - <name>N</name> - <ip address="192.168.199.1" netmask="255.255.255.0"></ip> -</network> -EOF - -cat > exp <<EOF || fail=1 -Network N defined from net.xml - -Network N destroyed - -Name State Autostart ------------------------------------------ -N inactive no - -EOF - -libvirtd --config=conf > libvirtd-log 2>&1 & pid=$! -sleep 1 - -url="qemu:///session?socket=@$sock_dir/libvirt-sock" -virsh -c "$url" \ - 'net-define net.xml; net-destroy N; net-list --all' > out 2>&1 \ - || fail=1 - -# if libvird's log is empty, sleep for a second before killing it -test -s libvirtd-log || sleep 1 -kill $pid - -compare exp out || fail=1 - -printf "Shutting down network 'N'\n" > log-exp -compare log-exp libvirtd-log || fail=1 - -exit $fail Index: tests/libvirtd-pool =================================================================== RCS file: /data/cvs/libvirt/tests/libvirtd-pool,v retrieving revision 1.1 diff -u -p -u -p -r1.1 libvirtd-pool --- tests/libvirtd-pool 2 Mar 2009 20:01:05 -0000 1.1 +++ tests/libvirtd-pool 3 Mar 2009 19:23:01 -0000 @@ -1,9 +1,8 @@ #!/bin/sh -# Get coverage of libvirtd's config-parsing code. +# Get coverage of virsh pool-define-as XML formatting if test "$VERBOSE" = yes; then set -x - libvirtd --version virsh --version fi @@ -14,50 +13,28 @@ test -z "$abs_top_srcdir" && abs_top_src fail=0 pwd=$(pwd) || fail=1 -sock_dir="$pwd" -cat > conf <<EOF || fail=1 -unix_sock_dir = "$sock_dir" -log_outputs = "3:file:$pwd/log" -EOF - -libvirtd --config=conf > libvirtd-log 2>&1 & pid=$! -sleep 1 - -url="qemu:///session?socket=@$sock_dir/libvirt-sock" -virsh --connect "$url" \ - pool-define-as P dir src-host /src/path /src/dev S /target-path > out 2>&1 \ - || fail=1 -virsh --connect "$url" pool-dumpxml P >> out 2>&1 || fail=1 -# remove random uuid -sed 's/<uuid>.*/-/' out > k && mv k out || fail=1 - -kill $pid +virsh --connect test:///default \ + pool-define-as --print-xml \ + P dir src-host /src/path /src/dev S /target-path \ + 1>out 2>&1 cat <<EOF > pool-list-exp -Pool P defined - <pool type='dir'> <name>P</name> - - - <capacity>0</capacity> - <allocation>0</allocation> - <available>0</available> <source> + <host name='src-host'/> + <dir path='/src/path'/> + <device path='/src/dev'/> + <name>S</name> </source> <target> <path>/target-path</path> - <permissions> - <mode>0700</mode> - <owner>500</owner> - <group>500</group> - </permissions> </target> </pool> EOF compare pool-list-exp out || fail=1 -compare /dev/null libvirtd-log || fail=1 exit $fail -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list