| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium OS 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 """Runs tests on VMs in parallel.""" | 6 """Runs tests on VMs in parallel.""" |
| 7 | 7 |
| 8 import optparse | 8 import optparse |
| 9 import os | 9 import os |
| 10 import subprocess | 10 import subprocess |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 Runs all tests in |self._tests|. Each test is executed on a separate VM. | 57 Runs all tests in |self._tests|. Each test is executed on a separate VM. |
| 58 | 58 |
| 59 Returns: | 59 Returns: |
| 60 A list of test process info objects containing the following dictionary | 60 A list of test process info objects containing the following dictionary |
| 61 entries: | 61 entries: |
| 62 'test': the test name; | 62 'test': the test name; |
| 63 'proc': the Popen process instance for this test run. | 63 'proc': the Popen process instance for this test run. |
| 64 """ | 64 """ |
| 65 ssh_port = self._base_ssh_port | 65 ssh_port = self._base_ssh_port |
| 66 spawned_tests = [] | 66 spawned_tests = [] |
| 67 # Test runs shouldn't need anything from stdin. However, it seems that | |
| 68 # running with stdin leaves the terminal in a bad state so redirect from | |
| 69 # /dev/null. | |
| 70 dev_null = open('/dev/null') | |
| 71 for test in self._tests: | 67 for test in self._tests: |
| 72 args = [ os.path.join(os.path.dirname(__file__), 'cros_run_vm_test'), | 68 args = [ os.path.join(os.path.dirname(__file__), 'cros_run_vm_test'), |
| 73 '--snapshot', # The image is shared so don't modify it. | 69 '--snapshot', # The image is shared so don't modify it. |
| 74 '--no_graphics', | 70 '--no_graphics', |
| 75 '--ssh_port=%d' % ssh_port, | 71 '--ssh_port=%d' % ssh_port, |
| 76 '--test_case=%s' % test ] | 72 '--test_case=%s' % test ] |
| 77 if self._board: args.append('--board=%s' % self._board) | 73 if self._board: args.append('--board=%s' % self._board) |
| 78 if self._image_path: args.append('--image_path=%s' % self._image_path) | 74 if self._image_path: args.append('--image_path=%s' % self._image_path) |
| 79 if self._results_dir_root: | 75 if self._results_dir_root: |
| 80 args.append('--results_dir_root=%s/%s.%d' % | 76 args.append('--results_dir_root=%s/%s.%d' % |
| 81 (self._results_dir_root, test, ssh_port)) | 77 (self._results_dir_root, test, ssh_port)) |
| 82 Info('Running %r...' % args) | 78 Info('Running %r...' % args) |
| 83 output = None | 79 output = None |
| 84 if self._order_output: | 80 if self._order_output: |
| 85 output = tempfile.NamedTemporaryFile(prefix='parallel_vm_test_') | 81 output = tempfile.NamedTemporaryFile(prefix='parallel_vm_test_') |
| 86 Info('Piping output to %s.' % output.name) | 82 Info('Piping output to %s.' % output.name) |
| 87 proc = subprocess.Popen(args, stdin=dev_null, stdout=output, | 83 proc = subprocess.Popen(args, stdout=output, stderr=output) |
| 88 stderr=output) | |
| 89 test_info = { 'test': test, | 84 test_info = { 'test': test, |
| 90 'proc': proc, | 85 'proc': proc, |
| 91 'output': output } | 86 'output': output } |
| 92 spawned_tests.append(test_info) | 87 spawned_tests.append(test_info) |
| 93 ssh_port = ssh_port + 1 | 88 ssh_port = ssh_port + 1 |
| 94 return spawned_tests | 89 return spawned_tests |
| 95 | 90 |
| 96 def _WaitForCompletion(self, spawned_tests): | 91 def _WaitForCompletion(self, spawned_tests): |
| 97 """Waits for tests to complete and returns a list of failed tests. | 92 """Waits for tests to complete and returns a list of failed tests. |
| 98 | 93 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 Die('no tests provided') | 149 Die('no tests provided') |
| 155 | 150 |
| 156 runner = ParallelTestRunner(args, options.base_ssh_port, options.board, | 151 runner = ParallelTestRunner(args, options.base_ssh_port, options.board, |
| 157 options.image_path, options.order_output, | 152 options.image_path, options.order_output, |
| 158 options.results_dir_root) | 153 options.results_dir_root) |
| 159 runner.Run() | 154 runner.Run() |
| 160 | 155 |
| 161 | 156 |
| 162 if __name__ == '__main__': | 157 if __name__ == '__main__': |
| 163 main() | 158 main() |
| OLD | NEW |