File qtest-switch-users-back-to-qtest_qmp_rec.patch of Package qemu.28164
From: Maxim Levitsky <mlevitsk@redhat.com>
Date: Tue, 6 Oct 2020 15:38:53 +0300
Subject: qtest: switch users back to qtest_qmp_receive
Git-commit: bb1a5b97f75ae209d8707f698da23088d7b9bbb5
References: bsc#1184574
Let test use the new functionality for buffering events.
The only remaining users of qtest_qmp_receive_dict are tests
that fuzz the QMP protocol.
Tested with 'make check-qtest'.
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-Id: <20201006123904.610658-4-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Lin Ma <lma@suse.com>
---
tests/ahci-test.c | 4 ++--
tests/drive_del-test.c | 9 +++------
tests/libqtest.c | 12 +++---------
tests/pvpanic-test.c | 4 +---
tests/tpm-util.c | 8 ++++++--
5 files changed, 15 insertions(+), 22 deletions(-)
diff --git a/tests/ahci-test.c b/tests/ahci-test.c
index 39c14f60f046fb8cf7522e2a1204..c8d42ceea0575db645ce62ec2f0b 100644
--- a/tests/ahci-test.c
+++ b/tests/ahci-test.c
@@ -1589,7 +1589,7 @@ static void test_atapi_tray(void)
qtest_qmp_send(ahci->parent->qts, "{'execute': 'blockdev-open-tray', "
"'arguments': {'id': 'cd0'}}");
atapi_wait_tray(ahci, true);
- rsp = qtest_qmp_receive_dict(ahci->parent->qts);
+ rsp = qtest_qmp_receive(ahci->parent->qts);
qobject_unref(rsp);
qmp_discard_response(ahci->parent->qts,
@@ -1619,7 +1619,7 @@ static void test_atapi_tray(void)
qtest_qmp_send(ahci->parent->qts, "{'execute': 'blockdev-close-tray', "
"'arguments': {'id': 'cd0'}}");
atapi_wait_tray(ahci, false);
- rsp = qtest_qmp_receive_dict(ahci->parent->qts);
+ rsp = qtest_qmp_receive(ahci->parent->qts);
qobject_unref(rsp);
/* Now, to convince ATAPI we understand the media has changed... */
diff --git a/tests/drive_del-test.c b/tests/drive_del-test.c
index f15ffdf018f9fac6fc10d3b42fe0..64c0fe242bed07073b7a3dcf635d 100644
--- a/tests/drive_del-test.c
+++ b/tests/drive_del-test.c
@@ -15,9 +15,6 @@
#include "libqos/virtio.h"
#include "qapi/qmp/qdict.h"
-/* TODO actually test the results and get rid of this */
-#define qmp_discard_response(q, ...) qobject_unref(qtest_qmp(q, __VA_ARGS__))
-
static void drive_add(QTestState *qts)
{
char *resp = qtest_hmp(qts, "drive_add 0 if=none,id=drive0");
@@ -38,13 +35,13 @@ static void device_del(QTestState *qts)
{
QDict *response;
- /* Complication: ignore DEVICE_DELETED event */
- qmp_discard_response(qts, "{'execute': 'device_del',"
+ response = qtest_qmp(qts, "{'execute': 'device_del',"
" 'arguments': { 'id': 'dev0' } }");
- response = qtest_qmp_receive_dict(qts);
g_assert(response);
g_assert(qdict_haskey(response, "return"));
qobject_unref(response);
+
+ qtest_qmp_eventwait(qts, "DEVICE_DELETED");
}
static void test_drive_without_dev(void)
diff --git a/tests/libqtest.c b/tests/libqtest.c
index e9bca67b5e7bae026039822d979d..fe82b11e046fef5eea32ac602463 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -295,7 +295,7 @@ QTestState *qtest_init(const char *extra_args)
QDict *greeting;
/* Read the QMP greeting and then do the handshake */
- greeting = qtest_qmp_receive_dict(s);
+ greeting = qtest_qmp_receive(s);
qobject_unref(greeting);
qobject_unref(qtest_qmp(s, "{ 'execute': 'qmp_capabilities' }"));
@@ -672,7 +672,7 @@ QDict *qtest_vqmp_fds(QTestState *s, int *fds, size_t fds_num,
qtest_qmp_vsend_fds(s, fds, fds_num, fmt, ap);
/* Receive reply */
- return qtest_qmp_receive_dict(s);
+ return qtest_qmp_receive(s);
}
QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap)
@@ -680,7 +680,7 @@ QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap)
qtest_qmp_vsend(s, fmt, ap);
/* Receive reply */
- return qtest_qmp_receive_dict(s);
+ return qtest_qmp_receive(s);
}
QDict *qmp_fd(int fd, const char *fmt, ...)
@@ -822,12 +822,6 @@ char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap)
" 'arguments': {'command-line': %s}}",
cmd);
ret = g_strdup(qdict_get_try_str(resp, "return"));
- while (ret == NULL && qdict_get_try_str(resp, "event")) {
- /* Ignore asynchronous QMP events */
- qobject_unref(resp);
- resp = qtest_qmp_receive_dict(s);
- ret = g_strdup(qdict_get_try_str(resp, "return"));
- }
g_assert(ret);
qobject_unref(resp);
g_free(cmd);
diff --git a/tests/pvpanic-test.c b/tests/pvpanic-test.c
index 15fd98db626fc9d58126f05bdbfa..dd724cbdc882ad59e2ecf8984f95 100644
--- a/tests/pvpanic-test.c
+++ b/tests/pvpanic-test.c
@@ -24,9 +24,7 @@ static void test_panic(void)
qtest_outb(qts, 0x505, 0x1);
- response = qtest_qmp_receive_dict(qts);
- g_assert(qdict_haskey(response, "event"));
- g_assert_cmpstr(qdict_get_str(response, "event"), ==, "GUEST_PANICKED");
+ response = qtest_qmp_eventwait_ref(qts, "GUEST_PANICKED");
g_assert(qdict_haskey(response, "data"));
data = qdict_get_qdict(response, "data");
g_assert(qdict_haskey(data, "action"));
diff --git a/tests/tpm-util.c b/tests/tpm-util.c
index e08b13765148f3c44e8a97564a03..f814a1cf7d2c82721eb1104ee4e0 100644
--- a/tests/tpm-util.c
+++ b/tests/tpm-util.c
@@ -236,12 +236,16 @@ void tpm_util_migrate(QTestState *who, const char *uri)
void tpm_util_wait_for_migration_complete(QTestState *who)
{
while (true) {
+ QDict *rsp;
QDict *rsp_return;
bool completed;
const char *status;
- qtest_qmp_send(who, "{ 'execute': 'query-migrate' }");
- rsp_return = qtest_qmp_receive_success(who, NULL, NULL);
+ rsp = qtest_qmp(who, "{ 'execute': 'query-migrate' }");
+ g_assert(qdict_haskey(rsp, "return"));
+ rsp_return = qdict_get_qdict(rsp, "return");
+
+ g_assert(!qdict_haskey(rsp_return, "error"));
status = qdict_get_str(rsp_return, "status");
completed = strcmp(status, "completed") == 0;
g_assert_cmpstr(status, !=, "failed");