• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012-2013  ProFUSION embedded systems
3  *
4  * 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.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include <errno.h>
19 #include <inttypes.h>
20 #include <stddef.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <unistd.h>
25 
26 #include <shared/macro.h>
27 
28 #include <libkmod/libkmod.h>
29 
30 #include "testsuite.h"
31 
test_initlib(const struct test * t)32 static noreturn int test_initlib(const struct test *t)
33 {
34 	struct kmod_ctx *ctx;
35 	const char *null_config = NULL;
36 
37 	ctx = kmod_new(NULL, &null_config);
38 	if (ctx == NULL)
39 		exit(EXIT_FAILURE);
40 
41 	kmod_unref(ctx);
42 
43 	exit(EXIT_SUCCESS);
44 }
45 DEFINE_TEST(test_initlib,
46 		.description = "test if libkmod's init function work");
47 
test_insert(const struct test * t)48 static noreturn int test_insert(const struct test *t)
49 {
50 	struct kmod_ctx *ctx;
51 	struct kmod_module *mod;
52 	const char *null_config = NULL;
53 	int err;
54 
55 	ctx = kmod_new(NULL, &null_config);
56 	if (ctx == NULL)
57 		exit(EXIT_FAILURE);
58 
59 	err = kmod_module_new_from_path(ctx, "/mod-simple.ko", &mod);
60 	if (err != 0) {
61 		ERR("could not create module from path: %m\n");
62 		exit(EXIT_FAILURE);
63 	}
64 
65 	err = kmod_module_insert_module(mod, 0, NULL);
66 	if (err != 0) {
67 		ERR("could not insert module: %m\n");
68 		exit(EXIT_FAILURE);
69 	}
70 	kmod_unref(ctx);
71 
72 	exit(EXIT_SUCCESS);
73 }
74 DEFINE_TEST(test_insert,
75 	.description = "test if libkmod's insert_module returns ok",
76 	.config = {
77 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-init/",
78 		[TC_INIT_MODULE_RETCODES] = "bla:1:20",
79 	},
80 	.modules_loaded = "mod_simple",
81 	.need_spawn = true);
82 
test_remove(const struct test * t)83 static noreturn int test_remove(const struct test *t)
84 {
85 	struct kmod_ctx *ctx;
86 	struct kmod_module *mod_simple, *mod_bla;
87 	const char *null_config = NULL;
88 	int err;
89 
90 	ctx = kmod_new(NULL, &null_config);
91 	if (ctx == NULL)
92 		exit(EXIT_FAILURE);
93 
94 	err = kmod_module_new_from_name(ctx, "mod-simple", &mod_simple);
95 	if (err != 0) {
96 		ERR("could not create module from name: %s\n", strerror(-err));
97 		exit(EXIT_FAILURE);
98 	}
99 
100 	err = kmod_module_new_from_name(ctx, "bla", &mod_bla);
101 	if (err != 0) {
102 		ERR("could not create module from name: %s\n", strerror(-err));
103 		exit(EXIT_FAILURE);
104 	}
105 
106 	err = kmod_module_remove_module(mod_simple, 0);
107 	if (err != 0) {
108 		ERR("could not remove module: %s\n", strerror(-err));
109 		exit(EXIT_FAILURE);
110 	}
111 
112 	err = kmod_module_remove_module(mod_bla, 0);
113 	if (err != -ENOENT) {
114 		ERR("wrong return code for failure test: %d\n", err);
115 		exit(EXIT_FAILURE);
116 	}
117 
118 	kmod_unref(ctx);
119 
120 	exit(EXIT_SUCCESS);
121 }
122 DEFINE_TEST(test_remove,
123 	.description = "test if libkmod's remove_module returns ok",
124 	.config = {
125 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-remove/",
126 		[TC_DELETE_MODULE_RETCODES] =
127 			"mod-simple:0:0:bla:-1:" STRINGIFY(ENOENT),
128 	},
129 	.need_spawn = true);
130 
131 TESTSUITE_MAIN();
132