This removes the hacky extern global variable and modifies the
test code to properly create QEMU capabilities cache for QEMU
binaries used in our tests.
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
src/qemu/qemu_capabilities.c | 6 ------
tests/qemuhotplugtest.c | 11 ++++-------
tests/qemuxml2argvtest.c | 7 +++----
tests/qemuxml2xmltest.c | 30 ++++++++++++++++--------------
tests/testutilsqemu.c | 36 +++++++++++++++++++-----------------
tests/testutilsqemu.h | 5 +----
6 files changed, 43 insertions(+), 52 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 11fe3e2d9d..2648d46619 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -5209,8 +5209,6 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
}
-const char *qemuTestCapsName;
-
virQEMUCapsPtr
virQEMUCapsCacheLookup(virCapsPtr caps,
virQEMUCapsCachePtr cache,
@@ -5218,10 +5216,6 @@ virQEMUCapsCacheLookup(virCapsPtr caps,
{
virQEMUCapsPtr ret = NULL;
- /* This is used only by test suite!!! */
- if (qemuTestCapsName)
- binary = qemuTestCapsName;
-
virMutexLock(&cache->lock);
ret = virHashLookup(cache->binaries, binary);
diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
index e835999c72..fe97fd0dc3 100644
--- a/tests/qemuhotplugtest.c
+++ b/tests/qemuhotplugtest.c
@@ -58,7 +58,7 @@ static int
qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
virDomainObjPtr *vm,
const char *domxml,
- bool event, const char *testname)
+ bool event)
{
int ret = -1;
qemuDomainObjPrivatePtr priv = NULL;
@@ -79,8 +79,7 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
if (event)
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT);
- if (qemuTestCapsCacheInsert(driver.qemuCapsCache, testname,
- priv->qemuCaps) < 0)
+ if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
goto cleanup;
if (!((*vm)->def = virDomainDefParseString(domxml,
@@ -262,8 +261,7 @@ testQemuHotplug(const void *data)
vm = test->vm;
} else {
if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml,
- test->deviceDeletedEvent,
- test->domain_filename) < 0)
+ test->deviceDeletedEvent) < 0)
goto cleanup;
}
@@ -415,8 +413,7 @@ testQemuHotplugCpuPrepare(const char *test,
if (virTestLoadFile(data->file_xml_dom, &data->xml_dom) < 0)
goto error;
- if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom,
true,
- "cpu-hotplug-test-domain") < 0)
+ if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom, true)
< 0)
goto error;
if (!(caps = virQEMUDriverGetCapabilities(&driver, false)))
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 18ff5ad147..525aa67e02 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -434,16 +434,15 @@ testCompareXMLToArgv(const void *data)
if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
flags |= FLAG_FIPS;
- if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
- info->qemuCaps) < 0)
- goto cleanup;
-
if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
abs_srcdir, info->name) < 0 ||
virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
abs_srcdir, info->name) < 0)
goto cleanup;
+ if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+ goto cleanup;
+
if (info->migrateFrom &&
!(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
info->migrateFd)))
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 579328912a..e1ef9e5b86 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -251,25 +251,26 @@ testInfoSet(struct testInfo *info,
int when,
int gic)
{
+ int ret = -1;
+
if (!(info->qemuCaps = virQEMUCapsNew()))
- goto error;
+ goto cleanup;
if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
- goto error;
+ goto cleanup;
- if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
- info->qemuCaps) < 0)
- goto error;
+ if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+ goto cleanup;
if (virAsprintf(&info->inName,
"%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
abs_srcdir, name) < 0)
- goto error;
+ goto cleanup;
if (when & WHEN_INACTIVE) {
if (virAsprintf(&info->outInactiveName,
"%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-inactive.xml",
abs_srcdir, name) < 0)
- goto error;
+ goto cleanup;
if (!virFileExists(info->outInactiveName)) {
VIR_FREE(info->outInactiveName);
@@ -277,7 +278,7 @@ testInfoSet(struct testInfo *info,
if (virAsprintf(&info->outInactiveName,
"%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
abs_srcdir, name) < 0)
- goto error;
+ goto cleanup;
}
}
@@ -285,7 +286,7 @@ testInfoSet(struct testInfo *info,
if (virAsprintf(&info->outActiveName,
"%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
abs_srcdir, name) < 0)
- goto error;
+ goto cleanup;
if (!virFileExists(info->outActiveName)) {
VIR_FREE(info->outActiveName);
@@ -293,15 +294,16 @@ testInfoSet(struct testInfo *info,
if (virAsprintf(&info->outActiveName,
"%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
abs_srcdir, name) < 0)
- goto error;
+ goto cleanup;
}
}
- return 0;
+ ret = 0;
- error:
- testInfoFree(info);
- return -1;
+ cleanup:
+ if (ret < 0)
+ testInfoFree(info);
+ return ret;
}
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index d3d62df9d1..709e291bd4 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -586,34 +586,36 @@ void qemuTestDriverFree(virQEMUDriver *driver)
virObjectUnref(driver->securityManager);
}
-int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
virQEMUCapsPtr caps)
{
- int ret;
+ size_t i;
+ virQEMUCapsPtr tmpCaps;
if (caps) {
- /* Our caps were created artificially, so we don't want
- * virQEMUCapsCacheFree() to attempt to deallocate them */
- virObjectRef(caps);
+ tmpCaps = caps;
} else {
- caps = virQEMUCapsNew();
- if (!caps)
+ if (!(tmpCaps = virQEMUCapsNew()))
return -ENOMEM;
}
- /* We can have repeating names for our test data sets,
- * so make sure there's no old copy */
- virHashRemoveEntry(cache->binaries, binary);
+ for (i = 0; i < ARRAY_CARDINALITY(QEMUBinList); i++) {
+ virObjectRef(tmpCaps);
+ if (virHashUpdateEntry(cache->binaries,
+ QEMUBinList[i],
+ tmpCaps) < 0) {
+ virObjectUnref(tmpCaps);
+ return -1;
+ }
+ }
- ret = virHashAddEntry(cache->binaries, binary, caps);
- if (ret < 0)
- virObjectUnref(caps);
- else
- qemuTestCapsName = binary;
+ if (!caps)
+ virObjectUnref(tmpCaps);
- return ret;
+ return 0;
}
+
# define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX"
# define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX"
@@ -678,7 +680,7 @@ int qemuTestDriverInit(virQEMUDriver *driver)
if (!driver->xmlopt)
goto error;
- if (qemuTestCapsCacheInsert(driver->qemuCapsCache, "empty", NULL) <
0)
+ if (qemuTestCapsCacheInsert(driver->qemuCapsCache, NULL) < 0)
goto error;
if (!(mgr = virSecurityManagerNew("none", "qemu",
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index 047a64d1ac..3393f5eb71 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -29,12 +29,9 @@ void qemuTestSetHostCPU(virCapsPtr caps,
int qemuTestDriverInit(virQEMUDriver *driver);
void qemuTestDriverFree(virQEMUDriver *driver);
-int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
virQEMUCapsPtr caps);
int testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps,
int gic);
-
-/* This variable is actually defined in src/qemu/qemu_capabilities.c */
-extern const char *qemuTestCapsName;
#endif
--
2.12.2