1 个不稳定版本
0.5.1 | 2024 年 7 月 15 日 |
---|
#175 在 测试
1,658 每月下载量
用于 slatedb
43KB
644 行
fail-rs
文档.
Rust 的失败点实现。
失败点是代码植入,允许在运行时动态地注入错误和其他行为,主要用于测试目的。失败点灵活,可以配置以表现出各种行为,包括恐慌、提前返回和休眠。它们可以通过程序和环境进行控制,并且可以条件性和概率性地触发。
此包受 FreeBSD 的 失败点 启发。
用法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
fail = "0.5"
现在,您可以从 fail
包中导入 fail_point!
宏,并使用它注入动态失败。此宏默认禁用失败点生成,可以在相关位置通过 failpoints
Cargo 功能启用。
以下是一个使用失败点模拟 I/O 潜在的简单程序的示例
use fail::{fail_point, FailScenario};
fn do_fallible_work() {
fail_point!("read-dir");
let _dir: Vec<_> = std::fs::read_dir(".").unwrap().collect();
// ... do some work on the directory ...
}
fn main() {
let scenario = FailScenario::setup();
do_fallible_work();
scenario.teardown();
println!("done");
}
在这里,程序对 read_dir
的结果调用 unwrap
,这是一个返回 Result
的函数。换句话说,这个特定程序期望这个对 read_dir
的调用总是成功。实际上它几乎总是这样,这使得测试当 read_dir
失败时该程序的行为变得困难。通过在程序中植入失败点,我们可以假装 read_dir
失败,导致后续的 unwrap
潜在,并允许我们观察程序在失败条件下的行为。
程序正常运行时仅打印 "完成"
$ cargo run --features fail/failpoints
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/failpointtest`
done
但是,通过设置 FAILPOINTS
变量,我们可以看到如果 read_dir
失败会发生什么
FAILPOINTS=read-dir=panic cargo run --features fail/failpoints
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/failpointtest`
thread 'main' panicked at 'failpoint read-dir panic', /home/ubuntu/.cargo/registry/src/github.com-1ecc6299db9ec823/fail-0.2.0/src/lib.rs:286:25
note: Run with `RUST_BACKTRACE=1` for a backtrace.
有关更多信息,请参阅 API 文档。
待办事项
通过 HTTP API 触发失败点计划中,但尚未实现。
依赖项
~315–445KB