[2/2,v2] benchtests: Catch exceptions in input arguments

Message ID 20180529171747.3667-2-leonardo.sandoval.gonzalez@linux.intel.com
State New, archived
Headers

Commit Message

leonardo.sandoval.gonzalez@linux.intel.com May 29, 2018, 5:17 p.m. UTC
  From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>

Catch runtime exceptions in case the user provided: wrong base
function, attribute(s) or input file. In any of the latter, quit
immediately with non-zero return code.

	* benchtests/scripts/compare_string.py: (process_results) Catch
	exception in non-existent base_func.
	(process_results) Catch exception in non-existent attribute.
	(parse_file) Catch exception in non-existent input file.
---
 ChangeLog                             |  7 ++++++
 benchtests/scripts/compare_strings.py | 34 +++++++++++++++++++--------
 2 files changed, 31 insertions(+), 10 deletions(-)
  

Comments

Siddhesh Poyarekar May 30, 2018, 1:49 a.m. UTC | #1
On 05/29/2018 10:47 PM, leonardo.sandoval.gonzalez@linux.intel.com wrote:
> From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
> 
> Catch runtime exceptions in case the user provided: wrong base
> function, attribute(s) or input file. In any of the latter, quit
> immediately with non-zero return code.
> 
> 	* benchtests/scripts/compare_string.py: (process_results) Catch
> 	exception in non-existent base_func.
> 	(process_results) Catch exception in non-existent attribute.

Just write a single note for (process_results): Catch exception in 
non-existent base_func and attribute.

> 	(parse_file) Catch exception in non-existent input file.

Looks OK otherwise.

Thanks,
Siddhesh
  

Patch

diff --git a/ChangeLog b/ChangeLog
index d55a49765b3..41633079e5c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@ 
+2018-05-28  Leonardo Sandoval  <leonardo.sandoval.gonzalez@intel.com>
+
+	* benchtests/scripts/compare_string.py:	(process_results) Catch
+	exception in non-existent base_func.
+	(process_results) Catch exception in non-existent attribute.
+	(parse_file) Catch exception if input file does not exist.
+
 2018-05-28  Leonardo Sandoval  <leonardo.sandoval.gonzalez@intel.com>
 
 	* benchtests/scripts/compare_string.py: Add --no-diff and --no-header
diff --git a/benchtests/scripts/compare_strings.py b/benchtests/scripts/compare_strings.py
index 850c455f3aa..ddce84a3ac3 100755
--- a/benchtests/scripts/compare_strings.py
+++ b/benchtests/scripts/compare_strings.py
@@ -38,13 +38,16 @@  except ImportError:
 
 
 def parse_file(filename, schema_filename):
-    with open(schema_filename, 'r') as schemafile:
-        schema = json.load(schemafile)
-        with open(filename, 'r') as benchfile:
-            bench = json.load(benchfile)
-            validator.validate(bench, schema)
-            return bench
-
+    try:
+        with open(schema_filename, 'r') as schemafile:
+            schema = json.load(schemafile)
+            with open(filename, 'r') as benchfile:
+                bench = json.load(benchfile)
+                validator.validate(bench, schema)
+        return bench
+    except FileNotFoundError:
+        sys.stderr.write('Invalid input file %s.\n' % filename)
+        sys.exit(os.EX_NOINPUT)
 
 def draw_graph(f, v, ifuncs, results):
     """Plot graphs for functions
@@ -93,7 +96,12 @@  def process_results(results, attrs, base_func, graph, no_diff, no_header):
 
         base_index = 0
         if base_func:
-            base_index = results['functions'][f]['ifuncs'].index(base_func)
+            try:
+                base_index = results['functions'][f]['ifuncs'].index(base_func)
+            except ValueError:
+                sys.stderr.write('Invalid -b "%s" parameter. Options: %s.\n' %
+                                 (base_func, ', '.join(results['functions'][f]['ifuncs'])))
+                sys.exit(os.EX_DATAERR)
 
         if not no_header:
             print('Function: %s' % f)
@@ -103,7 +111,12 @@  def process_results(results, attrs, base_func, graph, no_diff, no_header):
 
         graph_res = {}
         for res in results['functions'][f]['results']:
-            attr_list = ['%s=%s' % (a, res[a]) for a in attrs]
+            try:
+                attr_list = ['%s=%s' % (a, res[a]) for a in attrs]
+            except KeyError as ke:
+                sys.stderr.write('Invalid -a %s parameter. Options: %s.\n'
+                                 % (ke, ', '.join([a for a in res.keys() if a != 'timings'])))
+                sys.exit(os.EX_DATAERR)
             i = 0
             key = ', '.join(attr_list)
             sys.stdout.write('%36s: ' % key)
@@ -137,6 +150,7 @@  def main(args):
 
     results = parse_file(args.input, args.schema)
     process_results(results, attrs, base_func, args.graph, args.no_diff, args.no_header)
+    return os.EX_OK
 
 
 if __name__ == '__main__':
@@ -162,4 +176,4 @@  if __name__ == '__main__':
                         help='Do not print the header.')
 
     args = parser.parse_args()
-    main(args)
+    sys.exit(main(args))