blob: deb8c06607605ad4add67b54ef8f89389116ac1a [file] [view] [edit]
# FuzzTest Rust
A framework for fuzzing Rust projects using FuzzTest.
## Prerequisites
1. Clone the repository.
2. Build the C++ Centipede static library engine using Bazel (from the
repository root):
```bash
cd /path/to/fuzztest
bazel build //centipede:centipede_engine_static
```
3. Copy the libcentipede_engine_static.a library to another location:
```bash
mkdir -p $HOME/.local/lib
cp /path/to/fuzztest/bazel-bin/centipede/libcentipede_engine_static.a \
$HOME/.local/lib/
```
## Setup a Project
1. Create a new Rust project:
```bash
cargo new my_fuzz_project --bin
```
2. Add `fuzztest` as a dependency in your `Cargo.toml`:
```toml
[dependencies]
fuzztest = { path = "/path/to/fuzztest/rust" }
googletest = "0.14.3"
```
## Write a Fuzz Test
In `src/main.rs`:
```rust
#[cfg(test)]
mod tests {
use fuzztest::domains::arbitrary::Arbitrary;
use fuzztest::fuzztest;
#[fuzztest(a = Arbitrary::<i32>::default(), b = Arbitrary::<i32>::default())]
fn test_addition(a: i32, b: i32) {
let _ = a.wrapping_add(b);
}
}
```
## Build and Run Fuzz Tests
To run the fuzz tests, you must specify the path that contains the previously
built `libcentipede_engine_static.a` using the `FUZZTEST_LIB_PATH` environment
variable:
```bash
# Run all fuzztests in smoke-test mode.
FUZZTEST_LIB_PATH="$HOME/.local/lib" cargo test __fuzztest_mod__
```
// TODO(the-shank): add example of more commands for fuzzing, alongwith sample
outputs.