mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
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:
parent
0ceb802ad9
commit
92e0cd2620
@ -72,11 +72,13 @@ mymain(void)
|
||||
int ret = 0;
|
||||
g_autofree char *fakerootdir = NULL;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
g_autoptr(GHashTable) capslatest = NULL;
|
||||
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
|
||||
g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
|
||||
g_autoptr(virConnect) conn = NULL;
|
||||
struct testQemuConf testConf = { .capslatest = capslatest,
|
||||
.capscache = capscache,
|
||||
.qapiSchemaCache = NULL };
|
||||
|
||||
capslatest = testQemuGetLatestCaps();
|
||||
if (!capslatest)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
@ -110,7 +112,7 @@ mymain(void)
|
||||
static struct testQemuInfo info = { \
|
||||
.name = _name, \
|
||||
}; \
|
||||
if (testQemuInfoSetArgs(&info, capscache, capslatest, ARG_END) < 0 || \
|
||||
if (testQemuInfoSetArgs(&info, &testConf, ARG_END) < 0 || \
|
||||
qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
|
||||
VIR_TEST_DEBUG("Failed to generate status test data for '%s'", _name); \
|
||||
return -1; \
|
||||
|
@ -535,11 +535,11 @@ testCompareXMLToArgvValidateSchema(virQEMUDriver *drv,
|
||||
|
||||
if (info->schemafile) {
|
||||
/* 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,
|
||||
NULL, (void **) &schema)) {
|
||||
schema = testQEMUSchemaLoad(info->schemafile);
|
||||
g_hash_table_insert(info->qapiSchemaCache,
|
||||
g_hash_table_insert(info->conf->qapiSchemaCache,
|
||||
g_strdup(info->schemafile),
|
||||
schema);
|
||||
}
|
||||
@ -845,9 +845,15 @@ mymain(void)
|
||||
{
|
||||
int ret = 0;
|
||||
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) capscache = virHashNew(virObjectFreeHashData);
|
||||
struct testQemuConf testConf = { .capslatest = capslatest,
|
||||
.capscache = capscache,
|
||||
.qapiSchemaCache = qapiSchemaCache };
|
||||
|
||||
if (!capslatest)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
|
||||
|
||||
@ -901,10 +907,6 @@ mymain(void)
|
||||
VIR_FREE(driver.config->nvramDir);
|
||||
driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram");
|
||||
|
||||
capslatest = testQemuGetLatestCaps();
|
||||
if (!capslatest)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
|
||||
abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
|
||||
virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
|
||||
@ -941,9 +943,7 @@ mymain(void)
|
||||
static struct testQemuInfo info = { \
|
||||
.name = _name, \
|
||||
}; \
|
||||
info.qapiSchemaCache = qapiSchemaCache; \
|
||||
if (testQemuInfoSetArgs(&info, capscache, capslatest, \
|
||||
__VA_ARGS__) < 0) \
|
||||
if (testQemuInfoSetArgs(&info, &testConf, __VA_ARGS__) < 0) \
|
||||
ret = -1; \
|
||||
testInfoSetPaths(&info, _suffix); \
|
||||
if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
|
||||
|
@ -104,14 +104,17 @@ mymain(void)
|
||||
int ret = 0;
|
||||
g_autofree char *fakerootdir = NULL;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
g_autoptr(GHashTable) capslatest = NULL;
|
||||
g_autoptr(GHashTable) capslatest = testQemuGetLatestCaps();
|
||||
g_autoptr(GHashTable) capscache = virHashNew(virObjectFreeHashData);
|
||||
g_autoptr(virConnect) conn = NULL;
|
||||
struct testQemuConf testConf = { .capslatest = capslatest,
|
||||
.capscache = capscache,
|
||||
.qapiSchemaCache = NULL };
|
||||
|
||||
capslatest = testQemuGetLatestCaps();
|
||||
if (!capslatest)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
|
||||
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
|
||||
|
||||
if (!g_mkdtemp(fakerootdir)) {
|
||||
@ -151,7 +154,7 @@ mymain(void)
|
||||
static struct testQemuInfo info = { \
|
||||
.name = _name, \
|
||||
}; \
|
||||
if (testQemuInfoSetArgs(&info, capscache, capslatest, __VA_ARGS__) < 0 || \
|
||||
if (testQemuInfoSetArgs(&info, &testConf, __VA_ARGS__) < 0 || \
|
||||
qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
|
||||
VIR_TEST_DEBUG("Failed to generate test data for '%s'", _name); \
|
||||
ret = -1; \
|
||||
|
@ -679,8 +679,7 @@ testQemuCapsIterate(const char *suffix,
|
||||
|
||||
int
|
||||
testQemuInfoSetArgs(struct testQemuInfo *info,
|
||||
GHashTable *capscache,
|
||||
GHashTable *capslatest, ...)
|
||||
struct testQemuConf *conf, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
testQemuInfoArgName argname;
|
||||
@ -696,7 +695,9 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
|
||||
if (!fakeCaps)
|
||||
abort();
|
||||
|
||||
va_start(argptr, capslatest);
|
||||
info->conf = conf;
|
||||
|
||||
va_start(argptr, conf);
|
||||
while ((argname = va_arg(argptr, testQemuInfoArgName)) != ARG_END) {
|
||||
switch (argname) {
|
||||
case ARG_QEMU_CAPS:
|
||||
@ -760,18 +761,18 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
|
||||
info->arch = virArchFromString(capsarch);
|
||||
|
||||
if (STREQ(capsver, "latest")) {
|
||||
capsfile = g_strdup(virHashLookup(capslatest, capsarch));
|
||||
capsfile = g_strdup(virHashLookup(info->conf->capslatest, capsarch));
|
||||
stripmachinealiases = true;
|
||||
} else {
|
||||
capsfile = g_strdup_printf("%s/caps_%s.%s.xml",
|
||||
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)))
|
||||
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)))
|
||||
|
@ -54,6 +54,12 @@ typedef enum {
|
||||
FLAG_SLIRP_HELPER = 1 << 5,
|
||||
} testQemuInfoFlags;
|
||||
|
||||
struct testQemuConf {
|
||||
GHashTable *capscache;
|
||||
GHashTable *capslatest;
|
||||
GHashTable *qapiSchemaCache;
|
||||
};
|
||||
|
||||
struct testQemuInfo {
|
||||
const char *name;
|
||||
char *infile;
|
||||
@ -66,7 +72,8 @@ struct testQemuInfo {
|
||||
unsigned int parseFlags;
|
||||
virArch arch;
|
||||
char *schemafile;
|
||||
GHashTable *qapiSchemaCache;
|
||||
|
||||
struct testQemuConf *conf;
|
||||
};
|
||||
|
||||
virCaps *testQemuCapsInit(void);
|
||||
@ -110,8 +117,8 @@ int testQemuCapsIterate(const char *suffix,
|
||||
void *opaque);
|
||||
|
||||
int testQemuInfoSetArgs(struct testQemuInfo *info,
|
||||
GHashTable *capscache,
|
||||
GHashTable *capslatest, ...);
|
||||
struct testQemuConf *conf,
|
||||
...);
|
||||
void testQemuInfoClear(struct testQemuInfo *info);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user