]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add tests for virQEMUCapsNewCopy
authorJiri Denemark <jdenemar@redhat.com>
Thu, 4 Aug 2016 20:43:22 +0000 (22:43 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 5 Aug 2016 08:06:01 +0000 (10:06 +0200)
Doing a load, copy, format cycle on all QEMU capabilities XML files
should make sure we don't forget to update virQEMUCapsNewCopy when
adding new elements to QEMU capabilities.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_capspriv.h
tests/qemucapabilitiestest.c

index 6c80d59613cdd673d6519d59d87ff2fe298a5d42..43e3ea750a9275e6cfb79492d43ef21b25f41025 100644 (file)
@@ -2864,8 +2864,12 @@ virQEMUCapsLoadCache(virQEMUCapsPtr qemuCaps, const char *filename,
         goto cleanup;
     }
 
-    /* Don't check for NULL, since it is optional and thus may be missing */
-    qemuCaps->package = virXPathString("string(./package)", ctxt);
+    if (virXPathBoolean("boolean(./package)", ctxt) > 0) {
+        qemuCaps->package = virXPathString("string(./package)", ctxt);
+        if (!qemuCaps->package &&
+            VIR_STRDUP(qemuCaps->package, "") < 0)
+            goto cleanup;
+    }
 
     if (!(str = virXPathString("string(./arch)", ctxt))) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
index e083d61c0ccea3f022fe08734f1f9735750ba189..d249e2e1f4efb3849f7d816cb9837c27d8735618 100644 (file)
@@ -384,7 +384,6 @@ typedef struct _virQEMUCapsCache virQEMUCapsCache;
 typedef virQEMUCapsCache *virQEMUCapsCachePtr;
 
 virQEMUCapsPtr virQEMUCapsNew(void);
-virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps);
 
 int virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
                               qemuMonitorPtr mon);
index 647aafa343454593a010acddbffb5b55f5feff2e..aeb12934205eec6ae63548e343877917902a8214 100644 (file)
@@ -37,6 +37,8 @@ struct _virQEMUCapsCache {
     gid_t runGid;
 };
 
+virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps);
+
 virQEMUCapsPtr
 virQEMUCapsNewForBinaryInternal(const char *binary,
                                 const char *libDir,
index d5ed65e5203c08e32f61951861514deb0a1d299f..3924bce811a324697a76acc56aa0bc09fe191ce2 100644 (file)
@@ -77,6 +77,50 @@ testQemuCaps(const void *opaque)
     return ret;
 }
 
+
+static int
+testQemuCapsCopy(const void *opaque)
+{
+    int ret = -1;
+    const testQemuData *data = opaque;
+    char *capsFile = NULL;
+    virCapsPtr caps = NULL;
+    virQEMUCapsPtr orig = NULL;
+    virQEMUCapsPtr copy = NULL;
+    char *actual = NULL;
+
+    if (virAsprintf(&capsFile, "%s/qemucapabilitiesdata/%s.%s.xml",
+                    abs_srcdir, data->base, data->archName) < 0)
+        goto cleanup;
+
+    if (!(caps = virCapabilitiesNew(virArchFromString(data->archName),
+                                    false, false)))
+        goto cleanup;
+
+    if (!(orig = qemuTestParseCapabilities(capsFile)))
+        goto cleanup;
+
+    if (!(copy = virQEMUCapsNewCopy(orig)))
+        goto cleanup;
+
+    if (!(actual = virQEMUCapsFormatCache(copy, 0, 0)))
+        goto cleanup;
+
+    if (virTestCompareToFile(actual, capsFile) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(capsFile);
+    virObjectUnref(caps);
+    virObjectUnref(orig);
+    virObjectUnref(copy);
+    VIR_FREE(actual);
+    return ret;
+}
+
+
 static int
 mymain(void)
 {
@@ -103,6 +147,9 @@ mymain(void)
         data.base = name;                                               \
         if (virTestRun(name "(" arch ")", testQemuCaps, &data) < 0)     \
             ret = -1;                                                   \
+        if (virTestRun("copy " name "(" arch ")",                       \
+                       testQemuCapsCopy, &data) < 0)                    \
+            ret = -1;                                                   \
     } while (0)
 
     DO_TEST("x86_64", "caps_1.2.2");