[PATCH 2/3 v2] test-conversion: convert test-blacklist to new infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux