diff options
author | Lucas De Marchi <lucas.demarchi@intel.com> | 2015-02-27 01:51:45 -0300 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@intel.com> | 2015-02-28 14:18:54 -0300 |
commit | dbf90dc3a8fb76c89b03697798a7f3c4d245ca40 (patch) | |
tree | 2943f6d42e151f2d68a4905dfe0e936521656f05 | |
parent | fd44a98ae2eb5eb32161088954ab21e58e19dfc4 (diff) | |
download | kmod-dbf90dc3a8fb76c89b03697798a7f3c4d245ca40.tar.gz |
testsuite: test builtin state
The second test, that creates the module by name and then retrieves the
initstate was broken before b95fa91 ('Fix race while loading modules').
We would check /sys and return either builtin (if the module has
parameters) or give an error because we don't find the module (even if
it's in the modules.builtin index)
13 files changed, 139 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index b74e190..d8d1994 100644 --- a/Makefile.am +++ b/Makefile.am @@ -308,7 +308,9 @@ TESTSUITE = \ testsuite/test-hash \ testsuite/test-array \ testsuite/test-strbuf \ - testsuite/test-init testsuite/test-testsuite testsuite/test-loaded \ + testsuite/test-init \ + testsuite/test-initstate \ + testsuite/test-testsuite testsuite/test-loaded \ testsuite/test-modinfo testsuite/test-util testsuite/test-new-module \ testsuite/test-modprobe testsuite/test-blacklist \ testsuite/test-dependencies testsuite/test-depmod \ @@ -332,6 +334,8 @@ testsuite_test_strbuf_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite_test_init_LDADD = $(TESTSUITE_LDADD) testsuite_test_init_CPPFLAGS = $(TESTSUITE_CPPFLAGS) +testsuite_test_initstate_LDADD = $(TESTSUITE_LDADD) +testsuite_test_initstate_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite_test_loaded_LDADD = $(TESTSUITE_LDADD) testsuite_test_loaded_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite_test_modinfo_LDADD = $(TESTSUITE_LDADD) diff --git a/testsuite/.gitignore b/testsuite/.gitignore index 274254c..09f231c 100644 --- a/testsuite/.gitignore +++ b/testsuite/.gitignore @@ -9,6 +9,7 @@ /test-dependencies /test-depmod /test-init +/test-initstate /test-loaded /test-modinfo /test-new-module @@ -32,6 +33,8 @@ /test-depmod.trs /test-init.log /test-init.trs +/test-initstate.log +/test-initstate.trs /test-loaded.log /test-loaded.trs /test-modinfo.log diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias new file mode 100644 index 0000000..ba76e18 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias @@ -0,0 +1 @@ +# Aliases extracted from modules themselves. diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias.bin Binary files differnew file mode 100644 index 0000000..7075435 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias.bin diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin new file mode 100644 index 0000000..1cbec61 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin @@ -0,0 +1 @@ +kernel/fake_builtin.ko diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin.bin Binary files differnew file mode 100644 index 0000000..0423f03 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin.bin diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep.bin Binary files differnew file mode 100644 index 0000000..7075435 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep.bin diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.devname new file mode 100644 index 0000000..58f6d6d --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.devname @@ -0,0 +1 @@ +# Device nodes to trigger on-demand module loading. diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.softdep new file mode 100644 index 0000000..5554ccc --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.softdep @@ -0,0 +1 @@ +# Soft dependencies extracted from modules themselves. diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols new file mode 100644 index 0000000..618c345 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols @@ -0,0 +1 @@ +# Aliases for symbols, used by symbol_request(). diff --git a/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols.bin Binary files differnew file mode 100644 index 0000000..7075435 --- /dev/null +++ b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols.bin diff --git a/testsuite/test-initstate.c b/testsuite/test-initstate.c new file mode 100644 index 0000000..da2303a --- /dev/null +++ b/testsuite/test-initstate.c @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2015 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +#include <errno.h> +#include <inttypes.h> +#include <stdarg.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <unistd.h> + +#include <libkmod/libkmod.h> + +#include <shared/macro.h> + +#include "testsuite.h" + + +static noreturn int test_initstate_from_lookup(const struct test *t) +{ + struct kmod_ctx *ctx; + struct kmod_list *list = NULL; + struct kmod_module *mod; + const char *null_config = NULL; + int err, r; + + ctx = kmod_new(NULL, &null_config); + if (ctx == NULL) + exit(EXIT_FAILURE); + + err = kmod_module_new_from_lookup(ctx, "fake-builtin", &list); + if (err != 0) { + ERR("could not create module from lookup: %s\n", strerror(-err)); + exit(EXIT_FAILURE); + } + + if (!list) { + ERR("could not create module from lookup: module not found: fake-builtin\n"); + exit(EXIT_FAILURE); + } + + mod = kmod_module_get_module(list); + + r = kmod_module_get_initstate(mod); + if (r != KMOD_MODULE_BUILTIN) { + ERR("module should have builtin state but is: %s\n", + kmod_module_initstate_str(r)); + exit(EXIT_FAILURE); + } + + kmod_module_unref(mod); + kmod_module_unref_list(list); + kmod_unref(ctx); + + exit(EXIT_SUCCESS); +} +DEFINE_TEST(test_initstate_from_lookup, + .description = "test if libkmod return correct initstate for builtin module from lookup", + .config = { + [TC_ROOTFS] = TESTSUITE_ROOTFS "test-initstate", + [TC_UNAME_R] = "4.4.4", + }, + .need_spawn = true); + +static noreturn int test_initstate_from_name(const struct test *t) +{ + struct kmod_ctx *ctx; + struct kmod_module *mod = NULL; + const char *null_config = NULL; + int err, r; + + ctx = kmod_new(NULL, &null_config); + if (ctx == NULL) + exit(EXIT_FAILURE); + + err = kmod_module_new_from_name(ctx, "fake-builtin", &mod); + if (err != 0) { + ERR("could not create module from lookup: %s\n", strerror(-err)); + exit(EXIT_FAILURE); + } + + if (!mod) { + ERR("could not create module from lookup: module not found: fake-builtin\n"); + exit(EXIT_FAILURE); + } + + r = kmod_module_get_initstate(mod); + if (r != KMOD_MODULE_BUILTIN) { + ERR("module should have builtin state but is: %s\n", + kmod_module_initstate_str(r)); + exit(EXIT_FAILURE); + } + + kmod_module_unref(mod); + kmod_unref(ctx); + + exit(EXIT_SUCCESS); +} +DEFINE_TEST(test_initstate_from_name, + .description = "test if libkmod return correct initstate for builtin module from name", + .config = { + [TC_ROOTFS] = TESTSUITE_ROOTFS "test-initstate", + [TC_UNAME_R] = "4.4.4", + }, + .need_spawn = true); + + + + +TESTSUITE_MAIN(); |