133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org#!/usr/bin/env python 233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Copyright 2012 the V8 project authors. All rights reserved. 433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Redistribution and use in source and binary forms, with or without 533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# modification, are permitted provided that the following conditions are 633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# met: 733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions of source code must retain the above copyright 933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# notice, this list of conditions and the following disclaimer. 1033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Redistributions in binary form must reproduce the above 1133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# copyright notice, this list of conditions and the following 1233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# disclaimer in the documentation and/or other materials provided 1333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# with the distribution. 1433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# * Neither the name of Google Inc. nor the names of its 1533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# contributors may be used to endorse or promote products derived 1633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# from this software without specific prior written permission. 1733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# 1833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 319f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.orgimport itertools 3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport multiprocessing 3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport optparse 3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport os 3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom os.path import join 366bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.orgimport shlex 3733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport subprocess 3833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport sys 3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport time 4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import execution 4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import progress 4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import testsuite 4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import utils 4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import verbose 4633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.network import network_execution 4733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.objects import context 4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgARCH_GUESS = utils.DefaultArch() 5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgDEFAULT_TESTS = ["mjsunit", "cctest", "message", "preparser"] 5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgTIMEOUT_DEFAULT = 60 5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgTIMEOUT_SCALEFACTOR = {"debug" : 4, 5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "release" : 1 } 5533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org# Use this to run several variants of the tests. 5737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgVARIANT_FLAGS = { 5837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org "default": [], 5937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org "stress": ["--stress-opt", "--always-opt"], 6037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org "nocrankshaft": ["--nocrankshaft"]} 6137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 6237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.orgVARIANTS = ["default", "stress", "nocrankshaft"] 6337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org 6433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgMODE_FLAGS = { 65c1956679bbba3170352a8cc735e8218f9dbe6867jkummerow@chromium.org "debug" : ["--nobreak-on-abort", "--nodead-code-elimination", 662e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org "--nofold-constants", "--enable-slow-asserts", 672e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org "--debug-code", "--verify-heap"], 682e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org "release" : ["--nobreak-on-abort", "--nodead-code-elimination", 692e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org "--nofold-constants"]} 7033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 7189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgSUPPORTED_ARCHS = ["android_arm", 7289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org "android_ia32", 7389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org "arm", 7489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org "ia32", 7589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org "mipsel", 76e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "nacl_ia32", 77e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "nacl_x64", 7889e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org "x64"] 7972204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org# Double the timeout for these: 8072204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.orgSLOW_ARCHS = ["android_arm", 8172204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org "android_ia32", 8272204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org "arm", 83e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "mipsel", 84e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "nacl_ia32", 85e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "nacl_x64"] 8689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 8733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef BuildOptions(): 8933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result = optparse.OptionParser() 9033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--arch", 9133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help=("The architecture to run tests for, " 9233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "'auto' or 'native' for auto-detect"), 9333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="ia32,x64,arm") 9433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--arch-and-mode", 9533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Architecture and mode in the format 'arch.mode'", 9633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=None) 9733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--buildbot", 9833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Adapt to path structure used on buildbots", 9933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 10033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--cat", help="Print the source of the tests", 10133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 102594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org result.add_option("--flaky-tests", 103594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org help="Regard tests marked as flaky (run|skip|dontcare)", 104594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org default="dontcare") 10537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org result.add_option("--slow-tests", 10637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org help="Regard slow tests (run|skip|dontcare)", 10737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org default="dontcare") 10837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org result.add_option("--pass-fail-tests", 10937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org help="Regard pass|fail tests (run|skip|dontcare)", 11037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org default="dontcare") 11133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--command-prefix", 11233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Prepended to each shell command used to run a test", 11333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="") 11433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--download-data", help="Download missing test suite data", 11533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 11633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--extra-flags", 11733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Additional flags to pass to each test command", 11833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="") 11933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--isolates", help="Whether to test isolates", 12033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 12133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("-j", help="The number of parallel tasks to run", 12233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=0, type="int") 12333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("-m", "--mode", 12433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="The test modes in which to run (comma-separated)", 12533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="release,debug") 126528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org result.add_option("--no-i18n", "--noi18n", 127528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org help="Skip internationalization tests", 128528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org default=False, action="store_true") 12933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--no-network", "--nonetwork", 13033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Don't distribute tests on the network", 13133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=(utils.GuessOS() != "linux"), 13233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org dest="no_network", action="store_true") 13333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--no-presubmit", "--nopresubmit", 13433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help='Skip presubmit checks', 13533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, dest="no_presubmit", action="store_true") 13633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--no-stress", "--nostress", 13733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Don't run crankshaft --always-opt --stress-op test", 13833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, dest="no_stress", action="store_true") 139ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org result.add_option("--no-variants", "--novariants", 140ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org help="Don't run any testing variants", 141ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org default=False, dest="no_variants", action="store_true") 14237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org result.add_option("--variants", 14337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org help="Comma-separated list of testing variants") 14433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--outdir", help="Base directory with compile output", 14533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="out") 14633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("-p", "--progress", 14733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help=("The style of progress indicator" 14833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org " (verbose, dots, color, mono)"), 14933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org choices=progress.PROGRESS_INDICATORS.keys(), default="mono") 150ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org result.add_option("--quickcheck", default=False, action="store_true", 151ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org help=("Quick check mode (skip slow/flaky tests)")) 15233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--report", help="Print a summary of the tests to be run", 15333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 15433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--shard-count", 15533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Split testsuites into this number of shards", 15633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=1, type="int") 15733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--shard-run", 15833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Run this shard from the split up tests.", 15933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=1, type="int") 16033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--shell", help="DEPRECATED! use --shell-dir", default="") 16133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--shell-dir", help="Directory containing executables", 16233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default="") 16333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--stress-only", 16433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org help="Only run tests with --always-opt --stress-opt", 16533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 16633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--time", help="Print timing information after running", 16733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 16833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("-t", "--timeout", help="Timeout in seconds", 16933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default= -1, type="int") 17033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("-v", "--verbose", help="Verbose output", 17133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 17233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--valgrind", help="Run tests through valgrind", 17333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 17433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org result.add_option("--warn-unused", help="Report unused rules", 17533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org default=False, action="store_true") 176e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org result.add_option("--junitout", help="File name of the JUnit output") 177e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org result.add_option("--junittestsuite", 178e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org help="The testsuite name in the JUnit output file", 179e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org default="v8tests") 18033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return result 18133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 18233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 18333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef ProcessOptions(options): 18433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org global VARIANT_FLAGS 18537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org global VARIANTS 18633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 18733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Architecture and mode related stuff. 18833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.arch_and_mode: 1899f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org options.arch_and_mode = [arch_and_mode.split(".") 1909f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org for arch_and_mode in options.arch_and_mode.split(",")] 1919f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org options.arch = ",".join([tokens[0] for tokens in options.arch_and_mode]) 1929f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org options.mode = ",".join([tokens[1] for tokens in options.arch_and_mode]) 19333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.mode = options.mode.split(",") 19433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for mode in options.mode: 195ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org if not mode.lower() in ["debug", "release", "optdebug"]: 19633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "Unknown mode %s" % mode 19733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return False 19833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.arch in ["auto", "native"]: 19933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.arch = ARCH_GUESS 20033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.arch = options.arch.split(",") 20133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for arch in options.arch: 20289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org if not arch in SUPPORTED_ARCHS: 20333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "Unknown architecture %s" % arch 20433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return False 20533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 2069f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org # Store the final configuration in arch_and_mode list. Don't overwrite 2079f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org # predefined arch_and_mode since it is more expressive than arch and mode. 2089f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org if not options.arch_and_mode: 2099f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org options.arch_and_mode = itertools.product(options.arch, options.mode) 2109f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org 21133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Special processing of other options, sorted alphabetically. 21233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 21333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.buildbot: 21433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Buildbots run presubmit tests as a separate step. 21533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.no_presubmit = True 21633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.no_network = True 21733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.command_prefix: 21833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("Specifying --command-prefix disables network distribution, " 21933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "running tests locally.") 22033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.no_network = True 2216bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org options.command_prefix = shlex.split(options.command_prefix) 222068ea0a6ea115c058d1d9798029bd7fa1eaaa955mstarzinger@chromium.org options.extra_flags = shlex.split(options.extra_flags) 22333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.j == 0: 22433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.j = multiprocessing.cpu_count() 225ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org 226ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org def excl(*args): 227ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org """Returns true if zero or one of multiple arguments are true.""" 228ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org return reduce(lambda x, y: x + y, args) <= 1 229ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org 23037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not excl(options.no_stress, options.stress_only, options.no_variants, 231ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org bool(options.variants), options.quickcheck): 232ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org print("Use only one of --no-stress, --stress-only, --no-variants, " 233ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org "--variants, or --quickcheck.") 234ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org return False 23533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.no_stress: 23637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org VARIANTS = ["default", "nocrankshaft"] 237ed29eb2bdad388c1ce751d68bd4fe6f4f5a7cbc8machenbach@chromium.org if options.no_variants: 23837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org VARIANTS = ["default"] 23937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if options.stress_only: 24037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org VARIANTS = ["stress"] 24137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if options.variants: 24237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org VARIANTS = options.variants.split(",") 24337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not set(VARIANTS).issubset(VARIANT_FLAGS.keys()): 24437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org print "All variants must be in %s" % str(VARIANT_FLAGS.keys()) 24537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return False 246ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org if options.quickcheck: 247ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org VARIANTS = ["default", "stress"] 248ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org options.flaky_tests = "skip" 249ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org options.slow_tests = "skip" 250ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org options.pass_fail_tests = "skip" 251ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org 25233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not options.shell_dir: 25333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.shell: 25433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "Warning: --shell is deprecated, use --shell-dir instead." 25533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.shell_dir = os.path.dirname(options.shell) 25633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.valgrind: 25733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_valgrind = os.path.join("tools", "run-valgrind.py") 25833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # This is OK for distributed running, so we don't need to set no_network. 2596bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org options.command_prefix = (["python", "-u", run_valgrind] + 26033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.command_prefix) 26137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org def CheckTestMode(name, option): 26237be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not option in ["run", "skip", "dontcare"]: 26337be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org print "Unknown %s mode %s" % (name, option) 26437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return False 26537be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return True 26637be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not CheckTestMode("flaky test", options.flaky_tests): 26737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return False 26837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not CheckTestMode("slow test", options.slow_tests): 26937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org return False 27037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org if not CheckTestMode("pass|fail test", options.pass_fail_tests): 271594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return False 272528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org if not options.no_i18n: 273528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org DEFAULT_TESTS.append("intl") 27433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return True 27533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 27633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 27733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef ShardTests(tests, shard_count, shard_run): 27833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if shard_count < 2: 27933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return tests 28033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if shard_run < 1 or shard_run > shard_count: 28133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "shard-run not a valid number, should be in [1:shard-count]" 28233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "defaulting back to running all tests" 28333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return tests 28433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org count = 0 28533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shard = [] 28633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for test in tests: 28733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if count % shard_count == shard_run - 1: 28833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shard.append(test) 28933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org count += 1 29033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return shard 29133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 29233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 29333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef Main(): 29433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org parser = BuildOptions() 29533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org (options, args) = parser.parse_args() 29633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not ProcessOptions(options): 29733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org parser.print_help() 29833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return 1 29933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 30033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org exit_code = 0 30133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org workspace = os.path.abspath(join(os.path.dirname(sys.argv[0]), "..")) 30233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not options.no_presubmit: 30333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print ">>> running presubmit tests" 30433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org code = subprocess.call( 30533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org [sys.executable, join(workspace, "tools", "presubmit.py")]) 30633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org exit_code = code 30733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 30833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suite_paths = utils.GetSuitePaths(join(workspace, "test")) 30933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 31033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if len(args) == 0: 311c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org suite_paths = [ s for s in DEFAULT_TESTS if s in suite_paths ] 31233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 31333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org args_suites = set() 31433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for arg in args: 31533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suite = arg.split(os.path.sep)[0] 31633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not suite in args_suites: 31733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org args_suites.add(suite) 318c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org suite_paths = [ s for s in args_suites if s in suite_paths ] 31933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 32033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suites = [] 32133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for root in suite_paths: 32233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suite = testsuite.TestSuite.LoadTestSuite( 32333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org os.path.join(workspace, "test", root)) 32433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if suite: 32533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org suites.append(suite) 32633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 32733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.download_data: 32833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for s in suites: 32933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org s.DownloadData() 33033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3319f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org for (arch, mode) in options.arch_and_mode: 3329f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org code = Execute(arch, mode, args, options, suites, workspace) 3339f18d9111f676f2899d9aa2444130c985eb75395machenbach@chromium.org exit_code = exit_code or code 33433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return exit_code 33533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 33633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 33733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef Execute(arch, mode, args, options, suites, workspace): 33833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print(">>> Running tests for %s.%s" % (arch, mode)) 33933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 34033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shell_dir = options.shell_dir 34133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not shell_dir: 34233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.buildbot: 34333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shell_dir = os.path.join(workspace, options.outdir, mode) 34433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org mode = mode.lower() 34533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 34633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shell_dir = os.path.join(workspace, options.outdir, 34733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "%s.%s" % (arch, mode)) 34833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org shell_dir = os.path.relpath(shell_dir) 34933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 350ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org if mode == "optdebug": 351ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org mode = "debug" # "optdebug" is just an alias. 352ddf3811f8018dfe9e8ec7d1b8f4a8be1122fd767machenbach@chromium.org 35333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Populate context object. 35433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org mode_flags = MODE_FLAGS[mode] 35589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org timeout = options.timeout 35689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org if timeout == -1: 35789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org # Simulators are slow, therefore allow a longer default timeout. 35872204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org if arch in SLOW_ARCHS: 359e97852de34e44a479f092bd2449134e707cd9cf1dslomov@chromium.org timeout = 2 * TIMEOUT_DEFAULT; 36089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org else: 36189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org timeout = TIMEOUT_DEFAULT; 36289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 36372204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org timeout *= TIMEOUT_SCALEFACTOR[mode] 36433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org ctx = context.Context(arch, mode, shell_dir, 36533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org mode_flags, options.verbose, 36689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org timeout, options.isolates, 36733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org options.command_prefix, 368528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org options.extra_flags, 369528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org options.no_i18n) 37033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 37133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Find available test suites and read test cases from them. 37233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org variables = { 37333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "mode": mode, 37433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "arch": arch, 37533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org "system": utils.GuessOS(), 376fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "isolates": options.isolates, 377fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "deopt_fuzzer": False, 378528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org "no_i18n": options.no_i18n, 37933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 38033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org all_tests = [] 38133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org num_tests = 0 38233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org test_id = 0 38333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for s in suites: 38433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org s.ReadStatusFile(variables) 38533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org s.ReadTestCases(ctx) 38633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if len(args) > 0: 38733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org s.FilterTestCasesByArgs(args) 38872204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org all_tests += s.tests 38937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org s.FilterTestCasesByStatus(options.warn_unused, options.flaky_tests, 39037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org options.slow_tests, options.pass_fail_tests) 39133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.cat: 39233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org verbose.PrintTestSource(s.tests) 39333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org continue 39437be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org variant_flags = [VARIANT_FLAGS[var] for var in VARIANTS] 395690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org s.tests = [ t.CopyAddingFlags(v) 396690083842e7c67a362017dae50909d4bb0b2a9c2mstarzinger@chromium.org for t in s.tests 39737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org for v in s.VariantFlags(t, variant_flags) ] 39833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org s.tests = ShardTests(s.tests, options.shard_count, options.shard_run) 39933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org num_tests += len(s.tests) 40033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for t in s.tests: 40133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org t.id = test_id 40233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org test_id += 1 40333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 40433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.cat: 40533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return 0 # We're done here. 40633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 40733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.report: 40833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org verbose.PrintReport(all_tests) 40933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 41033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if num_tests == 0: 41133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print "No tests to run." 41233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return 0 41333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 41433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Run the tests, either locally or distributed on the network. 41533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org try: 41633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org start_time = time.time() 41733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() 418e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if options.junitout: 419e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org progress_indicator = progress.JUnitTestProgressIndicator( 420e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org progress_indicator, options.junitout, options.junittestsuite) 42133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 42233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_networked = not options.no_network 42333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not run_networked: 42433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("Network distribution disabled, running tests locally.") 42533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org elif utils.GuessOS() != "linux": 42633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("Network distribution is only supported on Linux, sorry!") 42733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_networked = False 42833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org peers = [] 42933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if run_networked: 43033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org peers = network_execution.GetPeers() 43133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if not peers: 43233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("No connection to distribution server; running tests locally.") 43333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_networked = False 43433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org elif len(peers) == 1: 43533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("No other peers on the network; running tests locally.") 43633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_networked = False 43733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org elif num_tests <= 100: 43833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org print("Less than 100 tests, running them locally.") 43933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org run_networked = False 44033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 44133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if run_networked: 44233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org runner = network_execution.NetworkedRunner(suites, progress_indicator, 44333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org ctx, peers, workspace) 44433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 44533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org runner = execution.Runner(suites, progress_indicator, ctx) 44633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 44733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org exit_code = runner.Run(options.j) 44833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if runner.terminate: 44933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return exit_code 45033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org overall_duration = time.time() - start_time 45133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org except KeyboardInterrupt: 45233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return 1 45333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 45433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if options.time: 45533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org verbose.PrintTestDurations(suites, overall_duration) 45633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return exit_code 45733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 45833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 45933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgif __name__ == "__main__": 46033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org sys.exit(Main()) 461