From: Thomas Huth <thuth@redhat.com>
To: qemu-devel@nongnu.org
Cc: Richard Henderson <richard.henderson@linaro.org>
Subject: [PULL 5/9] tests/qtest: Add a function that checks whether a device is available
Date: Wed, 22 Dec 2021 12:32:55 +0100 [thread overview]
Message-ID: <20211222113259.823203-6-thuth@redhat.com> (raw)
In-Reply-To: <20211222113259.823203-1-thuth@redhat.com>
Devices might not always be compiled into the QEMU target binaries.
We already have the libqos framework that is good for handling such
situations, but some of the qtests are not a real good fit for the
libqos framework. Let's add a qtest_has_device() function for such
tests instead.
Message-Id: <20211220081054.151515-2-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/qtest/libqos/libqtest.h | 8 +++++++
tests/qtest/libqtest.c | 44 +++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/tests/qtest/libqos/libqtest.h b/tests/qtest/libqos/libqtest.h
index a6d38d7ef7..cf38d273f5 100644
--- a/tests/qtest/libqos/libqtest.h
+++ b/tests/qtest/libqos/libqtest.h
@@ -718,6 +718,14 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine),
*/
bool qtest_has_machine(const char *machine);
+/**
+ * qtest_has_device:
+ * @device: The device to look for
+ *
+ * Returns: true if the device is available in the target binary.
+ */
+bool qtest_has_device(const char *device);
+
/**
* qtest_qmp_device_add_qdict:
* @qts: QTestState instance to operate on
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index a68326caae..41f4da4e54 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -1418,6 +1418,50 @@ bool qtest_has_machine(const char *machine)
return false;
}
+bool qtest_has_device(const char *device)
+{
+ static QList *list;
+ const QListEntry *p;
+ QObject *qobj;
+ QString *qstr;
+ QDict *devinfo;
+ int idx;
+
+ if (!list) {
+ QDict *resp;
+ QDict *args;
+ QTestState *qts = qtest_init("-machine none");
+
+ args = qdict_new();
+ qdict_put_bool(args, "abstract", false);
+ qdict_put_str(args, "implements", "device");
+
+ resp = qtest_qmp(qts, "{'execute': 'qom-list-types', 'arguments': %p }",
+ args);
+ g_assert(qdict_haskey(resp, "return"));
+ list = qdict_get_qlist(resp, "return");
+ qobject_ref(list);
+ qobject_unref(resp);
+
+ qtest_quit(qts);
+ }
+
+ for (p = qlist_first(list), idx = 0; p; p = qlist_next(p), idx++) {
+ devinfo = qobject_to(QDict, qlist_entry_obj(p));
+ g_assert(devinfo);
+
+ qobj = qdict_get(devinfo, "name");
+ g_assert(qobj);
+ qstr = qobject_to(QString, qobj);
+ g_assert(qstr);
+ if (g_str_equal(qstring_get_str(qstr), device)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
/*
* Generic hot-plugging test via the device_add QMP commands.
*/
--
2.27.0
next prev parent reply other threads:[~2021-12-22 11:40 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-22 11:32 [PULL 0/9] qtest fixes and improvements Thomas Huth
2021-12-22 11:32 ` [PULL 1/9] failover: Silence warning messages during qtest Thomas Huth
2021-12-22 11:32 ` [PULL 2/9] tests/qtest/boot-serial-test: Silence the warning about deprecated sga device Thomas Huth
2021-12-22 11:32 ` [PULL 3/9] tests/qtest: Make the filter tests independent from a specific NIC Thomas Huth
2021-12-22 11:32 ` [PULL 4/9] MAINTAINERS: Update COLO Proxy section Thomas Huth
2021-12-22 11:32 ` Thomas Huth [this message]
2021-12-22 11:32 ` [PULL 6/9] tests/qtest: Improve endianness-test to work with missing machines and devices Thomas Huth
2021-12-22 11:32 ` [PULL 7/9] tests/qtest/cdrom-test: Check whether devices are available before using them Thomas Huth
2021-12-22 11:32 ` [PULL 8/9] tests/qtest/boot-order-test: Check whether machines are available Thomas Huth
2021-12-22 11:32 ` [PULL 9/9] tests/qtest/virtio-net-failover: Use g_file_open_tmp() to create temporary file Thomas Huth
2021-12-22 18:00 ` [PULL 0/9] qtest fixes and improvements Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211222113259.823203-6-thuth@redhat.com \
--to=thuth@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).