| /* |
| * 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(); |