[libvirt] PATCH: Fix libvirtd test cases

Daniel P. Berrange berrange at redhat.com
Tue Mar 3 19:30:27 UTC 2009


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 :|




More information about the libvir-list mailing list