OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 # chrome_tests.py | 6 # chrome_tests.py |
7 | 7 |
8 ''' Runs various chrome tests through valgrind_test.py.''' | 8 ''' Runs various chrome tests through valgrind_test.py.''' |
9 | 9 |
10 import glob | 10 import glob |
11 import logging | 11 import logging |
12 import optparse | 12 import optparse |
13 import os | 13 import os |
14 import stat | 14 import stat |
15 import sys | 15 import sys |
16 | 16 |
17 import google.logging_utils | 17 import logging_utils |
18 import google.path_utils | 18 import path_utils |
19 | 19 |
20 import common | 20 import common |
21 import valgrind_test | 21 import valgrind_test |
22 | 22 |
23 class TestNotFound(Exception): pass | 23 class TestNotFound(Exception): pass |
24 | 24 |
25 def Dir2IsNewer(dir1, dir2): | 25 def Dir2IsNewer(dir1, dir2): |
26 if dir2 == None or not os.path.isdir(dir2): | 26 if dir2 == None or not os.path.isdir(dir2): |
27 return False | 27 return False |
28 if dir1 == None or not os.path.isdir(dir1): | 28 if dir1 == None or not os.path.isdir(dir1): |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 "app": self.TestApp, "app_unittests": self.TestApp, | 77 "app": self.TestApp, "app_unittests": self.TestApp, |
78 } | 78 } |
79 | 79 |
80 if test not in self._test_list: | 80 if test not in self._test_list: |
81 raise TestNotFound("Unknown test: %s" % test) | 81 raise TestNotFound("Unknown test: %s" % test) |
82 | 82 |
83 self._options = options | 83 self._options = options |
84 self._args = args | 84 self._args = args |
85 self._test = test | 85 self._test = test |
86 | 86 |
87 script_dir = google.path_utils.ScriptDir() | 87 script_dir = path_utils.ScriptDir() |
88 # Compute the top of the tree (the "source dir") from the script dir (where | 88 # Compute the top of the tree (the "source dir") from the script dir (where |
89 # this script lives). We assume that the script dir is in tools/valgrind/ | 89 # this script lives). We assume that the script dir is in tools/valgrind/ |
90 # relative to the top of the tree. | 90 # relative to the top of the tree. |
91 self._source_dir = os.path.dirname(os.path.dirname(script_dir)) | 91 self._source_dir = os.path.dirname(os.path.dirname(script_dir)) |
92 # since this path is used for string matching, make sure it's always | 92 # since this path is used for string matching, make sure it's always |
93 # an absolute Unix-style path | 93 # an absolute Unix-style path |
94 self._source_dir = os.path.abspath(self._source_dir).replace('\\', '/') | 94 self._source_dir = os.path.abspath(self._source_dir).replace('\\', '/') |
95 valgrind_test_script = os.path.join(script_dir, "valgrind_test.py") | 95 valgrind_test_script = os.path.join(script_dir, "valgrind_test.py") |
96 self._command_preamble = [valgrind_test_script, | 96 self._command_preamble = [valgrind_test_script, |
97 "--source_dir=%s" % (self._source_dir)] | 97 "--source_dir=%s" % (self._source_dir)] |
98 | 98 |
99 def _DefaultCommand(self, module, exe=None, valgrind_test_args=None): | 99 def _DefaultCommand(self, module, exe=None, valgrind_test_args=None): |
100 '''Generates the default command array that most tests will use.''' | 100 '''Generates the default command array that most tests will use.''' |
101 module_dir = os.path.join(self._source_dir, module) | 101 module_dir = os.path.join(self._source_dir, module) |
102 | 102 |
103 # We need multiple data dirs, the current script directory and a module | 103 # We need multiple data dirs, the current script directory and a module |
104 # specific one. The global suppression file lives in our directory, and the | 104 # specific one. The global suppression file lives in our directory, and the |
105 # module specific suppression file lives with the module. | 105 # module specific suppression file lives with the module. |
106 self._data_dirs = [google.path_utils.ScriptDir()] | 106 self._data_dirs = [path_utils.ScriptDir()] |
107 | 107 |
108 if module == "chrome": | 108 if module == "chrome": |
109 # unfortunately, not all modules have the same directory structure | 109 # unfortunately, not all modules have the same directory structure |
110 self._data_dirs.append(os.path.join(module_dir, "test", "data", | 110 self._data_dirs.append(os.path.join(module_dir, "test", "data", |
111 "valgrind")) | 111 "valgrind")) |
112 else: | 112 else: |
113 self._data_dirs.append(os.path.join(module_dir, "data", "valgrind")) | 113 self._data_dirs.append(os.path.join(module_dir, "data", "valgrind")) |
114 | 114 |
115 if not self._options.build_dir: | 115 if not self._options.build_dir: |
116 if common.IsWine(): | 116 if common.IsWine(): |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 # to avoid valgrinding python. | 287 # to avoid valgrinding python. |
288 # Start by building the valgrind_test.py commandline. | 288 # Start by building the valgrind_test.py commandline. |
289 cmd = self._DefaultCommand("webkit") | 289 cmd = self._DefaultCommand("webkit") |
290 cmd.append("--trace_children") | 290 cmd.append("--trace_children") |
291 cmd.append("--indirect") | 291 cmd.append("--indirect") |
292 cmd.append("--ignore_exit_code") | 292 cmd.append("--ignore_exit_code") |
293 # Now build script_cmd, the run_webkits_tests.py commandline | 293 # Now build script_cmd, the run_webkits_tests.py commandline |
294 # Store each chunk in its own directory so that we can find the data later | 294 # Store each chunk in its own directory so that we can find the data later |
295 chunk_dir = os.path.join("layout", "chunk_%05d" % chunk_num) | 295 chunk_dir = os.path.join("layout", "chunk_%05d" % chunk_num) |
296 test_shell = os.path.join(self._options.build_dir, "test_shell") | 296 test_shell = os.path.join(self._options.build_dir, "test_shell") |
297 out_dir = os.path.join(google.path_utils.ScriptDir(), "latest") | 297 out_dir = os.path.join(path_utils.ScriptDir(), "latest") |
298 out_dir = os.path.join(out_dir, chunk_dir) | 298 out_dir = os.path.join(out_dir, chunk_dir) |
299 if os.path.exists(out_dir): | 299 if os.path.exists(out_dir): |
300 old_files = glob.glob(os.path.join(out_dir, "*.txt")) | 300 old_files = glob.glob(os.path.join(out_dir, "*.txt")) |
301 for f in old_files: | 301 for f in old_files: |
302 os.remove(f) | 302 os.remove(f) |
303 else: | 303 else: |
304 os.makedirs(out_dir) | 304 os.makedirs(out_dir) |
305 script = os.path.join(self._source_dir, "webkit", "tools", "layout_tests", | 305 script = os.path.join(self._source_dir, "webkit", "tools", "layout_tests", |
306 "run_webkit_tests.py") | 306 "run_webkit_tests.py") |
307 script_cmd = ["python", script, "--run-singly", "-v", | 307 script_cmd = ["python", script, "--run-singly", "-v", |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 # My machine can do about 120 layout tests/hour in release mode. | 397 # My machine can do about 120 layout tests/hour in release mode. |
398 # Let's do 30 minutes worth per run. | 398 # Let's do 30 minutes worth per run. |
399 # The CPU is mostly idle, so perhaps we can raise this when | 399 # The CPU is mostly idle, so perhaps we can raise this when |
400 # we figure out how to run them more efficiently. | 400 # we figure out how to run them more efficiently. |
401 parser.add_option("-n", "--num_tests", default=60, type="int", | 401 parser.add_option("-n", "--num_tests", default=60, type="int", |
402 help="for layout tests: # of subtests per run. 0 for all.") | 402 help="for layout tests: # of subtests per run. 0 for all.") |
403 | 403 |
404 options, args = parser.parse_args() | 404 options, args = parser.parse_args() |
405 | 405 |
406 if options.verbose: | 406 if options.verbose: |
407 google.logging_utils.config_root(logging.DEBUG) | 407 logging_utils.config_root(logging.DEBUG) |
408 else: | 408 else: |
409 google.logging_utils.config_root() | 409 logging_utils.config_root() |
410 | 410 |
411 if not options.test or not len(options.test): | 411 if not options.test or not len(options.test): |
412 parser.error("--test not specified") | 412 parser.error("--test not specified") |
413 | 413 |
414 for t in options.test: | 414 for t in options.test: |
415 tests = ChromeTests(options, args, t) | 415 tests = ChromeTests(options, args, t) |
416 ret = tests.Run() | 416 ret = tests.Run() |
417 if ret: return ret | 417 if ret: return ret |
418 return 0 | 418 return 0 |
419 | 419 |
420 | 420 |
421 if __name__ == "__main__": | 421 if __name__ == "__main__": |
422 ret = _main(sys.argv) | 422 ret = _main(sys.argv) |
423 sys.exit(ret) | 423 sys.exit(ret) |
OLD | NEW |