[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/13] tests: add module loading test
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 05/13] tests: add module loading test |
Date: |
Wed, 21 Aug 2019 19:28:13 +0200 |
From: Marc-André Lureau <address@hidden>
This test will simply check that modules can be loaded, and no symbols
are missing.
Signed-off-by: Marc-André Lureau <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
qtest.c | 9 +++++++
tests/Makefile.include | 1 +
tests/libqtest.c | 6 +++++
tests/libqtest.h | 2 ++
tests/modules-test.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 89 insertions(+)
create mode 100644 tests/modules-test.c
diff --git a/qtest.c b/qtest.c
index d8b4857..8b50e27 100644
--- a/qtest.c
+++ b/qtest.c
@@ -661,6 +661,15 @@ static void qtest_process_command(CharBackend *chr, gchar
**words)
qtest_send_prefix(chr);
qtest_sendf(chr, "OK %"PRIi64"\n",
(int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL));
+ } else if (strcmp(words[0], "module_load") == 0) {
+ g_assert(words[1] && words[2]);
+
+ qtest_send_prefix(chr);
+ if (module_load_one(words[1], words[2])) {
+ qtest_sendf(chr, "OK\n");
+ } else {
+ qtest_sendf(chr, "FAIL\n");
+ }
} else if (qtest_enabled() && strcmp(words[0], "clock_set") == 0) {
int64_t ns;
int ret;
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 6f02dfc..39bed75 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -149,6 +149,7 @@ check-block-$(call land,$(CONFIG_POSIX),$(CONFIG_SOFTMMU))
+= tests/check-block.
check-qtest-generic-y += tests/qmp-test$(EXESUF)
check-qtest-generic-y += tests/qmp-cmd-test$(EXESUF)
+check-qtest-generic-$(CONFIG_MODULES) += tests/modules-test$(EXESUF)
check-qtest-generic-y += tests/device-introspect-test$(EXESUF)
check-qtest-generic-y += tests/cdrom-test$(EXESUF)
diff --git a/tests/libqtest.c b/tests/libqtest.c
index eb971d0..2713b86 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -811,6 +811,12 @@ bool qtest_get_irq(QTestState *s, int num)
return s->irq_level[num];
}
+void qtest_module_load(QTestState *s, const char *prefix, const char *libname)
+{
+ qtest_sendf(s, "module_load %s %s\n", prefix, libname);
+ qtest_rsp(s, 0);
+}
+
static int64_t qtest_clock_rsp(QTestState *s)
{
gchar **words;
diff --git a/tests/libqtest.h b/tests/libqtest.h
index 7833148..07ea358 100644
--- a/tests/libqtest.h
+++ b/tests/libqtest.h
@@ -262,6 +262,8 @@ char *qtest_hmp(QTestState *s, const char *fmt, ...)
GCC_FMT_ATTR(2, 3);
char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap)
GCC_FMT_ATTR(2, 0);
+void qtest_module_load(QTestState *s, const char *prefix, const char *libname);
+
/**
* qtest_get_irq:
* @s: #QTestState instance to operate on.
diff --git a/tests/modules-test.c b/tests/modules-test.c
new file mode 100644
index 0000000..3aef0e5
--- /dev/null
+++ b/tests/modules-test.c
@@ -0,0 +1,71 @@
+#include "qemu/osdep.h"
+#include "libqtest.h"
+
+static void test_modules_load(const void *data)
+{
+ QTestState *qts;
+ const char **args = data;
+
+ qts = qtest_init(NULL);
+ qtest_module_load(qts, args[0], args[1]);
+ qtest_quit(qts);
+}
+
+int main(int argc, char *argv[])
+{
+ const char *modules[] = {
+#ifdef CONFIG_CURL
+ "block-", "curl",
+#endif
+#ifdef CONFIG_GLUSTERFS
+ "block-", "gluster",
+#endif
+#ifdef CONFIG_LIBISCSI
+ "block-", "iscsi",
+#endif
+#ifdef CONFIG_LIBNFS
+ "block-", "nfs",
+#endif
+#ifdef CONFIG_LIBSSH
+ "block-", "ssh",
+#endif
+#ifdef CONFIG_RBD
+ "block-", "rbd",
+#endif
+#ifdef CONFIG_AUDIO_ALSA
+ "audio-", "alsa",
+#endif
+#ifdef CONFIG_AUDIO_OSS
+ "audio-", "oss",
+#endif
+#ifdef CONFIG_AUDIO_PA
+ "audio-", "pa",
+#endif
+#ifdef CONFIG_AUDIO_SDL
+ "audio-", "sdl",
+#endif
+#ifdef CONFIG_CURSES
+ "ui-", "curses",
+#endif
+#if defined(CONFIG_GTK) && defined(CONFIG_VTE)
+ "ui-", "gtk",
+#endif
+#ifdef CONFIG_SDL
+ "ui-", "sdl",
+#endif
+#if defined(CONFIG_SPICE) && defined(CONFIG_GIO)
+ "ui-", "spice-app",
+#endif
+ };
+ int i;
+
+ g_test_init(&argc, &argv, NULL);
+
+ for (i = 0; i < G_N_ELEMENTS(modules); i += 2) {
+ char *testname = g_strdup_printf("/module/load/%s", modules[i + 1]);
+ qtest_add_data_func(testname, modules + i, test_modules_load);
+ g_free(testname);
+ }
+
+ return g_test_run();
+}
--
1.8.3.1
- [Qemu-devel] [PULL 00/13] Misc patches for 2019-08-21, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 01/13] qemu-ga: clean up TOOLS variable, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 02/13] configure: define CONFIG_TOOLS here, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 03/13] module: use g_hash_table_add(), Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 04/13] module: return success on module load, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 05/13] tests: add module loading test,
Paolo Bonzini <=
- [Qemu-devel] [PULL 06/13] configure: remove AUTOCONF_HOST, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 07/13] minikconf: don't print CONFIG_FOO=n lines, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 08/13] memory: Refactor memory_region_clear_coalescing, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 09/13] memory: Split zones when do coalesced_io_del(), Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 10/13] memory: Remove has_coalesced_range counter, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 11/13] memory: Fix up memory_region_{add|del}_coalescing, Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 12/13] main-loop: Fix GSource leak in qio_task_thread_worker(), Paolo Bonzini, 2019/08/21
- [Qemu-devel] [PULL 13/13] char-socket: Lock tcp_chr_disconnect() and socket_reconnect_timeout(), Paolo Bonzini, 2019/08/21
- Re: [Qemu-devel] [PULL 00/13] Misc patches for 2019-08-21, Peter Maydell, 2019/08/22
- Re: [Qemu-devel] [PULL 00/13] Misc patches for 2019-08-21, Peter Maydell, 2019/08/22