From: Lucas De Marchi Date: Wed, 25 Jan 2012 20:16:45 +0000 (-0200) Subject: testsuite: add simple test for list of loaded modules X-Git-Tag: v5~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=61e9433f7c0349486385a084651decc34c52dae4;p=thirdparty%2Fkmod.git testsuite: add simple test for list of loaded modules --- diff --git a/Makefile.am b/Makefile.am index e5f3348..74d1b8c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -170,7 +170,7 @@ testsuite_libtestsuite_la_DEPENDENCIES = testsuite/uname.so \ testsuite/rootfs testsuite_libtestsuite_la_CPPFLAGS = $(TESTSUITE_CPPFLAGS) -TESTSUITE = testsuite/test-init testsuite/test-testsuite +TESTSUITE = testsuite/test-init testsuite/test-testsuite testsuite/test-loaded check_PROGRAMS = $(TESTSUITE) TESTS = $(TESTSUITE) @@ -178,6 +178,9 @@ testsuite_test_init_LDADD = testsuite/libtestsuite.la libkmod/libkmod-private.la testsuite_test_init_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite_test_testsuite_LDADD = testsuite/libtestsuite.la testsuite_test_testsuite_CPPFLAGS = $(TESTSUITE_CPPFLAGS) +testsuite_test_loaded_LDADD = testsuite/libtestsuite.la libkmod/libkmod-private.la +testsuite_test_loaded_CPPFLAGS = $(TESTSUITE_CPPFLAGS) + DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc diff --git a/testsuite/.gitignore b/testsuite/.gitignore index 2cd9099..58cac86 100644 --- a/testsuite/.gitignore +++ b/testsuite/.gitignore @@ -2,6 +2,7 @@ *.lo *.la *.so -test-testsuite -test-init rootfs/ +test-init +test-loaded +test-testsuite diff --git a/testsuite/rootfs.tar.xz b/testsuite/rootfs.tar.xz index e999c9a..091b45a 100644 Binary files a/testsuite/rootfs.tar.xz and b/testsuite/rootfs.tar.xz differ diff --git a/testsuite/test-loaded.c b/testsuite/test-loaded.c new file mode 100644 index 0000000..d162368 --- /dev/null +++ b/testsuite/test-loaded.c @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "testsuite.h" + +static int loaded_1(const struct test *t) +{ + struct kmod_ctx *ctx; + const char *null_config = NULL; + struct kmod_list *list, *itr; + int err; + + ctx = kmod_new(NULL, &null_config); + if (ctx == NULL) + exit(EXIT_FAILURE); + + err = kmod_module_new_from_loaded(ctx, &list); + if (err < 0) { + fprintf(stderr, "%s\n", strerror(-err)); + kmod_unref(ctx); + exit(EXIT_FAILURE); + } + + printf("Module Size Used by\n"); + + kmod_list_foreach(itr, list) { + struct kmod_module *mod = kmod_module_get_module(itr); + const char *name = kmod_module_get_name(mod); + int use_count = kmod_module_get_refcnt(mod); + long size = kmod_module_get_size(mod); + struct kmod_list *holders, *hitr; + int first = 1; + + printf("%-19s %8ld %d ", name, size, use_count); + holders = kmod_module_get_holders(mod); + kmod_list_foreach(hitr, holders) { + struct kmod_module *hm = kmod_module_get_module(hitr); + + if (!first) + putchar(','); + else + first = 0; + + fputs(kmod_module_get_name(hm), stdout); + kmod_module_unref(hm); + } + putchar('\n'); + kmod_module_unref_list(holders); + kmod_module_unref(mod); + } + kmod_module_unref_list(list); + + kmod_unref(ctx); + + return EXIT_SUCCESS; +} +static const struct test sloaded_1 = { + .name = "sloaded_1", + .description = "check if list of module is created", + .func = loaded_1, + .config = { + [TC_ROOTFS] = TESTSUITE_ROOTFS "test-loaded/", + }, + .need_spawn = true, + .output = { + .stdout = TESTSUITE_ROOTFS "test-loaded/correct.txt", + }, +}; + +static const struct test *tests[] = { + &sloaded_1, + NULL, +}; + +int main(int argc, char *argv[]) +{ + const struct test *t; + int arg; + size_t i; + + arg = test_init(argc, argv, tests); + if (arg == 0) + return 0; + + if (arg < argc) { + t = test_find(tests, argv[arg]); + if (t == NULL) { + fprintf(stderr, "could not find test %s\n", argv[arg]); + exit(EXIT_FAILURE); + } + + return test_run(t); + } + + for (i = 0; tests[i] != NULL; i++) { + if (test_run(tests[i]) != 0) + exit(EXIT_FAILURE); + } + + exit(EXIT_SUCCESS); +}