提交 e831821c 编写于 作者: P Peter Krempa

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: NPeter Krempa <pkrempa@redhat.com>
上级 1ccaf394
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册