On Wed, Feb 22, 2012 at 11:49 PM, Dan McGee <dan@xxxxxxxxxxxxx> wrote: > Add a modprobe.conf with some blacklist entries in a test rootfs, and > then ensure our blacklist function actually cuts out the two listed > entries (and doesn't cut out the others). > > Signed-off-by: Dan McGee <dan@xxxxxxxxxxxxx> Will resend; I wrote these before you added the TESTSUITE_MAIN(tests) macro. > --- > Makefile.am | 4 +- > test/test-blacklist.c | 76 ----------- > testsuite/.gitignore | 1 + > .../test-blacklist/etc/modprobe.d/modprobe.conf | 2 + > testsuite/test-blacklist.c | 133 ++++++++++++++++++++ > 5 files changed, 139 insertions(+), 77 deletions(-) > delete mode 100644 test/test-blacklist.c > create mode 100644 testsuite/rootfs/test-blacklist/etc/modprobe.d/modprobe.conf > create mode 100644 testsuite/test-blacklist.c > > diff --git a/Makefile.am b/Makefile.am > index 242c574..53cbe1c 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -164,7 +164,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-modprobe testsuite/test-blacklist > check_PROGRAMS = $(TESTSUITE) > TESTS = $(TESTSUITE) > > @@ -182,6 +182,8 @@ testsuite_test_new_module_LDADD = $(TESTSUITE_LDADD) > testsuite_test_new_module_CPPFLAGS = $(TESTSUITE_CPPFLAGS) > testsuite_test_modprobe_LDADD = $(TESTSUITE_LDADD) > testsuite_test_modprobe_CPPFLAGS = $(TESTSUITE_CPPFLAGS) > +testsuite_test_blacklist_LDADD = $(TESTSUITE_LDADD) > +testsuite_test_blacklist_CPPFLAGS = $(TESTSUITE_CPPFLAGS) > > DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc > > diff --git a/test/test-blacklist.c b/test/test-blacklist.c > deleted file mode 100644 > index a53c902..0000000 > --- a/test/test-blacklist.c > +++ /dev/null > @@ -1,76 +0,0 @@ > -#include <stdio.h> > -#include <stdlib.h> > -#include <stddef.h> > -#include <errno.h> > -#include <unistd.h> > -#include <inttypes.h> > -#include <string.h> > -#include <libkmod.h> > - > - > -int main(int argc, char *argv[]) > -{ > - const char *alias; > - struct kmod_ctx *ctx; > - struct kmod_list *list = NULL, *l; > - int err; > - > - printf("libkmod version %s\n", VERSION); > - > - if (argc < 2) { > - fprintf(stderr, "ERR: Provide an alias name\n"); > - return EXIT_FAILURE; > - } > - > - alias = argv[1]; > - > - ctx = kmod_new(NULL, NULL); > - if (ctx == NULL) > - exit(EXIT_FAILURE); > - > - err = kmod_module_new_from_lookup(ctx, alias, &list); > - if (err < 0) > - goto fail_lookup; > - > - if (list == NULL) > - printf("No module matches '%s'\n", alias); > - else > - printf("Alias: '%s'\nModules matching:\n", alias); > - > - kmod_list_foreach(l, list) { > - struct kmod_module *mod = kmod_module_get_module(l); > - printf("\t%s\n", kmod_module_get_name(mod)); > - kmod_module_unref(mod); > - } > - > - if (list != NULL) { > - struct kmod_list *filtered; > - err = kmod_module_get_filtered_blacklist(ctx, list, &filtered); > - if (err < 0) { > - printf("Could not filter: %s\n", strerror(-err)); > - goto fail; > - } > - if (filtered == NULL) > - printf("All modules were filtered out!\n"); > - else > - printf("Modules remaining after filter:\n"); > - > - kmod_list_foreach(l, filtered) { > - struct kmod_module *mod = kmod_module_get_module(l); > - printf("\t%s\n", kmod_module_get_name(mod)); > - kmod_module_unref(mod); > - } > - kmod_module_unref_list(filtered); > - } > - > - kmod_module_unref_list(list); > - kmod_unref(ctx); > - > - return EXIT_SUCCESS; > - > -fail: > - kmod_module_unref_list(list); > -fail_lookup: > - kmod_unref(ctx); > - return EXIT_FAILURE; > -} > diff --git a/testsuite/.gitignore b/testsuite/.gitignore > index 431b9b7..ce1c21b 100644 > --- a/testsuite/.gitignore > +++ b/testsuite/.gitignore > @@ -3,6 +3,7 @@ > *.so > /.dirstamp > /test-alias > +/test-blacklist > /test-init > /test-loaded > /test-modinfo > diff --git a/testsuite/rootfs/test-blacklist/etc/modprobe.d/modprobe.conf b/testsuite/rootfs/test-blacklist/etc/modprobe.d/modprobe.conf > new file mode 100644 > index 0000000..126612f > --- /dev/null > +++ b/testsuite/rootfs/test-blacklist/etc/modprobe.d/modprobe.conf > @@ -0,0 +1,2 @@ > +blacklist floppy > +blacklist pcspkr > diff --git a/testsuite/test-blacklist.c b/testsuite/test-blacklist.c > new file mode 100644 > index 0000000..90ea3d7 > --- /dev/null > +++ b/testsuite/test-blacklist.c > @@ -0,0 +1,133 @@ > +/* > + * 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 <http://www.gnu.org/licenses/>. > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <stddef.h> > +#include <errno.h> > +#include <unistd.h> > +#include <inttypes.h> > +#include <string.h> > +#include <libkmod.h> > + > +/* good luck bulding a kmod_list outside of the library... makes this blacklist > + * function rather pointless */ > +#include <libkmod-private.h> > + > +/* FIXME: hack, change name so we don't clash */ > +#undef ERR > +#include "testsuite.h" > + > +static int blacklist_1(const struct test *t) > +{ > + struct kmod_ctx *ctx; > + struct kmod_list *list = NULL, *l, *filtered; > + struct kmod_module *mod; > + int err; > + size_t len = 0; > + > + const char *names[] = { "pcspkr", "pcspkr2", "floppy", "ext4", NULL }; > + const char **name; > + > + ctx = kmod_new(NULL, NULL); > + if (ctx == NULL) > + exit(EXIT_FAILURE); > + > + for(name = names; *name; name++) { > + err = kmod_module_new_from_name(ctx, *name, &mod); > + if (err < 0) > + goto fail_lookup; > + list = kmod_list_append(list, mod); > + } > + > + err = kmod_module_get_filtered_blacklist(ctx, list, &filtered); > + if (err < 0) { > + ERR("Could not filter: %s\n", strerror(-err)); > + goto fail; > + } > + if (filtered == NULL) { > + ERR("All modules were filtered out!\n"); > + goto fail; > + } > + > + kmod_list_foreach(l, filtered) { > + const char *modname; > + mod = kmod_module_get_module(l); > + modname = kmod_module_get_name(mod); > + if (strcmp("pcspkr", modname) == 0 || strcmp("floppy", modname) == 0) > + goto fail; > + len++; > + kmod_module_unref(mod); > + } > + > + if (len != 2) > + goto fail; > + > + kmod_module_unref_list(filtered); > + kmod_module_unref_list(list); > + kmod_unref(ctx); > + > + return EXIT_SUCCESS; > + > +fail: > + kmod_module_unref_list(list); > +fail_lookup: > + kmod_unref(ctx); > + return EXIT_FAILURE; > +} > +static const struct test sblacklist_1 = { > + .name = "blacklist_1", > + .description = "check if modules are correctly blacklisted", > + .func = blacklist_1, > + .config = { > + [TC_ROOTFS] = TESTSUITE_ROOTFS "test-blacklist/", > + }, > + .need_spawn = true, > +}; > + > +static const struct test *tests[] = { > + &sblacklist_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); > +} > -- > 1.7.9.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-modules" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html