# Инструкция по использованию [clusterfuzz](https://github.com/google/clusterfuzz) Основывается на: * https://google.github.io/clusterfuzz/ * https://google.github.io/oss-fuzz/getting-started/new-project-guide/go-lang/ * https://github.com/google/oss-fuzz/blob/master/infra/base-images/base-builder/compile_native_go_fuzzer ## Поднятие локального инстанса Работает на следующих ОС: * Ubuntu (16.04, 17.10, 18.04, 18.10, 20.04) * Debian 8 (jessie) or later * Recent versions of macOS with homebrew (experimental) * Note: Only x86 architectures are currently supported ```bash git clone https://github.com/google/clusterfuzz cd clusterfuzz git pull git checkout tags/v2.6.0 local/install_deps.bash pipenv shell python butler.py run_server --bootstrap ``` Флаг --bootstrap в последней команде необходим только при первом запуске локального сервера. В выводе команды будет строка наподобие этой: `[INFO] Listening at: http://0.0.0.0:9000`. По указанному адресу можно зайти на web интерфейс. Далее необходимо поднять т.н. бота. Находясь в `pipenv shell` выполнить: ```bash python butler.py run_bot --name my-bot ./my-bot ``` Для просмотра логов бота: ```bash cd ./my-bot/clusterfuzz/bot/logs tail -f bot.log ``` ## Фаззинг проекта на go ```bash git clone https://git.frostfs.info/TrueCloudLab/policy-engine.git go get git.frostfs.info/TrueCloudLab/policy-engine go install github.com/AdamKorcz/go-118-fuzz-build@latest go get github.com/AdamKorcz/go-118-fuzz-build/testing go-118-fuzz-build -tags gofuzz -o fuzz_unmarshall.a -func FuzzUnmarshal ~/policy-engine/pkg/chain clang++ -fsanitize=address,fuzzer fuzz_unmarshall.a -o ~/policy-engine/out/fuzz_unmarshall zip fuzzer.zip fuzz_unmarshall ``` Полученный архив следует загрузить через интерфейс web интерфейс clusterfuzz. Важно, что фаззинг go использует под капотом libFuzzer, поэтому в названии job для фаззинга это должно быть указано. Можно также использовать встроенный шаблон для libFuzzer.