diff options
author | MarcoFalke <falke.marco@gmail.com> | 2019-02-19 15:46:29 -0500 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2020-03-09 11:13:57 -0400 |
commit | aaaa055ff72a33241a3fdc2308d77bcbf51c262d (patch) | |
tree | 8fd4bed1d45f079912eccecf4a85665798d8ac2f /test | |
parent | fa4fa88d7648bfeb75fac941cdff79dcc38affbf (diff) | |
download | bitcoin-aaaa055ff72a33241a3fdc2308d77bcbf51c262d.tar.xz |
fuzz: Add option to merge input dir to test runner
Diffstat (limited to 'test')
-rwxr-xr-x | test/fuzz/test_runner.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/test/fuzz/test_runner.py b/test/fuzz/test_runner.py index d71a8719dc..9f2c473bd0 100755 --- a/test/fuzz/test_runner.py +++ b/test/fuzz/test_runner.py @@ -18,7 +18,10 @@ FUZZERS_MISSING_CORPORA = [ def main(): - parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description='''Run the fuzz targets with all inputs from the seed_dir once.''', + ) parser.add_argument( "-l", "--loglevel", @@ -50,6 +53,10 @@ def main(): nargs='*', help='The target(s) to run. Default is to run all targets.', ) + parser.add_argument( + '--m_dir', + help='Merge inputs from this directory into the seed_dir. Needs /target subdirectory.', + ) args = parser.parse_args() @@ -112,6 +119,14 @@ def main(): logging.error("subprocess timed out: Currently only libFuzzer is supported") sys.exit(1) + if args.m_dir: + merge_inputs( + corpus=args.seed_dir, + test_list=test_list_selection, + build_dir=config["environment"]["BUILDDIR"], + merge_dir=args.m_dir, + ) + run_once( corpus=args.seed_dir, test_list=test_list_selection, @@ -121,6 +136,22 @@ def main(): ) +def merge_inputs(*, corpus, test_list, build_dir, merge_dir): + logging.info("Merge the inputs in the passed dir into the seed_dir. Passed dir {}".format(merge_dir)) + for t in test_list: + args = [ + os.path.join(build_dir, 'src', 'test', 'fuzz', t), + '-merge=1', + os.path.join(corpus, t), + os.path.join(merge_dir, t), + ] + os.makedirs(os.path.join(corpus, t), exist_ok=True) + os.makedirs(os.path.join(merge_dir, t), exist_ok=True) + logging.debug('Run {} with args {}'.format(t, args)) + output = subprocess.run(args, check=True, stderr=subprocess.PIPE, universal_newlines=True).stderr + logging.debug('Output: {}'.format(output)) + + def run_once(*, corpus, test_list, build_dir, export_coverage, use_valgrind): for t in test_list: corpus_path = os.path.join(corpus, t) |