本指南详细介绍了在模拟的 Fuchsia 映像上运行 Rust 编译器测试套件的过程。
前提条件
在 Fuchsia 上运行 Rust 测试套件之前,您需要为 Fuchsia 构建自定义 Rust 工具链。运行测试套件不需要构建 Fuchsia 映像。
运行 Rust 测试套件
(可选)设置自定义临时目录:
export TEST_TOOLCHAIN_TMP_DIR=TEMP_DIR如果未设置临时目录,则该目录将命名为
tmp~,并将在rust_toolchain.py旁边创建。如果您使用自定义临时目录,则需要在用于与同一测试环境交互的每个 shell 中将TEST_TOOLCHAIN_TMP_DIR设置为同一路径。您可以在不同的 shell 中将
TEST_TOOLCHAIN_TMP_DIR设置为不同的值,以便同时管理多个测试环境。确保
zlib可供lld访问DEV_ROOT=DEV_ROOT export LIBRARY_PATH=$LIBRARY_PATH:$DEV_ROOT/install/zlib/lib启动测试环境:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN start \ --rust-build $DEV_ROOT/rust/build/fuchsia-rust \ --sdk $DEV_ROOT/cipd/sdk \ --target x86_64|aarch64-unknown-fuchsia \ --toolchain-dir $DEV_ROOT/rust运行 Rust 测试套件:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.py( \ source $DEV_ROOT/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/fuchsia-config.toml \ --stage=2 \ test TEST_SUITE \ --target x86_64|aarch64-unknown-fuchsia \ --run=always \ --jobs 1 \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/sdk/arch/x64|a64/lib \ --test-args --target-rustcflags \ --test-args -Cpanic=abort \ --test-args --target-rustcflags \ --test-args -Zpanic_abort_tests \ --test-args --remote-test-client \ --test-args $TEST_TOOLCHAIN \ )测试结果将打印到标准输出。
停止测试环境:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN stop
调查测试失败情况
运行测试套件会生成许多日志和其他制品,有助于调查失败的测试套件测试。如果在启动测试环境时使用了 --verbose 标志,则可以在 fuchsia-test-runner.py stop 期间将这些内容转储到标准输出。
| 路径 | 说明 |
|---|---|
emulator_log |
正在运行的模拟器的日志。此文件通常包含有关测试崩溃或无法启动的详细信息。 |
ffx_daemon_log |
正在运行的 ffx 守护程序的日志。 |
package_server_log |
正在运行的 pm 服务器的日志。 |
test_env.json |
测试环境的配置设置。这有助于找到特定详细信息,例如正在使用的 libstd 和 libtest,或模拟器的地址。 |
vdl_output |
已启动的设备 proto。 |
ffx_isolate |
ffx 的隔离环境。您可以在此处找到 ffx 配置设置。 |
output |
来自 ffx test 的原始输出,适用于每个测试套件测试。每个测试目录都包含收到的有关测试执行的所有详细信息 ffx。这些信息有助于在 emulator_log 中找到特定测试的相关部分。 |
packages |
每个测试的软件包阶段。 |
rust-testing |
提供服务的代码库目录。 |
ssh |
测试运行程序用于访问正在运行的模拟器的 SSH 密钥。这些凭据可用于通过 ssh -i ssh/fuchsia_ed25519 EMULATOR_ADDRESS 登录模拟器。模拟器地址可在 test_env.json 中找到。 |
调试测试失败问题
- 读取测试的标准输出和错误。此文件位于测试的
output目录中,并且还会由 compiletest 报告。 - 检查详细的模拟器日志。您可以在
emulator_log中找到这些测试,方法是搜索与output目录名称匹配的测试名称。 使用
zxdb调试测试。您可以通过运行以下命令轻松附加到测试:DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.pypython3 $TEST_TOOLCHAIN debug \ --rust-src $DEV_ROOT/rust \ --test TEST_PATH然后,设置任何相关的断点,并运行以下测试:
DEV_ROOT=DEV_ROOT TEST_TOOLCHAIN=$DEV_ROOT/rust/src/ci/docker/scripts/fuchsia-test-runner.py( \ source $DEV_ROOT/fuchsia-env.sh && \ $DEV_ROOT/rust/x.py \ --config $DEV_ROOT/fuchsia-config.toml \ --stage=2 \ test TEST_SUITE \ --target x86_64|aarch64-fuchsia \ --run=always \ --jobs 1 \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/sdk/arch/x64|a64/sysroot/lib \ --test-args --target-rustcflags \ --test-args -L \ --test-args --target-rustcflags \ --test-args $DEV_ROOT/cipd/sdk/arch/x64|a64/lib \ --test-args --target-rustcflags \ --test-args -Cpanic=abort \ --test-args --target-rustcflags \ --test-args -Zpanic_abort_tests \ --test-args --remote-test-client \ --test-args $TEST_TOOLCHAIN \ --rustc-args -Cdebuginfo=2 \ --rustc-args -Copt-level=0 \ --rustc-args -Cstrip=none \ )而
zxdb会捕获所有崩溃,并在您定义的任何断点处中断。 此命令与上述命令相同,但添加了用于调试的-C debuginfo=2 -C opt-level=0标志。
提示
为了缩短迭代周期,您可以运行带有 -vv 实参的 x.py test,让 compiletest 打印其在整个过程中运行的确切命令。您可以运行在测试运行之前立即打印的 compiletest 调用,快速重新运行单个测试。