2021-05-23 22:24:02 +08:00

194 lines
6.7 KiB
Python
Executable File

#!/usr/bin/env python3
import re
from gradelib import *
r = Runner(save("chcore.out"),
stop_breakpoint("break_point"))
@test(0, "running chcore")
def test_chcore():
r.run_qemu(10)
@test(5, parent=test_chcore)
def test_smp():
line = r.match("\[INFO\] AP 1 is activated!")
line = r.match_line(line, "\[INFO\] AP 2 is activated!")
line = r.match_line(line, "\[INFO\] AP 3 is activated!")
r.match_line(line, "\[INFO\] All 4 CPUs are active")
@test(5, parent=test_chcore)
def test_mutex():
r.match("pass tst_mutex")
@test(5, parent=test_chcore)
def test_big_lock():
r.match("pass tst_big_lock")
@test(10, parent=test_chcore)
def test_cooperative():
r.match("pass tst_sched_cooperative")
@test(5, parent=test_chcore)
def test_preemptive():
r.match("pass tst_sched_preemptive")
@test(5, parent=test_chcore)
def test_affinity():
r.match("pass tst_sched_affinity")
@test(5, parent=test_chcore)
def test_sched():
r.match("pass tst_sched")
@test(0, parent=test_sched)
def test_yield_single():
r.make_kernel("yield_single")
r.run_qemu(10)
@test(5, parent=test_yield_single)
def test_yield_single_output():
line = r.match("Hello, I am thread 0")
line = r.match_line(line,"Hello, I am thread 1")
line = r.match_line(line,"Iteration 1, thread 0, cpu 0")
line = r.match_line(line,"Iteration 1, thread 1, cpu 0")
line = r.match_line(line,"Iteration 2, thread 0, cpu 0")
line = r.match_line(line,"Iteration 2, thread 1, cpu 0")
line = r.match_line(line,"Iteration 3, thread 0, cpu 0")
line = r.match_line(line,"Iteration 3, thread 1, cpu 0")
line = r.match_line(line,"Iteration 4, thread 0, cpu 0")
line = r.match_line(line,"Iteration 4, thread 1, cpu 0")
line = r.match_line(line,"Iteration 5, thread 0, cpu 0")
line = r.match_line(line,"Iteration 5, thread 1, cpu 0")
line = r.match_line(line,"Iteration 6, thread 0, cpu 0")
line = r.match_line(line,"Iteration 6, thread 1, cpu 0")
line = r.match_line(line,"Iteration 7, thread 0, cpu 0")
line = r.match_line(line,"Iteration 7, thread 1, cpu 0")
line = r.match_line(line,"Iteration 8, thread 0, cpu 0")
line = r.match_line(line,"Iteration 8, thread 1, cpu 0")
line = r.match_line(line,"Iteration 9, thread 0, cpu 0")
line = r.match_line(line,"Iteration 9, thread 1, cpu 0")
line = r.match_line(line,"Iteration 10, thread 0, cpu 0")
r.match_line(line,"Iteration 10, thread 1, cpu 0")
@test(0, parent=test_yield_single_output)
def test_yield_spin():
r.make_kernel("yield_spin")
r.run_qemu(10)
@test(5, parent=test_yield_spin)
def test_yield_spin_output():
r.match("Successfully regain the control!")
@test(0, parent=test_yield_spin_output)
def test_yield_multi():
r.make_kernel("yield_multi")
r.run_qemu(10)
@test(5, parent=test_yield_multi)
def test_yield_multi_output():
line = r.match("Hello, I am thread 0 on cpu 0")
line = r.match_line(line, "Hello, I am thread 1 on cpu 1")
line = r.match_line(line, "Hello, I am thread 2 on cpu 2")
r.match_line(line, "Hello, I am thread 3 on cpu 3")
@test(0, parent=test_yield_multi_output)
def test_yield_aff():
r.make_kernel("yield_aff")
r.run_qemu(10)
@test(5, parent=test_yield_aff)
def test_yield_aff_output():
line = r.match("Main thread on cpu 0")
line = r.match_line(line, "Main thread set affinity 3")
line = r.match_line(line, "Main thread affinity 3")
r.match_line(line, "Main thread exits on cpu_id: 3")
@test(0, parent=test_yield_aff_output)
def test_yield_multi_aff():
r.make_kernel("yield_multi_aff")
r.run_qemu(20)
@test(5, parent=test_yield_multi_aff)
def test_yield_multi_aff_output():
line = r.match("Iteration 1, thread 0, cpu 0, aff 0")
line = r.match_line(line, "Iteration 1, thread 1, cpu 1, aff 1")
line = r.match_line(line, "Iteration 1, thread 2, cpu 2, aff 2")
line = r.match_line(line, "Iteration 1, thread 3, cpu 1, aff 1")
line = r.match_line(line, "Iteration 2, thread 0, cpu 2, aff 2")
line = r.match_line(line, "Iteration 2, thread 1, cpu 3, aff 3")
line = r.match_line(line, "Iteration 2, thread 2, cpu 0, aff 0")
line = r.match_line(line, "Iteration 2, thread 3, cpu 2, aff 2")
line = r.match_line(line, "Iteration 3, thread 0, cpu 3, aff 3")
line = r.match_line(line, "Iteration 3, thread 1, cpu 0, aff 0")
line = r.match_line(line, "Iteration 3, thread 2, cpu 1, aff 1")
r.match_line(line, "Iteration 3, thread 3, cpu 3, aff 3")
@test(0, parent=test_yield_multi_aff_output)
def test_spawn_basic():
r.make_kernel("spawn_basic")
r.run_qemu(10)
@test(10, parent=test_spawn_basic)
def test_spawn_basic_output():
line = r.match("\[Child\] Child on cpu 1")
line = r.match_line(line, "\[Child\] argv: 0x800f008, argv\[0\]: 0x800ffc0")
line = r.match_line(line, "\[Child\] info_page_addr: 0x0")
line = r.match_line(line, "\[Child\] transfered_cap: 0")
r.match_line(line, "\[Child\] Bye")
@test(0, parent=test_spawn_basic_output)
def test_spawn_info():
r.make_kernel("spawn_info")
r.run_qemu(10)
@test(5, parent=test_spawn_info)
def test_spawn_info_output():
line = r.match("\[Child\] Child on cpu 2")
line = r.match_line(line, "\[Child\] argv: 0x800f008, argv\[0\]: 0x800ffc0")
line = r.match_line(line, "\[Child\] info_page_addr: 0x100000000")
line = r.match_line(line, "\[Child\] The spawn\(\) seems ok\?")
line = r.match_line(line, "\[Child\] Uif!tqbxo\)\*!tffnt!pl@")
line = r.match_line(line, "\[Child\] Bye")
line = r.match_line(line, "\[Parent\] Are you ok\.\.\.")
r.match_line(line, "\[Parent\] Bye")
@test(0, parent=test_spawn_info_output)
def test_ipc_data():
r.make_kernel("ipc_data")
r.run_qemu(10)
@test(10, parent=test_ipc_data)
def test_ipc_data_output():
line = r.match("\[Parent\] create the server process\.")
line = r.match_line(line, "\[Client\] Return 4950!")
line = r.match_line(line, "\[Client\] exit")
r.match_line(line, "\[Server\] exit")
@test(0, parent=test_ipc_data_output)
def test_ipc_mem():
r.make_kernel("ipc_mem")
r.run_qemu(10)
@test(5, parent=test_ipc_mem)
def test_ipc_mem_output():
line = r.match("\[Parent\] create the server process\.")
line = r.match_line(line, "\[Server\] read deadbeef")
line = r.match_line(line, "\[Client\] exit")
r.match_line(line, "\[Server\] exit")
@test(0, parent=test_ipc_mem_output)
def test_ipc_reg():
r.make_kernel("ipc_reg")
r.run_qemu(10)
@test(5, parent=test_ipc_reg)
def test_ipc_reg_output():
line = r.match("\[Parent\] create the server process\.")
line = r.match_line(line, "\[Client\] Return 526!")
line = r.match_line(line, "\[Client\] exit")
r.match_line(line, "\[Server\] exit")
run_tests()