2 个版本
0.0.0 | 2019 年 8 月 6 日 |
---|---|
0.0.0-sol15 | 2019 年 7 月 27 日 |
#15 在 #corpus
47KB
497 行
对 Libra 的模糊测试支持
本软件包包含对模糊测试 Libra 目标的支持。该支持包括
- 使用
proptest
生成语料库 - 使用
cargo test
自动运行失败的示例
先决条件
如果尚未安装,请安装 cargo-fuzz
:cargo install cargo-fuzz
.
模糊测试目标
要列出已知模糊测试目标,请运行 cargo run list
.
为了有效,模糊测试需要现有输入的语料库。本软件包包含使用 proptest
生成语料库的支持。使用 cargo run generate <target>
生成语料库。
一旦生成了语料库,模糊测试器就可以使用了:运行 cargo run fuzz <target>
.
有关更多选项,请运行 cargo run -- --help
.
添加新的目标
模糊测试目标位于 src/fuzz_targets/
中。添加新的目标涉及创建一个新的类型并为其实现 FuzzTargetImpl
。
有关示例,请参阅 src/fuzz_targets/
中的现有实现。
请记得将您的目标添加到 ALL_TARGETS
中,位于 src/fuzz_targets.rs
。完成此操作后,cargo run list
应该会列出您的新目标。
调试和测试工件
如果fuzzer找到一个失败的工件,它将将其保存到 fuzz
目录中的文件,并打印其路径。要将此工件添加到测试套件,将其复制到 artifacts/<target>/
目录中的文件。
cargo test
现在将测试反序列化器对新工件。测试在第一次使用时可能会失败。
请注意,cargo test
默认情况下在每个单独的进程中运行每个测试以隔离失败和内存使用;如果您正在附加调试器并运行单个测试,将 NO_FORK=1
设置为禁用分叉。
一旦反序列化器被修复,将工件检入到 artifacts/<target>/
目录。然后,该工件将作为回归测试在 cargo test
运行时执行。
依赖项
~73MB
~1.5M SLoC