| 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 """Base class for running tests on a single device.""" | 5 """Base class for running tests on a single device.""" | 
| 6 | 6 | 
| 7 import contextlib | 7 import contextlib | 
| 8 import httplib | 8 import httplib | 
| 9 import logging | 9 import logging | 
| 10 import os | 10 import os | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 21 # TODO(frankf): Move this to pylib/utils | 21 # TODO(frankf): Move this to pylib/utils | 
| 22 import lighttpd_server | 22 import lighttpd_server | 
| 23 | 23 | 
| 24 | 24 | 
| 25 # A file on device to store ports of net test server. The format of the file is | 25 # A file on device to store ports of net test server. The format of the file is | 
| 26 # test-spawner-server-port:test-server-port | 26 # test-spawner-server-port:test-server-port | 
| 27 NET_TEST_SERVER_PORT_INFO_FILE = 'net-test-server-ports' | 27 NET_TEST_SERVER_PORT_INFO_FILE = 'net-test-server-ports' | 
| 28 | 28 | 
| 29 | 29 | 
| 30 class BaseTestRunner(object): | 30 class BaseTestRunner(object): | 
| 31   """Base class for running tests on a single device. | 31   """Base class for running tests on a single device.""" | 
| 32 | 32 | 
| 33   A subclass should implement RunTests() with no parameter, so that calling | 33   def __init__(self, device, tool, build_type, push_deps=True, | 
| 34   the Run() method will set up tests, run them and tear them down. | 34                cleanup_test_files=False): | 
| 35   """ |  | 
| 36 |  | 
| 37   def __init__(self, device, tool, build_type, push_deps): |  | 
| 38     """ | 35     """ | 
| 39       Args: | 36       Args: | 
| 40         device: Tests will run on the device of this ID. | 37         device: Tests will run on the device of this ID. | 
| 41         shard_index: Index number of the shard on which the test suite will run. | 38         tool: Name of the Valgrind tool. | 
| 42         build_type: 'Release' or 'Debug'. | 39         build_type: 'Release' or 'Debug'. | 
| 43         push_deps: If True, push all dependencies to the device. | 40         push_deps: If True, push all dependencies to the device. | 
|  | 41         cleanup_test_files: Whether or not to cleanup test files on device. | 
| 44     """ | 42     """ | 
| 45     self.device = device | 43     self.device = device | 
| 46     self.adb = android_commands.AndroidCommands(device=device) | 44     self.adb = android_commands.AndroidCommands(device=device) | 
| 47     self.tool = CreateTool(tool, self.adb) | 45     self.tool = CreateTool(tool, self.adb) | 
| 48     self._http_server = None | 46     self._http_server = None | 
| 49     self._forwarder = None | 47     self._forwarder = None | 
| 50     self._forwarder_device_port = 8000 | 48     self._forwarder_device_port = 8000 | 
| 51     self.forwarder_base_url = ('http://localhost:%d' % | 49     self.forwarder_base_url = ('http://localhost:%d' % | 
| 52         self._forwarder_device_port) | 50         self._forwarder_device_port) | 
| 53     self.flags = FlagChanger(self.adb) | 51     self.flags = FlagChanger(self.adb) | 
| 54     self.flags.AddFlags(['--disable-fre']) | 52     self.flags.AddFlags(['--disable-fre']) | 
| 55     self._spawning_server = None | 53     self._spawning_server = None | 
| 56     self._spawner_forwarder = None | 54     self._spawner_forwarder = None | 
| 57     # We will allocate port for test server spawner when calling method | 55     # We will allocate port for test server spawner when calling method | 
| 58     # LaunchChromeTestServerSpawner and allocate port for test server when | 56     # LaunchChromeTestServerSpawner and allocate port for test server when | 
| 59     # starting it in TestServerThread. | 57     # starting it in TestServerThread. | 
| 60     self.test_server_spawner_port = 0 | 58     self.test_server_spawner_port = 0 | 
| 61     self.test_server_port = 0 | 59     self.test_server_port = 0 | 
| 62     self.build_type = build_type | 60     self.build_type = build_type | 
| 63     self._push_deps = push_deps | 61     self._push_deps = push_deps | 
|  | 62     self._cleanup_test_files = cleanup_test_files | 
| 64 | 63 | 
| 65   def _PushTestServerPortInfoToDevice(self): | 64   def _PushTestServerPortInfoToDevice(self): | 
| 66     """Pushes the latest port information to device.""" | 65     """Pushes the latest port information to device.""" | 
| 67     self.adb.SetFileContents(self.adb.GetExternalStorage() + '/' + | 66     self.adb.SetFileContents(self.adb.GetExternalStorage() + '/' + | 
| 68                              NET_TEST_SERVER_PORT_INFO_FILE, | 67                              NET_TEST_SERVER_PORT_INFO_FILE, | 
| 69                              '%d:%d' % (self.test_server_spawner_port, | 68                              '%d:%d' % (self.test_server_spawner_port, | 
| 70                                         self.test_server_port)) | 69                                         self.test_server_port)) | 
| 71 | 70 | 
| 72   def RunTest(self, test): | 71   def RunTest(self, test): | 
| 73     """Runs a test. Needs to be overridden. | 72     """Runs a test. Needs to be overridden. | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 103           ((push_size_after[0] - push_size_before[0]) / float(2 ** 20))) | 102           ((push_size_after[0] - push_size_before[0]) / float(2 ** 20))) | 
| 104       logging.warning( | 103       logging.warning( | 
| 105           'Total data transferred: %0.3fMB' % | 104           'Total data transferred: %0.3fMB' % | 
| 106           ((push_size_after[1] - push_size_before[1]) / float(2 ** 20))) | 105           ((push_size_after[1] - push_size_before[1]) / float(2 ** 20))) | 
| 107     else: | 106     else: | 
| 108       logging.warning('Skipping pushing data to device.') | 107       logging.warning('Skipping pushing data to device.') | 
| 109 | 108 | 
| 110   def TearDown(self): | 109   def TearDown(self): | 
| 111     """Run once after all tests are run.""" | 110     """Run once after all tests are run.""" | 
| 112     self.ShutdownHelperToolsForTestSuite() | 111     self.ShutdownHelperToolsForTestSuite() | 
|  | 112     if self._cleanup_test_files: | 
|  | 113       self.adb.RemovePushedFiles() | 
| 113 | 114 | 
| 114   def LaunchTestHttpServer(self, document_root, port=None, | 115   def LaunchTestHttpServer(self, document_root, port=None, | 
| 115                            extra_config_contents=None): | 116                            extra_config_contents=None): | 
| 116     """Launches an HTTP server to serve HTTP tests. | 117     """Launches an HTTP server to serve HTTP tests. | 
| 117 | 118 | 
| 118     Args: | 119     Args: | 
| 119       document_root: Document root of the HTTP server. | 120       document_root: Document root of the HTTP server. | 
| 120       port: port on which we want to the http server bind. | 121       port: port on which we want to the http server bind. | 
| 121       extra_config_contents: Extra config contents for the HTTP server. | 122       extra_config_contents: Extra config contents for the HTTP server. | 
| 122     """ | 123     """ | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 209         break | 210         break | 
| 210       else: | 211       else: | 
| 211         error_msgs.append(error_msg) | 212         error_msgs.append(error_msg) | 
| 212       self._spawning_server.Stop() | 213       self._spawning_server.Stop() | 
| 213       # Wait for 2 seconds then restart. | 214       # Wait for 2 seconds then restart. | 
| 214       time.sleep(2) | 215       time.sleep(2) | 
| 215     if not server_ready: | 216     if not server_ready: | 
| 216       logging.error(';'.join(error_msgs)) | 217       logging.error(';'.join(error_msgs)) | 
| 217       raise Exception('Can not start the test spawner server.') | 218       raise Exception('Can not start the test spawner server.') | 
| 218     self._PushTestServerPortInfoToDevice() | 219     self._PushTestServerPortInfoToDevice() | 
| OLD | NEW | 
|---|