mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-08 12:41:29 +00:00
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:
parent
218ce53069
commit
7f8d0ca56a
@ -41,6 +41,9 @@ VIR_LOG_INIT("tests.storagetest");
|
|||||||
struct testBackingXMLjsonXMLdata {
|
struct testBackingXMLjsonXMLdata {
|
||||||
int type;
|
int type;
|
||||||
const char *xml;
|
const char *xml;
|
||||||
|
bool legacy;
|
||||||
|
virHashTablePtr schema;
|
||||||
|
virJSONValuePtr schemaroot;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -57,6 +60,7 @@ testBackingXMLjsonXML(const void *args)
|
|||||||
g_autofree char *actualxml = NULL;
|
g_autofree char *actualxml = NULL;
|
||||||
g_autoptr(virStorageSource) xmlsrc = NULL;
|
g_autoptr(virStorageSource) xmlsrc = NULL;
|
||||||
g_autoptr(virStorageSource) jsonsrc = NULL;
|
g_autoptr(virStorageSource) jsonsrc = NULL;
|
||||||
|
g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
|
||||||
|
|
||||||
if (!(xmlsrc = virStorageSourceNew()))
|
if (!(xmlsrc = virStorageSourceNew()))
|
||||||
return -1;
|
return -1;
|
||||||
@ -71,12 +75,27 @@ testBackingXMLjsonXML(const void *args)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc, true, false,
|
if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc,
|
||||||
|
data->legacy,
|
||||||
|
false,
|
||||||
false))) {
|
false))) {
|
||||||
fprintf(stderr, "failed to format disk source json\n");
|
fprintf(stderr, "failed to format disk source json\n");
|
||||||
return -1;
|
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)
|
if (virJSONValueObjectCreate(&wrapper, "a:file", &backendprops, NULL) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -911,6 +930,10 @@ mymain(void)
|
|||||||
do { \
|
do { \
|
||||||
xmljsonxmldata.type = tpe; \
|
xmljsonxmldata.type = tpe; \
|
||||||
xmljsonxmldata.xml = xmlstr; \
|
xmljsonxmldata.xml = xmlstr; \
|
||||||
|
xmljsonxmldata.legacy = true; \
|
||||||
|
if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
|
||||||
|
&xmljsonxmldata) < 0) \
|
||||||
|
xmljsonxmldata.legacy = false; \
|
||||||
if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
|
if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
|
||||||
&xmljsonxmldata) < 0) \
|
&xmljsonxmldata) < 0) \
|
||||||
ret = -1; \
|
ret = -1; \
|
||||||
@ -919,6 +942,9 @@ mymain(void)
|
|||||||
#define TEST_JSON_FORMAT_NET(xmlstr) \
|
#define TEST_JSON_FORMAT_NET(xmlstr) \
|
||||||
TEST_JSON_FORMAT(VIR_STORAGE_TYPE_NETWORK, 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");
|
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' */
|
/* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user