From fade2fc3e8baa22d6d46872b94e710b972a1bef2 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Fri, 27 Feb 2015 01:51:45 -0300 Subject: 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) --- Makefile.am | 6 +- testsuite/.gitignore | 3 + .../test-initstate/lib/modules/4.4.4/modules.alias | 1 + .../lib/modules/4.4.4/modules.alias.bin | Bin 0 -> 12 bytes .../lib/modules/4.4.4/modules.builtin | 1 + .../lib/modules/4.4.4/modules.builtin.bin | Bin 0 -> 39 bytes .../test-initstate/lib/modules/4.4.4/modules.dep | 0 .../lib/modules/4.4.4/modules.dep.bin | Bin 0 -> 12 bytes .../lib/modules/4.4.4/modules.devname | 1 + .../lib/modules/4.4.4/modules.softdep | 1 + .../lib/modules/4.4.4/modules.symbols | 1 + .../lib/modules/4.4.4/modules.symbols.bin | Bin 0 -> 12 bytes testsuite/test-initstate.c | 126 +++++++++++++++++++++ 13 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias.bin create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin.bin create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep.bin create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.devname create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.softdep create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols create mode 100644 testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols.bin create mode 100644 testsuite/test-initstate.c 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 new file mode 100644 index 0000000..7075435 Binary files /dev/null and b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.alias.bin differ 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 new file mode 100644 index 0000000..0423f03 Binary files /dev/null and b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.builtin.bin differ 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 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 new file mode 100644 index 0000000..7075435 Binary files /dev/null and b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.dep.bin differ 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 new file mode 100644 index 0000000..7075435 Binary files /dev/null and b/testsuite/rootfs-pristine/test-initstate/lib/modules/4.4.4/modules.symbols.bin differ 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 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#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(); -- cgit v1.2.1