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).
---
Makefile.am | 4 +-
test/test-blacklist.c | 76 --------------
testsuite/.gitignore | 1 +
.../test-blacklist/etc/modprobe.d/modprobe.conf | 2 +
testsuite/test-blacklist.c | 107 ++++++++++++++++++++
5 files changed, 113 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..b69854c
--- /dev/null
+++ b/testsuite/test-blacklist.c
@@ -0,0 +1,107 @@
+/*
+ * 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,
+};
+
+TESTSUITE_MAIN(tests);
--
1.7.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html