1 #[test]
brk()2 fn brk() {
3 unsafe {
4 let start = dbg!(crate::brk(0)).unwrap();
5 let end = start + 4 * 1024 * 1024;
6 assert_eq!(dbg!(crate::brk(end)), Ok(end));
7 }
8 }
9
10 #[test]
chdir()11 fn chdir() {
12 //TODO: Verify CWD
13 assert_eq!(dbg!(crate::chdir("file:/")), Ok(0));
14 assert_eq!(dbg!(crate::chdir("file:/root")), Ok(0));
15 }
16
17 //TODO: chmod
18
19 #[test]
clone()20 fn clone() {
21 let expected_status = 42;
22 let pid_res = unsafe { crate::clone(0) };
23 if pid_res == Ok(0) {
24 crate::exit(expected_status).unwrap();
25 panic!("failed to exit");
26 } else {
27 let pid = dbg!(pid_res).unwrap();
28 let mut status = 0;
29 assert_eq!(dbg!(crate::waitpid(pid, &mut status, 0)), Ok(pid));
30 assert_eq!(dbg!(crate::wifexited(status)), true);
31 assert_eq!(dbg!(crate::wexitstatus(status)), expected_status);
32 }
33 }
34
35 //TODO: close
36
37 #[test]
clock_gettime()38 fn clock_gettime() {
39 let mut tp = crate::TimeSpec::default();
40 assert_eq!(dbg!(
41 crate::clock_gettime(crate::CLOCK_MONOTONIC, &mut tp)
42 ), Ok(0));
43 assert_ne!(dbg!(tp), crate::TimeSpec::default());
44
45 tp = crate::TimeSpec::default();
46 assert_eq!(dbg!(
47 crate::clock_gettime(crate::CLOCK_REALTIME, &mut tp)
48 ), Ok(0));
49 assert_ne!(dbg!(tp), crate::TimeSpec::default());
50 }
51
52 //TODO: dup
53
54 //TODO: dup2
55
56 //TODO: exit (handled by clone?)
57
58 //TODO: fchmod
59
60 //TODO: fcntl
61
62 #[test]
fexec()63 fn fexec() {
64 let name = "/bin/ls";
65
66 let fd = dbg!(
67 crate::open(name, crate::O_RDONLY | crate::O_CLOEXEC)
68 ).unwrap();
69
70 let args = &[
71 [name.as_ptr() as usize, name.len()]
72 ];
73
74 let vars = &[];
75
76 let pid_res = unsafe { crate::clone(0) };
77 if pid_res == Ok(0) {
78 crate::fexec(fd, args, vars).unwrap();
79 panic!("failed to fexec");
80 } else {
81 assert_eq!(dbg!(crate::close(fd)), Ok(0));
82
83 let pid = dbg!(pid_res).unwrap();
84 let mut status = 0;
85 assert_eq!(dbg!(crate::waitpid(pid, &mut status, 0)), Ok(pid));
86 assert_eq!(dbg!(crate::wifexited(status)), true);
87 assert_eq!(dbg!(crate::wexitstatus(status)), 0);
88 }
89 }
90
91 #[test]
fmap()92 fn fmap() {
93 use std::slice;
94
95 let fd = dbg!(
96 crate::open(
97 "/tmp/syscall-tests-fmap",
98 crate::O_CREAT | crate::O_RDWR | crate::O_CLOEXEC
99 )
100 ).unwrap();
101
102 let map = unsafe {
103 slice::from_raw_parts_mut(
104 dbg!(
105 crate::fmap(fd, &crate::Map {
106 offset: 0,
107 size: 128,
108 flags: crate::PROT_READ | crate::PROT_WRITE
109 })
110 ).unwrap() as *mut u8,
111 128
112 )
113 };
114
115 // Maps should be available after closing
116 assert_eq!(dbg!(crate::close(fd)), Ok(0));
117
118 for i in 0..128 {
119 map[i as usize] = i;
120 assert_eq!(map[i as usize], i);
121 }
122
123 //TODO: add msync
124 unsafe {
125 assert_eq!(dbg!(
126 crate::funmap(map.as_mut_ptr() as usize)
127 ), Ok(0));
128 }
129 }
130