diff options
author | Markus Armbruster <armbru@redhat.com> | 2018-08-23 18:39:34 +0200 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2018-08-24 20:26:37 +0200 |
commit | e2f64a688b70e2e6882b534f9a6a68ef589c261d (patch) | |
tree | eb024f8eb3480d2ed6e405562196be933aa4f129 /tests/libqtest.c | |
parent | aed877c53b5b8760b3fdb3605a212188c60f2eb3 (diff) | |
download | qemu-e2f64a688b70e2e6882b534f9a6a68ef589c261d.zip qemu-e2f64a688b70e2e6882b534f9a6a68ef589c261d.tar.gz qemu-e2f64a688b70e2e6882b534f9a6a68ef589c261d.tar.bz2 |
test-qga: Clean up how we test QGA synchronization
To permit recovering from arbitrary JSON parse errors, the JSON parser
resets itself on lexical errors. We recommend sending a 0xff byte for
that purpose, and test-qga covers this usage since commit 5229564b832.
That commit had to add an ugly hack to qmp_fd_vsend() to make capable
of sending this byte (it's designed to send only valid JSON).
The previous commit added a way to send arbitrary text. Put that to
use for this purpose, and drop the hack from qmp_fd_vsend().
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20180823164025.12553-8-armbru@redhat.com>
Diffstat (limited to 'tests/libqtest.c')
-rw-r--r-- | tests/libqtest.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/tests/libqtest.c b/tests/libqtest.c index 7012c5c..af2a24e 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -507,16 +507,6 @@ void qmp_fd_vsend(int fd, const char *fmt, va_list ap) { QObject *qobj; - /* - * qobject_from_vjsonf_nofail() chokes on leading 0xff as invalid - * JSON, but tests/test-qga.c needs to send that to test QGA - * synchronization - */ - if (*fmt == '\377') { - socket_send(fd, fmt, 1); - fmt++; - } - /* Going through qobject ensures we escape strings properly */ qobj = qobject_from_vjsonf_nofail(fmt, ap); @@ -604,23 +594,36 @@ void qtest_qmp_send(QTestState *s, const char *fmt, ...) va_end(ap); } -void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...) +void qmp_fd_vsend_raw(int fd, const char *fmt, va_list ap) { bool log = getenv("QTEST_LOG") != NULL; - va_list ap; - char *str; - - va_start(ap, fmt); - str = g_strdup_vprintf(fmt, ap); - va_end(ap); + char *str = g_strdup_vprintf(fmt, ap); if (log) { fprintf(stderr, "%s", str); } - socket_send(s->qmp_fd, str, strlen(str)); + socket_send(fd, str, strlen(str)); g_free(str); } +void qmp_fd_send_raw(int fd, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qmp_fd_vsend_raw(fd, fmt, ap); + va_end(ap); +} + +void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + qmp_fd_vsend_raw(s->qmp_fd, fmt, ap); + va_end(ap); +} + QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event) { QDict *response; |