From c88aec70d1b74ea71cd3ec538b3f43ad8c6783b3 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 22 Feb 2012 23:56:59 -0600 Subject: [PATCH] test-conversion: convert test-get-dependencies to new infrastructure The test uses the ext4 module dependencies as the testcase, checking both the number and the names of the returned modules. --- Makefile.am | 4 +- test/test-get-dependencies.c | 52 ---------- testsuite/.gitignore | 1 + .../4.0.20-kmod/kernel/fs/jbd2/jbd2.ko | Bin 0 -> 159175 bytes .../modules/4.0.20-kmod/kernel/fs/mbcache.ko | Bin 0 -> 18431 bytes .../modules/4.0.20-kmod/kernel/lib/crc16.ko | Bin 0 -> 4374 bytes .../lib/modules/4.0.20-kmod/modules.alias | 1 + .../lib/modules/4.0.20-kmod/modules.alias.bin | Bin 0 -> 12 bytes .../lib/modules/4.0.20-kmod/modules.builtin | 0 .../modules/4.0.20-kmod/modules.builtin.bin | Bin 0 -> 12 bytes .../lib/modules/4.0.20-kmod/modules.dep | 4 + .../lib/modules/4.0.20-kmod/modules.dep.bin | Bin 0 -> 265 bytes .../lib/modules/4.0.20-kmod/modules.devname | 1 + .../lib/modules/4.0.20-kmod/modules.order | 7 ++ .../lib/modules/4.0.20-kmod/modules.softdep | 2 + .../lib/modules/4.0.20-kmod/modules.symbols | 58 +++++++++++ .../modules/4.0.20-kmod/modules.symbols.bin | Bin 0 -> 2584 bytes testsuite/test-dependencies.c | 92 ++++++++++++++++++ 18 files changed, 169 insertions(+), 53 deletions(-) delete mode 100644 test/test-get-dependencies.c create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/jbd2/jbd2.ko create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/mbcache.ko create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/lib/crc16.ko create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.alias create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.alias.bin create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin.bin create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep.bin create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.devname create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.order create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.softdep create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols create mode 100644 testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols.bin create mode 100644 testsuite/test-dependencies.c diff --git a/Makefile.am b/Makefile.am index 416672e9..e04e7f73 100644 --- a/Makefile.am +++ b/Makefile.am @@ -161,7 +161,7 @@ testsuite_libtestsuite_la_CPPFLAGS = $(TESTSUITE_CPPFLAGS) TESTSUITE = testsuite/test-init testsuite/test-testsuite testsuite/test-loaded \ testsuite/test-modinfo testsuite/test-alias testsuite/test-new-module \ - testsuite/test-modprobe testsuite/test-blacklist + testsuite/test-modprobe testsuite/test-blacklist testsuite/test-dependencies check_PROGRAMS = $(TESTSUITE) TESTS = $(TESTSUITE) @@ -181,6 +181,8 @@ testsuite_test_modprobe_LDADD = $(TESTSUITE_LDADD) testsuite_test_modprobe_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite_test_blacklist_LDADD = $(TESTSUITE_LDADD) testsuite_test_blacklist_CPPFLAGS = $(TESTSUITE_CPPFLAGS) +testsuite_test_dependencies_LDADD = $(TESTSUITE_LDADD) +testsuite_test_dependencies_CPPFLAGS = $(TESTSUITE_CPPFLAGS) testsuite-distclean: -find testsuite/rootfs-dirty -type d -exec chmod +w {} \; diff --git a/test/test-get-dependencies.c b/test/test-get-dependencies.c deleted file mode 100644 index 3a7bbf2e..00000000 --- a/test/test-get-dependencies.c +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - - -int main(int argc, char *argv[]) -{ - const char *name; - struct kmod_ctx *ctx; - struct kmod_module *mod; - struct kmod_list *list, *l; - int err; - - printf("libkmod version %s\n", VERSION); - - if (argc < 2) { - fprintf(stderr, "ERR: Provide a module name\n"); - return EXIT_FAILURE; - } - - name = argv[1]; - - ctx = kmod_new(NULL, NULL); - if (ctx == NULL) - exit(EXIT_FAILURE); - - err = kmod_module_new_from_name(ctx, name, &mod); - if (err < 0) { - kmod_unref(ctx); - exit(EXIT_FAILURE); - } - - list = kmod_module_get_dependencies(mod); - printf("Module: %s\nDependency list:\n", name); - - kmod_list_foreach(l, list) { - struct kmod_module *m = kmod_module_get_module(l); - printf("\t%s\n", kmod_module_get_name(m)); - kmod_module_unref(m); - } - - kmod_module_unref_list(list); - kmod_module_unref(mod); - kmod_unref(ctx); - - return EXIT_SUCCESS; -} diff --git a/testsuite/.gitignore b/testsuite/.gitignore index 0c620aa9..21fe5182 100644 --- a/testsuite/.gitignore +++ b/testsuite/.gitignore @@ -4,6 +4,7 @@ /.dirstamp /test-alias /test-blacklist +/test-dependencies /test-init /test-loaded /test-modinfo diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/jbd2/jbd2.ko b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/jbd2/jbd2.ko new file mode 100644 index 0000000000000000000000000000000000000000..521c214f6c2c5de0fd353cf6889ceda7e46eeae6 GIT binary patch literal 159175 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 literal 0 Hc-jL100001 diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/mbcache.ko b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/kernel/fs/mbcache.ko new file mode 100644 index 0000000000000000000000000000000000000000..5849fa756a0b274dc2aa6efdad6dddb4b43e7431 GIT binary patch literal 18431 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 literal 0 Hc-jL100001 diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin new file mode 100644 index 00000000..e69de29b diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin.bin b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.builtin.bin new file mode 100644 index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76 GIT binary patch literal 12 Tc-q^*{w17&iGh)Ufq@4A6;A>Z literal 0 Hc-jL100001 diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep new file mode 100644 index 00000000..c4e25160 --- /dev/null +++ b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep @@ -0,0 +1,4 @@ +kernel/fs/mbcache.ko: +kernel/fs/ext4/ext4.ko: kernel/lib/crc16.ko kernel/fs/jbd2/jbd2.ko kernel/fs/mbcache.ko +kernel/fs/jbd2/jbd2.ko: +kernel/lib/crc16.ko: diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep.bin b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.dep.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e89d91ff0721e5f7b2fec868b2dc5eadf333ff5 GIT binary patch literal 265 zc-q^*{w17&iGfjpf#G&hvY{CR5HJEUb9QP`UTThhPG*vRGDt!%JKu_-qQnHIfDx)7 ztyn)5C=4b*Y80?&R6wZBN=h*T6R5(uNy&-H8L2=)2A~|w4kqmStQa7wVagb=nPbI} XoO^(Qfd?cHr1cok08nfa5_=l}j-o>@ literal 0 Hc-jL100001 diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.devname b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.devname new file mode 100644 index 00000000..58f6d6d6 --- /dev/null +++ b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.devname @@ -0,0 +1 @@ +# Device nodes to trigger on-demand module loading. diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.order b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.order new file mode 100644 index 00000000..85f2778e --- /dev/null +++ b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.order @@ -0,0 +1,7 @@ +kernel/fs/mbcache.ko +kernel/fs/ext3/ext3.ko +kernel/fs/ext2/ext2.ko +kernel/fs/ext4/ext4.ko +kernel/fs/jbd/jbd.ko +kernel/fs/jbd2/jbd2.ko +kernel/lib/crc16.ko diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.softdep b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.softdep new file mode 100644 index 00000000..3cc05126 --- /dev/null +++ b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.softdep @@ -0,0 +1,2 @@ +# Soft dependencies extracted from modules themselves. +# Copy, with a .conf extension, to /etc/modprobe.d to use it with modprobe. diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols new file mode 100644 index 00000000..0f0d88cc --- /dev/null +++ b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols @@ -0,0 +1,58 @@ +# Aliases for symbols, used by symbol_request(). +alias symbol:jbd2_journal_invalidatepage jbd2 +alias symbol:jbd2_journal_release_buffer jbd2 +alias symbol:jbd2_journal_init_inode jbd2 +alias symbol:jbd2__journal_restart jbd2 +alias symbol:mb_cache_entry_find_next mbcache +alias symbol:crc16 crc16 +alias symbol:mb_cache_entry_insert mbcache +alias symbol:jbd2_journal_destroy jbd2 +alias symbol:jbd2_journal_lock_updates jbd2 +alias symbol:mb_cache_entry_free mbcache +alias symbol:jbd2_log_start_commit jbd2 +alias symbol:mb_cache_entry_find_first mbcache +alias symbol:mb_cache_destroy mbcache +alias symbol:jbd2_journal_extend jbd2 +alias symbol:jbd2_journal_begin_ordered_truncate jbd2 +alias symbol:jbd2_journal_revoke jbd2 +alias symbol:jbd2_journal_get_write_access jbd2 +alias symbol:jbd2_inode_cache jbd2 +alias symbol:jbd2_journal_ack_err jbd2 +alias symbol:mb_cache_create mbcache +alias symbol:jbd2_journal_flush jbd2 +alias symbol:jbd2_journal_init_jbd_inode jbd2 +alias symbol:mb_cache_entry_alloc mbcache +alias symbol:jbd2_journal_get_undo_access jbd2 +alias symbol:jbd2_journal_get_create_access jbd2 +alias symbol:jbd2_journal_update_format jbd2 +alias symbol:crc16_table crc16 +alias symbol:jbd2_journal_wipe jbd2 +alias symbol:jbd2_journal_check_used_features jbd2 +alias symbol:mb_cache_entry_get mbcache +alias symbol:jbd2_journal_force_commit_nested jbd2 +alias symbol:jbd2_log_wait_commit jbd2 +alias symbol:jbd2_journal_stop jbd2 +alias symbol:jbd2_journal_set_triggers jbd2 +alias symbol:jbd2_journal_release_jbd_inode jbd2 +alias symbol:jbd2_journal_unlock_updates jbd2 +alias symbol:jbd2_journal_start_commit jbd2 +alias symbol:jbd2_journal_dirty_metadata jbd2 +alias symbol:jbd2_journal_force_commit jbd2 +alias symbol:mb_cache_entry_release mbcache +alias symbol:jbd2_journal_init_dev jbd2 +alias symbol:jbd2_journal_forget jbd2 +alias symbol:jbd2_journal_set_features jbd2 +alias symbol:jbd2_journal_start jbd2 +alias symbol:jbd2_journal_clear_features jbd2 +alias symbol:jbd2__journal_start jbd2 +alias symbol:mb_cache_shrink mbcache +alias symbol:jbd2_journal_clear_err jbd2 +alias symbol:jbd2_journal_file_inode jbd2 +alias symbol:jbd2_journal_restart jbd2 +alias symbol:jbd2_journal_load jbd2 +alias symbol:jbd2_journal_check_available_features jbd2 +alias symbol:jbd2_journal_abort jbd2 +alias symbol:jbd2_journal_blocks_per_page jbd2 +alias symbol:jbd2_journal_try_to_free_buffers jbd2 +alias symbol:jbd2_trans_will_send_data_barrier jbd2 +alias symbol:jbd2_journal_errno jbd2 diff --git a/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols.bin b/testsuite/rootfs/test-dependencies/lib/modules/4.0.20-kmod/modules.symbols.bin new file mode 100644 index 0000000000000000000000000000000000000000..aa8cfc85680de041ee08790bcae03ef6b931b1b0 GIT binary patch literal 2584 zc-pO2&1(}u6o2_n#ET;BHF#1`&>o6V-V`hhv%7DTX?Azw%%n|@UKQFuz=OGX zDu@(8p-^%XK@UBP#T*5Xwjg-%ZIYVq?DoUbfw!Bynfbks`Mo#$wzB&O@{p^;xr>H7 z0RoL2Nx@a_&3PC-7#jebPfnmVT$%mV`6b7jgS2Kzc2vXz21*meZITC(^pLsSZDMk% zwD-0cDwR|@E+IT8dD##VlgdMd9y6*Fx!l-zZcDQ^D%R!=YYGE`_yC6tn)|xUMG$9$ z`N&O2p-uv5vYI`EZi@l$3?MfPXE+FN-cClgeXbawPwUr7Hk&~oat{w8(f@62l;dr4>VRTW9=>@o5z$Sy6sl^sp~KIK-#R7mdW=w?z85zo*9Ci=)Q z6lTQBd_Os7kw}5t7()J?Wqw;odiD-z)}{%{4;AGW8FyXOR(>N-X6ltVWCI!o?#ciP zGiSqt!i~xM9xhw1rLyUGSve+$yd?tI%mDvPvcm&GG{AJ-L?D*?Q26!#UKcNUc5!#w zu@Ng<5;&E3QA~DqJHC(VBtaq9$iShvim#4wWh33DWXpzwfFdn^Is#^Q`ny!ltVJan z4OBXnec#ZQyQe$;(&B{sR`rf*p|p|Ewv&sv975^iDb0RE(}&X2)AF_srJt(DjAXt- zWX|YZt;__}v9nnbtC%lU$gQ}e_5jK+#x9m$i?)3QOfDb3QU`cLvR8-P_d4V+lRP2$ zO>E}lqAy;bHh|(w-GRc)i#UssD zL=Z4d?UcpMm^oZ2kuHKc28@mb*vSqMR3FMa<1i}b=(UyAQUBYw2%$5+t}$_M{8I;X za4Drw+N1%xX&r?Lel&pUdB`9> Nyr2HAt!horoxk7Nq7(oC literal 0 Hc-jL100001 diff --git a/testsuite/test-dependencies.c b/testsuite/test-dependencies.c new file mode 100644 index 00000000..a4a1d405 --- /dev/null +++ b/testsuite/test-dependencies.c @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2011-2012 ProFUSION embedded systems + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "testsuite.h" +#define TEST_UNAME "4.0.20-kmod" + +static int test_dependencies(const struct test *t) +{ + struct kmod_ctx *ctx; + struct kmod_module *mod; + struct kmod_list *list, *l; + int err; + size_t len = 0; + int crc16 = 0, mbcache = 0, jbd2 = 0; + + ctx = kmod_new(NULL, NULL); + if (ctx == NULL) + return EXIT_FAILURE; + + err = kmod_module_new_from_name(ctx, "ext4", &mod); + if (err < 0) { + kmod_unref(ctx); + return EXIT_FAILURE; + } + + list = kmod_module_get_dependencies(mod); + + kmod_list_foreach(l, list) { + struct kmod_module *m = kmod_module_get_module(l); + const char *name = kmod_module_get_name(m); + + if (strcmp(name, "crc16") == 0) + crc16 = 1; + if (strcmp(name, "mbcache") == 0) + mbcache = 1; + else if (strcmp(name, "jbd2") == 0) + jbd2 = 1; + + kmod_module_unref(m); + len++; + } + + /* crc16, mbcache, jbd2 */ + if (len != 3 || !crc16 || !mbcache || !jbd2) + return EXIT_FAILURE; + + kmod_module_unref_list(list); + kmod_module_unref(mod); + kmod_unref(ctx); + + return EXIT_SUCCESS; +} +static const struct test stest_dependencies = { + .name = "test_dependencies", + .description = "test if kmod_module_get_dependencies works", + .func = test_dependencies, + .config = { + [TC_ROOTFS] = TESTSUITE_ROOTFS "test-dependencies/", + [TC_UNAME_R] = TEST_UNAME, + }, + .need_spawn = true, +}; + +static const struct test *tests[] = { + &stest_dependencies, + NULL, +}; + +TESTSUITE_MAIN(tests); -- 2.47.2