aboutsummaryrefslogtreecommitdiff
path: root/benchtests/scripts/validate_benchout.py
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2014-06-11 14:16:29 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2014-06-11 14:16:29 +0530
commit42b1161e8c45df468d1696b43a7820c3ffe29da1 (patch)
tree9f736456fa4b53ccb02b0f9459141f23d31f7db2 /benchtests/scripts/validate_benchout.py
parent4a594c34356b1ae90b69f359fa95e9c4ad8d8694 (diff)
downloadglibc-42b1161e8c45df468d1696b43a7820c3ffe29da1.tar
glibc-42b1161e8c45df468d1696b43a7820c3ffe29da1.tar.gz
glibc-42b1161e8c45df468d1696b43a7820c3ffe29da1.tar.bz2
glibc-42b1161e8c45df468d1696b43a7820c3ffe29da1.zip
Validate bench.out against a JSON schema
This patch adds a JSON schema for the benchmark output file and also adds a script that validates the generated output against the schema.
Diffstat (limited to 'benchtests/scripts/validate_benchout.py')
-rwxr-xr-xbenchtests/scripts/validate_benchout.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/benchtests/scripts/validate_benchout.py b/benchtests/scripts/validate_benchout.py
new file mode 100755
index 0000000000..61a8cbd5d3
--- /dev/null
+++ b/benchtests/scripts/validate_benchout.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+# Copyright (C) 2014 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 jsonschema
+except ImportError:
+ print('Could not find jsonschema module. Output not 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 validate_bench(benchfile, schemafile):
+ """Validate benchmark file
+
+ Validate a benchmark output file against a JSON schema.
+
+ Args:
+ benchfile: The file name of the bench.out file.
+ schemafile: The file name of the JSON schema file to validate
+ bench.out against.
+
+ Exceptions:
+ jsonschema.ValidationError: When bench.out is not valid
+ jsonschema.SchemaError: When the JSON schema is not valid
+ IOError: If any of the files are not found.
+ """
+ with open(benchfile, 'r') as bfile:
+ with open(schemafile, 'r') as sfile:
+ bench = json.load(bfile)
+ schema = json.load(sfile)
+ jsonschema.validate(bench, schema)
+
+ # If we reach here, we're all good.
+ print("Benchmark output in %s is valid." % benchfile)
+
+
+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:
+ print("Usage: %s <bench.out file> <bench.out schema>" % sys.argv[0],
+ file=sys.stderr)
+ return os.EX_USAGE
+
+ validate_bench(args[0], args[1])
+ return os.EX_OK
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))