[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 13/14] tests: qmp-test: add test for new "x-oob"
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PULL 13/14] tests: qmp-test: add test for new "x-oob" |
Date: |
Tue, 27 Mar 2018 09:30:13 -0500 |
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]
Reviewed-by: Marc-André Lureau <address@hidden>
Tested-by: Christian Borntraeger <address@hidden>
Signed-off-by: Eric Blake <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] [PULL 00/14] QAPI changes for 2018-03-27, 2.12-rc1, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 02/14] tests: Silence false positive warning on generated test name, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 04/14] error: Remove NULL checks on error_propagate() calls, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 03/14] error: Strip trailing '\n' from error string arguments (again again), Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 01/14] qmp-test: fix response leak, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 07/14] qapi: restrict allow-oob value to be "true", Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 12/14] tests: Add parameter to qtest_init_without_qmp_handshake, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 10/14] qmp: cleanup qmp queues properly, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 11/14] monitor: new parameter "x-oob", Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 13/14] tests: qmp-test: add test for new "x-oob",
Eric Blake <=
- [Qemu-devel] [PULL 06/14] qmp: fix qmp_capabilities error regression, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 14/14] hmp.c: Revert hmp_info_cpus output format change, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 09/14] tests: add oob-test for qapi-schema, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 08/14] tests: let qapi-schema tests detect oob, Eric Blake, 2018/03/27
- [Qemu-devel] [PULL 05/14] qdict: remove useless cast, Eric Blake, 2018/03/27
- Re: [Qemu-devel] [PULL 00/14] QAPI changes for 2018-03-27, 2.12-rc1, Eric Blake, 2018/03/27