From: Peter Krempa Date: Mon, 9 Mar 2020 14:39:04 +0000 (+0100) Subject: qemublocktest: XMLjsonXML: Test formatting/parsing of modern JSON X-Git-Tag: v6.2.0-rc1~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f8d0ca56a8335b29f3973e5490815c7cfbeac13;p=thirdparty%2Flibvirt.git 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 Reviewed-by: Ján Tomko --- diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c index f803c9c6b3..77484cc8e7 100644 --- a/tests/qemublocktest.c +++ b/tests/qemublocktest.c @@ -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, "\n"); /* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */