Commit 91ad4506 authored by Peter Xu's avatar Peter Xu Committed by Eric Blake
Browse files

tests: qmp-test: verify command batching



OOB introduced DROP event for flow control.  This should not affect old
QMP clients.  Add a command batching check to make sure of it.

Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
Message-Id: <20180309090006.10018-23-peterx@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent 469638f9
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ static void test_qmp_protocol(void)
    QTestState *qts;
    const QListEntry *entry;
    QString *qstr;
    int i;

    qts = qtest_init_without_qmp_handshake(common_args);

@@ -139,6 +140,27 @@ static void test_qmp_protocol(void)
    g_assert_cmpint(qdict_get_int(resp, "id"), ==, 2);
    QDECREF(resp);

    /*
     * Test command batching.  In current test OOB is not enabled, we
     * should be able to run as many commands in batch as we like.
     * Using 16 (>8, which is OOB queue length) to make sure OOB won't
     * break existing clients.  Note: this test does not control the
     * scheduling of QEMU's QMP command processing threads so it may
     * not really trigger batching inside QEMU.  This is just a
     * best-effort test.
     */
    for (i = 0; i < 16; i++) {
        qtest_async_qmp(qts, "{ 'execute': 'query-version' }");
    }
    /* Verify the replies to make sure no command is dropped. */
    for (i = 0; i < 16; i++) {
        resp = qtest_qmp_receive(qts);
        /* It should never be dropped.  Each of them should be a reply. */
        g_assert(qdict_haskey(resp, "return"));
        g_assert(!qdict_haskey(resp, "event"));
        QDECREF(resp);
    }

    qtest_quit(qts);
}