87 lines
2.1 KiB
Python
Executable File
87 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import re
|
|
from gradelib import *
|
|
|
|
r = Runner(save("xv6.out"))
|
|
|
|
@test(5, "sleep, no arguments")
|
|
def test_sleep_no_args():
|
|
r.run_qemu(shell_script([
|
|
'sleep'
|
|
]))
|
|
r.match(no=["exec .* failed", "$ sleep\n$"])
|
|
|
|
@test(5, "sleep, returns")
|
|
def test_sleep_no_args():
|
|
r.run_qemu(shell_script([
|
|
'sleep',
|
|
'echo OK'
|
|
]))
|
|
r.match('^OK$', no=["exec .* failed", "$ sleep\n$"])
|
|
|
|
@test(10, "sleep, makes syscall")
|
|
def test_sleep():
|
|
r.run_qemu(shell_script([
|
|
'sleep 10',
|
|
'echo FAIL'
|
|
]), stop_breakpoint('sys_sleep'))
|
|
r.match('\\$ sleep 10', no=['FAIL'])
|
|
|
|
@test(20, "pingpong")
|
|
def test_pingpong():
|
|
r.run_qemu(shell_script([
|
|
'pingpong', 'echo OK'
|
|
]))
|
|
r.match('^\\d+: received ping$', '^\\d+: received pong$', '^OK$')
|
|
|
|
@test(20, "primes")
|
|
def test_primes():
|
|
r.run_qemu(shell_script([
|
|
'primes', 'echo OK'
|
|
]))
|
|
args = ['prime %d' % i for i in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]]
|
|
args.append('^OK$')
|
|
r.match(*args)
|
|
|
|
@test(10, "find, in current directory")
|
|
def test_find_curdir():
|
|
fn = random_str()
|
|
r.run_qemu(shell_script([
|
|
'echo > %s' % fn,
|
|
'find . %s' % fn
|
|
]))
|
|
r.match('./%s' % fn)
|
|
|
|
@test(10, "find, recursive")
|
|
def test_find_recursive():
|
|
needle = random_str()
|
|
dirs = [random_str() for _ in range(3)]
|
|
r.run_qemu(shell_script([
|
|
'mkdir %s' % dirs[0],
|
|
'echo > %s/%s' % (dirs[0], needle),
|
|
'mkdir %s/%s' % (dirs[0], dirs[1]),
|
|
'echo > %s/%s/%s' % (dirs[0], dirs[1], needle),
|
|
'mkdir %s' % dirs[2],
|
|
'echo > %s/%s' % (dirs[2], needle),
|
|
'find . %s' % needle
|
|
]))
|
|
r.match('./%s/%s' % (dirs[0], needle),
|
|
'./%s/%s/%s' % (dirs[0], dirs[1], needle),
|
|
'./%s/%s' % (dirs[2], needle))
|
|
|
|
@test(19, "xargs")
|
|
def test_xargs():
|
|
r.run_qemu(shell_script([
|
|
'sh < xargstest.sh',
|
|
'echo DONE',
|
|
], 'DONE'))
|
|
matches = re.findall("hello", r.qemu.output)
|
|
assert_equal(len(matches), 3, "Number of appearances of 'hello'")
|
|
|
|
@test(1, "time")
|
|
def test_time():
|
|
check_time()
|
|
|
|
run_tests()
|