Std 白名单测试
cargo xtask test 是 axbuild 在 host 端执行的 Rust std 测试入口。它不是 cargo test --workspace:TGOSKits workspace 中混合了大量 #![no_std] 内核 crate,它们无法在标准 cargo test 环境下运行;盲目全量测试会因平台/特性不兼容大面积失败。本命令只测试一份显式维护的白名单,普通 package 执行 cargo test -p <package>,需要 host adapter 的 package 执行仓库定义的固定 feature profile。这样纯算法库以及可通过正式 host 边界测试的内核组件都能保持回归覆盖。
测试设计与 Rust 布局统一遵循仓库 test-quality:源码末尾的单元测试验证算法和业务逻辑,{crate}/tests/ 只通过公开 API 验证 完整能力,不通过 #[path] 或其他源码包含方式引入生产实现。白名单决定执行哪些软件包,不要求为新增软件包复制固定实例测试。
1. 白名单边界
TGOSKits workspace 目前包含近 150 个 crate,其中绝大多数是面向裸机/内核环境的 #![no_std] crate,依赖 axcpu、特定 target triple 和明确的内核 feature 组合才能编译。直接对全 workspace 跑 cargo test 会触发两类系统性失败:
no_stdcrate 无法在 std 环境编译:这些 crate 的#[cfg(test)]模块通常不存在,或依赖内核特性。- target/feature 不匹配:许多 crate 需要
--target aarch64-unknown-none-softfloat和特定 feature 组合才能编译,host 端cargo test无法满足。
白名单机制把 host 可测的 crate(算法库、工具库、序列化库等)显式列出,CI 对这一固定集合做全量回归,既保证覆盖又避免噪声。
2. 执行架构
标准测试将白名单解析和逐包执行分开,以便在 host 环境稳定验证明确支持的 crate。下图对应 run_std_test_command() 的主要数据流。
3. 白名单数据
白名单位于 scripts/test/std_crates.csv,格式极简——每行一个包名,首行为表头 package:
package
aarch64_sysreg
ax-io
ax-sync
irq-framework
memory_addr
rsext4
scope-local
...
当前白名单覆盖架构寄存器、I/O 抽象、锁原语、内存地址、文件系统、调度器、中断框架以及 Starry kernel 等可在 host 端测试的组件。
3.1 解析校验
parse_std_crates_csv 对 CSV 内容执行严格校验,确保白名单与 workspace 实际状态一致:
| 校验项 | 规则 | 失败行为 |
|---|---|---|