diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c index 8a715d1989..8057d1e2c0 100644 --- a/tests/qemublocktest.c +++ b/tests/qemublocktest.c @@ -86,7 +86,7 @@ testBackingXMLjsonXML(const void *args) if (!data->legacy) { if (testQEMUSchemaValidate(backendprops, data->schemaroot, - data->schema, &debug) < 0) { + data->schema, false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); g_autofree char *debugprops = virJSONValueToString(backendprops, true); @@ -168,7 +168,7 @@ testJSONtoJSON(const void *args) return -1; if (testQEMUSchemaValidate(jsonsrcout, data->schemaroot, - data->schema, &debug) < 0) { + data->schema, false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); VIR_TEST_VERBOSE("json does not conform to QAPI schema"); @@ -341,7 +341,7 @@ testQemuDiskXMLToPropsValidateSchema(const void *opaque) g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER; if (testQEMUSchemaValidate(data->images[i].formatprops, data->schemaroot, - data->schema, &debug) < 0) { + data->schema, false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); g_autofree char *propsstr = virJSONValueToString(data->images[i].formatprops, true); VIR_TEST_VERBOSE("json does not conform to QAPI schema"); @@ -353,7 +353,7 @@ testQemuDiskXMLToPropsValidateSchema(const void *opaque) virBufferFreeAndReset(&debug); if (testQEMUSchemaValidate(data->images[i].storageprops, data->schemaroot, - data->schema, &debug) < 0) { + data->schema, false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); g_autofree char *propsstr = virJSONValueToString(data->images[i].storageprops, true); VIR_TEST_VERBOSE("json does not conform to QAPI schema"); @@ -365,7 +365,7 @@ testQemuDiskXMLToPropsValidateSchema(const void *opaque) virBufferFreeAndReset(&debug); if (testQEMUSchemaValidate(data->images[i].storagepropssrc, data->schemaroot, - data->schema, &debug) < 0) { + data->schema, false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); g_autofree char *propsstr = virJSONValueToString(data->images[i].storagepropssrc, true); VIR_TEST_VERBOSE("json does not conform to QAPI schema"); @@ -543,7 +543,7 @@ testQemuImageCreate(const void *opaque) return -1; if (testQEMUSchemaValidate(formatprops, data->schemaroot, data->schema, - &debug) < 0) { + false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); VIR_TEST_VERBOSE("blockdev-create format json does not conform to QAPI schema"); VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s", @@ -558,7 +558,7 @@ testQemuImageCreate(const void *opaque) return -1; if (testQEMUSchemaValidate(protocolprops, data->schemaroot, data->schema, - &debug) < 0) { + false, &debug) < 0) { g_autofree char *debugmsg = virBufferContentAndReset(&debug); VIR_TEST_VERBOSE("blockdev-create protocol json does not conform to QAPI schema"); VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s", diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 60c816d1d1..fce88083b9 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2842,7 +2842,8 @@ testQAPISchemaValidate(const void *opaque) if (!(json = virJSONValueFromString(data->json))) goto cleanup; - if ((testQEMUSchemaValidate(json, schemaroot, data->schema, &debug) == 0) != data->success) { + if ((testQEMUSchemaValidate(json, schemaroot, data->schema, false, + &debug) == 0) != data->success) { if (!data->success) VIR_TEST_VERBOSE("\nschema validation should have failed"); } else { diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 0d9427f1d1..6be7555dc0 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -554,7 +554,10 @@ qemuMonitorTestProcessCommandDefaultValidate(qemuMonitorTestPtr test, if (STREQ(cmdname, "device_add")) return 0; - if (testQEMUSchemaValidateCommand(cmdname, args, test->qapischema, &debug) < 0) { + if (testQEMUSchemaValidateCommand(cmdname, args, test->qapischema, + test->skipValidationDeprecated, + test->skipValidationRemoved, + &debug) < 0) { if (virTestGetDebug() == 2) { g_autofree char *argstr = NULL; diff --git a/tests/testutilsqemuschema.c b/tests/testutilsqemuschema.c index f13e87800e..680dc3a881 100644 --- a/tests/testutilsqemuschema.c +++ b/tests/testutilsqemuschema.c @@ -24,6 +24,7 @@ struct testQEMUSchemaValidateCtxt { virHashTablePtr schema; virBufferPtr debug; + bool allowDeprecated; }; @@ -488,10 +489,13 @@ int testQEMUSchemaValidate(virJSONValuePtr obj, virJSONValuePtr root, virHashTablePtr schema, + bool allowDeprecated, virBufferPtr debug) { struct testQEMUSchemaValidateCtxt ctxt = { .schema = schema, - .debug = debug }; + .debug = debug, + .allowDeprecated = allowDeprecated }; + return testQEMUSchemaValidateRecurse(obj, root, &ctxt); } @@ -501,6 +505,9 @@ testQEMUSchemaValidate(virJSONValuePtr obj, * @command: command to validate * @arguments: arguments of @command to validate * @schema: hash table containing schema entries + * @allowDeprecated: don't fails schema validation if @command or one of @arguments + * is deprecated + * @allowRemoved: skip validation fully if @command was not found * @debug: a virBuffer which will be filled with debug information if provided * * Validates whether @command and its @arguments conform to the QAPI schema @@ -508,16 +515,22 @@ testQEMUSchemaValidate(virJSONValuePtr obj, * -1 if it does not and -2 if there is a problem with the schema or with * internals. * + * @allowRemoved should generally be used only if it's certain that there's a + * replacement of @command in place. + * * @debug is filled with information regarding the validation process */ int testQEMUSchemaValidateCommand(const char *command, virJSONValuePtr arguments, virHashTablePtr schema, + bool allowDeprecated, + bool allowRemoved G_GNUC_UNUSED, virBufferPtr debug) { struct testQEMUSchemaValidateCtxt ctxt = { .schema = schema, - .debug = debug }; + .debug = debug, + .allowDeprecated = allowDeprecated }; g_autofree char *schemapatharguments = g_strdup_printf("%s/arg-type", command); g_autoptr(virJSONValue) emptyargs = NULL; virJSONValuePtr schemarootcommand; diff --git a/tests/testutilsqemuschema.h b/tests/testutilsqemuschema.h index e3a375b038..8b6803afda 100644 --- a/tests/testutilsqemuschema.h +++ b/tests/testutilsqemuschema.h @@ -26,12 +26,15 @@ int testQEMUSchemaValidate(virJSONValuePtr obj, virJSONValuePtr root, virHashTablePtr schema, + bool allowDeprecated, virBufferPtr debug); int testQEMUSchemaValidateCommand(const char *command, virJSONValuePtr arguments, virHashTablePtr schema, + bool allowDeprecated, + bool allowRemoved, virBufferPtr debug); virJSONValuePtr