Commit eb062cfa authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Paolo Bonzini
Browse files

tests: add module loading test



This test will simply check that modules can be loaded, and no symbols
are missing.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 81d8ccb1
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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)
+6 −0
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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.

tests/modules-test.c

0 → 100644
+71 −0
Original line number Diff line number Diff line
#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();
}