diff options
Diffstat (limited to 'REORG.TODO/benchtests/scripts/validate_benchout.py')
-rwxr-xr-x | REORG.TODO/benchtests/scripts/validate_benchout.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/REORG.TODO/benchtests/scripts/validate_benchout.py b/REORG.TODO/benchtests/scripts/validate_benchout.py new file mode 100755 index 0000000000..3a8b326f25 --- /dev/null +++ b/REORG.TODO/benchtests/scripts/validate_benchout.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +# Copyright (C) 2014-2017 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# <http://www.gnu.org/licenses/>. +"""Benchmark output validator + +Given a benchmark output file in json format and a benchmark schema file, +validate the output against the schema. +""" + +from __future__ import print_function +import json +import sys +import os + +try: + import import_bench as bench +except ImportError: + print('Import Error: Output will not be validated.') + # Return success because we don't want the bench target to fail just + # because the jsonschema module was not found. + sys.exit(os.EX_OK) + + +def print_and_exit(message, exitcode): + """Prints message to stderr and returns the exit code. + + Args: + message: The message to print + exitcode: The exit code to return + + Returns: + The passed exit code + """ + print(message, file=sys.stderr) + return exitcode + + +def main(args): + """Main entry point + + Args: + args: The command line arguments to the program + + Returns: + 0 on success or a non-zero failure code + + Exceptions: + Exceptions thrown by validate_bench + """ + if len(args) != 2: + return print_and_exit("Usage: %s <bench.out file> <bench.out schema>" + % sys.argv[0], os.EX_USAGE) + + try: + bench.parse_bench(args[0], args[1]) + except IOError as e: + return print_and_exit("IOError(%d): %s" % (e.errno, e.strerror), + os.EX_OSFILE) + + except bench.validator.ValidationError as e: + return print_and_exit("Invalid benchmark output: %s" % e.message, + os.EX_DATAERR) + + except bench.validator.SchemaError as e: + return print_and_exit("Invalid schema: %s" % e.message, os.EX_DATAERR) + + print("Benchmark output in %s is valid." % args[0]) + return os.EX_OK + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) |