[libvirt] [PATCH 2/4] tests: qemu: Add QMP schema checking in qemuMonitorTestProcessCommandVerbatim

Peter Krempa pkrempa at redhat.com
Fri Jun 7 12:01:17 UTC 2019


In case when we are testing a QMP command we can try to schema check it
so that we catch inconsistencies.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 tests/qemumonitortestutils.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c
index 1cd35830af..0de9048243 100644
--- a/tests/qemumonitortestutils.c
+++ b/tests/qemumonitortestutils.c
@@ -690,14 +690,30 @@ qemuMonitorTestProcessCommandVerbatim(qemuMonitorTestPtr test,
     struct qemuMonitorTestHandlerData *data = item->opaque;
     VIR_AUTOFREE(char *) reformatted = NULL;
     VIR_AUTOFREE(char *) errmsg = NULL;
+    VIR_AUTOPTR(virJSONValue) json = NULL;
+    virJSONValuePtr cmdargs;
+    const char *cmdname;
     int ret = -1;
+    int rc;

     /* JSON strings will be reformatted to simplify checking */
     if (test->json || test->agent) {
-        if (!(reformatted = virJSONStringReformat(cmdstr, false)))
+        if (!(json = virJSONValueFromString(cmdstr)) ||
+            !(reformatted = virJSONValueToString(json, false)))
             return -1;

         cmdstr = reformatted;
+
+        /* in this case we do a best-effort schema check if we can find the command */
+        if ((cmdname = virJSONValueObjectGetString(json, "execute"))) {
+            cmdargs = virJSONValueObjectGet(json, "arguments");
+
+            if ((rc = qemuMonitorTestProcessCommandDefaultValidate(test, cmdname, cmdargs)) < 0)
+                return -1;
+
+            if (rc == 1)
+                return 0;
+        }
     }

     if (STREQ(data->command_name, cmdstr)) {
-- 
2.21.0




More information about the libvir-list mailing list