1.9 在 CI 中模糊测试
GitHub Actions 冒烟测试
译文 · 基于 Rust Fuzz Book
在 CI 中模糊测试
原文链接: https://rust-fuzz.github.io/book/cargo-fuzz/ci.html
在 CI 中短时间构建并运行模糊测试目标,作为冒烟测试会很有帮助。
若你使用的 CI 提供商未列于此,欢迎提交 PR 补充。
GitHub Workflows
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| name: Smoke-Test Fuzz Targets
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
fuzz:
runs-on: ubuntu-latest
env:
# 要安装和使用的 cargo-fuzz 版本。
CARGO_FUZZ_VERSION: 0.12.0
# 运行模糊测试目标的秒数。300 秒 = 5 分钟。
FUZZ_TIME: 300
strategy:
matrix:
include:
# TODO: 在此列出你的模糊测试目标。
- fuzz_target: my_first_fuzz_target
- fuzz_target: my_second_fuzz_target
# 等等...
steps:
- uses: actions/checkout@v4
# 安装 nightly Rust 工具链。
- run: rustup toolchain install nightly
- run: rustup default nightly
# 安装并缓存 cargo-fuzz。
- uses: actions/cache@v4
with:
path: ${{ runner.tool_cache }}/cargo-fuzz
key: cargo-fuzz-bin-${{ env.CARGO_FUZZ_VERSION }}
- run: echo "${{ runner.tool_cache }}/cargo-fuzz/bin" >> $GITHUB_PATH
- run: cargo install --root "${{ runner.tool_cache }}/cargo-fuzz" --version ${{ env.CARGO_FUZZ_VERSION }} cargo-fuzz --locked
# 构建并运行模糊测试目标。
- run: cargo fuzz build ${{ matrix.fuzz_target }}
- run: cargo fuzz run ${{ matrix.fuzz_target }} -- -max_total_time=${{ env.FUZZ_TIME }}
# 失败时上传模糊测试产物以便事后调试。
- uses: actions/upload-artifact@v4
if: failure()
with:
name: fuzzing-artifacts-${{ matrix.fuzz_target }}-${{ github.sha }}
path: fuzz/artifacts
|