summaryrefslogtreecommitdiff
path: root/grade-lab-syscall
diff options
context:
space:
mode:
Diffstat (limited to 'grade-lab-syscall')
-rwxr-xr-xgrade-lab-syscall69
1 files changed, 69 insertions, 0 deletions
diff --git a/grade-lab-syscall b/grade-lab-syscall
new file mode 100755
index 0000000..18d3b72
--- /dev/null
+++ b/grade-lab-syscall
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+
+import re
+from gradelib import *
+
+r = Runner(save("xv6.out"))
+
+@test(5, "answers-syscall.txt")
+def test_answers():
+ # just a simple sanity check, will be graded manually
+ check_answers("answers-syscall.txt")
+
+@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()
+
+
+