[libvirt] [PATCH v2 7/7] tests: Use virBitmap for qemu command line caps

Jiri Denemark jdenemar at redhat.com
Tue Feb 22 16:48:24 UTC 2011


This needs to be squashed into the previous patch but is provided
separately for easier review.

---
Notes:
    Version 2:
    - rebased to current master

 src/qemu/qemu_capabilities.c |   14 +
 src/qemu/qemu_capabilities.h |    2 +
 tests/qemuhelptest.c         |  729 +++++++++++++++++++++---------------------
 tests/qemuxml2argvtest.c     |  470 ++++++++++++++--------------
 4 files changed, 619 insertions(+), 596 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 873360a..477924d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -39,6 +39,7 @@
 #include <unistd.h>
 #include <sys/wait.h>
 #include <sys/utsname.h>
+#include <stdarg.h>
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -1261,6 +1262,19 @@ qemuCapsSet(virBitmapPtr caps,
 
 
 void
+qemuCapsSetList(virBitmapPtr caps, ...)
+{
+    va_list list;
+    int flag;
+
+    va_start(list, caps);
+    while ((flag = va_arg(list, int)) < QEMU_CAPS_LAST)
+        ignore_value(virBitmapSetBit(caps, flag));
+    va_end(list);
+}
+
+
+void
 qemuCapsClear(virBitmapPtr caps,
               enum qemuCapsFlags flag)
 {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index b506e56..34f432f 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -105,6 +105,8 @@ virBitmapPtr qemuCapsNew(void);
 void qemuCapsSet(virBitmapPtr caps,
                  enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);
 
+void qemuCapsSetList(virBitmapPtr caps, ...) ATTRIBUTE_NONNULL(1);
+
 void qemuCapsClear(virBitmapPtr caps,
                    enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);
 
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 75ecf58..335364f 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -13,7 +13,7 @@
 
 struct testInfo {
     const char *name;
-    unsigned long long flags;
+    virBitmapPtr flags;
     unsigned int version;
     unsigned int is_kvm;
     unsigned int kvm_version;
@@ -22,14 +22,14 @@ struct testInfo {
 static char *progname;
 static char *abs_srcdir;
 
-static void printMismatchedFlags(unsigned long long got,
-                                 unsigned long long expect)
+static void printMismatchedFlags(virBitmapPtr got,
+                                 virBitmapPtr expect)
 {
     int i;
 
-    for (i = 0 ; i < (sizeof(got)*CHAR_BIT) ; i++) {
-        unsigned long long gotFlag = (got & (1LL << i));
-        unsigned long long expectFlag = (expect & (1LL << i));
+    for (i = 0 ; i < QEMU_CAPS_LAST ; i++) {
+        bool gotFlag = qemuCapsGet(got, i);
+        bool expectFlag = qemuCapsGet(expect, i);
         if (gotFlag && !expectFlag)
             fprintf(stderr, "Extra flag %i\n", i);
         if (!gotFlag && expectFlag)
@@ -44,8 +44,10 @@ static int testHelpStrParsing(const void *data)
     char helpStr[MAX_HELP_OUTPUT_SIZE];
     char *help = &(helpStr[0]);
     unsigned int version, is_kvm, kvm_version;
-    unsigned long long flags;
+    virBitmapPtr flags = NULL;
     int ret = -1;
+    char *got = NULL;
+    char *expected = NULL;
 
     if (virAsprintf(&path, "%s/qemuhelpdata/%s", abs_srcdir, info->name) < 0)
         return -1;
@@ -53,7 +55,10 @@ static int testHelpStrParsing(const void *data)
     if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
         goto cleanup;
 
-    if (qemuCapsParseHelpStr("QEMU", help, &flags,
+    if (!(flags = qemuCapsNew()))
+        goto cleanup;
+
+    if (qemuCapsParseHelpStr("QEMU", help, flags,
                              &version, &is_kvm, &kvm_version) == -1)
         goto cleanup;
 
@@ -66,14 +71,19 @@ static int testHelpStrParsing(const void *data)
         if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
             goto cleanup;
 
-        if (qemuCapsParseDeviceStr(help, &flags) < 0)
+        if (qemuCapsParseDeviceStr(help, flags) < 0)
             goto cleanup;
     }
 
-    if (flags != info->flags) {
+    got = virBitmapString(flags);
+    expected = virBitmapString(info->flags);
+    if (!got || !expected)
+        goto cleanup;
+
+    if (STRNEQ(got, expected)) {
         fprintf(stderr,
-                "Computed flags do not match: got 0x%llx, expected 0x%llx\n",
-                flags, info->flags);
+                "Computed flags do not match: got %s, expected %s\n",
+                got, expected);
 
         if (getenv("VIR_TEST_DEBUG"))
             printMismatchedFlags(flags, info->flags);
@@ -104,6 +114,9 @@ static int testHelpStrParsing(const void *data)
     ret = 0;
 cleanup:
     VIR_FREE(path);
+    qemuCapsFree(flags);
+    VIR_FREE(got);
+    VIR_FREE(expected);
     return ret;
 }
 
@@ -124,365 +137,359 @@ mymain(int argc, char **argv)
     if (!abs_srcdir)
         abs_srcdir = getcwd(cwd, sizeof(cwd));
 
-# define DO_TEST(name, flags, version, is_kvm, kvm_version)                          \
-    do {                                                                            \
-        const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \
-        if (virtTestRun("QEMU Help String Parsing " name,                           \
-                        1, testHelpStrParsing, &info) < 0)                          \
-            ret = -1;                                                               \
+# define DO_TEST(name, version, is_kvm, kvm_version, ...)                   \
+    do {                                                                    \
+        struct testInfo info = {                                            \
+            name, NULL, version, is_kvm, kvm_version                        \
+        };                                                                  \
+        if (!(info.flags = qemuCapsNew()))                                  \
+            return EXIT_FAILURE;                                            \
+        qemuCapsSetList(info.flags, __VA_ARGS__, QEMU_CAPS_LAST);           \
+        if (virtTestRun("QEMU Help String Parsing " name,                   \
+                        1, testHelpStrParsing, &info) < 0)                  \
+            ret = -1;                                                       \
+        qemuCapsFree(info.flags);                                           \
     } while (0)
 
-    DO_TEST("qemu-0.9.1",
-            QEMU_CAPS_KQEMU |
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
+    DO_TEST("qemu-0.9.1", 9001, 0, 0,
+            QEMU_CAPS_KQEMU,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_NAME);
+    DO_TEST("kvm-74", 9001, 1, 74,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
             QEMU_CAPS_NAME,
-            9001,  0,  0);
-    DO_TEST("kvm-74",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_KVM_STDIO |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_MEM_PATH |
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_KVM_STDIO,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_TDF);
+    DO_TEST("kvm-83-rhel56", 9001, 1, 83,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_RTC_TD_HACK,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
             QEMU_CAPS_TDF,
-            9001,  1, 74);
-    DO_TEST("kvm-83-rhel56",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_RTC_TD_HACK |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_SPICE,
-            9001, 1,  83);
-    DO_TEST("qemu-0.10.5",
-            QEMU_CAPS_KQEMU |
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_RTC_TD_HACK |
-            QEMU_CAPS_NO_HPET |
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_SPICE);
+    DO_TEST("qemu-0.10.5", 10005, 0, 0,
+            QEMU_CAPS_KQEMU,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_RTC_TD_HACK,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_VGA_NONE);
+    DO_TEST("qemu-kvm-0.10.5", 10005, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_RTC_TD_HACK,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_VGA_NONE);
+    DO_TEST("kvm-86", 10050, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_RTC_TD_HACK,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_VGA_NONE);
+    DO_TEST("qemu-kvm-0.11.0-rc2", 10092, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_RTC_TD_HACK,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_VGA_NONE);
+    DO_TEST("qemu-0.12.1", 12001, 0, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_XEN_DOMID,
+            QEMU_CAPS_MIGRATE_QEMU_UNIX,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_SMP_TOPOLOGY,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
             QEMU_CAPS_VGA_NONE,
-            10005, 0,  0);
-    DO_TEST("qemu-kvm-0.10.5",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_RTC_TD_HACK |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_NESTING |
+            QEMU_CAPS_MIGRATE_QEMU_FD,
+            QEMU_CAPS_DRIVE_AIO);
+    DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_MIGRATE_QEMU_UNIX,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_SMP_TOPOLOGY,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_VNET_HOST,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_PCI_CONFIGFD,
+            QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_VGA_QXL,
+            QEMU_CAPS_SPICE,
             QEMU_CAPS_VGA_NONE,
-            10005, 1,  0);
-    DO_TEST("kvm-86",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_RTC_TD_HACK |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_SMBIOS_TYPE |
+            QEMU_CAPS_MIGRATE_QEMU_FD,
+            QEMU_CAPS_DRIVE_AIO,
+            QEMU_CAPS_DEVICE_SPICEVMC);
+    DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_MIGRATE_QEMU_UNIX,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_SMP_TOPOLOGY,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_VNET_HOST,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
             QEMU_CAPS_VGA_NONE,
-            10050, 1,  0);
-    DO_TEST("qemu-kvm-0.11.0-rc2",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_RTC_TD_HACK |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
+            QEMU_CAPS_MIGRATE_QEMU_FD,
+            QEMU_CAPS_DRIVE_AIO);
+    DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_DRIVE_BOOT,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_XEN_DOMID,
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_SDL,
+            QEMU_CAPS_MIGRATE_QEMU_UNIX,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_MONITOR_JSON,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_SMP_TOPOLOGY,
+            QEMU_CAPS_NETDEV,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_VNET_HOST,
+            QEMU_CAPS_NO_HPET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_PCI_CONFIGFD,
+            QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_FSDEV,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_SPICE,
             QEMU_CAPS_VGA_NONE,
-            10092, 1,  0);
-    DO_TEST("qemu-0.12.1",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_XEN_DOMID |
-            QEMU_CAPS_MIGRATE_QEMU_UNIX |
-            QEMU_CAPS_CHARDEV |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_DEVICE |
-            QEMU_CAPS_SMP_TOPOLOGY |
-            QEMU_CAPS_RTC |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_VGA_NONE |
-            QEMU_CAPS_MIGRATE_QEMU_FD |
+            QEMU_CAPS_MIGRATE_QEMU_FD,
             QEMU_CAPS_DRIVE_AIO,
-            12001, 0,  0);
-    DO_TEST("qemu-kvm-0.12.1.2-rhel60",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_MIGRATE_QEMU_UNIX |
-            QEMU_CAPS_CHARDEV |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_DEVICE |
-            QEMU_CAPS_SMP_TOPOLOGY |
-            QEMU_CAPS_RTC |
-            QEMU_CAPS_VNET_HOST |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_PCI_CONFIGFD |
-            QEMU_CAPS_NODEFCONFIG |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_VGA_QXL |
-            QEMU_CAPS_SPICE |
-            QEMU_CAPS_VGA_NONE |
-            QEMU_CAPS_MIGRATE_QEMU_FD |
-            QEMU_CAPS_DRIVE_AIO |
-            QEMU_CAPS_DEVICE_SPICEVMC,
-            12001, 1,  0);
-    DO_TEST("qemu-kvm-0.12.3",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_MIGRATE_QEMU_UNIX |
-            QEMU_CAPS_CHARDEV |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_DEVICE |
-            QEMU_CAPS_SMP_TOPOLOGY |
-            QEMU_CAPS_RTC |
-            QEMU_CAPS_VNET_HOST |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_VGA_NONE |
-            QEMU_CAPS_MIGRATE_QEMU_FD |
+            QEMU_CAPS_DEVICE_SPICEVMC);
+    DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_MIGRATE_QEMU_TCP,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_DRIVE_FORMAT,
+            QEMU_CAPS_DRIVE_SERIAL,
+            QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_PCIDEVICE,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_MIGRATE_QEMU_UNIX,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_SMP_TOPOLOGY,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_VNET_HOST,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_PCI_CONFIGFD,
+            QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_NESTING,
+            QEMU_CAPS_NAME_PROCESS,
+            QEMU_CAPS_SMBIOS_TYPE,
+            QEMU_CAPS_VGA_QXL,
+            QEMU_CAPS_SPICE,
+            QEMU_CAPS_VGA_NONE,
+            QEMU_CAPS_MIGRATE_QEMU_FD,
+            QEMU_CAPS_HDA_DUPLEX,
             QEMU_CAPS_DRIVE_AIO,
-            12003, 1,  0);
-    DO_TEST("qemu-kvm-0.13.0",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_XEN_DOMID |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_SDL |
-            QEMU_CAPS_MIGRATE_QEMU_UNIX |
-            QEMU_CAPS_CHARDEV |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_MONITOR_JSON |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_DEVICE |
-            QEMU_CAPS_SMP_TOPOLOGY |
-            QEMU_CAPS_NETDEV |
-            QEMU_CAPS_RTC |
-            QEMU_CAPS_VNET_HOST |
-            QEMU_CAPS_NO_HPET |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_PCI_CONFIGFD |
-            QEMU_CAPS_NODEFCONFIG |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_FSDEV |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_SPICE |
-            QEMU_CAPS_VGA_NONE |
-            QEMU_CAPS_MIGRATE_QEMU_FD |
-            QEMU_CAPS_DRIVE_AIO |
-            QEMU_CAPS_DEVICE_SPICEVMC,
-            13000, 1,  0);
-    DO_TEST("qemu-kvm-0.12.1.2-rhel61",
-            QEMU_CAPS_VNC_COLON |
-            QEMU_CAPS_NO_REBOOT |
-            QEMU_CAPS_DRIVE |
-            QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID |
-            QEMU_CAPS_VNET_HDR |
-            QEMU_CAPS_MIGRATE_QEMU_TCP |
-            QEMU_CAPS_MIGRATE_QEMU_EXEC |
-            QEMU_CAPS_DRIVE_CACHE_V2 |
-            QEMU_CAPS_KVM |
-            QEMU_CAPS_DRIVE_FORMAT |
-            QEMU_CAPS_DRIVE_SERIAL |
-            QEMU_CAPS_DRIVE_READONLY |
-            QEMU_CAPS_VGA |
-            QEMU_CAPS_0_10 |
-            QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_MEM_PATH |
-            QEMU_CAPS_MIGRATE_QEMU_UNIX |
-            QEMU_CAPS_CHARDEV |
-            QEMU_CAPS_ENABLE_KVM |
-            QEMU_CAPS_BALLOON |
-            QEMU_CAPS_DEVICE |
-            QEMU_CAPS_SMP_TOPOLOGY |
-            QEMU_CAPS_RTC |
-            QEMU_CAPS_VNET_HOST |
-            QEMU_CAPS_NO_KVM_PIT |
-            QEMU_CAPS_TDF |
-            QEMU_CAPS_PCI_CONFIGFD |
-            QEMU_CAPS_NODEFCONFIG |
-            QEMU_CAPS_BOOT_MENU |
-            QEMU_CAPS_NESTING |
-            QEMU_CAPS_NAME_PROCESS |
-            QEMU_CAPS_SMBIOS_TYPE |
-            QEMU_CAPS_VGA_QXL |
-            QEMU_CAPS_SPICE |
-            QEMU_CAPS_VGA_NONE |
-            QEMU_CAPS_MIGRATE_QEMU_FD |
-            QEMU_CAPS_HDA_DUPLEX |
-            QEMU_CAPS_DRIVE_AIO |
-            QEMU_CAPS_CCID_PASSTHRU |
-            QEMU_CAPS_CHARDEV_SPICEVMC |
-            QEMU_CAPS_VIRTIO_TX_ALG,
-            12001, 1,  0);
+            QEMU_CAPS_CCID_PASSTHRU,
+            QEMU_CAPS_CHARDEV_SPICEVMC,
+            QEMU_CAPS_VIRTIO_TX_ALG);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index a4fe43f..fec0dbc 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -29,7 +29,7 @@ static struct qemud_driver driver;
 
 static int testCompareXMLToArgvFiles(const char *xml,
                                      const char *cmdline,
-                                     unsigned long long extraFlags,
+                                     virBitmapPtr extraFlags,
                                      const char *migrateFrom,
                                      int migrateFd,
                                      bool expectError) {
@@ -38,7 +38,6 @@ static int testCompareXMLToArgvFiles(const char *xml,
     int len;
     char *actualargv = NULL;
     int ret = -1;
-    unsigned long long flags;
     virDomainDefPtr vmdef = NULL;
     virDomainChrSourceDef monitor_chr;
     virConnectPtr conn;
@@ -89,14 +88,15 @@ static int testCompareXMLToArgvFiles(const char *xml,
     monitor_chr.data.nix.path = (char *)"/tmp/test-monitor";
     monitor_chr.data.nix.listen = true;
 
-    flags = QEMU_CAPS_VNC_COLON |
-        QEMU_CAPS_NO_REBOOT |
-        extraFlags;
+    qemuCapsSetList(extraFlags,
+                    QEMU_CAPS_VNC_COLON,
+                    QEMU_CAPS_NO_REBOOT,
+                    QEMU_CAPS_LAST);
 
     if (qemudCanonicalizeMachine(&driver, vmdef) < 0)
         goto fail;
 
-    if (qemuCapsGet(flags, QEMU_CAPS_DEVICE)) {
+    if (qemuCapsGet(extraFlags, QEMU_CAPS_DEVICE)) {
         qemuDomainPCIAddressSetPtr pciaddrs;
         if (!(pciaddrs = qemuDomainPCIAddressSetCreate(vmdef)))
             goto fail;
@@ -117,11 +117,11 @@ static int testCompareXMLToArgvFiles(const char *xml,
      */
     if (STREQLEN(vmdef->os.arch, "x86_64", 6) ||
         STREQLEN(vmdef->os.arch, "i686", 4)) {
-        flags |= QEMU_CAPS_PCI_MULTIBUS;
+        qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
     }
 
     if (!(cmd = qemuBuildCommandLine(conn, &driver,
-                                     vmdef, &monitor_chr, false, flags,
+                                     vmdef, &monitor_chr, false, extraFlags,
                                      migrateFrom, migrateFd, NULL,
                                      VIR_VM_OP_CREATE)))
         goto fail;
@@ -169,7 +169,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
 
 struct testInfo {
     const char *name;
-    unsigned long long extraFlags;
+    virBitmapPtr extraFlags;
     const char *migrateFrom;
     int migrateFd;
     bool expectError;
@@ -230,18 +230,24 @@ mymain(int argc, char **argv)
     if (cpuMapOverride(map) < 0)
         return EXIT_FAILURE;
 
-# define DO_TEST_FULL(name, extraFlags, migrateFrom, migrateFd, expectError) \
+# define DO_TEST_FULL(name, migrateFrom, migrateFd, expectError, ...)   \
     do {                                                                \
-        const struct testInfo info = {                                  \
-            name, extraFlags, migrateFrom, migrateFd, expectError       \
+        struct testInfo info = {                                        \
+            name, NULL, migrateFrom, migrateFd, expectError             \
         };                                                              \
+        if (!(info.extraFlags = qemuCapsNew()))                         \
+            return EXIT_FAILURE;                                        \
+        qemuCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST);  \
         if (virtTestRun("QEMU XML-2-ARGV " name,                        \
                         1, testCompareXMLToArgvHelper, &info) < 0)      \
             ret = -1;                                                   \
+        qemuCapsFree(info.extraFlags);                                  \
     } while (0)
 
-# define DO_TEST(name, extraFlags, expectError)                         \
-    DO_TEST_FULL(name, extraFlags, NULL, -1, expectError)
+# define DO_TEST(name, expectError, ...)                                \
+    DO_TEST_FULL(name, NULL, -1, expectError, __VA_ARGS__)
+
+# define NONE QEMU_CAPS_LAST
 
     /* Unset or set all envvars here that are copied in qemudBuildCommandLine
      * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
@@ -256,241 +262,235 @@ mymain(int argc, char **argv)
     unsetenv("QEMU_AUDIO_DRV");
     unsetenv("SDL_AUDIODRIVER");
 
-    DO_TEST("minimal", QEMU_CAPS_NAME, false);
-    DO_TEST("machine-aliases1", 0, false);
-    DO_TEST("machine-aliases2", 0, true);
-    DO_TEST("boot-cdrom", 0, false);
-    DO_TEST("boot-network", 0, false);
-    DO_TEST("boot-floppy", 0, false);
-    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU, false);
-    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU, false);
-    DO_TEST("boot-order", QEMU_CAPS_BOOTINDEX |
-            QEMU_CAPS_DRIVE | QEMU_CAPS_DEVICE, false);
-    DO_TEST("bootloader", QEMU_CAPS_DOMID, true);
-    DO_TEST("clock-utc", 0, false);
-    DO_TEST("clock-localtime", 0, false);
+    DO_TEST("minimal", false, QEMU_CAPS_NAME);
+    DO_TEST("machine-aliases1", false, NONE);
+    DO_TEST("machine-aliases2", true, NONE);
+    DO_TEST("boot-cdrom", false, NONE);
+    DO_TEST("boot-network", false, NONE);
+    DO_TEST("boot-floppy", false, NONE);
+    DO_TEST("boot-multi", false, QEMU_CAPS_BOOT_MENU);
+    DO_TEST("boot-menu-disable", false, QEMU_CAPS_BOOT_MENU);
+    DO_TEST("boot-order", false,
+            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE);
+    DO_TEST("bootloader", true, QEMU_CAPS_DOMID);
+    DO_TEST("clock-utc", false, NONE);
+    DO_TEST("clock-localtime", false, NONE);
     /*
      * Can't be enabled since the absolute timestamp changes every time
-    DO_TEST("clock-variable", QEMU_CAPS_RTC, false);
+    DO_TEST("clock-variable", false, QEMU_CAPS_RTC);
     */
-    DO_TEST("clock-france", QEMU_CAPS_RTC, false);
-
-    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH, false);
-    DO_TEST("disk-cdrom", 0, false);
-    DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE, false);
-    DO_TEST("disk-floppy", 0, false);
-    DO_TEST("disk-many", 0, false);
-    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT, false);
-    DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT, false);
-    DO_TEST("disk-drive-boot-disk", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT, false);
-    DO_TEST("disk-drive-boot-cdrom", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT, false);
-    DO_TEST("floppy-drive-fat", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-fat", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-readonly-disk", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("disk-drive-readonly-no-device", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_READONLY | QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("disk-drive-fmt-qcow", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_BOOT | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-shared", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT | QEMU_CAPS_DRIVE_SERIAL, false);
-    DO_TEST("disk-drive-cache-v1-wt", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-cache-v1-wb", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-cache-v1-none", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-error-policy-stop", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_MONITOR_JSON |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-cache-v2-wt", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-cache-v2-wb", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-cache-v2-none", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-network-nbd", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-network-rbd", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-drive-network-sheepdog", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("disk-usb", 0, false);
-    DO_TEST("disk-usb-device", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("disk-scsi-device", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("disk-scsi-device-auto", QEMU_CAPS_DRIVE |
-            QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("disk-aio", QEMU_CAPS_DRIVE | QEMU_CAPS_DRIVE_AIO |
-            QEMU_CAPS_DRIVE_CACHE_V2 | QEMU_CAPS_DRIVE_FORMAT, false);
-    DO_TEST("graphics-vnc", 0, false);
-    DO_TEST("graphics-vnc-socket", 0, false);
+    DO_TEST("clock-france", false, QEMU_CAPS_RTC);
+
+    DO_TEST("hugepages", false, QEMU_CAPS_MEM_PATH);
+    DO_TEST("disk-cdrom", false, NONE);
+    DO_TEST("disk-cdrom-empty", false, QEMU_CAPS_DRIVE);
+    DO_TEST("disk-floppy", false, NONE);
+    DO_TEST("disk-many", false, NONE);
+    DO_TEST("disk-virtio", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
+    DO_TEST("disk-xenvbd", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
+    DO_TEST("disk-drive-boot-disk", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
+    DO_TEST("disk-drive-boot-cdrom", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
+    DO_TEST("floppy-drive-fat", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-fat", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-readonly-disk", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("disk-drive-readonly-no-device", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("disk-drive-fmt-qcow", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-shared", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT, QEMU_CAPS_DRIVE_SERIAL);
+    DO_TEST("disk-drive-cache-v1-wt", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-cache-v1-wb", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-cache-v1-none", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-error-policy-stop", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-cache-v2-wt", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-cache-v2-wb", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-cache-v2-none", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-network-nbd", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-network-rbd", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-drive-network-sheepdog", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("disk-usb", false, NONE);
+    DO_TEST("disk-usb-device", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("disk-scsi-device", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("disk-scsi-device-auto", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("disk-aio", false,
+            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_AIO,
+            QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
+    DO_TEST("graphics-vnc", false, NONE);
+    DO_TEST("graphics-vnc-socket", false, NONE);
 
     driver.vncSASL = 1;
     driver.vncSASLdir = strdup("/root/.sasl2");
-    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VGA, false);
+    DO_TEST("graphics-vnc-sasl", false, QEMU_CAPS_VGA);
     driver.vncTLS = 1;
     driver.vncTLSx509verify = 1;
     driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
-    DO_TEST("graphics-vnc-tls", 0, false);
+    DO_TEST("graphics-vnc-tls", false, NONE);
     driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
     free(driver.vncSASLdir);
     free(driver.vncTLSx509certdir);
     driver.vncSASLdir = driver.vncTLSx509certdir = NULL;
 
-    DO_TEST("graphics-sdl", 0, false);
-    DO_TEST("graphics-sdl-fullscreen", 0, false);
-    DO_TEST("nographics", QEMU_CAPS_VGA, false);
-    DO_TEST("nographics-vga", QEMU_CAPS_VGA |
-                              QEMU_CAPS_VGA_NONE, false);
-    DO_TEST("graphics-spice",
-            QEMU_CAPS_VGA | QEMU_CAPS_VGA_QXL |
-            QEMU_CAPS_DEVICE | QEMU_CAPS_SPICE, false);
-
-    DO_TEST("input-usbmouse", 0, false);
-    DO_TEST("input-usbtablet", 0, false);
-    DO_TEST("input-xen", QEMU_CAPS_DOMID, true);
-    DO_TEST("misc-acpi", 0, false);
-    DO_TEST("misc-no-reboot", 0, false);
-    DO_TEST("misc-uuid", QEMU_CAPS_NAME |
-            QEMU_CAPS_UUID, false);
-    DO_TEST("net-user", 0, false);
-    DO_TEST("net-virtio", 0, false);
-    DO_TEST("net-virtio-device", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_VIRTIO_TX_ALG, false);
-    DO_TEST("net-virtio-netdev", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NETDEV | QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("net-eth", 0, false);
-    DO_TEST("net-eth-ifname", 0, false);
-    DO_TEST("net-eth-names", QEMU_CAPS_NET_NAME, false);
-
-    DO_TEST("serial-vc", 0, false);
-    DO_TEST("serial-pty", 0, false);
-    DO_TEST("serial-dev", 0, false);
-    DO_TEST("serial-file", 0, false);
-    DO_TEST("serial-unix", 0, false);
-    DO_TEST("serial-tcp", 0, false);
-    DO_TEST("serial-udp", 0, false);
-    DO_TEST("serial-tcp-telnet", 0, false);
-    DO_TEST("serial-many", 0, false);
-    DO_TEST("parallel-tcp", 0, false);
-    DO_TEST("console-compat", 0, false);
-    DO_TEST("console-compat-auto", 0, false);
-
-    DO_TEST("serial-vc-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-pty-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-dev-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-file-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-unix-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-udp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-tcp-telnet-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("serial-many-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("parallel-tcp-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("console-compat-chardev", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-
-    DO_TEST("channel-guestfwd", QEMU_CAPS_CHARDEV|QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("channel-virtio", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("channel-virtio-auto", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("console-virtio", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("channel-spicevmc", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE |
-            QEMU_CAPS_CHARDEV_SPICEVMC, false);
-    DO_TEST("channel-spicevmc-old", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_SPICE |
-            QEMU_CAPS_DEVICE_SPICEVMC, false);
-
-    DO_TEST("smartcard-host",
-            QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
-    DO_TEST("smartcard-host-certificates",
-            QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
-    DO_TEST("smartcard-passthrough-tcp",
-            QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU, false);
-    DO_TEST("smartcard-passthrough-spicevmc",
-            QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_PASSTHRU |
-            QEMU_CAPS_CHARDEV_SPICEVMC, false);
-    DO_TEST("smartcard-controller",
-            QEMU_CAPS_CHARDEV | QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_CCID_EMULATED, false);
-
-    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE, false);
-
-    DO_TEST("watchdog", 0, false);
-    DO_TEST("watchdog-device", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("watchdog-dump", 0, false);
-    DO_TEST("balloon-device", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("balloon-device-auto", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("sound", 0, false);
-    DO_TEST("sound-device", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_HDA_DUPLEX, false);
-    DO_TEST("fs9p", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG | QEMU_CAPS_FSDEV, false);
-
-    DO_TEST("hostdev-usb-address", 0, false);
-    DO_TEST("hostdev-usb-address-device", QEMU_CAPS_DEVICE |
-            QEMU_CAPS_NODEFCONFIG, false);
-    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE, false);
-    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_PCIDEVICE |
-            QEMU_CAPS_DEVICE | QEMU_CAPS_NODEFCONFIG, false);
-
-    DO_TEST_FULL("restore-v1", QEMU_CAPS_MIGRATE_KVM_STDIO, "stdio", 7,
-                 false);
-    DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "stdio", 7,
-                 false);
-    DO_TEST_FULL("restore-v2", QEMU_CAPS_MIGRATE_QEMU_EXEC, "exec:cat", 7,
-                 false);
-    DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "stdio", 7,
-                 false);
-    DO_TEST_FULL("restore-v2-fd", QEMU_CAPS_MIGRATE_QEMU_FD, "fd:7", 7,
-                 false);
-    DO_TEST_FULL("migrate", QEMU_CAPS_MIGRATE_QEMU_TCP,
-                 "tcp:10.0.0.1:5000", -1, false);
-
-    DO_TEST("qemu-ns", 0, false);
-
-    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY, false);
-
-    DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY, false);
-    DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY, false);
-    DO_TEST("cpu-topology3", 0, false);
-    DO_TEST("cpu-minimum1", 0, false);
-    DO_TEST("cpu-minimum2", 0, false);
-    DO_TEST("cpu-exact1", 0, false);
-    DO_TEST("cpu-exact2", 0, false);
-    DO_TEST("cpu-strict1", 0, false);
-
-    DO_TEST("memtune", QEMU_CAPS_NAME, false);
-    DO_TEST("blkiotune", QEMU_CAPS_NAME, false);
+    DO_TEST("graphics-sdl", false, NONE);
+    DO_TEST("graphics-sdl-fullscreen", false, NONE);
+    DO_TEST("nographics", false, QEMU_CAPS_VGA);
+    DO_TEST("nographics-vga", false,
+            QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
+    DO_TEST("graphics-spice", false,
+            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE);
+
+    DO_TEST("input-usbmouse", false, NONE);
+    DO_TEST("input-usbtablet", false, NONE);
+    DO_TEST("input-xen", true, QEMU_CAPS_DOMID);
+    DO_TEST("misc-acpi", false, NONE);
+    DO_TEST("misc-no-reboot", false, NONE);
+    DO_TEST("misc-uuid", false, QEMU_CAPS_NAME, QEMU_CAPS_UUID);
+    DO_TEST("net-user", false, NONE);
+    DO_TEST("net-virtio", false, NONE);
+    DO_TEST("net-virtio-device", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
+    DO_TEST("net-virtio-netdev", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("net-eth", false, NONE);
+    DO_TEST("net-eth-ifname", false, NONE);
+    DO_TEST("net-eth-names", false, QEMU_CAPS_NET_NAME);
+
+    DO_TEST("serial-vc", false, NONE);
+    DO_TEST("serial-pty", false, NONE);
+    DO_TEST("serial-dev", false, NONE);
+    DO_TEST("serial-file", false, NONE);
+    DO_TEST("serial-unix", false, NONE);
+    DO_TEST("serial-tcp", false, NONE);
+    DO_TEST("serial-udp", false, NONE);
+    DO_TEST("serial-tcp-telnet", false, NONE);
+    DO_TEST("serial-many", false, NONE);
+    DO_TEST("parallel-tcp", false, NONE);
+    DO_TEST("console-compat", false, NONE);
+    DO_TEST("console-compat-auto", false, NONE);
+
+    DO_TEST("serial-vc-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-pty-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-dev-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-file-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-unix-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-tcp-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-udp-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-tcp-telnet-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("serial-many-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("parallel-tcp-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("console-compat-chardev", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+
+    DO_TEST("channel-guestfwd", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("channel-virtio", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("channel-virtio-auto", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("console-virtio", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("channel-spicevmc", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
+    DO_TEST("channel-spicevmc-old", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
+
+    DO_TEST("smartcard-host", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
+            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
+    DO_TEST("smartcard-host-certificates", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
+            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
+    DO_TEST("smartcard-passthrough-tcp", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
+            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
+    DO_TEST("smartcard-passthrough-spicevmc", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
+            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
+    DO_TEST("smartcard-controller", false,
+            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
+            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
+
+    DO_TEST("smbios", false, QEMU_CAPS_SMBIOS_TYPE);
+
+    DO_TEST("watchdog", false, NONE);
+    DO_TEST("watchdog-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("watchdog-dump", false, NONE);
+    DO_TEST("balloon-device", false, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("balloon-device-auto", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("sound", false, NONE);
+    DO_TEST("sound-device", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_HDA_DUPLEX);
+    DO_TEST("fs9p", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV);
+
+    DO_TEST("hostdev-usb-address", false, NONE);
+    DO_TEST("hostdev-usb-address-device", false,
+            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+    DO_TEST("hostdev-pci-address", false, QEMU_CAPS_PCIDEVICE);
+    DO_TEST("hostdev-pci-address-device", false,
+            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
+
+    DO_TEST_FULL("restore-v1", "stdio", 7, false,
+            QEMU_CAPS_MIGRATE_KVM_STDIO);
+    DO_TEST_FULL("restore-v2", "stdio", 7, false,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC);
+    DO_TEST_FULL("restore-v2", "exec:cat", 7, false,
+            QEMU_CAPS_MIGRATE_QEMU_EXEC);
+    DO_TEST_FULL("restore-v2-fd", "stdio", 7, false,
+            QEMU_CAPS_MIGRATE_QEMU_FD);
+    DO_TEST_FULL("restore-v2-fd", "fd:7", 7, false,
+            QEMU_CAPS_MIGRATE_QEMU_FD);
+    DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, false,
+            QEMU_CAPS_MIGRATE_QEMU_TCP);
+
+    DO_TEST("qemu-ns", false, NONE);
+
+    DO_TEST("smp", false, QEMU_CAPS_SMP_TOPOLOGY);
+
+    DO_TEST("cpu-topology1", false, QEMU_CAPS_SMP_TOPOLOGY);
+    DO_TEST("cpu-topology2", false, QEMU_CAPS_SMP_TOPOLOGY);
+    DO_TEST("cpu-topology3", false, NONE);
+    DO_TEST("cpu-minimum1", false, NONE);
+    DO_TEST("cpu-minimum2", false, NONE);
+    DO_TEST("cpu-exact1", false, NONE);
+    DO_TEST("cpu-exact2", false, NONE);
+    DO_TEST("cpu-strict1", false, NONE);
+
+    DO_TEST("memtune", false, QEMU_CAPS_NAME);
+    DO_TEST("blkiotune", false, QEMU_CAPS_NAME);
 
     free(driver.stateDir);
     virCapabilitiesFree(driver.caps);
-- 
1.7.4.1




More information about the libvir-list mailing list