|
|
3 weeks ago | |
|---|---|---|
| .. | ||
| blocklists | 3 weeks ago | |
| runner | 1 month ago | |
| .gitignore | 1 month ago | |
| Makefile | 3 weeks ago | |
| README.md | 1 month ago | |
| disable_compile_gvisor.sh | 3 weeks ago | |
| download_tests.sh | 1 month ago | |
| enable_compile_gvisor.sh | 3 weeks ago | |
| monitor_test_results.sh | 3 weeks ago | |
| run_tests.sh | 3 weeks ago | |
| whitelist.txt | 3 weeks ago | |
这是DragonOS项目中用于运行gvisor系统调用测试的自动化工具。
测试用例仓库:https://cnb.cool/DragonOS-Community/test-suites
gvisor是Google开发的容器运行时沙箱,它包含了大量的系统调用兼容性测试。这些测试可以用来验证操作系统的系统调用实现是否符合Linux标准。
本测试框架默认启用白名单模式,只运行whitelist.txt文件中指定的测试程序,这样可以逐步验证DragonOS的系统调用实现。同时,每个测试程序内部的测试用例可以通过blocklists/目录中的黑名单文件进行过滤。
# 进入gvisor测试目录
cd user/apps/tests/syscall/gvisor
# 运行白名单中的测试(默认行为,会自动下载测试套件)
make test
# 运行所有测试(包括非白名单)
make run ARGS="--no-whitelist"
make download
# 或者直接运行脚本
./download_tests.sh
make list
通过Makefile可以方便地运行测试:
# 显示所有可用命令
make help
# 构建并安装测试运行器
make
# 下载测试套件
make download
# 运行白名单中的测试(自动下载测试套件)
make test
# 列出所有可用测试
make list
# 运行测试并传递参数
make run ARGS="-v"
make run ARGS="epoll_test"
make run ARGS="-j 4 --no-whitelist"
# 清理测试结果
make clean
# 运行特定测试
make run ARGS="epoll_test"
# 使用模式匹配运行多个测试
make run ARGS="socket*"
# 详细输出模式
make run ARGS="-v"
# 并行运行4个测试
make run ARGS="-j 4"
# 禁用白名单,运行所有测试程序
make run ARGS="--no-whitelist"
# 忽略所有blocklist文件
make run ARGS="--no-blocklist"
# 设置超时时间为60秒
make run ARGS="-t 60"
# 组合多个参数
make run ARGS="-v -j 2 epoll_test"
whitelist.txt 文件# 开头)示例:
# 核心系统调用测试
socket_test
epoll_test
fcntl_test
ioctl_test
# 文件系统测试
open_test
stat_test
mmap_test
对于每个测试程序,可以创建blocklist文件来屏蔽特定的测试用例:
blocklists/ 目录下创建与测试程序同名的文件示例blocklist文件(blocklists/socket_test):
# 屏蔽IPv6相关测试(DragonOS暂不支持IPv6)
SocketTest.IPv6*
SocketTest.IPv6Socket*
# 屏蔽需要特殊权限的测试
SocketTest.PrivilegedSocket
# 屏蔽已知不稳定的测试
SocketTest.UnimplementedFeature
* 匹配任意字符)# 开头TestSuite.TestNameBlocklist用于屏蔽某些在当前环境下不适用或不稳定的测试子用例。这对于逐步完善系统调用支持非常有用。
blocklists/ 目录下--extra-blocklist 参数)假设我们要添加对 epoll_test 的支持:
添加到白名单 (whitelist.txt):
epoll_test
创建blocklist (blocklists/epoll_test):
# 屏蔽超时测试(需要更精确的时间控制)
EpollTest.Timeout*
# 屏蔽循环测试(可能导致死锁)
EpollTest.CycleOfOneDisallowed
EpollTest.CycleOfThreeDisallowed
# 屏蔽信号竞争测试
# UnblockWithSignal contains races. Better not to enable it.
EpollTest.UnblockWithSignal
运行测试:
# 使用Makefile运行所有白名单测试(会自动应用blocklist)
make test
# 只运行特定测试
make run ARGS="epoll_test"
# 查看详细输出
make run ARGS="-v epoll_test"
user/apps/tests/syscall/gvisor/
├── download_tests.sh # 下载脚本
├── Makefile # Make构建文件
├── README.md # 说明文档
├── whitelist.txt # 测试程序白名单
├── runner/ # Rust测试运行器
│ ├── Cargo.toml
│ ├── Makefile
│ └── src/
│ ├── main.rs
│ └── lib_sync.rs
├── blocklists/ # Blocklist目录
│ ├── README.md # Blocklist说明
│ └── epoll_test # 示例blocklist
├── tests/ # 测试可执行文件(下载后生成)
└── results/ # 测试结果(运行后生成)
├── failed_cases.txt # 失败用例列表
├── test_report.txt # 测试报告
└── *.output # 各测试的详细输出
SYSCALL_TEST_WORKDIR: 测试工作目录,默认为/tmp/gvisor_testsTEST_TIMEOUT: 单个测试的超时时间,默认300秒RUSTFLAGS: Rust编译器标志测试完成后会生成:
results/test_report.txt - 包含统计信息和失败用例results/failed_cases.txt - 仅包含失败的测试名称results/*.output - 每个测试的详细输出# 构建Rust测试运行器
make build
# 安装到指定目录
make install
-j 参数(谨慎使用)make test 时会自动下载测试套件make test 或 make list 时会自动下载所需的测试套件# 检查网络连接
wget --spider https://cnb.cool/DragonOS-Community/test-suites/-/releases/download/release_20250626/gvisor-syscalls-tests.tar.xz
# 手动下载并放置
wget -O gvisor-syscalls-tests.tar.xz https://cnb.cool/DragonOS-Community/test-suites/-/releases/download/release_20250626/gvisor-syscalls-tests.tar.xz
# 重新下载文件
rm -f gvisor-syscalls-tests.tar.xz
./download_tests.sh
如果发现测试相关的问题或有改进建议,请:
本测试框架代码遵循GPLv2许可证。gvisor测试套件本身遵循其原始许可证。