mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
* feat/allow-fuzz-input-override: Add environment override for fuzzing parameters and seed values - Implement `get_fuzz_override` function to read override values from environment variables for fuzzing parameters. - Allow overriding `SEED`, `ACTIONS`, `ROWS`, `TABLES`, `COLUMNS`, `INSERTS`, and `PARTITIONS` in various fuzzing targets. - Introduce new constants `GT_FUZZ_INPUT_MAX_PARTITIONS` and `FUZZ_OVERRIDE_PREFIX`. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/allow-fuzz-input-override: Remove GT_FUZZ_INPUT_MAX_PARTITIONS constant and usage from fuzzing utils and tests • Deleted the GT_FUZZ_INPUT_MAX_PARTITIONS constant from fuzzing utility functions. • Updated FuzzInput struct in fuzz_migrate_mito_regions.rs to use a hardcoded range instead of get_gt_fuzz_input_max_partitions for determining the number of partitions. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> * feat/allow-fuzz-input-override: Improve fuzzing documentation with environment variable overrides Enhanced the fuzzing instructions in the README to include guidance on how to override fuzz input using environment variables, providing an example for better clarity. Signed-off-by: Lei, HUANG <mrsatangel@gmail.com> --------- Signed-off-by: Lei, HUANG <mrsatangel@gmail.com>
1.7 KiB
1.7 KiB
Fuzz Test for GreptimeDB
Setup
- Install the fuzz cli first.
cargo install cargo-fuzz
- Start GreptimeDB
- Copy the
.env.example, which is at project root, to.envand change the values on need.
For stable fuzz tests
Set the GreptimeDB MySQL address.
GT_MYSQL_ADDR = localhost:4002
For unstable fuzz tests
Set the binary path of the GreptimeDB:
GT_FUZZ_BINARY_PATH = /path/to/
Change the instance root directory(the default value: /tmp/unstable_greptime/)
GT_FUZZ_INSTANCE_ROOT_DIR = /path/to/
Run
- List all fuzz targets
cargo fuzz list --fuzz-dir tests-fuzz
- Run a fuzz target.
cargo fuzz run fuzz_create_table --fuzz-dir tests-fuzz -D -s none
Crash Reproduction
If you want to reproduce a crash, you first need to obtain the Base64 encoded code, which usually appears at the end of a crash report, and store it in a file.
Alternatively, if you already have the crash file, you can skip this step.
echo "Base64" > .crash
Print the std::fmt::Debug output for an input.
cargo fuzz fmt fuzz_target .crash --fuzz-dir tests-fuzz -D -s none
Rerun the fuzz test with the input. You can override fuzz input with environment variables. For example, to override fuzz input like:
FuzzInput {
seed: 6666,
actions: 175
}
you can run with GT_FUZZ_OVERRIDE_SEED=6666 and GT_FUZZ_OVERRIDE_ACTIONS=175:
GT_FUZZ_OVERRIDE_SEED=6666 GT_FUZZ_OVERRIDE_ACTIONS=175 cargo fuzz run fuzz_target .crash --fuzz-dir tests-fuzz -D -s none
For more details, visit cargo fuzz or run the command cargo fuzz --help.