From: Markus Armbruster <armbru@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, Fam Zheng <famz@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 1/4] libqtest: add qmp_device_del()
Date: Mon, 02 Oct 2017 19:25:58 +0200 [thread overview]
Message-ID: <87bmlp1mxl.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <1505295366-25295-2-git-send-email-peterx@redhat.com> (Peter Xu's message of "Wed, 13 Sep 2017 17:36:03 +0800")
Peter Xu <peterx@redhat.com> writes:
> Device deletion is tricky since we'll get both a response and an event,
> while the order of arrival may vary. Provide a helper to handle this
> complexity.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> tests/libqtest.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
> tests/libqtest.h | 8 ++++++++
> 2 files changed, 56 insertions(+)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index b9a1f18..a34d8c4 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -925,6 +925,54 @@ QDict *qmp(const char *fmt, ...)
> return response;
> }
>
> +void qmp_device_del(const char *id)
> +{
> + QDict *response1, *response2, *event = NULL;
> + char *cmd;
> +
> + /*
> + * device deletion will get one response and one event. E.g.:
> + *
> + * {'execute': 'device_del','arguments': { 'id': 'scsi-hd'}}
> + *
> + * will get this one:
> + *
> + * {"timestamp": {"seconds": 1505289667, "microseconds": 569862},
> + * "event": "DEVICE_DELETED", "data": {"device": "scsi-hd",
> + * "path": "/machine/peripheral/scsi-hd"}}
> + *
> + * and this one:
> + *
> + * {"return": {}}
> + *
> + * But the order of arrival may vary. Detect both.
> + */
> +
> + cmd = g_strdup_printf("{'execute': 'device_del',"
> + " 'arguments': {"
> + " 'id': '%s'"
> + "}}", id);
> + response1 = qmp(cmd);
> + g_free(cmd);
> + g_assert(response1);
> + g_assert(!qdict_haskey(response1, "error"));
> +
> + response2 = qmp("");
> + g_assert(response2);
> + g_assert(!qdict_haskey(response2, "error"));
qmp_receive() would be cleaner than qmp("").
> +
> + if (qdict_haskey(response1, "event")) {
> + event = response1;
> + } else if (qdict_haskey(response2, "event")) {
> + event = response2;
> + }
> + g_assert(event);
> + g_assert(!strcmp(qdict_get_str(event, "event"), "DEVICE_DELETED"));
> +
> + QDECREF(response1);
> + QDECREF(response2);
> +}
> +
Uh, this looks similar to existing qtest_qmp_device_del(). Do we need both?
> void qmp_async(const char *fmt, ...)
> {
> va_list ap;
> diff --git a/tests/libqtest.h b/tests/libqtest.h
> index 3ae5709..0d48e4b 100644
> --- a/tests/libqtest.h
> +++ b/tests/libqtest.h
> @@ -920,6 +920,14 @@ QDict *qmp_fdv(int fd, const char *fmt, va_list ap);
> QDict *qmp_fd(int fd, const char *fmt, ...);
>
> /**
> + * qmp_device_del:
> + * @id: The device ID to be deleted
> + *
> + * Delete the device with ID @id from QMP interface.
> + */
> +void qmp_device_del(const char *id);
> +
> +/**
> * qtest_cb_for_every_machine:
> * @cb: Pointer to the callback function
> *
next prev parent reply other threads:[~2017-10-02 17:26 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-13 9:36 [Qemu-devel] [PATCH 0/4] qtest: fix "device_del" out-of-order events Peter Xu
2017-09-13 9:36 ` [Qemu-devel] [PATCH 1/4] libqtest: add qmp_device_del() Peter Xu
2017-10-02 17:25 ` Markus Armbruster [this message]
2017-10-02 17:33 ` Eric Blake
2017-09-13 9:36 ` [Qemu-devel] [PATCH 2/4] tests: use qmp_device_del() where proper Peter Xu
2017-09-13 9:36 ` [Qemu-devel] [PATCH 3/4] libqtest: add qmp_device_add() Peter Xu
2017-09-13 10:01 ` Thomas Huth
2017-09-13 9:36 ` [Qemu-devel] [PATCH 4/4] tests: use qmp_device_add() where proper Peter Xu
2017-09-13 9:53 ` [Qemu-devel] [PATCH 0/4] qtest: fix "device_del" out-of-order events Thomas Huth
2017-09-13 10:28 ` Peter Xu
2017-09-13 10:35 ` Thomas Huth
2017-09-13 10:42 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87bmlp1mxl.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=famz@redhat.com \
--cc=kraxel@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.