blob: 8cd1ab96ddf12c3b6fc1a3950b2fe028d0e1679a [file] [log] [blame]
Lucas De Marchi976ea8c2012-02-08 01:40:00 -02001/*
Lucas De Marchie6b0e492013-01-16 11:27:21 -02002 * Copyright (C) 2012-2013 ProFUSION embedded systems
Lucas De Marchi976ea8c2012-02-08 01:40:00 -02003 *
Lucas De Marchie1b1ab22012-07-10 09:42:24 -03004 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
Lucas De Marchi976ea8c2012-02-08 01:40:00 -02008 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Lucas De Marchie1b1ab22012-07-10 09:42:24 -030011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020013 *
Lucas De Marchie1b1ab22012-07-10 09:42:24 -030014 * You should have received a copy of the GNU Lesser General Public
Lucas De Marchidea2dfe2014-12-25 23:32:03 -020015 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020016 */
17
Lucas De Marchic2e42862014-10-03 01:41:42 -030018#include <errno.h>
19#include <inttypes.h>
20#include <stddef.h>
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020021#include <stdio.h>
22#include <stdlib.h>
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020023#include <string.h>
Lucas De Marchic2e42862014-10-03 01:41:42 -030024#include <unistd.h>
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020025
26#include "testsuite.h"
27
Lucas De Marchid96ca9c2013-12-17 19:10:16 -020028static noreturn int modprobe_show_depends(const struct test *t)
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020029{
Lucas De Marchib6adccd2013-07-04 16:01:55 -030030 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020031 const char *const args[] = {
32 progname,
33 "--show-depends", "btusb",
34 NULL,
35 };
36
37 test_spawn_prog(progname, args);
38 exit(EXIT_FAILURE);
39}
Lucas De Marchif1155c12014-10-09 13:00:30 -030040DEFINE_TEST(modprobe_show_depends,
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020041 .description = "check if output for modprobe --show-depends is correct for loaded modules",
42 .config = {
43 [TC_UNAME_R] = "4.4.4",
44 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/show-depends",
45 },
46 .output = {
John Spencerbd4e7342013-08-27 01:38:11 +020047 .out = TESTSUITE_ROOTFS "test-modprobe/show-depends/correct.txt",
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020048 });
49
Lucas De Marchid96ca9c2013-12-17 19:10:16 -020050static noreturn int modprobe_show_depends2(const struct test *t)
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020051{
Lucas De Marchib6adccd2013-07-04 16:01:55 -030052 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020053 const char *const args[] = {
54 progname,
55 "--show-depends", "psmouse",
56 NULL,
57 };
58
59 test_spawn_prog(progname, args);
60 exit(EXIT_FAILURE);
61}
Lucas De Marchif1155c12014-10-09 13:00:30 -030062DEFINE_TEST(modprobe_show_depends2,
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020063 .description = "check if output for modprobe --show-depends is correct",
64 .config = {
65 [TC_UNAME_R] = "4.4.4",
66 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/show-depends",
67 },
68 .output = {
John Spencerbd4e7342013-08-27 01:38:11 +020069 .out = TESTSUITE_ROOTFS "test-modprobe/show-depends/correct-psmouse.txt",
Lucas De Marchi976ea8c2012-02-08 01:40:00 -020070 });
Lucas De Marchia7f53002012-02-16 21:04:24 -020071
Lucas De Marchi52783962013-03-21 02:24:07 -030072
Lucas De Marchid96ca9c2013-12-17 19:10:16 -020073static noreturn int modprobe_show_alias_to_none(const struct test *t)
Lucas De Marchi52783962013-03-21 02:24:07 -030074{
Lucas De Marchib6adccd2013-07-04 16:01:55 -030075 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchi52783962013-03-21 02:24:07 -030076 const char *const args[] = {
77 progname,
78 "--show-depends", "--ignore-install", "--quiet", "psmouse",
79 NULL,
80 };
81
82 test_spawn_prog(progname, args);
83 exit(EXIT_FAILURE);
84}
Lucas De Marchif1155c12014-10-09 13:00:30 -030085DEFINE_TEST(modprobe_show_alias_to_none,
Lucas De Marchi52783962013-03-21 02:24:07 -030086 .description = "check if modprobe --show-depends doesn't explode with an alias to nothing",
Lucas De Marchi52783962013-03-21 02:24:07 -030087 .config = {
88 [TC_UNAME_R] = "4.4.4",
89 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/alias-to-none",
90 },
91 .output = {
John Spencerbd4e7342013-08-27 01:38:11 +020092 .out = TESTSUITE_ROOTFS "test-modprobe/show-depends/correct-psmouse.txt",
Michal Marek88ac4082014-02-28 13:05:28 +010093 },
94 .modules_loaded = "",
95 );
Lucas De Marchi52783962013-03-21 02:24:07 -030096
97
Lucas De Marchid96ca9c2013-12-17 19:10:16 -020098static noreturn int modprobe_builtin(const struct test *t)
Lucas De Marchia7f53002012-02-16 21:04:24 -020099{
Lucas De Marchib6adccd2013-07-04 16:01:55 -0300100 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchia7f53002012-02-16 21:04:24 -0200101 const char *const args[] = {
102 progname,
103 "unix",
104 NULL,
105 };
106
107 test_spawn_prog(progname, args);
108 exit(EXIT_FAILURE);
109}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300110DEFINE_TEST(modprobe_builtin,
Lucas De Marchia7f53002012-02-16 21:04:24 -0200111 .description = "check if modprobe return 0 for builtin",
Lucas De Marchia7f53002012-02-16 21:04:24 -0200112 .config = {
113 [TC_UNAME_R] = "4.4.4",
114 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/builtin",
115 });
116
Lucas De Marchid96ca9c2013-12-17 19:10:16 -0200117static noreturn int modprobe_softdep_loop(const struct test *t)
Lucas De Marchia6976f82012-06-04 20:45:24 -0300118{
Lucas De Marchib6adccd2013-07-04 16:01:55 -0300119 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchia6976f82012-06-04 20:45:24 -0300120 const char *const args[] = {
121 progname,
122 "bluetooth",
123 NULL,
124 };
125
126 test_spawn_prog(progname, args);
127 exit(EXIT_FAILURE);
128}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300129DEFINE_TEST(modprobe_softdep_loop,
Lucas De Marchia6976f82012-06-04 20:45:24 -0300130 .description = "check if modprobe breaks softdep loop",
131 .config = {
132 [TC_UNAME_R] = "4.4.4",
133 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/softdep-loop",
134 [TC_INIT_MODULE_RETCODES] = "",
Michal Marek88ac4082014-02-28 13:05:28 +0100135 },
136 .modules_loaded = "btusb,bluetooth",
137 );
Lucas De Marchia6976f82012-06-04 20:45:24 -0300138
Lucas De Marchid96ca9c2013-12-17 19:10:16 -0200139static noreturn int modprobe_install_cmd_loop(const struct test *t)
Lucas De Marchi01d9ee62012-06-06 01:44:23 -0300140{
Lucas De Marchib6adccd2013-07-04 16:01:55 -0300141 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
Lucas De Marchi01d9ee62012-06-06 01:44:23 -0300142 const char *const args[] = {
143 progname,
144 "snd-pcm",
145 NULL,
146 };
147
148 test_spawn_prog(progname, args);
149 exit(EXIT_FAILURE);
150}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300151DEFINE_TEST(modprobe_install_cmd_loop,
Lucas De Marchi9b01fd22012-06-06 10:49:04 -0300152 .description = "check if modprobe breaks install-commands loop",
Lucas De Marchi01d9ee62012-06-06 01:44:23 -0300153 .config = {
154 [TC_UNAME_R] = "4.4.4",
155 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/install-cmd-loop",
156 [TC_INIT_MODULE_RETCODES] = "",
157 },
158 .env_vars = (const struct keyval[]) {
Lucas De Marchib6adccd2013-07-04 16:01:55 -0300159 { "MODPROBE", ABS_TOP_BUILDDIR "/tools/modprobe" },
Lucas De Marchi01d9ee62012-06-06 01:44:23 -0300160 { }
161 },
Michal Marek88ac4082014-02-28 13:05:28 +0100162 .modules_loaded = "snd,snd-pcm",
Lucas De Marchi01d9ee62012-06-06 01:44:23 -0300163 );
164
Lucas De Marchid96ca9c2013-12-17 19:10:16 -0200165static noreturn int modprobe_param_kcmdline(const struct test *t)
Lucas De Marchiea225b92013-08-13 22:03:26 -0300166{
167 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
168 const char *const args[] = {
169 progname,
170 "--show-depends", "psmouse",
171 NULL,
172 };
173
174 test_spawn_prog(progname, args);
175 exit(EXIT_FAILURE);
176}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300177DEFINE_TEST(modprobe_param_kcmdline,
Lucas De Marchibad84a92014-03-06 01:14:12 -0300178 .description = "check if params from kcmdline are passed in fact passed to (f)init_module call",
Lucas De Marchiea225b92013-08-13 22:03:26 -0300179 .config = {
180 [TC_UNAME_R] = "4.4.4",
181 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline",
182 },
183 .output = {
John Spencerbd4e7342013-08-27 01:38:11 +0200184 .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline/correct.txt",
Michal Marek88ac4082014-02-28 13:05:28 +0100185 },
186 .modules_loaded = "",
187 );
Lucas De Marchiea225b92013-08-13 22:03:26 -0300188
Lucas De Marchi55bcc4a2014-03-06 01:09:30 -0300189static noreturn int modprobe_param_kcmdline2(const struct test *t)
190{
191 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
192 const char *const args[] = {
193 progname,
194 "-c",
195 NULL,
196 };
197
198 test_spawn_prog(progname, args);
199 exit(EXIT_FAILURE);
200}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300201DEFINE_TEST(modprobe_param_kcmdline2,
Lucas De Marchi55bcc4a2014-03-06 01:09:30 -0300202 .description = "check if params with no value are parsed correctly from kcmdline",
203 .config = {
204 [TC_UNAME_R] = "4.4.4",
205 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline2",
206 },
207 .output = {
208 .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline2/correct.txt",
209 },
210 .modules_loaded = "",
211 );
212
Lucas De Marchi42149022014-03-06 01:24:32 -0300213static noreturn int modprobe_param_kcmdline3(const struct test *t)
214{
215 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
216 const char *const args[] = {
217 progname,
218 "-c",
219 NULL,
220 };
221
222 test_spawn_prog(progname, args);
223 exit(EXIT_FAILURE);
224}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300225DEFINE_TEST(modprobe_param_kcmdline3,
Lucas De Marchi42149022014-03-06 01:24:32 -0300226 .description = "check if unrelated strings in kcmdline are correctly ignored",
227 .config = {
228 [TC_UNAME_R] = "4.4.4",
229 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline3",
230 },
231 .output = {
232 .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline3/correct.txt",
233 },
234 .modules_loaded = "",
235 );
236
Lucas De Marchi49776622014-03-06 01:36:02 -0300237static noreturn int modprobe_param_kcmdline4(const struct test *t)
238{
239 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
240 const char *const args[] = {
241 progname,
242 "-c",
243 NULL,
244 };
245
246 test_spawn_prog(progname, args);
247 exit(EXIT_FAILURE);
248}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300249DEFINE_TEST(modprobe_param_kcmdline4,
Lucas De Marchi49776622014-03-06 01:36:02 -0300250 .description = "check if unrelated strings in kcmdline are correctly ignored",
251 .config = {
252 [TC_UNAME_R] = "4.4.4",
253 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline4",
254 },
255 .output = {
256 .out = TESTSUITE_ROOTFS "test-modprobe/module-param-kcmdline4/correct.txt",
257 },
258 .modules_loaded = "",
259 );
260
Michal Marek2ce5de02014-02-28 13:05:29 +0100261static noreturn int modprobe_force(const struct test *t)
262{
263 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
264 const char *const args[] = {
265 progname,
266 "--force", "psmouse",
267 NULL,
268 };
269
270 test_spawn_prog(progname, args);
271 exit(EXIT_FAILURE);
272}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300273DEFINE_TEST(modprobe_force,
Michal Marek2ce5de02014-02-28 13:05:29 +0100274 .description = "check modprobe --force",
275 .config = {
276 [TC_UNAME_R] = "4.4.4",
277 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/force",
278 [TC_INIT_MODULE_RETCODES] = "",
279 },
280 .modules_loaded = "psmouse",
281 );
282
Michal Marekbe29c402014-02-28 13:05:31 +0100283static noreturn int modprobe_oldkernel(const struct test *t)
284{
285 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
286 const char *const args[] = {
287 progname,
288 "psmouse",
289 NULL,
290 };
291
292 test_spawn_prog(progname, args);
293 exit(EXIT_FAILURE);
294}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300295DEFINE_TEST(modprobe_oldkernel,
Michal Marekbe29c402014-02-28 13:05:31 +0100296 .description = "check modprobe --force",
297 .config = {
298 [TC_UNAME_R] = "3.3.3",
299 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/oldkernel",
300 [TC_INIT_MODULE_RETCODES] = "",
301 },
302 .modules_loaded = "psmouse",
303 );
304
305static noreturn int modprobe_oldkernel_force(const struct test *t)
306{
307 const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
308 const char *const args[] = {
309 progname,
310 "--force", "psmouse",
311 NULL,
312 };
313
314 test_spawn_prog(progname, args);
315 exit(EXIT_FAILURE);
316}
Lucas De Marchif1155c12014-10-09 13:00:30 -0300317DEFINE_TEST(modprobe_oldkernel_force,
Michal Marekbe29c402014-02-28 13:05:31 +0100318 .description = "check modprobe --force",
319 .config = {
320 [TC_UNAME_R] = "3.3.3",
321 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/oldkernel-force",
322 [TC_INIT_MODULE_RETCODES] = "",
323 },
324 .modules_loaded = "psmouse",
325 );
326
Lucas De Marchi43289822014-10-09 14:29:04 -0300327TESTSUITE_MAIN();