benchtests: Fix validate_benchout.py exceptions

This patch fixed validate_benchout.py two exceptions,
1) AttributeError
   if benchout_strings.schema.json is specified, and
2) json.decoder.JSONDecodeError
   if benchout file is not JSON.

$ ~/glibc/benchtests/scripts/validate_benchout.py bench-memset.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
  File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
    sys.exit(main(sys.argv[1:]))
  File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
    bench.parse_bench(args[0], args[1])
  File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 139, in parse_bench
    do_for_all_timings(bench, lambda b, f, v:
  File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 107, in do_for_all_timings
    if 'timings' not in bench['functions'][func][k].keys():
AttributeError: 'str' object has no attribute 'keys'

$ ~/glibc/benchtests/scripts/validate_benchout.py bench-math-inlines.out \
~/glibc/benchtests/scripts/benchout_strings.schema.json
Traceback (most recent call last):
  File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 86, in <module>
    sys.exit(main(sys.argv[1:]))
  File "/home/naohirot/glibc/benchtests/scripts/validate_benchout.py", line 69, in main
    bench.parse_bench(args[0], args[1])
  File "/home/naohirot/glibc/benchtests/scripts/import_bench.py", line 137, in parse_bench
    bench = json.load(benchfile)
  File "/usr/lib/python3.6/json/__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 17 (char 16)

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
Naohiro Tamura 2021-09-16 09:19:55 +05:30 committed by Siddhesh Poyarekar
parent c484da9087
commit cb5088cfd3
3 changed files with 9 additions and 3 deletions

View file

@ -163,7 +163,11 @@ def plot_graphs(bench1, bench2):
def main(bench1, bench2, schema, threshold, stats):
bench1 = bench.parse_bench(bench1, schema)
bench.do_for_all_timings(bench1, lambda b, f, v:
b['functions'][f][v]['timings'].sort())
bench2 = bench.parse_bench(bench2, schema)
bench.do_for_all_timings(bench2, lambda b, f, v:
b['functions'][f][v]['timings'].sort())
plot_graphs(bench1, bench2)

View file

@ -136,6 +136,4 @@ def parse_bench(filename, schema_filename):
with open(filename, 'r') as benchfile:
bench = json.load(benchfile)
validator.validate(bench, schema)
do_for_all_timings(bench, lambda b, f, v:
b['functions'][f][v]['timings'].sort())
return bench

View file

@ -73,11 +73,15 @@ def main(args):
except bench.validator.ValidationError as e:
return print_and_exit("Invalid benchmark output: %s" % e.message,
os.EX_DATAERR)
os.EX_DATAERR)
except bench.validator.SchemaError as e:
return print_and_exit("Invalid schema: %s" % e.message, os.EX_DATAERR)
except json.decoder.JSONDecodeError as e:
return print_and_exit("Benchmark output in %s is not JSON." % args[0],
os.EX_DATAERR)
print("Benchmark output in %s is valid." % args[0])
return os.EX_OK