[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 4/4] tests: qmp-test: add test for new "x-oob
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH v2 4/4] tests: qmp-test: add test for new "x-oob" |
Date: |
Tue, 27 Mar 2018 15:19:18 +0200 |
On Tue, Mar 27, 2018 at 3:36 AM, Eric Blake <address@hidden> wrote:
> From: Peter Xu <address@hidden>
>
> Test the new OOB capability. It's mostly the reverted OOB test
> (see commit 4fd78ad7), but differs in that:
>
> - It uses the new qtest_init_without_qmp_handshake() parameter to
> create the monitor with "x-oob"
> - Squashed the capability tests on greeting message
> - Don't use qtest_global any more, instead use self-maintained
> QTestState, which is the trend
>
> Signed-off-by: Peter Xu <address@hidden>
> Message-Id: <address@hidden>
> Reviewed-by: Eric Blake <address@hidden>
> [eblake: rebase to qtest_init changes]
> Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
> ---
> tests/qmp-test.c | 82
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 82 insertions(+)
>
> diff --git a/tests/qmp-test.c b/tests/qmp-test.c
> index 2134d95db97..772058fc4c4 100644
> --- a/tests/qmp-test.c
> +++ b/tests/qmp-test.c
> @@ -135,6 +135,87 @@ static void test_qmp_protocol(void)
> qtest_quit(qts);
> }
>
> +/* Tests for Out-Of-Band support. */
> +static void test_qmp_oob(void)
> +{
> + QTestState *qts;
> + QDict *resp, *q;
> + int acks = 0;
> + const QListEntry *entry;
> + QList *capabilities;
> + QString *qstr;
> + const char *cmd_id;
> +
> + qts = qtest_init_without_qmp_handshake(true, common_args);
> +
> + /* Check the greeting message. */
> + resp = qtest_qmp_receive(qts);
> + q = qdict_get_qdict(resp, "QMP");
> + g_assert(q);
> + capabilities = qdict_get_qlist(q, "capabilities");
> + g_assert(capabilities && !qlist_empty(capabilities));
> + entry = qlist_first(capabilities);
> + g_assert(entry);
> + qstr = qobject_to(QString, entry->value);
> + g_assert(qstr);
> + g_assert_cmpstr(qstring_get_str(qstr), ==, "oob");
> + QDECREF(resp);
> +
> + /* Try a fake capability, it should fail. */
> + resp = qtest_qmp(qts,
> + "{ 'execute': 'qmp_capabilities', "
> + " 'arguments': { 'enable': [ 'cap-does-not-exist' ] }
> }");
> + g_assert(qdict_haskey(resp, "error"));
> + QDECREF(resp);
> +
> + /* Now, enable OOB in current QMP session, it should succeed. */
> + resp = qtest_qmp(qts,
> + "{ 'execute': 'qmp_capabilities', "
> + " 'arguments': { 'enable': [ 'oob' ] } }");
> + g_assert(qdict_haskey(resp, "return"));
> + QDECREF(resp);
> +
> + /*
> + * Try any command that does not support OOB but with OOB flag. We
> + * should get failure.
> + */
> + resp = qtest_qmp(qts,
> + "{ 'execute': 'query-cpus',"
> + " 'control': { 'run-oob': true } }");
> + g_assert(qdict_haskey(resp, "error"));
> + QDECREF(resp);
> +
> + /*
> + * First send the "x-oob-test" command with lock=true and
> + * oob=false, it should hang the dispatcher and main thread;
> + * later, we send another lock=false with oob=true to continue
> + * that thread processing. Finally we should receive replies from
> + * both commands.
> + */
> + qtest_async_qmp(qts,
> + "{ 'execute': 'x-oob-test',"
> + " 'arguments': { 'lock': true }, "
> + " 'id': 'lock-cmd'}");
> + qtest_async_qmp(qts,
> + "{ 'execute': 'x-oob-test', "
> + " 'arguments': { 'lock': false }, "
> + " 'control': { 'run-oob': true }, "
> + " 'id': 'unlock-cmd' }");
> +
> + /* Ignore all events. Wait for 2 acks */
> + while (acks < 2) {
> + resp = qtest_qmp_receive(qts);
> + cmd_id = qdict_get_str(resp, "id");
> + if (!g_strcmp0(cmd_id, "lock-cmd") ||
> + !g_strcmp0(cmd_id, "unlock-cmd")) {
> + acks++;
> + }
> + QDECREF(resp);
> + }
> +
> + qtest_quit(qts);
> +}
> +
> static int query_error_class(const char *cmd)
> {
> static struct {
> @@ -319,6 +400,7 @@ int main(int argc, char *argv[])
> g_test_init(&argc, &argv, NULL);
>
> qtest_add_func("qmp/protocol", test_qmp_protocol);
> + qtest_add_func("qmp/oob", test_qmp_oob);
> qmp_schema_init(&schema);
> add_query_tests(&schema);
>
> --
> 2.14.3
>
- [Qemu-devel] [PATCH v2 0/4] Monitor: OOB related patches, Eric Blake, 2018/03/26
- [Qemu-devel] [PATCH v2 4/4] tests: qmp-test: add test for new "x-oob", Eric Blake, 2018/03/26
- Re: [Qemu-devel] [PATCH v2 4/4] tests: qmp-test: add test for new "x-oob",
Marc-André Lureau <=
- [Qemu-devel] [PATCH v2 2/4] monitor: new parameter "x-oob", Eric Blake, 2018/03/26
- [Qemu-devel] [PATCH v2 3/4] tests: Add parameter to qtest_init_without_qmp_handshake, Eric Blake, 2018/03/26
- [Qemu-devel] [PATCH v2 1/4] qmp: cleanup qmp queues properly, Eric Blake, 2018/03/26
- Re: [Qemu-devel] [PATCH v2 0/4] Monitor: OOB related patches, Peter Xu, 2018/03/26
- Re: [Qemu-devel] [PATCH v2 0/4] Monitor: OOB related patches, Christian Borntraeger, 2018/03/27