1 /* 2 * Copyright (C) 2011-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/util.h> 27 28 #include <libkmod/libkmod.h> 29 30 #include "testsuite.h" 31 32 #define TEST_UNAME "4.0.20-kmod" 33 34 static noreturn int test_dependencies(const struct test *t) 35 { 36 struct kmod_ctx *ctx; 37 struct kmod_module *mod = NULL; 38 struct kmod_list *list, *l; 39 int err; 40 size_t len = 0; 41 int fooa = 0, foob = 0, fooc = 0; 42 43 ctx = kmod_new(NULL, NULL); 44 if (ctx == NULL) 45 exit(EXIT_FAILURE); 46 47 err = kmod_module_new_from_name(ctx, "mod-foo", &mod); 48 if (err < 0 || mod == NULL) { 49 kmod_unref(ctx); 50 exit(EXIT_FAILURE); 51 } 52 53 list = kmod_module_get_dependencies(mod); 54 55 kmod_list_foreach(l, list) { 56 struct kmod_module *m = kmod_module_get_module(l); 57 const char *name = kmod_module_get_name(m); 58 59 if (streq(name, "mod_foo_a")) 60 fooa = 1; 61 if (streq(name, "mod_foo_b")) 62 foob = 1; 63 else if (streq(name, "mod_foo_c")) 64 fooc = 1; 65 66 fprintf(stderr, "name=%s", name); 67 kmod_module_unref(m); 68 len++; 69 } 70 71 /* fooa, foob, fooc */ 72 if (len != 3 || !fooa || !foob || !fooc) 73 exit(EXIT_FAILURE); 74 75 kmod_module_unref_list(list); 76 kmod_module_unref(mod); 77 kmod_unref(ctx); 78 79 exit(EXIT_SUCCESS); 80 } 81 DEFINE_TEST(test_dependencies, 82 .description = "test if kmod_module_get_dependencies works", 83 .config = { 84 [TC_UNAME_R] = TEST_UNAME, 85 [TC_ROOTFS] = TESTSUITE_ROOTFS "test-dependencies/", 86 }, 87 .need_spawn = true); 88 89 TESTSUITE_MAIN(); 90