From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40953) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZldR-00052r-UB for qemu-devel@nongnu.org; Wed, 09 Sep 2015 16:06:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZZldO-00064V-MC for qemu-devel@nongnu.org; Wed, 09 Sep 2015 16:06:25 -0400 Received: from e37.co.us.ibm.com ([32.97.110.158]:51039) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZldO-00064J-Gk for qemu-devel@nongnu.org; Wed, 09 Sep 2015 16:06:22 -0400 Received: from /spool/local by e37.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 9 Sep 2015 14:06:20 -0600 Received: from b03cxnp07029.gho.boulder.ibm.com (b03cxnp07029.gho.boulder.ibm.com [9.17.130.16]) by d03dlp03.boulder.ibm.com (Postfix) with ESMTP id 09A8119D801C for ; Wed, 9 Sep 2015 13:57:13 -0600 (MDT) Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by b03cxnp07029.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t89K6ITa52166890 for ; Wed, 9 Sep 2015 13:06:18 -0700 Received: from d03av03.boulder.ibm.com (localhost [127.0.0.1]) by d03av03.boulder.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t89K6Igd008298 for ; Wed, 9 Sep 2015 14:06:18 -0600 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <1440672727-20231-1-git-send-email-marcandre.lureau@redhat.com> References: <1440672727-20231-1-git-send-email-marcandre.lureau@redhat.com> Message-ID: <20150909200554.3885.70413@loki> Date: Wed, 09 Sep 2015 15:05:54 -0500 Subject: Re: [Qemu-devel] [PATCH 1/2] qtest: add a few fd-level qmp helpers List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: marcandre.lureau@redhat.com, qemu-devel@nongnu.org Quoting marcandre.lureau@redhat.com (2015-08-27 05:52:06) > From: Marc-Andr=C3=A9 Lureau > = > Add a few functions to interact with qmp via a simple fd. > = > Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Michael Roth > --- > tests/libqtest.c | 45 +++++++++++++++++++++++++++++++++++++++++---- > tests/libqtest.h | 7 +++++++ > 2 files changed, 48 insertions(+), 4 deletions(-) > = > diff --git a/tests/libqtest.c b/tests/libqtest.c > index e5188e0..11e541d 100644 > --- a/tests/libqtest.c > +++ b/tests/libqtest.c > @@ -357,7 +357,7 @@ static void qmp_response(JSONMessageParser *parser, Q= List *tokens) > qmp->response =3D (QDict *)obj; > } > = > -QDict *qtest_qmp_receive(QTestState *s) > +QDict *qmp_fd_receive(int fd) > { > QMPResponseParser qmp; > bool log =3D getenv("QTEST_LOG") !=3D NULL; > @@ -368,7 +368,7 @@ QDict *qtest_qmp_receive(QTestState *s) > ssize_t len; > char c; > = > - len =3D read(s->qmp_fd, &c, 1); > + len =3D read(fd, &c, 1); > if (len =3D=3D -1 && errno =3D=3D EINTR) { > continue; > } > @@ -388,12 +388,17 @@ QDict *qtest_qmp_receive(QTestState *s) > return qmp.response; > } > = > +QDict *qtest_qmp_receive(QTestState *s) > +{ > + return qmp_fd_receive(s->qmp_fd); > +} > + > /** > * Allow users to send a message without waiting for the reply, > * in the case that they choose to discard all replies up until > * a particular EVENT is received. > */ > -void qtest_async_qmpv(QTestState *s, const char *fmt, va_list ap) > +void qmp_fd_sendv(int fd, const char *fmt, va_list ap) > { > va_list ap_copy; > QObject *qobj; > @@ -417,13 +422,25 @@ void qtest_async_qmpv(QTestState *s, const char *fm= t, va_list ap) > fprintf(stderr, "%s", str); > } > /* Send QMP request */ > - socket_send(s->qmp_fd, str, size); > + socket_send(fd, str, size); > = > QDECREF(qstr); > qobject_decref(qobj); > } > } > = > +void qtest_async_qmpv(QTestState *s, const char *fmt, va_list ap) > +{ > + qmp_fd_sendv(s->qmp_fd, fmt, ap); > +} > + > +QDict *qmp_fdv(int fd, const char *fmt, va_list ap) > +{ > + qmp_fd_sendv(fd, fmt, ap); > + > + return qmp_fd_receive(fd); > +} > + > QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap) > { > qtest_async_qmpv(s, fmt, ap); > @@ -432,6 +449,26 @@ QDict *qtest_qmpv(QTestState *s, const char *fmt, va= _list ap) > return qtest_qmp_receive(s); > } > = > +QDict *qmp_fd(int fd, const char *fmt, ...) > +{ > + va_list ap; > + QDict *response; > + > + va_start(ap, fmt); > + response =3D qmp_fdv(fd, fmt, ap); > + va_end(ap); > + return response; > +} > + > +void qmp_fd_send(int fd, const char *fmt, ...) > +{ > + va_list ap; > + > + va_start(ap, fmt); > + qmp_fd_sendv(fd, fmt, ap); > + va_end(ap); > +} > + > QDict *qtest_qmp(QTestState *s, const char *fmt, ...) > { > va_list ap; > diff --git a/tests/libqtest.h b/tests/libqtest.h > index ec42031..ecd9872 100644 > --- a/tests/libqtest.h > +++ b/tests/libqtest.h > @@ -818,4 +818,11 @@ static inline int64_t clock_set(int64_t val) > */ > bool qtest_big_endian(void); > = > + > +QDict *qmp_fd_receive(int fd); > +void qmp_fd_sendv(int fd, const char *fmt, va_list ap); > +void qmp_fd_send(int fd, const char *fmt, ...); > +QDict *qmp_fdv(int fd, const char *fmt, va_list ap); > +QDict *qmp_fd(int fd, const char *fmt, ...); > + > #endif > -- = > 2.4.3 > = >=20