Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: log_parser/perf_expectations/tests/perf_expectations_unittest.py

Issue 194032: Add more unit tests for perf expectations.... (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/tools/buildbot/scripts/master/
Patch Set: Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
Property Changes:
Added: svn:mergeinfo
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2009 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Verify perf_expectations.json can be loaded using simplejson. 7 """Verify perf_expectations.json can be loaded using simplejson.
8 8
9 perf_expectations.json is a JSON-formatted file. This script verifies 9 perf_expectations.json is a JSON-formatted file. This script verifies
10 that simplejson can load it correctly. It should catch most common 10 that simplejson can load it correctly. It should catch most common
11 formatting problems. 11 formatting problems.
12 """ 12 """
13 13
14 import sys 14 import sys
15 import os 15 import os
16 import unittest 16 import unittest
17 import re
17 18
18 simplejson = None 19 simplejson = None
19 20
20 def OnTestsLoad(): 21 def OnTestsLoad():
21 old_path = sys.path 22 old_path = sys.path
22 script_path = os.path.dirname(sys.argv[0]) 23 script_path = os.path.dirname(sys.argv[0])
23 load_path = None 24 load_path = None
24 global simplejson 25 global simplejson
25 26
26 # This test script should be stored in src/tools/perf_expectations/. That 27 # This test script should be stored in src/tools/perf_expectations/. That
(...skipping 24 matching lines...) Expand all
51 import simplejson as Simplejson 52 import simplejson as Simplejson
52 simplejson = Simplejson 53 simplejson = Simplejson
53 except ImportError, e: 54 except ImportError, e:
54 msg = "%s expects to live within a Chromium checkout" % sys.argv[0] 55 msg = "%s expects to live within a Chromium checkout" % sys.argv[0]
55 raise Exception, "Error trying to import simplejson from %s (%s)" % \ 56 raise Exception, "Error trying to import simplejson from %s (%s)" % \
56 (load_path, msg) 57 (load_path, msg)
57 finally: 58 finally:
58 sys.path = old_path 59 sys.path = old_path
59 return True 60 return True
60 61
62 def LoadData():
63 perf_file = open(PERF_EXPECTATIONS, 'r')
64 try:
65 perf_data = simplejson.load(perf_file)
66 except ValueError, e:
67 perf_file.seek(0)
68 print "Error reading %s:\n%s" % (PERF_EXPECTATIONS,
69 perf_file.read()[:50]+'...')
70 raise e
71 return perf_data
72
61 OnTestsLoad() 73 OnTestsLoad()
62 74
63 PERF_EXPECTATIONS = os.path.join(os.path.dirname(sys.argv[0]), 75 PERF_EXPECTATIONS = os.path.join(os.path.dirname(sys.argv[0]),
64 '../perf_expectations.json') 76 '../perf_expectations.json')
65 77
66 class SimplejsonUnittest(unittest.TestCase): 78 class PerfExpectationsUnittest(unittest.TestCase):
67 def testFormat(self): 79 def testPerfExpectations(self):
68 perf_file = open(PERF_EXPECTATIONS, 'r') 80 perf_data = LoadData()
69 try: 81
70 perf_data = simplejson.load(perf_file) 82 # Test data is dictionary.
71 except ValueError, e: 83 perf_data = LoadData()
72 perf_file.seek(0) 84 if not isinstance(perf_data, dict):
73 print "Error reading %s:\n%s" % (PERF_EXPECTATIONS, 85 raise Exception('perf expectations is not a dict')
74 perf_file.read()[:50]+'...') 86
75 raise e 87 # Test the 'load' key.
76 print ("Successfully loaded perf_expectations: %d keys found." % 88 if not 'load' in perf_data:
77 len(perf_data)) 89 raise Exception("perf expectations is missing a load key")
78 return 90 if not isinstance(perf_data['load'], bool):
91 raise Exception("perf expectations load key has non-bool value")
92
93 # Test all key values are dictionaries.
94 bad_keys = []
95 for key in perf_data:
96 if key == 'load':
97 continue
98 if not isinstance(perf_data[key], dict):
99 bad_keys.append(key)
100 if len(bad_keys) > 0:
101 msg = "perf expectations keys have non-dict values"
102 raise Exception("%s: %s" % (msg, bad_keys))
103
104 # Test all key values have delta and var keys.
105 for key in perf_data:
106 if key == 'load':
107 continue
108 if 'delta' not in perf_data[key] or 'var' not in perf_data[key]:
109 bad_keys.append(key)
110 if (not isinstance(perf_data[key]['delta'], int) and
111 not isinstance(perf_data[key]['delta'], float)):
112 bad_keys.append(key)
113 if (not isinstance(perf_data[key]['var'], int) and
114 not isinstance(perf_data[key]['var'], float)):
115 bad_keys.append(key)
116 if len(bad_keys) > 0:
117 msg = "perf expectations key values missing or invalid delta/var"
118 raise Exception("%s: %s" % (msg, bad_keys))
119
120 # Test all keys have the correct format.
121 for key in perf_data:
122 if key == 'load':
123 continue
124 if not re.match(r"^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)$", key):
125 bad_keys.append(key)
126 if len(bad_keys) > 0:
127 msg = "perf expectations keys in bad format, expected a/b/c/d"
128 raise Exception("%s: %s" % (msg, bad_keys))
79 129
80 if __name__ == '__main__': 130 if __name__ == '__main__':
81 unittest.main() 131 unittest.main()
OLDNEW
« no previous file with comments | « log_parser/perf_expectations/perf_expectations.json ('k') | log_parser/perf_expectations/tests/simplejson_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698