xref: /aosp_15_r20/external/kmod/testsuite/test-modinfo.c (revision cc4ad7da8cefe208cb129ac2aa9a357c7c72deb2)
1*cc4ad7daSAndroid Build Coastguard Worker /*
2*cc4ad7daSAndroid Build Coastguard Worker  * Copyright (C) 2012-2013  ProFUSION embedded systems
3*cc4ad7daSAndroid Build Coastguard Worker  *
4*cc4ad7daSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or
5*cc4ad7daSAndroid Build Coastguard Worker  * modify it under the terms of the GNU Lesser General Public
6*cc4ad7daSAndroid Build Coastguard Worker  * License as published by the Free Software Foundation; either
7*cc4ad7daSAndroid Build Coastguard Worker  * version 2.1 of the License, or (at your option) any later version.
8*cc4ad7daSAndroid Build Coastguard Worker  *
9*cc4ad7daSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
10*cc4ad7daSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11*cc4ad7daSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*cc4ad7daSAndroid Build Coastguard Worker  * Lesser General Public License for more details.
13*cc4ad7daSAndroid Build Coastguard Worker  *
14*cc4ad7daSAndroid Build Coastguard Worker  * You should have received a copy of the GNU Lesser General Public
15*cc4ad7daSAndroid Build Coastguard Worker  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16*cc4ad7daSAndroid Build Coastguard Worker  */
17*cc4ad7daSAndroid Build Coastguard Worker 
18*cc4ad7daSAndroid Build Coastguard Worker #include <errno.h>
19*cc4ad7daSAndroid Build Coastguard Worker #include <inttypes.h>
20*cc4ad7daSAndroid Build Coastguard Worker #include <stddef.h>
21*cc4ad7daSAndroid Build Coastguard Worker #include <stdio.h>
22*cc4ad7daSAndroid Build Coastguard Worker #include <stdlib.h>
23*cc4ad7daSAndroid Build Coastguard Worker #include <string.h>
24*cc4ad7daSAndroid Build Coastguard Worker #include <unistd.h>
25*cc4ad7daSAndroid Build Coastguard Worker 
26*cc4ad7daSAndroid Build Coastguard Worker #include "testsuite.h"
27*cc4ad7daSAndroid Build Coastguard Worker 
28*cc4ad7daSAndroid Build Coastguard Worker static const char *progname = ABS_TOP_BUILDDIR "/tools/modinfo";
29*cc4ad7daSAndroid Build Coastguard Worker 
30*cc4ad7daSAndroid Build Coastguard Worker #define DEFINE_MODINFO_TEST(_field, _flavor, ...) \
31*cc4ad7daSAndroid Build Coastguard Worker static noreturn int test_modinfo_##_field(const struct test *t) \
32*cc4ad7daSAndroid Build Coastguard Worker { \
33*cc4ad7daSAndroid Build Coastguard Worker 	const char *const args[] = { \
34*cc4ad7daSAndroid Build Coastguard Worker 		progname, "-F", #_field ,\
35*cc4ad7daSAndroid Build Coastguard Worker 		__VA_ARGS__ , \
36*cc4ad7daSAndroid Build Coastguard Worker 		NULL, \
37*cc4ad7daSAndroid Build Coastguard Worker 	}; \
38*cc4ad7daSAndroid Build Coastguard Worker 	test_spawn_prog(progname, args); \
39*cc4ad7daSAndroid Build Coastguard Worker 	exit(EXIT_FAILURE); \
40*cc4ad7daSAndroid Build Coastguard Worker } \
41*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_modinfo_##_field, \
42*cc4ad7daSAndroid Build Coastguard Worker 	.description = "check " #_field " output of modinfo for different architectures", \
43*cc4ad7daSAndroid Build Coastguard Worker 	.config = { \
44*cc4ad7daSAndroid Build Coastguard Worker 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/", \
45*cc4ad7daSAndroid Build Coastguard Worker 	}, \
46*cc4ad7daSAndroid Build Coastguard Worker 	.output = { \
47*cc4ad7daSAndroid Build Coastguard Worker 		.out = TESTSUITE_ROOTFS "test-modinfo/correct-" #_field #_flavor ".txt", \
48*cc4ad7daSAndroid Build Coastguard Worker 	})
49*cc4ad7daSAndroid Build Coastguard Worker 
50*cc4ad7daSAndroid Build Coastguard Worker #define DEFINE_MODINFO_GENERIC_TEST(_field) \
51*cc4ad7daSAndroid Build Coastguard Worker 	DEFINE_MODINFO_TEST(_field, , \
52*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-i386.ko", \
53*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-x86_64.ko", \
54*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-sparc64.ko")
55*cc4ad7daSAndroid Build Coastguard Worker 
56*cc4ad7daSAndroid Build Coastguard Worker #ifdef ENABLE_OPENSSL
57*cc4ad7daSAndroid Build Coastguard Worker #define DEFINE_MODINFO_SIGN_TEST(_field) \
58*cc4ad7daSAndroid Build Coastguard Worker 	DEFINE_MODINFO_TEST(_field, -openssl, \
59*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-sha1.ko", \
60*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-sha256.ko",	\
61*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-pkcs7.ko")
62*cc4ad7daSAndroid Build Coastguard Worker #else
63*cc4ad7daSAndroid Build Coastguard Worker #define DEFINE_MODINFO_SIGN_TEST(_field) \
64*cc4ad7daSAndroid Build Coastguard Worker 	DEFINE_MODINFO_TEST(_field, , \
65*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-sha1.ko", \
66*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-sha256.ko",	\
67*cc4ad7daSAndroid Build Coastguard Worker 			    "/mod-simple-pkcs7.ko")
68*cc4ad7daSAndroid Build Coastguard Worker #endif
69*cc4ad7daSAndroid Build Coastguard Worker 
70*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(filename);
71*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(author);
72*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(license);
73*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(description);
74*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(parm);
75*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_GENERIC_TEST(depends);
76*cc4ad7daSAndroid Build Coastguard Worker 
77*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_SIGN_TEST(signer);
78*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_SIGN_TEST(sig_key);
79*cc4ad7daSAndroid Build Coastguard Worker DEFINE_MODINFO_SIGN_TEST(sig_hashalgo);
80*cc4ad7daSAndroid Build Coastguard Worker 
81*cc4ad7daSAndroid Build Coastguard Worker #if 0
82*cc4ad7daSAndroid Build Coastguard Worker static noreturn int test_modinfo_signature(const struct test *t)
83*cc4ad7daSAndroid Build Coastguard Worker {
84*cc4ad7daSAndroid Build Coastguard Worker 	const char *const args[] = {
85*cc4ad7daSAndroid Build Coastguard Worker 		progname,
86*cc4ad7daSAndroid Build Coastguard Worker 		NULL,
87*cc4ad7daSAndroid Build Coastguard Worker 	};
88*cc4ad7daSAndroid Build Coastguard Worker 
89*cc4ad7daSAndroid Build Coastguard Worker 	test_spawn_prog(progname, args);
90*cc4ad7daSAndroid Build Coastguard Worker 	exit(EXIT_FAILURE);
91*cc4ad7daSAndroid Build Coastguard Worker }
92*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_modinfo_signature,
93*cc4ad7daSAndroid Build Coastguard Worker 	.description = "check signatures are correct for modinfo is correct for i686, ppc64, s390x and x86_64",
94*cc4ad7daSAndroid Build Coastguard Worker 	.config = {
95*cc4ad7daSAndroid Build Coastguard Worker 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/",
96*cc4ad7daSAndroid Build Coastguard Worker 	},
97*cc4ad7daSAndroid Build Coastguard Worker 	.output = {
98*cc4ad7daSAndroid Build Coastguard Worker 		.out = TESTSUITE_ROOTFS "test-modinfo/correct.txt",
99*cc4ad7daSAndroid Build Coastguard Worker 	});
100*cc4ad7daSAndroid Build Coastguard Worker #endif
101*cc4ad7daSAndroid Build Coastguard Worker 
test_modinfo_external(const struct test * t)102*cc4ad7daSAndroid Build Coastguard Worker static noreturn int test_modinfo_external(const struct test *t)
103*cc4ad7daSAndroid Build Coastguard Worker {
104*cc4ad7daSAndroid Build Coastguard Worker 	const char *const args[] = {
105*cc4ad7daSAndroid Build Coastguard Worker 		progname, "-F", "filename",
106*cc4ad7daSAndroid Build Coastguard Worker 		"mod-simple",
107*cc4ad7daSAndroid Build Coastguard Worker 		NULL,
108*cc4ad7daSAndroid Build Coastguard Worker 	};
109*cc4ad7daSAndroid Build Coastguard Worker 	test_spawn_prog(progname, args);
110*cc4ad7daSAndroid Build Coastguard Worker 	exit(EXIT_FAILURE);
111*cc4ad7daSAndroid Build Coastguard Worker }
112*cc4ad7daSAndroid Build Coastguard Worker DEFINE_TEST(test_modinfo_external,
113*cc4ad7daSAndroid Build Coastguard Worker 	.description = "check if modinfo finds external module",
114*cc4ad7daSAndroid Build Coastguard Worker 	.config = {
115*cc4ad7daSAndroid Build Coastguard Worker 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/external",
116*cc4ad7daSAndroid Build Coastguard Worker 		[TC_UNAME_R] = "4.4.4",
117*cc4ad7daSAndroid Build Coastguard Worker 	},
118*cc4ad7daSAndroid Build Coastguard Worker 	.output = {
119*cc4ad7daSAndroid Build Coastguard Worker 		.out = TESTSUITE_ROOTFS "test-modinfo/correct-external.txt",
120*cc4ad7daSAndroid Build Coastguard Worker 	})
121*cc4ad7daSAndroid Build Coastguard Worker 
122*cc4ad7daSAndroid Build Coastguard Worker TESTSUITE_MAIN();
123