summaryrefslogtreecommitdiff
path: root/grade-lab-syscall
blob: 3f6abddfab8279999a4ad9de6f7b1e88befb9c7e (plain)
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
60
61
62
63
64
#!/usr/bin/env python3

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 -> 961')
    r.match('^\\d+: syscall read -> 321')
    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 -> 961')
    r.match('^\\d+: syscall read -> 321')
    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()