mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03:00
tests: qemu: Add helper code to lookup latest capability file
The helper iterates the directory with files for the capability test and looks up the most recent one for the given architecture. This will allow testing against the newest qemu capabilities so that we can catch regressions in behaviour more easily. Signed-off-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
1ccaf39402
commit
e831821cbc
@ -674,3 +674,66 @@ testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps,
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
char *
|
||||
testQemuGetLatestCapsForArch(const char *dirname,
|
||||
const char *arch,
|
||||
const char *suffix)
|
||||
{
|
||||
struct dirent *ent;
|
||||
DIR *dir = NULL;
|
||||
int rc;
|
||||
char *fullsuffix = NULL;
|
||||
char *tmp = NULL;
|
||||
unsigned long maxver = 0;
|
||||
unsigned long ver;
|
||||
const char *maxname = NULL;
|
||||
char *ret = NULL;
|
||||
|
||||
if (virAsprintf(&fullsuffix, "%s.%s", arch, suffix) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virDirOpen(&dir, dirname) < 0)
|
||||
goto cleanup;
|
||||
|
||||
while ((rc = virDirRead(dir, &ent, dirname)) > 0) {
|
||||
VIR_FREE(tmp);
|
||||
|
||||
if ((rc = VIR_STRDUP(tmp, STRSKIP(ent->d_name, "caps_"))) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (rc == 0)
|
||||
continue;
|
||||
|
||||
if (virFileStripSuffix(tmp, fullsuffix) != 1)
|
||||
continue;
|
||||
|
||||
if (virParseVersionString(tmp, &ver, false) < 0) {
|
||||
VIR_TEST_DEBUG("skipping caps file '%s'\n", ent->d_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ver > maxver) {
|
||||
maxname = ent->d_name;
|
||||
maxver = ver;
|
||||
}
|
||||
}
|
||||
|
||||
if (rc < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!maxname) {
|
||||
VIR_TEST_VERBOSE("failed to find capabilities for '%s' in '%s'\n",
|
||||
arch, dirname);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ignore_value(virAsprintf(&ret, "%s/%s", dirname, maxname));
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(tmp);
|
||||
VIR_FREE(fullsuffix);
|
||||
virDirClose(&dir);
|
||||
return ret;
|
||||
}
|
||||
|
@ -39,4 +39,9 @@ int qemuTestCapsCacheInsert(virFileCachePtr cache,
|
||||
|
||||
int testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps,
|
||||
int gic);
|
||||
|
||||
char *testQemuGetLatestCapsForArch(const char *dirname,
|
||||
const char *arch,
|
||||
const char *suffix);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user