libkmod: fix return error when opening index
[platform/upstream/kmod.git] / testsuite / test-new-module.c
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 <libkmod/libkmod.h>
27
28 #include "testsuite.h"
29
30 static int from_name(const struct test *t)
31 {
32         static const char *modnames[] = {
33                 "ext4",
34                 "balbalbalbbalbalbalbalbalbalbal",
35                 "snd-hda-intel",
36                 "snd-timer",
37                 "iTCO_wdt",
38                 NULL,
39         };
40         const char **p;
41         struct kmod_ctx *ctx;
42         struct kmod_module *mod;
43         const char *null_config = NULL;
44         int err;
45
46         ctx = kmod_new(NULL, &null_config);
47         if (ctx == NULL)
48                 exit(EXIT_FAILURE);
49
50         for (p = modnames; p != NULL; p++) {
51                 err = kmod_module_new_from_name(ctx, *p, &mod);
52                 if (err < 0)
53                         exit(EXIT_SUCCESS);
54
55                 printf("modname: %s\n", kmod_module_get_name(mod));
56                 kmod_module_unref(mod);
57         }
58
59         kmod_unref(ctx);
60
61         return EXIT_SUCCESS;
62 }
63 DEFINE_TEST(from_name,
64         .description = "check if module names are parsed correctly",
65         .config = {
66                 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-new-module/from_name/",
67         },
68         .need_spawn = true,
69         .output = {
70                 .out = TESTSUITE_ROOTFS "test-new-module/from_name/correct.txt",
71         });
72
73 static int from_alias(const struct test *t)
74 {
75         static const char *modnames[] = {
76                 "ext4.*",
77                 NULL,
78         };
79         const char **p;
80         struct kmod_ctx *ctx;
81         int err;
82
83         ctx = kmod_new(NULL, NULL);
84         if (ctx == NULL)
85                 exit(EXIT_FAILURE);
86
87         for (p = modnames; p != NULL; p++) {
88                 struct kmod_list *l, *list = NULL;
89
90                 err = kmod_module_new_from_lookup(ctx, *p, &list);
91                 if (err < 0)
92                         exit(EXIT_SUCCESS);
93
94                 kmod_list_foreach(l, list) {
95                         struct kmod_module *m;
96                         m = kmod_module_get_module(l);
97
98                         printf("modname: %s\n", kmod_module_get_name(m));
99                         kmod_module_unref(m);
100                 }
101                 kmod_module_unref_list(list);
102         }
103
104         kmod_unref(ctx);
105
106         return EXIT_SUCCESS;
107 }
108 DEFINE_TEST(from_alias,
109         .description = "check if aliases are parsed correctly",
110         .config = {
111                 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-new-module/from_alias/",
112         },
113         .need_spawn = true,
114         .output = {
115                 .out = TESTSUITE_ROOTFS "test-new-module/from_alias/correct.txt",
116         });
117
118 TESTSUITE_MAIN();