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

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

Issue 11269036: Support HTTP test-server based net unit tests on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Clang build + sync Created 8 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 | Annotate | Revision Log
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 import contextlib 5 import contextlib
6 import httplib 6 import httplib
7 import logging 7 import logging
8 import os 8 import os
9 import tempfile 9 import tempfile
10 import time 10 import time
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 if not self.HasTests(): 75 if not self.HasTests():
76 return True 76 return True
77 self.SetUp() 77 self.SetUp()
78 try: 78 try:
79 return self.RunTests() 79 return self.RunTests()
80 finally: 80 finally:
81 self.TearDown() 81 self.TearDown()
82 82
83 def SetUp(self): 83 def SetUp(self):
84 """Called before tests run.""" 84 """Called before tests run."""
85 pass 85 Forwarder.KillDevice(self.adb)
86 86
87 def HasTests(self): 87 def HasTests(self):
88 """Whether the test suite has tests to run.""" 88 """Whether the test suite has tests to run."""
89 return True 89 return True
90 90
91 def RunTests(self): 91 def RunTests(self):
92 """Runs the tests. Need to be overridden.""" 92 """Runs the tests. Need to be overridden."""
93 raise NotImplementedError 93 raise NotImplementedError
94 94
95 def TearDown(self): 95 def TearDown(self):
(...skipping 26 matching lines...) Expand all
122 self._http_server = lighttpd_server.LighttpdServer( 122 self._http_server = lighttpd_server.LighttpdServer(
123 document_root, port=port, extra_config_contents=extra_config_contents) 123 document_root, port=port, extra_config_contents=extra_config_contents)
124 if self._http_server.StartupHttpServer(): 124 if self._http_server.StartupHttpServer():
125 logging.info('http server started: http://localhost:%s', 125 logging.info('http server started: http://localhost:%s',
126 self._http_server.port) 126 self._http_server.port)
127 else: 127 else:
128 logging.critical('Failed to start http server') 128 logging.critical('Failed to start http server')
129 self.StartForwarderForHttpServer() 129 self.StartForwarderForHttpServer()
130 return (self._forwarder_device_port, self._http_server.port) 130 return (self._forwarder_device_port, self._http_server.port)
131 131
132 def _CreateAndRunForwarder(
133 self, adb, port_pairs, tool, host_name, build_type):
134 """Creates and run a forwarder."""
135 forwarder = Forwarder(adb, build_type)
136 forwarder.Run(port_pairs, tool, host_name)
137 return forwarder
138
132 def StartForwarder(self, port_pairs): 139 def StartForwarder(self, port_pairs):
133 """Starts TCP traffic forwarding for the given |port_pairs|. 140 """Starts TCP traffic forwarding for the given |port_pairs|.
134 141
135 Args: 142 Args:
136 host_port_pairs: A list of (device_port, local_port) tuples to forward. 143 host_port_pairs: A list of (device_port, local_port) tuples to forward.
137 """ 144 """
138 if self._forwarder: 145 if self._forwarder:
139 self._forwarder.Close() 146 self._forwarder.Close()
140 self._forwarder = Forwarder( 147 self._forwarder = self._CreateAndRunForwarder(
141 self.adb, port_pairs, self.tool, '127.0.0.1', self.build_type) 148 self.adb, port_pairs, self.tool, '127.0.0.1', self.build_type)
142 149
143 def StartForwarderForHttpServer(self): 150 def StartForwarderForHttpServer(self):
144 """Starts a forwarder for the HTTP server. 151 """Starts a forwarder for the HTTP server.
145 152
146 The forwarder forwards HTTP requests and responses between host and device. 153 The forwarder forwards HTTP requests and responses between host and device.
147 """ 154 """
148 self.StartForwarder([(self._forwarder_device_port, self._http_server.port)]) 155 self.StartForwarder([(self._forwarder_device_port, self._http_server.port)])
149 156
150 def RestartHttpServerForwarderIfNecessary(self): 157 def RestartHttpServerForwarderIfNecessary(self):
151 """Restarts the forwarder if it's not open.""" 158 """Restarts the forwarder if it's not open."""
152 # Checks to see if the http server port is being used. If not forwards the 159 # Checks to see if the http server port is being used. If not forwards the
153 # request. 160 # request.
154 # TODO(dtrainor): This is not always reliable because sometimes the port 161 # TODO(dtrainor): This is not always reliable because sometimes the port
155 # will be left open even after the forwarder has been killed. 162 # will be left open even after the forwarder has been killed.
156 if not ports.IsDevicePortUsed(self.adb, 163 if not ports.IsDevicePortUsed(self.adb,
157 self._forwarder_device_port): 164 self._forwarder_device_port):
158 self.StartForwarderForHttpServer() 165 self.StartForwarderForHttpServer()
159 166
160 def ShutdownHelperToolsForTestSuite(self): 167 def ShutdownHelperToolsForTestSuite(self):
161 """Shuts down the server and the forwarder.""" 168 """Shuts down the server and the forwarder."""
162 # Forwarders should be killed before the actual servers they're forwarding 169 # Forwarders should be killed before the actual servers they're forwarding
163 # to as they are clients potentially with open connections and to allow for 170 # to as they are clients potentially with open connections and to allow for
164 # proper hand-shake/shutdown. 171 # proper hand-shake/shutdown.
165 if self._forwarder or self._spawner_forwarder: 172 Forwarder.KillDevice(self.adb)
166 # Kill all forwarders on the device and then kill the process on the host
167 # (if it exists)
168 self.adb.KillAll('device_forwarder')
169 if self._forwarder:
170 self._forwarder.Close()
171 if self._spawner_forwarder:
172 self._spawner_forwarder.Close()
173 if self._http_server: 173 if self._http_server:
174 self._http_server.ShutdownHttpServer() 174 self._http_server.ShutdownHttpServer()
175 if self._spawning_server: 175 if self._spawning_server:
176 self._spawning_server.Stop() 176 self._spawning_server.Stop()
177 self.flags.Restore() 177 self.flags.Restore()
178 178
179 def LaunchChromeTestServerSpawner(self): 179 def LaunchChromeTestServerSpawner(self):
180 """Launches test server spawner.""" 180 """Launches test server spawner."""
181 server_ready = False 181 server_ready = False
182 error_msgs = [] 182 error_msgs = []
(...skipping 14 matching lines...) Expand all
197 break 197 break
198 else: 198 else:
199 error_msgs.append(error_msg) 199 error_msgs.append(error_msg)
200 self._spawning_server.Stop() 200 self._spawning_server.Stop()
201 # Wait for 2 seconds then restart. 201 # Wait for 2 seconds then restart.
202 time.sleep(2) 202 time.sleep(2)
203 if not server_ready: 203 if not server_ready:
204 logging.error(';'.join(error_msgs)) 204 logging.error(';'.join(error_msgs))
205 raise Exception('Can not start the test spawner server.') 205 raise Exception('Can not start the test spawner server.')
206 self._PushTestServerPortInfoToDevice() 206 self._PushTestServerPortInfoToDevice()
207 self._spawner_forwarder = Forwarder( 207 self._spawner_forwarder = self._CreateAndRunForwarder(
208 self.adb, 208 self.adb,
209 [(self.test_server_spawner_port, self.test_server_spawner_port)], 209 [(self.test_server_spawner_port, self.test_server_spawner_port)],
210 self.tool, '127.0.0.1', self.build_type) 210 self.tool, '127.0.0.1', self.build_type)
OLDNEW
« no previous file with comments | « no previous file | build/android/pylib/base_test_sharder.py » ('j') | tools/android/forwarder2/socket.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698