Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: build/android/pylib/base/base_test_runner.py

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 # TODO(jbudorick) Deprecate and remove this class and all subclasses after 7 # TODO(jbudorick) Deprecate and remove this class and all subclasses after
8 # any relevant parts have been ported to the new environment + test instance 8 # any relevant parts have been ported to the new environment + test instance
9 # model. 9 # model.
10 10
11 import logging 11 import logging
12 import time
13 12
14 from pylib import ports 13 from pylib import ports
15 from pylib.chrome_test_server_spawner import SpawningServer
16 from pylib.device import device_utils 14 from pylib.device import device_utils
17 from pylib.forwarder import Forwarder 15 from pylib.forwarder import Forwarder
18 from pylib.valgrind_tools import CreateTool 16 from pylib.valgrind_tools import CreateTool
19 # TODO(frankf): Move this to pylib/utils 17 # TODO(frankf): Move this to pylib/utils
20 import lighttpd_server 18 import lighttpd_server
21 19
22 20
23 # A file on device to store ports of net test server. The format of the file is 21 # A file on device to store ports of net test server. The format of the file is
24 # test-spawner-server-port:test-server-port 22 # test-spawner-server-port:test-server-port
25 NET_TEST_SERVER_PORT_INFO_FILE = 'net-test-server-ports' 23 NET_TEST_SERVER_PORT_INFO_FILE = 'net-test-server-ports'
26 24
27 25
28 class BaseTestRunner(object): 26 class BaseTestRunner(object):
29 """Base class for running tests on a single device.""" 27 """Base class for running tests on a single device."""
30 28
31 def __init__(self, device_serial, tool, cleanup_test_files=False): 29 def __init__(self, device_serial, tool, cleanup_test_files=False):
32 """ 30 """
33 Args: 31 Args:
34 device: Tests will run on the device of this ID. 32 device: Tests will run on the device of this ID.
35 tool: Name of the Valgrind tool. 33 tool: Name of the Valgrind tool.
36 cleanup_test_files: Whether or not to cleanup test files on device. 34 cleanup_test_files: Whether or not to cleanup test files on device.
37 """ 35 """
38 self.device_serial = device_serial 36 self.device_serial = device_serial
39 self.device = device_utils.DeviceUtils(device_serial) 37 self.device = device_utils.DeviceUtils(device_serial)
40 self.tool = CreateTool(tool, self.device) 38 self.tool = CreateTool(tool, self.device)
41 self._http_server = None 39 self._http_server = None
42 self._forwarder_device_port = 8000 40 self._forwarder_device_port = 8000
43 self.forwarder_base_url = ('http://localhost:%d' % 41 self.forwarder_base_url = ('http://localhost:%d' %
44 self._forwarder_device_port) 42 self._forwarder_device_port)
45 self._spawning_server = None
46 # We will allocate port for test server spawner when calling method 43 # We will allocate port for test server spawner when calling method
47 # LaunchChromeTestServerSpawner and allocate port for test server when 44 # LaunchChromeTestServerSpawner and allocate port for test server when
48 # starting it in TestServerThread. 45 # starting it in TestServerThread.
49 self.test_server_spawner_port = 0 46 self.test_server_spawner_port = 0
50 self.test_server_port = 0 47 self.test_server_port = 0
51 self._cleanup_test_files = cleanup_test_files 48 self._cleanup_test_files = cleanup_test_files
52 49
53 def _PushTestServerPortInfoToDevice(self): 50 def _PushTestServerPortInfoToDevice(self):
54 """Pushes the latest port information to device.""" 51 """Pushes the latest port information to device."""
55 self.device.WriteFile( 52 self.device.WriteFile(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 # TODO(dtrainor): This is not always reliable because sometimes the port 136 # TODO(dtrainor): This is not always reliable because sometimes the port
140 # will be left open even after the forwarder has been killed. 137 # will be left open even after the forwarder has been killed.
141 if not ports.IsDevicePortUsed(self.device, self._forwarder_device_port): 138 if not ports.IsDevicePortUsed(self.device, self._forwarder_device_port):
142 self._ForwardPortsForHttpServer() 139 self._ForwardPortsForHttpServer()
143 140
144 def ShutdownHelperToolsForTestSuite(self): 141 def ShutdownHelperToolsForTestSuite(self):
145 """Shuts down the server and the forwarder.""" 142 """Shuts down the server and the forwarder."""
146 if self._http_server: 143 if self._http_server:
147 self._UnmapPorts([(self._forwarder_device_port, self._http_server.port)]) 144 self._UnmapPorts([(self._forwarder_device_port, self._http_server.port)])
148 self._http_server.ShutdownHttpServer() 145 self._http_server.ShutdownHttpServer()
149 if self._spawning_server:
150 self._spawning_server.Stop()
151 146
152 def CleanupSpawningServerState(self):
153 """Tells the spawning server to clean up any state.
154
155 If the spawning server is reused for multiple tests, this should be called
156 after each test to prevent tests affecting each other.
157 """
158 if self._spawning_server:
159 self._spawning_server.CleanupState()
160
161 def LaunchChromeTestServerSpawner(self):
162 """Launches test server spawner."""
163 server_ready = False
164 error_msgs = []
165 # TODO(pliard): deflake this function. The for loop should be removed as
166 # well as IsHttpServerConnectable(). spawning_server.Start() should also
167 # block until the server is ready.
168 # Try 3 times to launch test spawner server.
169 for _ in xrange(0, 3):
170 self.test_server_spawner_port = ports.AllocateTestServerPort()
171 self._ForwardPorts(
172 [(self.test_server_spawner_port, self.test_server_spawner_port)])
173 self._spawning_server = SpawningServer(self.test_server_spawner_port,
174 self.device,
175 self.tool)
176 self._spawning_server.Start()
177 server_ready, error_msg = ports.IsHttpServerConnectable(
178 '127.0.0.1', self.test_server_spawner_port, path='/ping',
179 expected_read='ready')
180 if server_ready:
181 break
182 else:
183 error_msgs.append(error_msg)
184 self._spawning_server.Stop()
185 # Wait for 2 seconds then restart.
186 time.sleep(2)
187 if not server_ready:
188 logging.error(';'.join(error_msgs))
189 raise Exception('Can not start the test spawner server.')
190 self._PushTestServerPortInfoToDevice()
OLDNEW
« no previous file with comments | « build/android/pylib/base/base_test_result.py ('k') | build/android/pylib/base/test_collection.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698