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 "testsuite.h"
     27 
     28 #define MODULES_ORDER_UNAME "4.4.4"
     29 #define MODULES_ORDER_ROOTFS TESTSUITE_ROOTFS "test-depmod/modules-order-compressed"
     30 #define MODULES_ORDER_LIB_MODULES MODULES_ORDER_ROOTFS "/lib/modules/" MODULES_ORDER_UNAME
     31 static noreturn int depmod_modules_order_for_compressed(const struct test *t)
     32 {
     33 	const char *progname = ABS_TOP_BUILDDIR "/tools/depmod";
     34 	const char *const args[] = {
     35 		progname,
     36 		NULL,
     37 	};
     38 
     39 	test_spawn_prog(progname, args);
     40 	exit(EXIT_FAILURE);
     41 }
     42 
     43 #ifdef ENABLE_ZLIB
     44 DEFINE_TEST(depmod_modules_order_for_compressed,
     45 	.description = "check if depmod let aliases in right order when using compressed modules",
     46 	.config = {
     47 		[TC_UNAME_R] = MODULES_ORDER_UNAME,
     48 		[TC_ROOTFS] = MODULES_ORDER_ROOTFS,
     49 	},
     50 	.output = {
     51 		.files = (const struct keyval[]) {
     52 			{ MODULES_ORDER_LIB_MODULES "/correct-modules.alias",
     53 			  MODULES_ORDER_LIB_MODULES "/modules.alias" },
     54 			{ }
     55 		},
     56 	});
     57 #endif
     58 
     59 #define SEARCH_ORDER_SIMPLE_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-simple"
     60 static noreturn int depmod_search_order_simple(const struct test *t)
     61 {
     62 	const char *progname = ABS_TOP_BUILDDIR "/tools/depmod";
     63 	const char *const args[] = {
     64 		progname,
     65 		NULL,
     66 	};
     67 
     68 	test_spawn_prog(progname, args);
     69 	exit(EXIT_FAILURE);
     70 }
     71 DEFINE_TEST(depmod_search_order_simple,
     72 	.description = "check if depmod honor search order in config",
     73 	.config = {
     74 		[TC_UNAME_R] = "4.4.4",
     75 		[TC_ROOTFS] = SEARCH_ORDER_SIMPLE_ROOTFS,
     76 	},
     77 	.output = {
     78 		.files = (const struct keyval[]) {
     79 			{ SEARCH_ORDER_SIMPLE_ROOTFS "/lib/modules/4.4.4/correct-modules.dep",
     80 			  SEARCH_ORDER_SIMPLE_ROOTFS "/lib/modules/4.4.4/modules.dep" },
     81 			{ }
     82 		},
     83 	});
     84 
     85 #define SEARCH_ORDER_SAME_PREFIX_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-same-prefix"
     86 static noreturn int depmod_search_order_same_prefix(const struct test *t)
     87 {
     88 	const char *progname = ABS_TOP_BUILDDIR "/tools/depmod";
     89 	const char *const args[] = {
     90 		progname,
     91 		NULL,
     92 	};
     93 
     94 	test_spawn_prog(progname, args);
     95 	exit(EXIT_FAILURE);
     96 }
     97 DEFINE_TEST(depmod_search_order_same_prefix,
     98 	.description = "check if depmod honor search order in config with same prefix",
     99 	.config = {
    100 		[TC_UNAME_R] = "4.4.4",
    101 		[TC_ROOTFS] = SEARCH_ORDER_SAME_PREFIX_ROOTFS,
    102 	},
    103 	.output = {
    104 		.files = (const struct keyval[]) {
    105 			{ SEARCH_ORDER_SAME_PREFIX_ROOTFS "/lib/modules/4.4.4/correct-modules.dep",
    106 			  SEARCH_ORDER_SAME_PREFIX_ROOTFS "/lib/modules/4.4.4/modules.dep" },
    107 			{ }
    108 		},
    109 	});
    110 
    111 #define DETECT_LOOP_ROOTFS TESTSUITE_ROOTFS "test-depmod/detect-loop"
    112 static noreturn int depmod_detect_loop(const struct test *t)
    113 {
    114 	const char *progname = ABS_TOP_BUILDDIR "/tools/depmod";
    115 	const char *const args[] = {
    116 		progname,
    117 		NULL,
    118 	};
    119 
    120 	test_spawn_prog(progname, args);
    121 	exit(EXIT_FAILURE);
    122 }
    123 DEFINE_TEST(depmod_detect_loop,
    124 	.description = "check if depmod detects module loops correctly",
    125 	.config = {
    126 		[TC_UNAME_R] = "4.4.4",
    127 		[TC_ROOTFS] = DETECT_LOOP_ROOTFS,
    128 	},
    129 	.expected_fail = true,
    130 	.output = {
    131 		.err = DETECT_LOOP_ROOTFS "/correct.txt",
    132 	});
    133 
    134 TESTSUITE_MAIN();
    135