提交 7f8d0ca5 编写于 作者: P Peter Krempa

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: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 218ce530
......@@ -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' */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册