25extern void test_mprotect();
26extern void test_mmap();
27extern void test_prctl(
void);
28extern int test_prctl_exec(
void);
29extern void test_resource_accounting(
void);
30extern void test_syscall_contracts(
void);
31extern void test_vm_contracts(
void);
32extern void test_usercopy_contracts(
void);
33extern void test_tcp_receive_buffers(
void);
34extern void test_regular_read_contracts(
const char* base);
35extern void test_futex_contracts(
const char* program);
36extern void test_fs_mutation_contracts(
void);
37extern void test_fs_persistence_contracts(
const char* base,
int write_phase);
39extern void test_dup3(
void);
40extern void test_epoll_pty(
void);
41extern void test_pty_contracts(
void);
42extern int exec_shebang_child(
int argc,
char* argv[]);
43extern void test_exec_shebang(
const char* program);
44extern void test_exec_arguments(
const char* program);
45extern int exec_arguments_child(
int argc,
char* argv[]);
46extern void test_unix_seqpacket(
void);
47extern int process_exec_signal_child(
void);
48extern void test_linux_signal_frame(
void);
49extern void test_process(
const char* program);
50extern void test_proc_kernel_threads(
void);
51extern void test_process_stop_contracts(
void);
52extern void test_posix_spawn(
const char* program);
53extern void test_scm_rights(
void);
54extern void test_scm_rights_stream(
void);
55extern void test_unix_stream_interruption(
void);
56extern void test_unix_seqpacket_interruption(
void);
66int main(
int argc,
char* argv[]) {
67 if (argc > 1 && !strcmp(argv[1],
"--exec-arguments-child")) {
68 return exec_arguments_child(argc, argv);
70 if (argc == 2 && !strcmp(argv[1],
"--exec-signal-child"))
71 return process_exec_signal_child();
72 if (argc > 1 && !strncmp(argv[1],
"--exec-shebang-",
sizeof(
"--exec-shebang-") - 1))
73 return exec_shebang_child(argc, argv);
75 if (setjmp(buf) == 1) {
80 if (argc == 2 && !strcmp(argv[1],
"--exec-arguments")) {
81 test_exec_arguments(argv[0]);
84 if (argc == 2 && !strcmp(argv[1],
"--unix-seqpacket")) {
85 test_unix_seqpacket();
88 if (argc == 2 && !strcmp(argv[1],
"--scm-rights")) {
92 if (argc == 2 && !strcmp(argv[1],
"--syscall-contracts")) {
93 test_syscall_contracts();
96 if (argc == 2 && !strcmp(argv[1],
"--vm-contracts")) {
100 if (argc == 2 && !strcmp(argv[1],
"--tcp-receive-buffers")) {
101 test_tcp_receive_buffers();
104 if (argc == 2 && !strcmp(argv[1],
"--usercopy-contracts")) {
105 test_usercopy_contracts();
108 if (argc == 3 && !strcmp(argv[1],
"--regular-read-contracts")) {
109 test_regular_read_contracts(argv[2]);
112 if (argc == 2 && !strcmp(argv[1],
"--futex-contracts")) {
113 test_futex_contracts(argv[0]);
116 if (argc == 2 && !strcmp(argv[1],
"--fs-mutation-contracts")) {
117 test_fs_mutation_contracts();
121 (!strcmp(argv[1],
"--fs-persistence-write") || !strcmp(argv[1],
"--fs-persistence-read"))) {
122 test_fs_persistence_contracts(argv[2], !strcmp(argv[1],
"--fs-persistence-write"));
125 if (argc == 2 && !strcmp(argv[1],
"--scm-rights-stream")) {
126 test_scm_rights_stream();
129 if (argc == 2 && !strcmp(argv[1],
"--unix-seqpacket-interruption")) {
130 test_unix_seqpacket_interruption();
133 if (argc == 2 && !strcmp(argv[1],
"--unix-stream-interruption")) {
134 test_unix_stream_interruption();
137 if (argc == 2 && !strcmp(argv[1],
"--posix-spawn")) {
138 test_posix_spawn(argv[0]);
141 if (argc == 2 && !strcmp(argv[1],
"--dup3")) {
145 if (argc == 2 && !strcmp(argv[1],
"--epoll-pty")) {
149 if (argc == 2 && !strcmp(argv[1],
"--pty-contracts")) {
150 test_pty_contracts();
153 if (argc == 2 && !strcmp(argv[1],
"--mmap")) {
157 if (argc == 2 && !strcmp(argv[1],
"--prctl")) {
161 if (argc == 2 && !strcmp(argv[1],
"--prctl-exec")) {
162 return test_prctl_exec();
164 if (argc == 2 && !strcmp(argv[1],
"--resource")) {
165 test_resource_accounting();
168 if (argc == 2 && !strcmp(argv[1],
"--signal-frame")) {
169 test_linux_signal_frame();
172 if (argc == 2 && !strcmp(argv[1],
"--process-stop-contracts")) {
173 test_process_stop_contracts();
176 if (argc == 2 && !strcmp(argv[1],
"--proc-kernel-threads")) {
177 test_proc_kernel_threads();
181 printf(
"Running tests...\n");
187 test_resource_accounting();
188 test_syscall_contracts();
190 test_usercopy_contracts();
191 test_futex_contracts(argv[0]);
192 test_fs_mutation_contracts();
193 test_exec_shebang(argv[0]);
194 test_exec_arguments(argv[0]);
195 test_process(argv[0]);
198 test_pty_contracts();
200 test_scm_rights_stream();
201 test_unix_seqpacket();
202 test_unix_stream_interruption();
203 test_unix_seqpacket_interruption();
206 printf(
"Tests complete!\n");