| Index: bin/cros_run_parallel_vm_tests.py
|
| diff --git a/bin/cros_run_parallel_vm_tests.py b/bin/cros_run_parallel_vm_tests.py
|
| index f4d014f74cf031e704c29006333382e090788527..1e9ef64618efd94ffd4f65790aab1831b0e6e906 100755
|
| --- a/bin/cros_run_parallel_vm_tests.py
|
| +++ b/bin/cros_run_parallel_vm_tests.py
|
| @@ -15,21 +15,36 @@ from cros_build_lib import Die
|
| from cros_build_lib import Info
|
|
|
|
|
| +_DEFAULT_BASE_SSH_PORT = 9222
|
| +
|
| class ParallelTestRunner(object):
|
| - """Runs tests on VMs in parallel."""
|
| + """Runs tests on VMs in parallel.
|
|
|
| - _DEFAULT_START_SSH_PORT = 9222
|
| + This class is a simple wrapper around cros_run_vm_test that provides an easy
|
| + way to spawn several test instances in parallel and aggregate the results when
|
| + the tests complete.
|
| + """
|
|
|
| - def __init__(self, tests, results_dir_root=None):
|
| + def __init__(self, tests, base_ssh_port=_DEFAULT_BASE_SSH_PORT, board=None,
|
| + image_path=None, results_dir_root=None):
|
| """Constructs and initializes the test runner class.
|
|
|
| Args:
|
| tests: A list of test names (see run_remote_tests.sh).
|
| + base_ssh_port: The base SSH port. Spawned VMs listen to localhost SSH
|
| + ports incrementally allocated starting from the base one.
|
| + board: The target board. If none, cros_run_vm_tests will use the default
|
| + board.
|
| + image_path: Full path to the VM image. If none, cros_run_vm_tests will use
|
| + the latest image.
|
| results_dir_root: The results directory root. If provided, the results
|
| directory root for each test will be created under it with the SSH port
|
| appended to the test name.
|
| """
|
| self._tests = tests
|
| + self._base_ssh_port = base_ssh_port
|
| + self._board = board
|
| + self._image_path = image_path
|
| self._results_dir_root = results_dir_root
|
|
|
| def _SpawnTests(self):
|
| @@ -43,7 +58,7 @@ class ParallelTestRunner(object):
|
| 'test': the test name;
|
| 'proc': the Popen process instance for this test run.
|
| """
|
| - ssh_port = self._DEFAULT_START_SSH_PORT
|
| + ssh_port = self._base_ssh_port
|
| spawned_tests = []
|
| # Test runs shouldn't need anything from stdin. However, it seems that
|
| # running with stdin leaves the terminal in a bad state so redirect from
|
| @@ -55,6 +70,8 @@ class ParallelTestRunner(object):
|
| '--no_graphics',
|
| '--ssh_port=%d' % ssh_port,
|
| '--test_case=%s' % test ]
|
| + if self._board: args.append('--board=%s' % self._board)
|
| + if self._image_path: args.append('--image_path=%s' % self._image_path)
|
| if self._results_dir_root:
|
| args.append('--results_dir_root=%s/%s.%d' %
|
| (self._results_dir_root, test, ssh_port))
|
| @@ -92,14 +109,28 @@ class ParallelTestRunner(object):
|
| def main():
|
| usage = 'Usage: %prog [options] tests...'
|
| parser = optparse.OptionParser(usage=usage)
|
| - parser.add_option('--results_dir_root', help='Root results directory.')
|
| + parser.add_option('--base_ssh_port', type='int',
|
| + default=_DEFAULT_BASE_SSH_PORT,
|
| + help='Base SSH port. Spawned VMs listen to localhost SSH '
|
| + 'ports incrementally allocated starting from the base one. '
|
| + '[default: %default]')
|
| + parser.add_option('--board',
|
| + help='The target board. If none specified, '
|
| + 'cros_run_vm_test will use the default board.')
|
| + parser.add_option('--image_path',
|
| + help='Full path to the VM image. If none specified, '
|
| + 'cros_run_vm_test will use the latest image.')
|
| + parser.add_option('--results_dir_root',
|
| + help='Root results directory. If none specified, each test '
|
| + 'will store its results in a separate /tmp directory.')
|
| (options, args) = parser.parse_args()
|
|
|
| if not args:
|
| parser.print_help()
|
| Die('no tests provided')
|
|
|
| - runner = ParallelTestRunner(args, options.results_dir_root)
|
| + runner = ParallelTestRunner(args, options.base_ssh_port, options.board,
|
| + options.image_path, options.results_dir_root)
|
| runner.Run()
|
|
|
|
|
|
|