aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2024-01-29 16:24:45 +0000
committerfanquake <fanquake@gmail.com>2024-01-29 16:24:51 +0000
commit759195040a0cbd4b5f447aeb137d78ade991f386 (patch)
treeb4f7c6a3b7f0904d69e481c4ad9bfb4265c3f554
parent478ac185be49feffd1231366c07e06068683f941 (diff)
parentfab97d81ce3740509dbbe9270ca67a1b65b00c72 (diff)
downloadbitcoin-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-xtest/fuzz/test_runner.py16
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(