/* * Copyright (C) 2012-2013 ProFUSION embedded systems * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <inttypes.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include "testsuite.h" static const char *progname = ABS_TOP_BUILDDIR "/tools/modinfo"; #define DEFINE_MODINFO_TEST(_field, _flavor, ...) \ static noreturn int test_modinfo_##_field(const struct test *t) \ { \ const char *const args[] = { \ progname, "-F", #_field ,\ __VA_ARGS__ , \ NULL, \ }; \ test_spawn_prog(progname, args); \ exit(EXIT_FAILURE); \ } \ DEFINE_TEST(test_modinfo_##_field, \ .description = "check " #_field " output of modinfo for different architectures", \ .config = { \ [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/", \ }, \ .output = { \ .out = TESTSUITE_ROOTFS "test-modinfo/correct-" #_field #_flavor ".txt", \ }) #define DEFINE_MODINFO_GENERIC_TEST(_field) \ DEFINE_MODINFO_TEST(_field, , \ "/mod-simple-i386.ko", \ "/mod-simple-x86_64.ko", \ "/mod-simple-sparc64.ko") #ifdef ENABLE_OPENSSL #define DEFINE_MODINFO_SIGN_TEST(_field) \ DEFINE_MODINFO_TEST(_field, -openssl, \ "/mod-simple-sha1.ko", \ "/mod-simple-sha256.ko", \ "/mod-simple-pkcs7.ko") #else #define DEFINE_MODINFO_SIGN_TEST(_field) \ DEFINE_MODINFO_TEST(_field, , \ "/mod-simple-sha1.ko", \ "/mod-simple-sha256.ko", \ "/mod-simple-pkcs7.ko") #endif DEFINE_MODINFO_GENERIC_TEST(filename); DEFINE_MODINFO_GENERIC_TEST(author); DEFINE_MODINFO_GENERIC_TEST(license); DEFINE_MODINFO_GENERIC_TEST(description); DEFINE_MODINFO_GENERIC_TEST(parm); DEFINE_MODINFO_GENERIC_TEST(depends); DEFINE_MODINFO_SIGN_TEST(signer); DEFINE_MODINFO_SIGN_TEST(sig_key); DEFINE_MODINFO_SIGN_TEST(sig_hashalgo); #if 0 static noreturn int test_modinfo_signature(const struct test *t) { const char *const args[] = { progname, NULL, }; test_spawn_prog(progname, args); exit(EXIT_FAILURE); } DEFINE_TEST(test_modinfo_signature, .description = "check signatures are correct for modinfo is correct for i686, ppc64, s390x and x86_64", .config = { [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/", }, .output = { .out = TESTSUITE_ROOTFS "test-modinfo/correct.txt", }); #endif static noreturn int test_modinfo_external(const struct test *t) { const char *const args[] = { progname, "-F", "filename", "mod-simple", NULL, }; test_spawn_prog(progname, args); exit(EXIT_FAILURE); } DEFINE_TEST(test_modinfo_external, .description = "check if modinfo finds external module", .config = { [TC_ROOTFS] = TESTSUITE_ROOTFS "test-modinfo/external", [TC_UNAME_R] = "4.4.4", }, .output = { .out = TESTSUITE_ROOTFS "test-modinfo/correct-external.txt", }) TESTSUITE_MAIN();