Home | History | Annotate | Download | only in testsuite
      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 loaded_1(const struct test *t)
     31 {
     32 	struct kmod_ctx *ctx;
     33 	const char *null_config = NULL;
     34 	struct kmod_list *list, *itr;
     35 	int err;
     36 
     37 	ctx = kmod_new(NULL, &null_config);
     38 	if (ctx == NULL)
     39 		exit(EXIT_FAILURE);
     40 
     41 	err = kmod_module_new_from_loaded(ctx, &list);
     42 	if (err < 0) {
     43 		fprintf(stderr, "%s\n", strerror(-err));
     44 		kmod_unref(ctx);
     45 		exit(EXIT_FAILURE);
     46 	}
     47 
     48 	printf("Module                  Size  Used by\n");
     49 
     50 	kmod_list_foreach(itr, list) {
     51 		struct kmod_module *mod = kmod_module_get_module(itr);
     52 		const char *name = kmod_module_get_name(mod);
     53 		int use_count = kmod_module_get_refcnt(mod);
     54 		long size = kmod_module_get_size(mod);
     55 		struct kmod_list *holders, *hitr;
     56 		int first = 1;
     57 
     58 		printf("%-19s %8ld  %d ", name, size, use_count);
     59 		holders = kmod_module_get_holders(mod);
     60 		kmod_list_foreach(hitr, holders) {
     61 			struct kmod_module *hm = kmod_module_get_module(hitr);
     62 
     63 			if (!first)
     64 				putchar(',');
     65 			else
     66 				first = 0;
     67 
     68 			fputs(kmod_module_get_name(hm), stdout);
     69 			kmod_module_unref(hm);
     70 		}
     71 		putchar('\n');
     72 		kmod_module_unref_list(holders);
     73 		kmod_module_unref(mod);
     74 	}
     75 	kmod_module_unref_list(list);
     76 
     77 	kmod_unref(ctx);
     78 
     79 	return EXIT_SUCCESS;
     80 }
     81 DEFINE_TEST(loaded_1,
     82 	.description = "check if list of module is created",
     83 	.config = {
     84 		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-loaded/",
     85 	},
     86 	.need_spawn = true,
     87 	.output = {
     88 		.out = TESTSUITE_ROOTFS "test-loaded/correct.txt",
     89 	});
     90 
     91 TESTSUITE_MAIN();
     92