Compare commits

...

2 commits

Author SHA1 Message Date
kevkevin
2debcc82c5
Merge e9dc26cb20 into 3a29ba33dc 2025-04-28 18:35:14 +02:00
kevkevinpal
e9dc26cb20
tests: Added progress tracker when running test_runner.py
Right now if you run test_runner.py on all the targets it is hard to
tell how far you are in the progress even with --loglevel=DEBUG on. This
change gives you a percentage in 5% increments on how far along you are
finishing the targets you've selected
2025-04-25 18:26:50 -04:00

View file

@ -251,6 +251,10 @@ def generate_corpus(*, fuzz_pool, src_dir, fuzz_bin, corpus_dir, targets):
targets = transform_process_message_target(targets, Path(src_dir))
targets = transform_rpc_target(targets, Path(src_dir))
# Counter for completed jobs
completed_jobs = 0
last_reported = -5
def job(command, t, t_env):
logging.debug(f"Running '{command}'")
logging.debug("Command '{}' output:\n'{}'\n".format(
@ -284,11 +288,17 @@ def generate_corpus(*, fuzz_pool, src_dir, fuzz_bin, corpus_dir, targets):
for future in as_completed(futures):
future.result()
completed_jobs, last_reported = log_and_update_percent_complete(completed_jobs, len(targets), last_reported)
def merge_inputs(*, fuzz_pool, corpus, test_list, src_dir, fuzz_bin, merge_dirs):
logging.info(f"Merge the inputs from the passed dir into the corpus_dir. Passed dirs {merge_dirs}")
jobs = []
# Counter for completed jobs
completed_jobs = 0
last_reported = -5
for t in test_list:
args = [
fuzz_bin,
@ -326,10 +336,25 @@ def merge_inputs(*, fuzz_pool, corpus, test_list, src_dir, fuzz_bin, merge_dirs)
for future in as_completed(jobs):
future.result()
completed_jobs, last_reported = log_and_update_percent_complete(completed_jobs, len(test_list), last_reported)
def log_and_update_percent_complete(completed_jobs, number_of_jobs, last_reported):
completed_jobs += 1
percentage = (completed_jobs / number_of_jobs) * 100
if percentage >= last_reported + 5:
logging.info(f"Progress: {completed_jobs}/{number_of_jobs} jobs completed ({percentage:.2f}%)")
last_reported = (percentage // 5) * 5
return completed_jobs, last_reported
def run_once(*, fuzz_pool, corpus, test_list, src_dir, fuzz_bin, using_libfuzzer, use_valgrind, empty_min_time):
jobs = []
# Counter for completed jobs
completed_jobs = 0
last_reported = -5
for t in test_list:
corpus_path = corpus / t
os.makedirs(corpus_path, exist_ok=True)
@ -366,6 +391,9 @@ def run_once(*, fuzz_pool, corpus, test_list, src_dir, fuzz_bin, using_libfuzzer
stats = []
for future in as_completed(jobs):
output, result, target = future.result()
completed_jobs, last_reported = log_and_update_percent_complete(completed_jobs, len(test_list), last_reported)
logging.debug(output)
try:
result.check_returncode()