qemublocktest: XMLjsonXML: Test formatting/parsing of modern JSON

The test was invoking the JSON formatter with the 'legacy' flag thus
formatting bunch of obsolete JSON blockdev definitions. We also should
test the modern ones. Add a boolean and re-run all the tests in both
cases.

Additionally for any modern invocation we should also validate that the
output conforms to the QAPI schema.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-03-09 15:39:04 +01:00
parent 218ce53069
commit 7f8d0ca56a

View File

@ -41,6 +41,9 @@ VIR_LOG_INIT("tests.storagetest");
struct testBackingXMLjsonXMLdata {
int type;
const char *xml;
bool legacy;
virHashTablePtr schema;
virJSONValuePtr schemaroot;
};
static int
@ -57,6 +60,7 @@ testBackingXMLjsonXML(const void *args)
g_autofree char *actualxml = NULL;
g_autoptr(virStorageSource) xmlsrc = NULL;
g_autoptr(virStorageSource) jsonsrc = NULL;
g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
if (!(xmlsrc = virStorageSourceNew()))
return -1;
@ -71,12 +75,27 @@ testBackingXMLjsonXML(const void *args)
return -1;
}
if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc, true, false,
if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc,
data->legacy,
false,
false))) {
fprintf(stderr, "failed to format disk source json\n");
return -1;
}
if (!data->legacy) {
if (testQEMUSchemaValidate(backendprops, data->schemaroot,
data->schema, &debug) < 0) {
g_autofree char *debugmsg = virBufferContentAndReset(&debug);
g_autofree char *debugprops = virJSONValueToString(backendprops, true);
VIR_TEST_VERBOSE("json does not conform to QAPI schema");
VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
debugprops, NULLSTR(debugmsg));
return -1;
}
}
if (virJSONValueObjectCreate(&wrapper, "a:file", &backendprops, NULL) < 0)
return -1;
@ -911,6 +930,10 @@ mymain(void)
do { \
xmljsonxmldata.type = tpe; \
xmljsonxmldata.xml = xmlstr; \
xmljsonxmldata.legacy = true; \
if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
&xmljsonxmldata) < 0) \
xmljsonxmldata.legacy = false; \
if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
&xmljsonxmldata) < 0) \
ret = -1; \
@ -919,6 +942,9 @@ mymain(void)
#define TEST_JSON_FORMAT_NET(xmlstr) \
TEST_JSON_FORMAT(VIR_STORAGE_TYPE_NETWORK, xmlstr)
xmljsonxmldata.schema = qmp_schema_x86_64;
xmljsonxmldata.schemaroot = qmp_schemaroot_x86_64_blockdev_add;
TEST_JSON_FORMAT(VIR_STORAGE_TYPE_FILE, "<source file='/path/to/file'/>\n");
/* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */