The qemu JSON monitor test allows to test also expected command
arguments. As the error from the monitor simulator is returned as a
simulated qemu error (in JSON) all other JSON contained in the error
message needs to be escaped. This will happen if the monitor command
under test receives a JSON array as an argument.
This will improve the error message from:
libvirt: error : internal error: cannot parse json { "error": {
"desc":
"Invalid value of argument 'keys' of command 'send-key': expected
'ble'
got
'[{"type":"number","data":43},{"type":"number","data":26},
{"type":"number","data":46},{"type":"number","data":32}]'",
"class": "UnexpectedCommand" } }: lexical error: invalid string in
json text.
To:
libvirt: QEMU Driver error : internal error: unable to execute QEMU
command 'send-key': Invalid value of argument 'keys' of command
'send-key': expected 'ble' got
'[{"type":"number","data":43},
{"type":"number","data":26},{"type":"number","data":46},
{"type":"number","data":32}]'
This improvement will not have any effect on tests executing as
expected, but it will help test development.
---
tests/qemumonitortestutils.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c
index 30c2153..8155a69 100644
--- a/tests/qemumonitortestutils.c
+++ b/tests/qemumonitortestutils.c
@@ -145,6 +145,12 @@ qemuMonitorReportError(qemuMonitorTestPtr test, const char *errmsg,
...)
goto cleanup;
if (test->agent || test->json) {
+ char *tmp = msg;
+ msg = qemuMonitorEscapeArg(tmp);
+ VIR_FREE(tmp);
+ if (!msg)
+ goto cleanup;
+
if (virAsprintf(&jsonmsg, "{ \"error\": "
" { \"desc\": \"%s\", "
" \"class\":
\"UnexpectedCommand\" } }",
--
1.9.3