113 lines
3.2 KiB
Python
Executable File
113 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from gradelib import *
|
|
|
|
r = Runner(save("jos.out"),
|
|
stop_breakpoint("readline"))
|
|
|
|
def matchtest(parent, name, *args, **kw):
|
|
def do_test():
|
|
r.match(*args, **kw)
|
|
test(5, name, parent=parent)(do_test)
|
|
|
|
@test(5, "internal FS tests [fs/test.c]")
|
|
def test_fs():
|
|
r.user_test("hello")
|
|
matchtest(test_fs, "fs i/o",
|
|
"FS can do I/O")
|
|
matchtest(test_fs, "check_bc",
|
|
"block cache is good")
|
|
matchtest(test_fs, "check_super",
|
|
"superblock is good")
|
|
matchtest(test_fs, "check_bitmap",
|
|
"bitmap is good")
|
|
matchtest(test_fs, "alloc_block",
|
|
"alloc_block is good")
|
|
matchtest(test_fs, "file_open",
|
|
"file_open is good")
|
|
matchtest(test_fs, "file_get_block",
|
|
"file_get_block is good")
|
|
matchtest(test_fs, "file_flush/file_truncate/file rewrite",
|
|
"file_flush is good",
|
|
"file_truncate is good",
|
|
"file rewrite is good")
|
|
|
|
@test(10, "testfile")
|
|
def test_testfile():
|
|
r.user_test("testfile")
|
|
matchtest(test_testfile, "serve_open/file_stat/file_close",
|
|
"serve_open is good",
|
|
"file_stat is good",
|
|
"file_close is good",
|
|
"stale fileid is good")
|
|
matchtest(test_testfile, "file_read",
|
|
"file_read is good")
|
|
matchtest(test_testfile, "file_write",
|
|
"file_write is good")
|
|
matchtest(test_testfile, "file_read after file_write",
|
|
"file_read after file_write is good")
|
|
matchtest(test_testfile, "open",
|
|
"open is good")
|
|
matchtest(test_testfile, "large file",
|
|
"large file is good")
|
|
|
|
@test(10, "spawn via spawnhello")
|
|
def test_spawn():
|
|
r.user_test("spawnhello")
|
|
r.match('i am parent environment 00001001',
|
|
'hello, world',
|
|
'i am environment 00001002',
|
|
'No runnable environments in the system!')
|
|
|
|
@test(5, "Protection I/O space")
|
|
def test_faultio():
|
|
r.user_test("spawnfaultio")
|
|
r.match('TRAP')
|
|
|
|
@test(10, "PTE_SHARE [testpteshare]")
|
|
def test_pte_share():
|
|
r.user_test("testpteshare")
|
|
r.match('fork handles PTE_SHARE right',
|
|
'spawn handles PTE_SHARE right')
|
|
|
|
@test(5, "PTE_SHARE [testfdsharing]")
|
|
def test_fd_share():
|
|
r.user_test("testfdsharing")
|
|
r.match('read in child succeeded',
|
|
'read in parent succeeded')
|
|
|
|
@test(10, "start the shell [icode]")
|
|
def test_icode():
|
|
r.user_test("icode")
|
|
r.match('icode: read /motd',
|
|
'This is /motd, the message of the day.',
|
|
'icode: spawn /init',
|
|
'init: running',
|
|
'init: data seems okay',
|
|
'icode: exiting',
|
|
'init: bss seems okay',
|
|
"init: args: 'init' 'initarg1' 'initarg2'",
|
|
'init: running sh',
|
|
'\$ ')
|
|
|
|
@test(15)
|
|
def test_testshell():
|
|
r.user_test("testshell", timeout=60)
|
|
r.match("shell ran correctly")
|
|
|
|
def gen_primes(n):
|
|
rest = range(2, n)
|
|
while rest:
|
|
yield rest[0]
|
|
rest = [n for n in rest if n % rest[0]]
|
|
|
|
@test(10)
|
|
def test_primespipe():
|
|
r.user_test("primespipe", stop_on_line("[0-9]{4}$"), timeout=120)
|
|
primes = set(gen_primes(1000))
|
|
nonprimes = set(range(1000)) - primes
|
|
r.match(no=["%d$" % np for np in nonprimes],
|
|
*["%d$" % p for p in primes])
|
|
|
|
run_tests()
|