-
Notifications
You must be signed in to change notification settings - Fork 0
/
grade-lab-syscall
executable file
·62 lines (50 loc) · 1.43 KB
/
grade-lab-syscall
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python
import re
from gradelib import *
r = Runner(save("xv6.out"))
@test(5, "trace 32 grep")
def test_trace_32_grep():
r.run_qemu(shell_script([
'trace 32 grep hello README'
]))
r.match('^\\d+: syscall read -> 1023')
r.match('^\\d+: syscall read -> 966')
r.match('^\\d+: syscall read -> 0')
@test(5, "trace all grep")
def test_trace_all_grep():
r.run_qemu(shell_script([
'trace 2147483647 grep hello README'
]))
r.match('^\\d+: syscall trace -> 0')
r.match('^\\d+: syscall exec -> 3')
r.match('^\\d+: syscall open -> 3')
r.match('^\\d+: syscall read -> 1023')
r.match('^\\d+: syscall read -> 966')
r.match('^\\d+: syscall read -> 0')
r.match('^\\d+: syscall close -> 0')
@test(5, "trace nothing")
def test_trace_nothing():
r.run_qemu(shell_script([
'grep hello README'
]))
r.match(no=[".* syscall .*"])
@test(5, "trace children")
def test_trace_children():
r.run_qemu(shell_script([
'trace 2 usertests forkforkfork'
]))
r.match('3: syscall fork -> 4')
r.match('^5: syscall fork -> \\d+')
r.match('^6: syscall fork -> \\d+')
r.match('^\\d+: syscall fork -> -1')
r.match('^ALL TESTS PASSED')
@test(14, "sysinfotest")
def test_sysinfotest():
r.run_qemu(shell_script([
'sysinfotest'
]))
r.match('^sysinfotest: OK', no=[".* FAIL .*"])
@test(1, "time")
def test_time():
check_time()
run_tests()