iplib: Make netmkaddr() threadsafe
[akaros.git] / user / utest / file-posix.c
1 #define _LARGEFILE64_SOURCE /* needed to use lseek64 */
2
3 #include <stdio.h> 
4 #include <sys/types.h>
5 #include <sys/stat.h>
6 #include <fcntl.h>
7 #include <parlib/arch/arch.h>
8 #include <unistd.h>
9 #include <errno.h>
10 #include <dirent.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include <parlib/parlib.h>
14
15 #include <utest/utest.h>
16
17 TEST_SUITE("FILE POSIX");
18
19 /* <--- Begin definition of test cases ---> */
20
21 bool test_openat(void)
22 {
23         int dfd = open("/dir1", O_RDONLY);
24         UT_ASSERT(dfd >= 0);
25
26         int ffd = openat(dfd, "f1.txt", O_RDWR);
27         UT_ASSERT(ffd >= 0, close(dfd));
28
29         close(ffd);
30         close(dfd);
31         return TRUE;
32 }
33
34 /* This tests opening a lot of files, enough to grow our file/chan table, then
35  * forking/spawning with DUP_FGRP.  It caused a panic at one point. */
36 bool test_open_lots_and_spawn(void)
37 {
38         char *p_argv[] = {0, 0, 0};
39         char *p_envp[] = {"LD_LIBRARY_PATH=/lib", 0};
40         int fd, pid;
41         const char *filename = "/bin/hello";
42
43         /* the kernel-internal number is 32 at the moment. */
44         for (int i = 0; i < 128; i++) {
45                 fd = open("hello.txt", O_RDONLY);
46                 UT_ASSERT(fd >= 0);
47         }
48         pid = sys_proc_create(filename, strlen(filename), p_argv, p_envp,
49                               PROC_DUP_FGRP);
50         UT_ASSERT(pid > 0);
51         sys_proc_destroy(pid, 0);
52         return TRUE;
53 }
54
55 /* <--- End definition of test cases ---> */
56
57 struct utest utests[] = {
58         UTEST_REG(openat),
59         UTEST_REG(open_lots_and_spawn),
60 };
61 int num_utests = sizeof(utests) / sizeof(struct utest);
62
63 int main(int argc, char *argv[])
64 {
65         // Run test suite passing it all the args as whitelist of what tests to run.
66         char **whitelist = &argv[1];
67         int whitelist_len = argc - 1;
68         RUN_TEST_SUITE(utests, num_utests, whitelist, whitelist_len);
69 }