1 | // SPDX-License-Identifier: GPL-3.0-or-later |
2 | |
3 | #include <pthread.h> |
4 | #include <spawn.h> |
5 | #include <stdio.h> |
6 | #include <stdlib.h> |
7 | #include <string.h> |
8 | #include <sys/stat.h> |
9 | #include <sys/wait.h> |
10 | |
11 | struct |
12 | { |
13 | const char *name; |
14 | const char *executable; |
15 | } const tests[] = { |
16 | { "fork" , "/initrd/tests/fork-test" }, // |
17 | { "rpc" , "/initrd/tests/rpc-test" }, // |
18 | { "libc" , "/initrd/tests/libc-test" }, // |
19 | { "c++" , "/initrd/tests/libstdc++-test" }, // |
20 | { "rust" , "/initrd/tests/rust-test" }, // |
21 | { "pipe" , "/initrd/tests/pipe-test" }, // |
22 | { "signal" , "/initrd/tests/signal" }, // |
23 | { "syslog" , "/initrd/tests/syslog-test" }, // |
24 | { "memfd" , "/initrd/tests/memfd-test" }, // |
25 | { 0 }, |
26 | }; |
27 | |
28 | int main(int argc, char **argv) |
29 | { |
30 | printf(format: "MOS Userspace Test Suite\n" ); |
31 | printf(format: "Invoked with %d arguments:\n" , argc); |
32 | for (int i = 0; i < argc; i++) |
33 | printf(format: " %d: %s\n" , i, argv[i]); |
34 | |
35 | bool detached = false; |
36 | if (argc > 1 && strcmp(a: argv[1], b: "--detached" ) == 0) |
37 | { |
38 | detached = true; |
39 | printf(format: "Detached mode enabled\n" ); |
40 | } |
41 | |
42 | printf(format: "\n" ); |
43 | |
44 | for (int i = 0; tests[i].name; i++) |
45 | { |
46 | printf(format: "Running test %s (%s)... \n" , tests[i].name, tests[i].executable); |
47 | const char *test_argv[] = { tests[i].name, NULL }; |
48 | pid_t ret; |
49 | posix_spawn(pid: &ret, path: tests[i].executable, |
50 | NULL, // file_actions |
51 | NULL, // attrp |
52 | argv: (char *const *) test_argv, NULL); |
53 | |
54 | if (ret < 0) |
55 | { |
56 | printf(format: "FAILED: cannot spawn: %d\n" , ret); |
57 | continue; |
58 | } |
59 | |
60 | if (!detached) |
61 | { |
62 | int status = 0; |
63 | waitpid(pid: ret, status: &status, flags: 0); |
64 | printf(format: "Test %s exited with status %d\n" , tests[i].name, status); |
65 | printf(format: "OK\n" ); |
66 | } |
67 | } |
68 | |
69 | return 0; |
70 | } |
71 | |