Am 30.10.2013 14:54, schrieb Stefan Hajnoczi: > Add a qtest qmp() function that returns the response object. This > allows test cases to verify the result or to check for error responses. > It also allows waiting for QMP events. > > Signed-off-by: Stefan Hajnoczi <[email protected]> > --- > tests/libqtest.c | 66 > ++++++++++++++++++++++++++++++++++++++++++++------------ > tests/libqtest.h | 37 +++++++++++++++++++++++++++++++ > 2 files changed, 89 insertions(+), 14 deletions(-) [...] > diff --git a/tests/libqtest.h b/tests/libqtest.h > index 4f1b060..9deebdc 100644 > --- a/tests/libqtest.h > +++ b/tests/libqtest.h > @@ -22,6 +22,7 @@ > #include <stdbool.h> > #include <stdarg.h> > #include <sys/types.h> > +#include "qapi/qmp/qdict.h" > > typedef struct QTestState QTestState; > > @@ -53,6 +54,15 @@ void qtest_quit(QTestState *s); > void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...); > > /** > + * qtest_qmp: > + * @s: #QTestState instance to operate on. > + * @fmt...: QMP message to send to qemu > + * > + * Sends a QMP message to QEMU and returns the response. > + */ > +QDict *qtest_qmp(QTestState *s, const char *fmt, ...); > + > +/** > * qtest_qmpv_discard_response: > * @s: #QTestState instance to operate on. > * @fmt: QMP message to send to QEMU > @@ -63,6 +73,16 @@ void qtest_qmp_discard_response(QTestState *s, const char > *fmt, ...); > void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap); > > /** > + * qtest_qmpv: > + * @s: #QTestState instance to operate on. > + * @fmt: QMP message to send to QEMU > + * @ap: QMP message arguments > + * > + * Sends a QMP message to QEMU and returns the response. > + */ > +QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap); > + > +/** > * qtest_get_irq: > * @s: #QTestState instance to operate on. > * @num: Interrupt to observe. > @@ -331,6 +351,23 @@ static inline void qtest_end(void) > } > > /** > + * qmp: > + * @fmt...: QMP message to send to qemu > + * > + * Sends a QMP message to QEMU and returns the response. > + */ > +static inline QDict *qmp(const char *fmt, ...) > +{ > + va_list ap; > + QDict *response; > + > + va_start(ap, fmt); > + response = qtest_qmpv(global_qtest, fmt, ap); > + va_end(ap); > + return response; > +} > + > +/** > * qmp_discard_response: > * @fmt...: QMP message to send to qemu > *
I can't really judge the JSON implementation, but it looks sane reusing existing code. The new prototypes could get the GCC_FMT_ATTR(2,3) and GCC_FMT_ATTR(1,2), but since that's an improvement over existing code it can be done as follow-up, so Reviewed-by: Andreas Färber <[email protected]> and thanks a lot for following up on Jason's earlier attempt! Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
