nim-eth/tests/fuzzing
Kim De Mey d2ba753792
Add rlpx metrics and avoid immediate peer reconnections (#585)
* Add metrics related to devp2p peer connections

* Avoid reconnecting to peers that just failed connection

- Add SeenTable to avoid reconnecting to peers immediately after
a failed connect. Depending on the failure, the amount of time is
different. This is similar to what is done in nimbus-eth2.
- Attempt to rework rlpxConnect at the same time, in order to
make sure that errors are properly handled. The current structure
is far from ideal, but it is hopefully a small step in the right
direction. To many oddities in there right now to really rework
rlpxConnect properply.

* Fix rlpx thunk fuzzer
2023-03-16 16:45:12 +01:00
..
discovery Fix some typos (#557) 2022-11-16 17:44:00 +01:00
discoveryv5 Fix some typos (#557) 2022-11-16 17:44:00 +01:00
enr Build fuzzing tests in CI and fix current fuzzing tests (#396) 2021-09-07 16:00:01 +02:00
rlp Style fixes according to --styleCheck:usages (#452) 2021-12-20 13:14:50 +01:00
rlpx Add rlpx metrics and avoid immediate peer reconnections (#585) 2023-03-16 16:45:12 +01:00
fuzzing_helpers.nim Build fuzzing tests in CI and fix current fuzzing tests (#396) 2021-09-07 16:00:01 +02:00
readme.md Update fuzzing readme.md 2020-07-21 10:58:14 +02:00

readme.md

Fuzzing Tests

This directory contains a set of subdirectories which hold one or more test cases that can be used for fuzzing. The fuzzing test cases use the fuzzing templates from nim-testutils.

For more details see the fuzzing readme of nim-testutils.

Some of the subdirectories also hold corpus generation tooling in order to have some corpus files to start fuzzing from.

Prerequisites

As explained in nim-testutils fuzzing readme, first install the fuzzer you want to run.

Next install nim-testutils its ntu application.

E.g. by running the nim-testutils nimble install:

nimble install testutils

How to run

To start fuzzing a test case run following command:

# Rlp fuzzing with libFuzzer
ntu fuzz --fuzzer:libFuzzer rlp/rlp_decode
# Rlp fuzzing with afl
ntu fuzz --fuzzer:afl rlp/rlp_decode

Or another example:

# ENR fuzzing with libFuzzer
ntu fuzz --fuzzer:libFuzzer enr/fuzz_enr
# ENR fuzzing with afl
ntu fuzz --fuzzer:afl enr/fuzz_enr

Manual adjustments

The ntu application is still very limited in its functionality. Many of the underlying fuzzer functionality is not available for adjustment so you might want to configure the setup in a more manual way.

How to do this is briefly explained here for afl and here for libFuzzer.