OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging | 5 import logging |
6 import os | 6 import os |
7 import re | 7 import re |
8 | 8 |
9 from pylib import pexpect | 9 from pylib import pexpect |
10 from pylib import ports | 10 from pylib import ports |
11 from pylib.base import base_test_result | 11 from pylib.base import base_test_result |
12 from pylib.base import base_test_runner | 12 from pylib.base import base_test_runner |
13 from pylib.device import device_errors | 13 from pylib.device import device_errors |
14 from pylib.local import local_test_server_spawner | 14 from pylib.local import local_test_server_spawner |
15 from pylib.perf import perf_control | 15 from pylib.perf import perf_control |
16 | 16 |
17 # Test case statuses. | 17 # Test case statuses. |
18 RE_RUN = re.compile('\\[ RUN \\] ?(.*)\r\n') | 18 RE_RUN = re.compile('\\[ RUN \\] ?(.*)\r\n') |
19 RE_FAIL = re.compile('\\[ FAILED \\] ?(.*?)( \\((\\d+) ms\\))?\r\r\n') | 19 RE_FAIL = re.compile('\\[ FAILED \\] ?(.*?)( \\((\\d+) ms\\))?\r\r\n') |
20 RE_OK = re.compile('\\[ OK \\] ?(.*?)( \\((\\d+) ms\\))?\r\r\n') | 20 RE_OK = re.compile('\\[ OK \\] ?(.*?)( \\((\\d+) ms\\))?\r\r\n') |
21 | 21 |
22 # Test run statuses. | 22 # Test run statuses. |
23 RE_PASSED = re.compile('\\[ PASSED \\] ?(.*)\r\n') | 23 RE_PASSED = re.compile('\\[ PASSED \\] ?(.*)\r\n') |
24 RE_RUNNER_FAIL = re.compile('\\[ RUNNER_FAILED \\] ?(.*)\r\n') | 24 RE_RUNNER_FAIL = re.compile('\\[ RUNNER_FAILED \\] ?(.*)\r\n') |
25 # Signal handlers are installed before starting tests | 25 # Signal handlers are installed before starting tests |
26 # to output the CRASHED marker when a crash happens. | 26 # to output the CRASHED marker when a crash happens. |
27 RE_CRASH = re.compile('\\[ CRASHED \\](.*)\r\n') | 27 RE_CRASH = re.compile('\\[ CRASHED \\](.*)\r\n') |
28 | 28 |
| 29 # Bots that don't output anything for 20 minutes get timed out, so that's our |
| 30 # hard cap. |
| 31 _INFRA_STDOUT_TIMEOUT = 20 * 60 |
| 32 |
29 | 33 |
30 def _TestSuiteRequiresMockTestServer(suite_name): | 34 def _TestSuiteRequiresMockTestServer(suite_name): |
31 """Returns True if the test suite requires mock test server.""" | 35 """Returns True if the test suite requires mock test server.""" |
32 tests_require_net_test_server = ['unit_tests', 'net_unittests', | 36 tests_require_net_test_server = ['unit_tests', 'net_unittests', |
| 37 'components_browsertests', |
33 'content_unittests', | 38 'content_unittests', |
34 'content_browsertests'] | 39 'content_browsertests'] |
35 return (suite_name in | 40 return (suite_name in |
36 tests_require_net_test_server) | 41 tests_require_net_test_server) |
37 | 42 |
38 def _TestSuiteRequiresHighPerfMode(suite_name): | 43 def _TestSuiteRequiresHighPerfMode(suite_name): |
39 """Returns True if the test suite requires high performance mode.""" | 44 """Returns True if the test suite requires high performance mode.""" |
40 return 'perftests' in suite_name | 45 return 'perftests' in suite_name |
41 | 46 |
42 class TestRunner(base_test_runner.BaseTestRunner): | 47 class TestRunner(base_test_runner.BaseTestRunner): |
43 def __init__(self, test_options, device, test_package): | 48 def __init__(self, test_options, device, test_package): |
44 """Single test suite attached to a single device. | 49 """Single test suite attached to a single device. |
45 | 50 |
46 Args: | 51 Args: |
47 test_options: A GTestOptions object. | 52 test_options: A GTestOptions object. |
48 device: Device to run the tests. | 53 device: Device to run the tests. |
49 test_package: An instance of TestPackage class. | 54 test_package: An instance of TestPackage class. |
50 """ | 55 """ |
51 | 56 |
52 super(TestRunner, self).__init__(device, test_options.tool, | 57 super(TestRunner, self).__init__(device, test_options.tool) |
53 test_options.cleanup_test_files) | |
54 | 58 |
55 self.test_package = test_package | 59 self.test_package = test_package |
56 self.test_package.tool = self.tool | 60 self.test_package.tool = self.tool |
57 self._test_arguments = test_options.test_arguments | 61 self._test_arguments = test_options.test_arguments |
58 | 62 |
59 timeout = test_options.timeout | 63 timeout = test_options.timeout |
60 if timeout == 0: | 64 if timeout == 0: |
61 timeout = 60 | 65 timeout = 60 |
62 # On a VM (e.g. chromium buildbots), this timeout is way too small. | 66 # On a VM (e.g. chromium buildbots), this timeout is way too small. |
63 if os.environ.get('BUILDBOT_SLAVENAME'): | 67 if os.environ.get('BUILDBOT_SLAVENAME'): |
64 timeout = timeout * 2 | 68 timeout = timeout * 2 |
65 | 69 |
66 self._timeout = timeout * self.tool.GetTimeoutScale() | 70 self._timeout = min(timeout * self.tool.GetTimeoutScale(), |
| 71 _INFRA_STDOUT_TIMEOUT) |
67 if _TestSuiteRequiresHighPerfMode(self.test_package.suite_name): | 72 if _TestSuiteRequiresHighPerfMode(self.test_package.suite_name): |
68 self._perf_controller = perf_control.PerfControl(self.device) | 73 self._perf_controller = perf_control.PerfControl(self.device) |
69 | 74 |
70 if _TestSuiteRequiresMockTestServer(self.test_package.suite_name): | 75 if _TestSuiteRequiresMockTestServer(self.test_package.suite_name): |
71 self._servers = [ | 76 self._servers = [ |
72 local_test_server_spawner.LocalTestServerSpawner( | 77 local_test_server_spawner.LocalTestServerSpawner( |
73 ports.AllocateTestServerPort(), self.device, self.tool)] | 78 ports.AllocateTestServerPort(), self.device, self.tool)] |
74 else: | 79 else: |
75 self._servers = [] | 80 self._servers = [] |
76 | 81 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 #override | 192 #override |
188 def TearDown(self): | 193 def TearDown(self): |
189 """Cleans up the test enviroment for the test suite.""" | 194 """Cleans up the test enviroment for the test suite.""" |
190 for s in self._servers: | 195 for s in self._servers: |
191 s.TearDown() | 196 s.TearDown() |
192 if _TestSuiteRequiresHighPerfMode(self.test_package.suite_name): | 197 if _TestSuiteRequiresHighPerfMode(self.test_package.suite_name): |
193 self._perf_controller.SetDefaultPerfMode() | 198 self._perf_controller.SetDefaultPerfMode() |
194 self.test_package.ClearApplicationState(self.device) | 199 self.test_package.ClearApplicationState(self.device) |
195 self.tool.CleanUpEnvironment() | 200 self.tool.CleanUpEnvironment() |
196 super(TestRunner, self).TearDown() | 201 super(TestRunner, self).TearDown() |
OLD | NEW |