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",
typedef virQEMUCapsCache *virQEMUCapsCachePtr;
virQEMUCapsPtr virQEMUCapsNew(void);
-virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps);
int virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
qemuMonitorPtr mon);
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)
{
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");