From 8fb446754deda2f9d953eeb854a5aa050c8599f5 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 14 Apr 2014 16:54:19 -0600 Subject: [PATCH] conf: fix omission of in domain dumpxml I noticed that depending on the attributes the user passed in, the output may omit the element altogether. For example, the rerror_policy has had this problem since commit 4bb4109 in Oct 2011. But in adding testsuite coverage to expose it, I found another problem: the C code is just fine without a driver name, but the XML validator required either a name or a cache mode. * src/conf/domain_conf.c (virDomainDiskDefFormat): Update conditional. * docs/schemas/domaincommon.rng (diskDriver): Simplify. * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml: * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args: New files. * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml: Enhance test. * tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml: Likewise. * tests/qemuxml2argvtest.c (mymain): New test. * tests/qemuxml2xmltest.c (mymain): Likewise. Signed-off-by: Eric Blake Signed-off-by: Jiri Denemark --- docs/schemas/domaincommon.rng | 20 ++++--------- src/conf/domain_conf.c | 4 ++- .../qemuxml2argv-disk-drive-copy-on-read.args | 5 ++++ .../qemuxml2argv-disk-drive-copy-on-read.xml | 28 +++++++++++++++++++ .../qemuxml2argv-disk-drive-discard.xml | 2 +- tests/qemuxml2argvtest.c | 3 ++ .../qemuxml2xmlout-disk-drive-discard.xml | 2 +- tests/qemuxml2xmltest.c | 1 + 8 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 7739fd818f..d2235e1f56 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1461,20 +1461,12 @@ --> - - - - - - - - - - - - - - + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 726c8bad04..05fa3f9ffb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14963,7 +14963,9 @@ virDomainDiskDefFormat(virBufferPtr buf, virBufferAdjustIndent(buf, 2); if (def->src.driverName || def->src.format > 0 || def->cachemode || - def->ioeventfd || def->event_idx || def->copy_on_read) { + def->error_policy || def->rerror_policy || def->iomode || + def->ioeventfd || def->event_idx || def->copy_on_read || + def->discard) { virBufferAddLit(buf, "src.driverName) virBufferAsprintf(buf, " name='%s'", def->src.driverName); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args new file mode 100644 index 0000000000..f743b6bcda --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.args @@ -0,0 +1,5 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/qemu -S -M \ +pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait \ +-no-acpi -boot c -usb -drive file=/dev/HostVG/QEMUGuest1,if=ide,bus=0,unit=0,\ +format=raw,copy-on-read=on -net none -serial none -parallel none diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml new file mode 100644 index 0000000000..c15ca937b5 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-copy-on-read.xml @@ -0,0 +1,28 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + +
+ + + + + + + diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml index b15fd63e9e..de2855a30d 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-discard.xml @@ -25,7 +25,7 @@ - + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 13ed4f6f47..d43a4de266 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -739,6 +739,9 @@ mymain(void) DO_TEST("disk-drive-cache-unsafe", QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_CACHE_UNSAFE, QEMU_CAPS_DRIVE_FORMAT); + DO_TEST("disk-drive-copy-on-read", + QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, + QEMU_CAPS_DRIVE_COPY_ON_READ, QEMU_CAPS_DRIVE_FORMAT); DO_TEST("disk-drive-network-nbd", QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); DO_TEST("disk-drive-network-nbd-export", diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml index f01312f533..f20b3b99e0 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-discard.xml @@ -23,7 +23,7 @@
- + diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 788adbe386..bf9d736561 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -187,6 +187,7 @@ mymain(void) DO_TEST("disk-drive-cache-v1-wt"); DO_TEST("disk-drive-cache-v1-wb"); DO_TEST("disk-drive-cache-v1-none"); + DO_TEST("disk-drive-copy-on-read"); DO_TEST("disk-drive-network-nbd"); DO_TEST("disk-drive-network-nbd-export"); DO_TEST("disk-drive-network-nbd-ipv6");