1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-02 13:47:13 +03:00

qemuxmlconftest: Add test cases for broken and missing XML files

Add test cases for few edge cases which excercise the XML reporting from
libxml2 in anticipation of upcoming changes of behaviour.

'virschematest' must skip parsing of the broken file altogether so this
patch adds infrastructure to allow that.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Peter Krempa 2024-08-08 09:14:11 +02:00
parent 4dc889a626
commit 71f14351f9
6 changed files with 25 additions and 1 deletions

View File

@ -0,0 +1,3 @@
ABS_SRCDIR/qemuxmlconfdata/broken-xml-invalid.xml:2: Couldn't find end of Start Tag dom line 1
(null)
^

View File

@ -0,0 +1 @@
<dom

View File

@ -0,0 +1 @@
XML error: failed to parse xml document 'ABS_SRCDIR/qemuxmlconfdata/nonexistent-file.xml'

View File

@ -372,6 +372,7 @@ testCheckExclusiveFlags(int flags)
FLAG_REAL_CAPS |
FLAG_SLIRP_HELPER |
FLAG_ALLOW_DUPLICATE_OUTPUT |
FLAG_ALLOW_MISSING_INPUT |
0, -1);
return 0;
@ -671,7 +672,8 @@ testQemuConfXMLCommon(testQemuInfo *info,
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
goto cleanup;
if (!virFileExists(info->infile)) {
if (!(info->flags & FLAG_ALLOW_MISSING_INPUT) &&
!virFileExists(info->infile)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"Input file '%s' not found", info->infile);
goto cleanup;
@ -1237,6 +1239,10 @@ mymain(void)
g_unsetenv("PIPEWIRE_REMOTE");
g_unsetenv("PIPEWIRE_RUNTIME_DIR");
DO_TEST_CAPS_ARCH_LATEST_FULL("nonexistent-file", "x86_64",
ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_ALLOW_MISSING_INPUT);
DO_TEST_CAPS_LATEST_PARSE_ERROR("broken-xml-invalid");
DO_TEST_CAPS_LATEST("x86_64-pc-minimal");
DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-pc-minimal");
DO_TEST_CAPS_LATEST("x86_64-q35-minimal");

View File

@ -61,6 +61,7 @@ typedef enum {
FLAG_REAL_CAPS = 1 << 2,
FLAG_SLIRP_HELPER = 1 << 3,
FLAG_ALLOW_DUPLICATE_OUTPUT = 1 << 4, /* allow multiple tests with the same output file */
FLAG_ALLOW_MISSING_INPUT = 1 << 5,
} testQemuInfoFlags;
struct testQemuConf {

View File

@ -36,6 +36,7 @@ struct testSchemaEntry {
const char **exceptions; /* optional NULL terminated list of filenames inside
directory where the expected validation result is
inverted */
const char **skip; /* optional NULL terminated list of files to skip altogether */
const char *dirRegex;
const char *file;
};
@ -131,6 +132,10 @@ testSchemaDir(const char *schema,
!g_regex_match(filter, ent->d_name, 0, NULL))
continue;
if (entry->skip &&
g_strv_contains(entry->skip, ent->d_name))
continue;
if (entry->exceptions)
exception = g_strv_contains(entry->exceptions, ent->d_name);
@ -237,10 +242,17 @@ static const char *exceptions_qemuxmlconfdata[] = {
NULL
};
/* skip tests with completely broken XML */
static const char *skip_qemuxmlconfdata[] = {
"broken-xml-invalid.xml",
NULL
};
static const struct testSchemaEntry schemaDomain[] = {
{ .dir = "tests/domainschemadata" },
{ .dir = "tests/qemuxmlconfdata",
.exceptions = exceptions_qemuxmlconfdata,
.skip = skip_qemuxmlconfdata,
},
{ .dir = "tests/xmconfigdata" },
{ .dir = "tests/lxcxml2xmldata" },