]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
testQEMUSchemaValidate(Command): Allow skipping validation of deprecated fields
authorPeter Krempa <pkrempa@redhat.com>
Wed, 29 Apr 2020 15:52:43 +0000 (17:52 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 20 May 2020 06:53:29 +0000 (08:53 +0200)
Some test cases are used to validate interactions with old qemu. We need
to skip validation of deprecation with those once it will be added.

In case of commands which were already replaced by code based on
capabilities we can skip the full validation once the command is
removed.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
tests/qemublocktest.c
tests/qemumonitorjsontest.c
tests/qemumonitortestutils.c
tests/testutilsqemuschema.c
tests/testutilsqemuschema.h

index 8a715d19895c4c054d4d4b670038e79253ca8929..8057d1e2c03733af09d36fa568a7ecb06a5e88ee 100644 (file)
@@ -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",
index 60c816d1d1499a05a9f0f89768a839b4ea434c97..fce88083b931b00f3157e8cf99d89a95a65984e3 100644 (file)
@@ -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 {
index 0d9427f1d1e3764f7e8faa1da2f73ae799592a29..6be7555dc0cf3a0a54c37572c64a4475d7425c5c 100644 (file)
@@ -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;
 
index f13e87800ea298b3611a0e6f5b959c9c4952e8ba..680dc3a881b2af6add03254f0fe91cb7f8109788 100644 (file)
@@ -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;
index e3a375b038a822bd536a32c6d3167bacce03ec61..8b6803afda40e1d1df141c4f22122550cda09bb1 100644 (file)
@@ -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