Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright 2012 the V8 project authors. All rights reserved. | 3 # Copyright 2012 the V8 project authors. All rights reserved. |
| 4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
| 5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
| 6 # met: | 6 # met: |
| 7 # | 7 # |
| 8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
| 9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
| 10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 | 29 |
| 30 | 30 |
| 31 from collections import OrderedDict | |
| 31 import itertools | 32 import itertools |
| 32 import multiprocessing | 33 import multiprocessing |
| 33 import optparse | 34 import optparse |
| 34 import os | 35 import os |
| 35 from os.path import join | 36 from os.path import join |
| 36 import platform | 37 import platform |
| 37 import random | 38 import random |
| 38 import shlex | 39 import shlex |
| 39 import subprocess | 40 import subprocess |
| 40 import sys | 41 import sys |
| 41 import time | 42 import time |
| 42 | 43 |
| 43 from testrunner.local import execution | 44 from testrunner.local import execution |
| 44 from testrunner.local import progress | 45 from testrunner.local import progress |
| 45 from testrunner.local import testsuite | 46 from testrunner.local import testsuite |
| 46 from testrunner.local import utils | 47 from testrunner.local import utils |
| 47 from testrunner.local import verbose | 48 from testrunner.local import verbose |
| 48 from testrunner.network import network_execution | 49 from testrunner.network import network_execution |
| 49 from testrunner.objects import context | 50 from testrunner.objects import context |
| 50 | 51 |
| 51 | 52 |
| 52 ARCH_GUESS = utils.DefaultArch() | 53 ARCH_GUESS = utils.DefaultArch() |
| 53 DEFAULT_TESTS = ["mjsunit", "fuzz-natives", "base-unittests", | 54 DEFAULT_TESTS = ["mjsunit", "fuzz-natives", "base-unittests", |
| 54 "cctest", "compiler-unittests", "heap-unittests", | 55 "cctest", "compiler-unittests", "heap-unittests", |
| 55 "libplatform-unittests", "runtime-unittests", | 56 "libplatform-unittests", "runtime-unittests", |
| 56 "message", "preparser"] | 57 "message", "preparser"] |
| 58 | |
| 59 # Map of test name synonyms to lists of test suites. Should be ordered by | |
| 60 # expected runtimes (suites with slow test cases first). These groups are | |
| 61 # invoked in seperate steps on the bots. | |
| 62 TEST_MAP = { | |
| 63 "default": [ | |
| 64 "mjsunit", | |
| 65 "fuzz-natives", | |
| 66 "cctest", | |
| 67 "message", | |
| 68 "preparser", | |
| 69 ], | |
| 70 "optimize_for_size": [ | |
| 71 "mjsunit", | |
| 72 "cctest", | |
| 73 "webkit", | |
| 74 ], | |
| 75 "unittests": [ | |
| 76 "heap-unittests", | |
| 77 "libplatform-unittests", | |
|
Benedikt Meurer
2014/09/01 10:29:27
Should be: compiler-unittests, heap-unittests, bas
| |
| 78 "compiler-unittests", | |
| 79 "base-unittests", | |
| 80 ], | |
| 81 } | |
| 82 | |
| 57 TIMEOUT_DEFAULT = 60 | 83 TIMEOUT_DEFAULT = 60 |
| 58 TIMEOUT_SCALEFACTOR = {"debug" : 4, | 84 TIMEOUT_SCALEFACTOR = {"debug" : 4, |
| 59 "release" : 1 } | 85 "release" : 1 } |
| 60 | 86 |
| 61 # Use this to run several variants of the tests. | 87 # Use this to run several variants of the tests. |
| 62 VARIANT_FLAGS = { | 88 VARIANT_FLAGS = { |
| 63 "default": [], | 89 "default": [], |
| 64 "stress": ["--stress-opt", "--always-opt"], | 90 "stress": ["--stress-opt", "--always-opt"], |
| 65 "turbofan": ["--turbo-filter=*", "--always-opt"], | 91 "turbofan": ["--turbo-filter=*", "--always-opt"], |
| 66 "nocrankshaft": ["--nocrankshaft"]} | 92 "nocrankshaft": ["--nocrankshaft"]} |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 372 | 398 |
| 373 exit_code = 0 | 399 exit_code = 0 |
| 374 workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), "..")) | 400 workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), "..")) |
| 375 if not options.no_presubmit: | 401 if not options.no_presubmit: |
| 376 print ">>> running presubmit tests" | 402 print ">>> running presubmit tests" |
| 377 exit_code = subprocess.call( | 403 exit_code = subprocess.call( |
| 378 [sys.executable, join(workspace, "tools", "presubmit.py")]) | 404 [sys.executable, join(workspace, "tools", "presubmit.py")]) |
| 379 | 405 |
| 380 suite_paths = utils.GetSuitePaths(join(workspace, "test")) | 406 suite_paths = utils.GetSuitePaths(join(workspace, "test")) |
| 381 | 407 |
| 408 # Expand arguments with grouped tests. The args should reflect the list of | |
| 409 # suites as otherwise filters would break. | |
| 410 def ExpandTestGroups(name): | |
| 411 if name in TEST_MAP: | |
| 412 return [suite for suite in TEST_MAP[arg]] | |
| 413 else: | |
| 414 return [name] | |
| 415 args = reduce(lambda x, y: x + y, | |
| 416 [ExpandTestGroups(arg) for arg in args], | |
| 417 []) | |
| 418 | |
| 382 if len(args) == 0: | 419 if len(args) == 0: |
| 383 suite_paths = [ s for s in DEFAULT_TESTS if s in suite_paths ] | 420 suite_paths = [ s for s in DEFAULT_TESTS if s in suite_paths ] |
| 384 else: | 421 else: |
| 385 args_suites = set() | 422 args_suites = OrderedDict() # Used as set |
| 386 for arg in args: | 423 for arg in args: |
| 387 suite = arg.split(os.path.sep)[0] | 424 args_suites[arg.split(os.path.sep)[0]] = True |
| 388 if not suite in args_suites: | |
| 389 args_suites.add(suite) | |
| 390 suite_paths = [ s for s in args_suites if s in suite_paths ] | 425 suite_paths = [ s for s in args_suites if s in suite_paths ] |
| 391 | 426 |
| 392 suites = [] | 427 suites = [] |
| 393 for root in suite_paths: | 428 for root in suite_paths: |
| 394 suite = testsuite.TestSuite.LoadTestSuite( | 429 suite = testsuite.TestSuite.LoadTestSuite( |
| 395 os.path.join(workspace, "test", root)) | 430 os.path.join(workspace, "test", root)) |
| 396 if suite: | 431 if suite: |
| 397 suites.append(suite) | 432 suites.append(suite) |
| 398 | 433 |
| 399 if options.download_data: | 434 if options.download_data: |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 543 exit_code = runner.Run(options.j) | 578 exit_code = runner.Run(options.j) |
| 544 overall_duration = time.time() - start_time | 579 overall_duration = time.time() - start_time |
| 545 | 580 |
| 546 if options.time: | 581 if options.time: |
| 547 verbose.PrintTestDurations(suites, overall_duration) | 582 verbose.PrintTestDurations(suites, overall_duration) |
| 548 return exit_code | 583 return exit_code |
| 549 | 584 |
| 550 | 585 |
| 551 if __name__ == "__main__": | 586 if __name__ == "__main__": |
| 552 sys.exit(Main()) | 587 sys.exit(Main()) |
| OLD | NEW |