testutilsqemu: Introduce struct to hold data valid for all test runs

We pass multiple caching objects to individual tests which don't change.
To prevent always having to pass them individually to
'testQemuInfoSetArgs' introduce 'struct testQemuConf' which will hold
all of them and just the struct will be passed to the tests.

Additionally this will make the conf available from inside the test run.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-08-17 16:26:58 +02:00
parent 0ceb802ad9
commit 92e0cd2620
5 changed files with 38 additions and 25 deletions

View File

@ -72,11 +72,13 @@ mymain(void)
int ret = 0; int ret = 0;
g_autofree char *fakerootdir = NULL; g_autofree char *fakerootdir = NULL;
g_autoptr(virQEMUDriverConfig) cfg = NULL; g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autoptr(GHashTable) capslatest = NULL; g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData); g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
g_autoptr(virConnect) conn = NULL; g_autoptr(virConnect) conn = NULL;
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
.qapiSchemaCache = NULL };
capslatest = testQemuGetLatestCaps();
if (!capslatest) if (!capslatest)
return EXIT_FAILURE; return EXIT_FAILURE;
@ -110,7 +112,7 @@ mymain(void)
static struct testQemuInfo info = { \ static struct testQemuInfo info = { \
.name = _name, \ .name = _name, \
}; \ }; \
if (testQemuInfoSetArgs(&info, capscache, capslatest, ARG_END) < 0 || \ if (testQemuInfoSetArgs(&info, &testConf, ARG_END) < 0 || \
qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \ qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
VIR_TEST_DEBUG("Failed to generate status test data for '%s'", _name); \ VIR_TEST_DEBUG("Failed to generate status test data for '%s'", _name); \
return -1; \ return -1; \

View File

@ -535,11 +535,11 @@ testCompareXMLToArgvValidateSchema(virQEMUDriver *drv,
if (info->schemafile) { if (info->schemafile) {
/* lookup and insert into cache if not found */ /* lookup and insert into cache if not found */
if (!g_hash_table_lookup_extended(info->qapiSchemaCache, if (!g_hash_table_lookup_extended(info->conf->qapiSchemaCache,
info->schemafile, info->schemafile,
NULL, (void **) &schema)) { NULL, (void **) &schema)) {
schema = testQEMUSchemaLoad(info->schemafile); schema = testQEMUSchemaLoad(info->schemafile);
g_hash_table_insert(info->qapiSchemaCache, g_hash_table_insert(info->conf->qapiSchemaCache,
g_strdup(info->schemafile), g_strdup(info->schemafile),
schema); schema);
} }
@ -845,9 +845,15 @@ mymain(void)
{ {
int ret = 0; int ret = 0;
g_autofree char *fakerootdir = NULL; g_autofree char *fakerootdir = NULL;
g_autoptr(GHashTable) capslatest = NULL; g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
g_autoptr(GHashTable) qapiSchemaCache = virHashNew((GDestroyNotify) virHashFree); g_autoptr(GHashTable) qapiSchemaCache = virHashNew((GDestroyNotify) virHashFree);
g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData); g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
.qapiSchemaCache = qapiSchemaCache };
if (!capslatest)
return EXIT_FAILURE;
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE); fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
@ -901,10 +907,6 @@ mymain(void)
VIR_FREE(driver.config->nvramDir); VIR_FREE(driver.config->nvramDir);
driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram"); driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram");
capslatest = testQemuGetLatestCaps();
if (!capslatest)
return EXIT_FAILURE;
virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware", virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
abs_srcdir "/qemufirmwaredata/etc/qemu/firmware"); abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware", virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
@ -941,9 +943,7 @@ mymain(void)
static struct testQemuInfo info = { \ static struct testQemuInfo info = { \
.name = _name, \ .name = _name, \
}; \ }; \
info.qapiSchemaCache = qapiSchemaCache; \ if (testQemuInfoSetArgs(&info, &testConf, __VA_ARGS__) < 0) \
if (testQemuInfoSetArgs(&info, capscache, capslatest, \
__VA_ARGS__) < 0) \
ret = -1; \ ret = -1; \
testInfoSetPaths(&info, _suffix); \ testInfoSetPaths(&info, _suffix); \
if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \ if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \

View File

@ -104,14 +104,17 @@ mymain(void)
int ret = 0; int ret = 0;
g_autofree char *fakerootdir = NULL; g_autofree char *fakerootdir = NULL;
g_autoptr(virQEMUDriverConfig) cfg = NULL; g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autoptr(GHashTable) capslatest = NULL; g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData); g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
g_autoptr(virConnect) conn = NULL; g_autoptr(virConnect) conn = NULL;
struct testQemuConf testConf = { .capslatest = capslatest,
.capscache = capscache,
.qapiSchemaCache = NULL };
capslatest = testQemuGetLatestCaps();
if (!capslatest) if (!capslatest)
return EXIT_FAILURE; return EXIT_FAILURE;
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE); fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
if (!g_mkdtemp(fakerootdir)) { if (!g_mkdtemp(fakerootdir)) {
@ -151,7 +154,7 @@ mymain(void)
static struct testQemuInfo info = { \ static struct testQemuInfo info = { \
.name = _name, \ .name = _name, \
}; \ }; \
if (testQemuInfoSetArgs(&info, capscache, capslatest, __VA_ARGS__) < 0 || \ if (testQemuInfoSetArgs(&info, &testConf, __VA_ARGS__) < 0 || \
qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \ qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
VIR_TEST_DEBUG("Failed to generate test data for '%s'", _name); \ VIR_TEST_DEBUG("Failed to generate test data for '%s'", _name); \
ret = -1; \ ret = -1; \

View File

@ -679,8 +679,7 @@ testQemuCapsIterate(const char *suffix,
int int
testQemuInfoSetArgs(struct testQemuInfo *info, testQemuInfoSetArgs(struct testQemuInfo *info,
GHashTable *capscache, struct testQemuConf *conf, ...)
GHashTable *capslatest, ...)
{ {
va_list argptr; va_list argptr;
testQemuInfoArgName argname; testQemuInfoArgName argname;
@ -696,7 +695,9 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
if (!fakeCaps) if (!fakeCaps)
abort(); abort();
va_start(argptr, capslatest); info->conf = conf;
va_start(argptr, conf);
while ((argname = va_arg(argptr, testQemuInfoArgName)) != ARG_END) { while ((argname = va_arg(argptr, testQemuInfoArgName)) != ARG_END) {
switch (argname) { switch (argname) {
case ARG_QEMU_CAPS: case ARG_QEMU_CAPS:
@ -760,18 +761,18 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
info->arch = virArchFromString(capsarch); info->arch = virArchFromString(capsarch);
if (STREQ(capsver, "latest")) { if (STREQ(capsver, "latest")) {
capsfile = g_strdup(virHashLookup(capslatest, capsarch)); capsfile = g_strdup(virHashLookup(info->conf->capslatest, capsarch));
stripmachinealiases = true; stripmachinealiases = true;
} else { } else {
capsfile = g_strdup_printf("%s/caps_%s.%s.xml", capsfile = g_strdup_printf("%s/caps_%s.%s.xml",
TEST_QEMU_CAPS_PATH, capsver, capsarch); TEST_QEMU_CAPS_PATH, capsver, capsarch);
} }
if (!g_hash_table_lookup_extended(capscache, capsfile, NULL, (void **) &cachedcaps)) { if (!g_hash_table_lookup_extended(info->conf->capscache, capsfile, NULL, (void **) &cachedcaps)) {
if (!(cachedcaps = qemuTestParseCapabilitiesArch(info->arch, capsfile))) if (!(cachedcaps = qemuTestParseCapabilitiesArch(info->arch, capsfile)))
goto cleanup; goto cleanup;
g_hash_table_insert(capscache, g_strdup(capsfile), cachedcaps); g_hash_table_insert(info->conf->capscache, g_strdup(capsfile), cachedcaps);
} }
if (!(info->qemuCaps = virQEMUCapsNewCopy(cachedcaps))) if (!(info->qemuCaps = virQEMUCapsNewCopy(cachedcaps)))

View File

@ -54,6 +54,12 @@ typedef enum {
FLAG_SLIRP_HELPER = 1 << 5, FLAG_SLIRP_HELPER = 1 << 5,
} testQemuInfoFlags; } testQemuInfoFlags;
struct testQemuConf {
GHashTable *capscache;
GHashTable *capslatest;
GHashTable *qapiSchemaCache;
};
struct testQemuInfo { struct testQemuInfo {
const char *name; const char *name;
char *infile; char *infile;
@ -66,7 +72,8 @@ struct testQemuInfo {
unsigned int parseFlags; unsigned int parseFlags;
virArch arch; virArch arch;
char *schemafile; char *schemafile;
GHashTable *qapiSchemaCache;
struct testQemuConf *conf;
}; };
virCaps *testQemuCapsInit(void); virCaps *testQemuCapsInit(void);
@ -110,8 +117,8 @@ int testQemuCapsIterate(const char *suffix,
void *opaque); void *opaque);
int testQemuInfoSetArgs(struct testQemuInfo *info, int testQemuInfoSetArgs(struct testQemuInfo *info,
GHashTable *capscache, struct testQemuConf *conf,
GHashTable *capslatest, ...); ...);
void testQemuInfoClear(struct testQemuInfo *info); void testQemuInfoClear(struct testQemuInfo *info);
#endif #endif