summaryrefslogtreecommitdiffstats
path: root/testsuite/test-modinfo.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 17:03:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 17:03:56 +0000
commit18da3ffcd7f3c8a0c5f790c801b5813503c2273d (patch)
tree84caf98dc5cef3d123c56ba12e35fd67026e0693 /testsuite/test-modinfo.c
parentInitial commit. (diff)
downloadkmod-18da3ffcd7f3c8a0c5f790c801b5813503c2273d.tar.xz
kmod-18da3ffcd7f3c8a0c5f790c801b5813503c2273d.zip
Adding upstream version 31+20240202.upstream/31+20240202
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testsuite/test-modinfo.c')
-rw-r--r--testsuite/test-modinfo.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/testsuite/test-modinfo.c b/testsuite/test-modinfo.c
new file mode 100644
index 0000000..373dc95
--- /dev/null
+++ b/testsuite/test-modinfo.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2012-2013 ProFUSION embedded systems
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <errno.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "testsuite.h"
+
+static const char *progname = ABS_TOP_BUILDDIR "/tools/modinfo";
+
+#define DEFINE_MODINFO_TEST(_field, _flavor, ...) \
+static noreturn int test_modinfo_##_field(const struct test *t) \
+{ \
+ const char *const args[] = { \
+ progname, "-F", #_field ,\
+ __VA_ARGS__ , \
+ NULL, \
+ }; \
+ test_spawn_prog(progname, args); \
+ exit(EXIT_FAILURE); \
+} \
+DEFINE_TEST(test_modinfo_##_field, \
+ .description = "check " #_field " output of modinfo for different architectures", \
+ .config = { \
+ [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/", \
+ }, \
+ .output = { \
+ .out = TESTSUITE_ROOTFS "test-modinfo/correct-" #_field #_flavor ".txt", \
+ })
+
+#define DEFINE_MODINFO_GENERIC_TEST(_field) \
+ DEFINE_MODINFO_TEST(_field, , \
+ "/mod-simple-i386.ko", \
+ "/mod-simple-x86_64.ko", \
+ "/mod-simple-sparc64.ko")
+
+#ifdef ENABLE_OPENSSL
+#define DEFINE_MODINFO_SIGN_TEST(_field) \
+ DEFINE_MODINFO_TEST(_field, -openssl, \
+ "/mod-simple-sha1.ko", \
+ "/mod-simple-sha256.ko", \
+ "/mod-simple-pkcs7.ko")
+#else
+#define DEFINE_MODINFO_SIGN_TEST(_field) \
+ DEFINE_MODINFO_TEST(_field, , \
+ "/mod-simple-sha1.ko", \
+ "/mod-simple-sha256.ko", \
+ "/mod-simple-pkcs7.ko")
+#endif
+
+DEFINE_MODINFO_GENERIC_TEST(filename);
+DEFINE_MODINFO_GENERIC_TEST(author);
+DEFINE_MODINFO_GENERIC_TEST(license);
+DEFINE_MODINFO_GENERIC_TEST(description);
+DEFINE_MODINFO_GENERIC_TEST(parm);
+DEFINE_MODINFO_GENERIC_TEST(depends);
+
+DEFINE_MODINFO_SIGN_TEST(signer);
+DEFINE_MODINFO_SIGN_TEST(sig_key);
+DEFINE_MODINFO_SIGN_TEST(sig_hashalgo);
+
+#if 0
+static noreturn int test_modinfo_signature(const struct test *t)
+{
+ const char *const args[] = {
+ progname,
+ NULL,
+ };
+
+ test_spawn_prog(progname, args);
+ exit(EXIT_FAILURE);
+}
+DEFINE_TEST(test_modinfo_signature,
+ .description = "check signatures are correct for modinfo is correct for i686, ppc64, s390x and x86_64",
+ .config = {
+ [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/",
+ },
+ .output = {
+ .out = TESTSUITE_ROOTFS "test-modinfo/correct.txt",
+ });
+#endif
+
+static noreturn int test_modinfo_external(const struct test *t)
+{
+ const char *const args[] = {
+ progname, "-F", "filename",
+ "mod-simple",
+ NULL,
+ };
+ test_spawn_prog(progname, args);
+ exit(EXIT_FAILURE);
+}
+DEFINE_TEST(test_modinfo_external,
+ .description = "check if modinfo finds external module",
+ .config = {
+ [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/external",
+ [TC_UNAME_R] = "4.4.4",
+ },
+ .output = {
+ .out = TESTSUITE_ROOTFS "test-modinfo/correct-external.txt",
+ })
+
+TESTSUITE_MAIN();