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 <shared/macro.h>
     27 
     28 #include <libkmod/libkmod.h>
     29 
     30 #include "testsuite.h"
     31 
     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 
     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 
     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