提交 8d04ea16 编写于 作者: P Pavel Hrdina

tests/testutilsqemu: properly initialize qemu caps for tests

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: NPavel Hrdina <phrdina@redhat.com>
上级 e6e26a89
...@@ -5209,8 +5209,6 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache, ...@@ -5209,8 +5209,6 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
} }
const char *qemuTestCapsName;
virQEMUCapsPtr virQEMUCapsPtr
virQEMUCapsCacheLookup(virCapsPtr caps, virQEMUCapsCacheLookup(virCapsPtr caps,
virQEMUCapsCachePtr cache, virQEMUCapsCachePtr cache,
...@@ -5218,10 +5216,6 @@ virQEMUCapsCacheLookup(virCapsPtr caps, ...@@ -5218,10 +5216,6 @@ virQEMUCapsCacheLookup(virCapsPtr caps,
{ {
virQEMUCapsPtr ret = NULL; virQEMUCapsPtr ret = NULL;
/* This is used only by test suite!!! */
if (qemuTestCapsName)
binary = qemuTestCapsName;
virMutexLock(&cache->lock); virMutexLock(&cache->lock);
ret = virHashLookup(cache->binaries, binary); ret = virHashLookup(cache->binaries, binary);
......
...@@ -58,7 +58,7 @@ static int ...@@ -58,7 +58,7 @@ static int
qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt, qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
virDomainObjPtr *vm, virDomainObjPtr *vm,
const char *domxml, const char *domxml,
bool event, const char *testname) bool event)
{ {
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = NULL; qemuDomainObjPrivatePtr priv = NULL;
...@@ -79,8 +79,7 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt, ...@@ -79,8 +79,7 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
if (event) if (event)
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT); virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT);
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, testname, if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
priv->qemuCaps) < 0)
goto cleanup; goto cleanup;
if (!((*vm)->def = virDomainDefParseString(domxml, if (!((*vm)->def = virDomainDefParseString(domxml,
...@@ -262,8 +261,7 @@ testQemuHotplug(const void *data) ...@@ -262,8 +261,7 @@ testQemuHotplug(const void *data)
vm = test->vm; vm = test->vm;
} else { } else {
if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml, if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml,
test->deviceDeletedEvent, test->deviceDeletedEvent) < 0)
test->domain_filename) < 0)
goto cleanup; goto cleanup;
} }
...@@ -415,8 +413,7 @@ testQemuHotplugCpuPrepare(const char *test, ...@@ -415,8 +413,7 @@ testQemuHotplugCpuPrepare(const char *test,
if (virTestLoadFile(data->file_xml_dom, &data->xml_dom) < 0) if (virTestLoadFile(data->file_xml_dom, &data->xml_dom) < 0)
goto error; goto error;
if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom, true, if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom, true) < 0)
"cpu-hotplug-test-domain") < 0)
goto error; goto error;
if (!(caps = virQEMUDriverGetCapabilities(&driver, false))) if (!(caps = virQEMUDriverGetCapabilities(&driver, false)))
......
...@@ -434,8 +434,7 @@ testCompareXMLToArgv(const void *data) ...@@ -434,8 +434,7 @@ testCompareXMLToArgv(const void *data)
if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS)) if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
flags |= FLAG_FIPS; flags |= FLAG_FIPS;
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name, if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
info->qemuCaps) < 0)
goto cleanup; goto cleanup;
if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml", if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
......
...@@ -257,8 +257,7 @@ testInfoSet(struct testInfo *info, ...@@ -257,8 +257,7 @@ testInfoSet(struct testInfo *info,
if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0) if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
goto error; goto error;
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name, if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
info->qemuCaps) < 0)
goto error; goto error;
if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml", if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
......
...@@ -586,34 +586,36 @@ void qemuTestDriverFree(virQEMUDriver *driver) ...@@ -586,34 +586,36 @@ void qemuTestDriverFree(virQEMUDriver *driver)
virObjectUnref(driver->securityManager); virObjectUnref(driver->securityManager);
} }
int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary, int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
virQEMUCapsPtr caps) virQEMUCapsPtr caps)
{ {
int ret; size_t i;
virQEMUCapsPtr tmpCaps;
if (caps) { if (caps) {
/* Our caps were created artificially, so we don't want tmpCaps = caps;
* virQEMUCapsCacheFree() to attempt to deallocate them */
virObjectRef(caps);
} else { } else {
caps = virQEMUCapsNew(); if (!(tmpCaps = virQEMUCapsNew()))
if (!caps)
return -ENOMEM; return -ENOMEM;
} }
/* We can have repeating names for our test data sets, for (i = 0; i < ARRAY_CARDINALITY(QEMUBinList); i++) {
* so make sure there's no old copy */ virObjectRef(tmpCaps);
virHashRemoveEntry(cache->binaries, binary); if (virHashUpdateEntry(cache->binaries,
QEMUBinList[i],
tmpCaps) < 0) {
virObjectUnref(tmpCaps);
return -1;
}
}
ret = virHashAddEntry(cache->binaries, binary, caps); if (!caps)
if (ret < 0) virObjectUnref(tmpCaps);
virObjectUnref(caps);
else
qemuTestCapsName = binary;
return ret; return 0;
} }
# define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX" # define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX"
# define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX" # define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX"
...@@ -678,7 +680,7 @@ int qemuTestDriverInit(virQEMUDriver *driver) ...@@ -678,7 +680,7 @@ int qemuTestDriverInit(virQEMUDriver *driver)
if (!driver->xmlopt) if (!driver->xmlopt)
goto error; goto error;
if (qemuTestCapsCacheInsert(driver->qemuCapsCache, "empty", NULL) < 0) if (qemuTestCapsCacheInsert(driver->qemuCapsCache, NULL) < 0)
goto error; goto error;
if (!(mgr = virSecurityManagerNew("none", "qemu", if (!(mgr = virSecurityManagerNew("none", "qemu",
......
...@@ -29,12 +29,9 @@ void qemuTestSetHostCPU(virCapsPtr caps, ...@@ -29,12 +29,9 @@ void qemuTestSetHostCPU(virCapsPtr caps,
int qemuTestDriverInit(virQEMUDriver *driver); int qemuTestDriverInit(virQEMUDriver *driver);
void qemuTestDriverFree(virQEMUDriver *driver); void qemuTestDriverFree(virQEMUDriver *driver);
int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary, int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
virQEMUCapsPtr caps); virQEMUCapsPtr caps);
int testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps, int testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps,
int gic); int gic);
/* This variable is actually defined in src/qemu/qemu_capabilities.c */
extern const char *qemuTestCapsName;
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册