diff options
author | fanquake <fanquake@gmail.com> | 2024-01-29 16:24:45 +0000 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2024-01-29 16:24:51 +0000 |
commit | 759195040a0cbd4b5f447aeb137d78ade991f386 (patch) | |
tree | b4f7c6a3b7f0904d69e481c4ad9bfb4265c3f554 | |
parent | 478ac185be49feffd1231366c07e06068683f941 (diff) | |
parent | fab97d81ce3740509dbbe9270ca67a1b65b00c72 (diff) | |
download | bitcoin-759195040a0cbd4b5f447aeb137d78ade991f386.tar.xz |
Merge bitcoin/bitcoin#29329: fuzz: Print coverage summary after run_once
fab97d81ce3740509dbbe9270ca67a1b65b00c72 fuzz: Print coverage summary after run_once (MarcoFalke)
Pull request description:
This can be used to quickly check the coverage effects of a code change or qa-assets change.
ACKs for top commit:
dergoegge:
ACK fab97d81ce3740509dbbe9270ca67a1b65b00c72
Tree-SHA512: 0ac913c14698f39e76e0e7bf124f182220031796d6443edb34c6e4615e128157cf746da661b216c4640a41964e977249712445ca9c005b1b4a3737adabdb4a7d
-rwxr-xr-x | test/fuzz/test_runner.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/test/fuzz/test_runner.py b/test/fuzz/test_runner.py index 8a5853b162..4e24c07699 100755 --- a/test/fuzz/test_runner.py +++ b/test/fuzz/test_runner.py @@ -348,13 +348,18 @@ def run_once(*, fuzz_pool, corpus, test_list, src_dir, build_dir, using_libfuzze text=True, ) output += result.stderr - return output, result + return output, result, t jobs.append(fuzz_pool.submit(job, t, args)) + stats = [] for future in as_completed(jobs): - output, result = future.result() + output, result, target = future.result() logging.debug(output) + if using_libfuzzer: + done_stat = [l for l in output.splitlines() if "DONE" in l] + assert len(done_stat) == 1 + stats.append((target, done_stat[0])) try: result.check_returncode() except subprocess.CalledProcessError as e: @@ -365,6 +370,13 @@ def run_once(*, fuzz_pool, corpus, test_list, src_dir, build_dir, using_libfuzze logging.info(f"Target {result.args} failed with exit code {e.returncode}") sys.exit(1) + if using_libfuzzer: + print("Summary:") + max_len = max(len(t[0]) for t in stats) + for t, s in sorted(stats): + t = t.ljust(max_len + 1) + print(f"{t}{s}") + def parse_test_list(*, fuzz_bin): test_list_all = subprocess.run( |