]> git.ipfire.org Git - thirdparty/kmod.git/blobdiff - testsuite/test-testsuite.c
Remove FSF mailing address
[thirdparty/kmod.git] / testsuite / test-testsuite.c
index f5b6fceb573c5ebfcbb41290540684ce91eea95e..2d2c96337f5b28c06e64f3389310f9c63122a1f6 100644 (file)
@@ -1,17 +1,38 @@
+/*
+ * 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 <dirent.h>
+#include <errno.h>
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <stddef.h>
 #include <string.h>
-#include <errno.h>
 #include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 #include <sys/utsname.h>
+
 #include <libkmod.h>
 
 #include "testsuite.h"
 
 
 #define TEST_UNAME "4.0.20-kmod"
-static int testsuite_uname(const struct test *t)
+static noreturn int testsuite_uname(const struct test *t)
 {
        struct utsname u;
        int err = uname(&u);
@@ -28,15 +49,12 @@ static int testsuite_uname(const struct test *t)
 
        exit(EXIT_SUCCESS);
 }
-static const struct test stestsuite_uname = {
-       .name = "testsuite_uname",
+DEFINE_TEST(testsuite_uname,
        .description = "test if trap to uname() works",
-       .func = testsuite_uname,
        .config = {
                [TC_UNAME_R] = TEST_UNAME,
        },
-       .need_spawn = true,
-};
+       .need_spawn = true);
 
 static int testsuite_rootfs_fopen(const struct test *t)
 {
@@ -57,46 +75,87 @@ static int testsuite_rootfs_fopen(const struct test *t)
 
        return EXIT_SUCCESS;
 }
-static const struct test stestsuite_rootfs_fopen = {
-       .name = "testsuite_rootfs_fopen",
+DEFINE_TEST(testsuite_rootfs_fopen,
        .description = "test if rootfs works - fopen()",
-       .func = testsuite_rootfs_fopen,
        .config = {
                [TC_ROOTFS] = TESTSUITE_ROOTFS "test-rootfs/",
        },
-       .need_spawn = true,
-};
+       .need_spawn = true);
+
+static int testsuite_rootfs_open(const struct test *t)
+{
+       char buf[100];
+       int fd, done;
+
+       fd = open("/lib/modules/a", O_RDONLY);
+       if (fd < 0)
+               return EXIT_FAILURE;
+
+       for (done = 0;;) {
+               int r = read(fd, buf + done, sizeof(buf) - 1 - done);
+               if (r == 0)
+                       break;
+               if (r == -EWOULDBLOCK || r == -EAGAIN)
+                       continue;
 
-static const struct test *tests[] = {
-       &stestsuite_uname,
-       &stestsuite_rootfs_fopen,
-       NULL,
-};
+               done += r;
+       }
+
+       buf[done] = '\0';
+
+       if (strcmp(buf, "kmod-test-chroot-works\n") != 0)
+               return EXIT_FAILURE;
+
+       return EXIT_SUCCESS;
+}
+DEFINE_TEST(testsuite_rootfs_open,
+       .description = "test if rootfs works - open()",
+       .config = {
+               [TC_ROOTFS] = TESTSUITE_ROOTFS "test-rootfs/",
+       },
+       .need_spawn = true);
 
-int main(int argc, char *argv[])
+static int testsuite_rootfs_stat_access(const struct test *t)
 {
-       const struct test *t;
-       int arg;
-       size_t i;
-
-       arg = test_init(argc, argv, tests);
-       if (arg == 0)
-               return 0;
-
-       if (arg < argc) {
-               t = test_find(tests, argv[arg]);
-               if (t == NULL) {
-                       fprintf(stderr, "could not find test %s\n", argv[arg]);
-                       exit(EXIT_FAILURE);
-               }
-
-               return test_run(t);
+       struct stat st;
+
+       if (access("/lib/modules/a", F_OK) < 0) {
+               ERR("access failed: %m\n");
+               return EXIT_FAILURE;
        }
 
-       for (i = 0; tests[i] != NULL; i++) {
-               if (test_run(tests[i]) != 0)
-                       exit(EXIT_FAILURE);
+       if (stat("/lib/modules/a", &st) < 0) {
+               ERR("stat failed: %m\n");
+               return EXIT_FAILURE;
        }
 
-       exit(EXIT_SUCCESS);
+       return EXIT_SUCCESS;
+}
+DEFINE_TEST(testsuite_rootfs_stat_access,
+       .description = "test if rootfs works - stat() and access()",
+       .config = {
+               [TC_ROOTFS] = TESTSUITE_ROOTFS "test-rootfs/",
+       },
+       .need_spawn = true);
+
+static int testsuite_rootfs_opendir(const struct test *t)
+{
+       DIR *d;
+
+       d = opendir("/testdir");
+       if (d == NULL) {
+               ERR("opendir failed: %m\n");
+               return EXIT_FAILURE;
+       }
+
+       closedir(d);
+       return EXIT_SUCCESS;
 }
+DEFINE_TEST(testsuite_rootfs_opendir,
+       .description = "test if rootfs works - opendir()",
+       .config = {
+               [TC_ROOTFS] = TESTSUITE_ROOTFS "test-rootfs/",
+       },
+       .need_spawn = true);
+
+TESTSUITE_MAIN();