QEMU检查器
大多数内核代码通过QEMU进行测试。我们引入QEMU检查器以协助测试内核。
QEMU检查器必须提供一个QEMU运行脚本和一个包含检查指令的输入文件。QEMU检查器运行该脚本并捕获其输出行。如果输出行匹配检查指令中指定的条件或正则表达式,检查器将采取相应操作。指令应写在输入文件的头部。
| 指令 | 动作 |
|---|---|
| // 检查-失败: <regex> | 记录此行并在退出时报告。 |
| // 检查-成功: <regex> | 记录此行并在退出时报告。 |
| // 断言失败:<regex> | 退出 runner 并报告失败。 |
| // 断言-成功: <regex> | 退出 runner 并报告成功。 |
| // 新建行超时: <数字> | 检查器读取下一行时超时。如果发生超时,报告失败。 |
| // 总超时: <数字> | 本次运行的总超时时间。 |
例子
假设我们有一个用于测试的内核镜像,名为blueos_foo_test。首先我们需要为它生成一个qemu运行脚本。
gen_qemu_runner("runner_for_blueos_foo_test") {
img = ":blueos_foo_test"
qemu = "$qemu_exe"
board = "$board"
}
然后,我们为上述runner制作一个checker。
run_qemu_checker("check_blueos_foo_test") {
img = ":blueos_foo_test"
runner = ":runner_for_blueos_foo_test"
checker = "//kernel/kernel/tests/integration_test.rs"
}
必须指出,上述两个目标必须放在同一个 BUILD.gn 中。检查指令应放在 integration_test.rs 的头部。
// NEWLINE-TIMEOUT: 15
// ASSERT-SUCC: Kernel test end.
// ASSERT-FAIL: Backtrace in Panic.*
在CI中集成检查
CI runner 仅运行两个顶层目标,default 和 check_all。要在 CI 期间运行检查,你必须将你的检查器目标放入顶层 BUILD.gn 中 check_all 组的 deps 里。
group("check_all") {
deps = [ ":check_kernel" ]
}