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

Side by Side Diff: tools/run-tests.py

Issue 1397593004: [swarming] Enforce test runner to use v8 base dir as cwd. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 from testrunner.local import execution 44 from testrunner.local import execution
45 from testrunner.local import progress 45 from testrunner.local import progress
46 from testrunner.local import testsuite 46 from testrunner.local import testsuite
47 from testrunner.local.testsuite import ALL_VARIANTS 47 from testrunner.local.testsuite import ALL_VARIANTS
48 from testrunner.local import utils 48 from testrunner.local import utils
49 from testrunner.local import verbose 49 from testrunner.local import verbose
50 from testrunner.network import network_execution 50 from testrunner.network import network_execution
51 from testrunner.objects import context 51 from testrunner.objects import context
52 52
53 53
54 # Base dir of the v8 checkout to be used as cwd.
55 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
56
54 ARCH_GUESS = utils.DefaultArch() 57 ARCH_GUESS = utils.DefaultArch()
55 58
56 # Map of test name synonyms to lists of test suites. Should be ordered by 59 # Map of test name synonyms to lists of test suites. Should be ordered by
57 # expected runtimes (suites with slow test cases first). These groups are 60 # expected runtimes (suites with slow test cases first). These groups are
58 # invoked in seperate steps on the bots. 61 # invoked in seperate steps on the bots.
59 TEST_MAP = { 62 TEST_MAP = {
60 "default": [ 63 "default": [
61 "mjsunit", 64 "mjsunit",
62 "cctest", 65 "cctest",
63 "message", 66 "message",
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 count = 0 491 count = 0
489 shard = [] 492 shard = []
490 for test in tests: 493 for test in tests:
491 if count % shard_count == shard_run - 1: 494 if count % shard_count == shard_run - 1:
492 shard.append(test) 495 shard.append(test)
493 count += 1 496 count += 1
494 return shard 497 return shard
495 498
496 499
497 def Main(): 500 def Main():
501 # Use the v8 root as cwd as some test cases use "load" with relative paths.
502 os.chdir(BASE_DIR)
503
498 parser = BuildOptions() 504 parser = BuildOptions()
499 (options, args) = parser.parse_args() 505 (options, args) = parser.parse_args()
500 if not ProcessOptions(options): 506 if not ProcessOptions(options):
501 parser.print_help() 507 parser.print_help()
502 return 1 508 return 1
503 509
504 exit_code = 0 510 exit_code = 0
505 workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), ".."))
506 if not options.no_presubmit: 511 if not options.no_presubmit:
507 print ">>> running presubmit tests" 512 print ">>> running presubmit tests"
508 exit_code = subprocess.call( 513 exit_code = subprocess.call(
509 [sys.executable, join(workspace, "tools", "presubmit.py")]) 514 [sys.executable, join(BASE_DIR, "tools", "presubmit.py")])
510 515
511 suite_paths = utils.GetSuitePaths(join(workspace, "test")) 516 suite_paths = utils.GetSuitePaths(join(BASE_DIR, "test"))
512 517
513 # Use default tests if no test configuration was provided at the cmd line. 518 # Use default tests if no test configuration was provided at the cmd line.
514 if len(args) == 0: 519 if len(args) == 0:
515 args = ["default"] 520 args = ["default"]
516 521
517 # Expand arguments with grouped tests. The args should reflect the list of 522 # Expand arguments with grouped tests. The args should reflect the list of
518 # suites as otherwise filters would break. 523 # suites as otherwise filters would break.
519 def ExpandTestGroups(name): 524 def ExpandTestGroups(name):
520 if name in TEST_MAP: 525 if name in TEST_MAP:
521 return [suite for suite in TEST_MAP[arg]] 526 return [suite for suite in TEST_MAP[arg]]
522 else: 527 else:
523 return [name] 528 return [name]
524 args = reduce(lambda x, y: x + y, 529 args = reduce(lambda x, y: x + y,
525 [ExpandTestGroups(arg) for arg in args], 530 [ExpandTestGroups(arg) for arg in args],
526 []) 531 [])
527 532
528 args_suites = OrderedDict() # Used as set 533 args_suites = OrderedDict() # Used as set
529 for arg in args: 534 for arg in args:
530 args_suites[arg.split('/')[0]] = True 535 args_suites[arg.split('/')[0]] = True
531 suite_paths = [ s for s in args_suites if s in suite_paths ] 536 suite_paths = [ s for s in args_suites if s in suite_paths ]
532 537
533 suites = [] 538 suites = []
534 for root in suite_paths: 539 for root in suite_paths:
535 suite = testsuite.TestSuite.LoadTestSuite( 540 suite = testsuite.TestSuite.LoadTestSuite(
536 os.path.join(workspace, "test", root)) 541 os.path.join(BASE_DIR, "test", root))
537 if suite: 542 if suite:
538 suites.append(suite) 543 suites.append(suite)
539 544
540 if options.download_data or options.download_data_only: 545 if options.download_data or options.download_data_only:
541 for s in suites: 546 for s in suites:
542 s.DownloadData() 547 s.DownloadData()
543 548
544 if options.download_data_only: 549 if options.download_data_only:
545 return exit_code 550 return exit_code
546 551
547 for (arch, mode) in options.arch_and_mode: 552 for (arch, mode) in options.arch_and_mode:
548 try: 553 try:
549 code = Execute(arch, mode, args, options, suites, workspace) 554 code = Execute(arch, mode, args, options, suites)
550 except KeyboardInterrupt: 555 except KeyboardInterrupt:
551 return 2 556 return 2
552 exit_code = exit_code or code 557 exit_code = exit_code or code
553 return exit_code 558 return exit_code
554 559
555 560
556 def Execute(arch, mode, args, options, suites, workspace): 561 def Execute(arch, mode, args, options, suites):
557 print(">>> Running tests for %s.%s" % (arch, mode)) 562 print(">>> Running tests for %s.%s" % (arch, mode))
558 563
559 shell_dir = options.shell_dir 564 shell_dir = options.shell_dir
560 if not shell_dir: 565 if not shell_dir:
561 if options.buildbot: 566 if options.buildbot:
562 # TODO(machenbach): Get rid of different output folder location on 567 # TODO(machenbach): Get rid of different output folder location on
563 # buildbot. Currently this is capitalized Release and Debug. 568 # buildbot. Currently this is capitalized Release and Debug.
564 shell_dir = os.path.join(workspace, options.outdir, mode) 569 shell_dir = os.path.join(BASE_DIR, options.outdir, mode)
565 mode = BuildbotToV8Mode(mode) 570 mode = BuildbotToV8Mode(mode)
566 else: 571 else:
567 shell_dir = os.path.join( 572 shell_dir = os.path.join(
568 workspace, 573 BASE_DIR,
569 options.outdir, 574 options.outdir,
570 "%s.%s" % (arch, MODES[mode]["output_folder"]), 575 "%s.%s" % (arch, MODES[mode]["output_folder"]),
571 ) 576 )
572 shell_dir = os.path.relpath(shell_dir)
573 if not os.path.exists(shell_dir): 577 if not os.path.exists(shell_dir):
574 raise Exception('Could not find shell_dir: "%s"' % shell_dir) 578 raise Exception('Could not find shell_dir: "%s"' % shell_dir)
575 579
576 # Populate context object. 580 # Populate context object.
577 mode_flags = MODES[mode]["flags"] 581 mode_flags = MODES[mode]["flags"]
578 timeout = options.timeout 582 timeout = options.timeout
579 if timeout == -1: 583 if timeout == -1:
580 # Simulators are slow, therefore allow a longer default timeout. 584 # Simulators are slow, therefore allow a longer default timeout.
581 if arch in SLOW_ARCHS: 585 if arch in SLOW_ARCHS:
582 timeout = 2 * TIMEOUT_DEFAULT; 586 timeout = 2 * TIMEOUT_DEFAULT;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 run_networked = False 710 run_networked = False
707 elif len(peers) == 1: 711 elif len(peers) == 1:
708 print("No other peers on the network; running tests locally.") 712 print("No other peers on the network; running tests locally.")
709 run_networked = False 713 run_networked = False
710 elif num_tests <= 100: 714 elif num_tests <= 100:
711 print("Less than 100 tests, running them locally.") 715 print("Less than 100 tests, running them locally.")
712 run_networked = False 716 run_networked = False
713 717
714 if run_networked: 718 if run_networked:
715 runner = network_execution.NetworkedRunner(suites, progress_indicator, 719 runner = network_execution.NetworkedRunner(suites, progress_indicator,
716 ctx, peers, workspace) 720 ctx, peers, BASE_DIR)
717 else: 721 else:
718 runner = execution.Runner(suites, progress_indicator, ctx) 722 runner = execution.Runner(suites, progress_indicator, ctx)
719 723
720 exit_code = runner.Run(options.j) 724 exit_code = runner.Run(options.j)
721 overall_duration = time.time() - start_time 725 overall_duration = time.time() - start_time
722 726
723 if options.time: 727 if options.time:
724 verbose.PrintTestDurations(suites, overall_duration) 728 verbose.PrintTestDurations(suites, overall_duration)
725 729
726 if num_tests == 0: 730 if num_tests == 0:
727 print("Warning: no tests were run!") 731 print("Warning: no tests were run!")
728 732
729 return exit_code 733 return exit_code
730 734
731 735
732 if __name__ == "__main__": 736 if __name__ == "__main__":
733 sys.exit(Main()) 737 sys.exit(Main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698