Introduce the qtest_probe_accel() method which allows to query at runtime if a QEMU instance has an accelerator built-in.
Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- tests/qtest/libqos/libqtest.h | 9 +++++++++ tests/qtest/libqtest.c | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tests/qtest/libqos/libqtest.h b/tests/qtest/libqos/libqtest.h index a68dcd79d44..ebedb82ec98 100644 --- a/tests/qtest/libqos/libqtest.h +++ b/tests/qtest/libqos/libqtest.h @@ -763,6 +763,15 @@ void qmp_expect_error_and_unref(QDict *rsp, const char *class); */ bool qtest_probe_child(QTestState *s); +/** + * qtest_probe_accel: + * @s: QTestState instance to operate on. + * @name: Accelerator name to check for. + * + * Returns: true if the accelerator is built in. + */ +bool qtest_probe_accel(QTestState *s, const char *name); + /** * qtest_set_expected_status: * @s: QTestState instance to operate on. diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c index 71e359efcd3..57e7e55b9cc 100644 --- a/tests/qtest/libqtest.c +++ b/tests/qtest/libqtest.c @@ -872,6 +872,30 @@ void qtest_qmp_eventwait(QTestState *s, const char *event) qobject_unref(response); } +bool qtest_probe_accel(QTestState *s, const char *name) +{ + bool has_accel = false; + QDict *response; + QList *accels; + QListEntry *accel; + + response = qtest_qmp(s, "{'execute': 'query-accels'}"); + accels = qdict_get_qlist(response, "return"); + + QLIST_FOREACH_ENTRY(accels, accel) { + QDict *accel_dict = qobject_to(QDict, qlist_entry_obj(accel)); + const char *accel_name = qdict_get_str(accel_dict, "name"); + + if (!strcmp(name, accel_name)) { + has_accel = true; + break; + } + } + qobject_unref(response); + + return has_accel; +} + char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap) { char *cmd; -- 2.26.2