]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
test-conversion: convert test-blacklist to new infrastructure
authorDan McGee <dan@archlinux.org>
Thu, 23 Feb 2012 05:56:58 +0000 (23:56 -0600)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 11 May 2012 11:44:55 +0000 (08:44 -0300)
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
test/test-blacklist.c [deleted file]
testsuite/.gitignore
testsuite/rootfs/test-blacklist/etc/modprobe.d/modprobe.conf [new file with mode: 0644]
testsuite/test-blacklist.c [new file with mode: 0644]

index ab3dd4c592139a960d7954307ec6a5b75b876bb7..416672e9c8656d532f8903b673da4811db040bf2 100644 (file)
@@ -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-modprobe testsuite/test-blacklist
 check_PROGRAMS = $(TESTSUITE)
 TESTS = $(TESTSUITE)
 
@@ -179,6 +179,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)
 
 testsuite-distclean:
        -find testsuite/rootfs-dirty -type d -exec chmod +w {} \;
diff --git a/test/test-blacklist.c b/test/test-blacklist.c
deleted file mode 100644 (file)
index a53c902..0000000
+++ /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;
-}
index ef7bb2b9458e94c2960c37df60c6038c5df2641f..0c620aa9ac6418ac5bb8c026e24628b0df5ea357 100644 (file)
@@ -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 (file)
index 0000000..126612f
--- /dev/null
@@ -0,0 +1,2 @@
+blacklist floppy
+blacklist pcspkr
diff --git a/testsuite/test-blacklist.c b/testsuite/test-blacklist.c
new file mode 100644 (file)
index 0000000..9125ba2
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * 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_apply_filter(ctx, KMOD_FILTER_BLACKLIST, 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);