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 logging | 7 import logging |
8 import time | 8 import time |
9 | 9 |
10 from pylib import ports | 10 from pylib import ports |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 port: port on which we want to the http server bind. | 108 port: port on which we want to the http server bind. |
109 extra_config_contents: Extra config contents for the HTTP server. | 109 extra_config_contents: Extra config contents for the HTTP server. |
110 """ | 110 """ |
111 self._http_server = lighttpd_server.LighttpdServer( | 111 self._http_server = lighttpd_server.LighttpdServer( |
112 document_root, port=port, extra_config_contents=extra_config_contents) | 112 document_root, port=port, extra_config_contents=extra_config_contents) |
113 if self._http_server.StartupHttpServer(): | 113 if self._http_server.StartupHttpServer(): |
114 logging.info('http server started: http://localhost:%s', | 114 logging.info('http server started: http://localhost:%s', |
115 self._http_server.port) | 115 self._http_server.port) |
116 else: | 116 else: |
117 logging.critical('Failed to start http server') | 117 logging.critical('Failed to start http server') |
118 self._ForwardPortsForHttpServer() | 118 #self._ForwardPortsForHttpServer() |
119 return (self._forwarder_device_port, self._http_server.port) | 119 return (self._forwarder_device_port, self._http_server.port) |
120 | 120 |
121 def _ForwardPorts(self, port_pairs): | 121 def _ForwardPorts(self, port_pairs): |
122 """Forwards a port.""" | 122 """Forwards a port.""" |
123 Forwarder.Map(port_pairs, self.device, self.tool) | 123 Forwarder.Map(port_pairs, self.device, self.tool) |
124 | 124 |
125 def _UnmapPorts(self, port_pairs): | 125 def _UnmapPorts(self, port_pairs): |
126 """Unmap previously forwarded ports.""" | 126 """Unmap previously forwarded ports.""" |
127 for (device_port, _) in port_pairs: | 127 for (device_port, _) in port_pairs: |
128 Forwarder.UnmapDevicePort(device_port, self.device) | 128 Forwarder.UnmapDevicePort(device_port, self.device) |
(...skipping 13 matching lines...) Expand all Loading... | |
142 The forwarder forwards HTTP requests and responses between host and device. | 142 The forwarder forwards HTTP requests and responses between host and device. |
143 """ | 143 """ |
144 self._ForwardPorts([(self._forwarder_device_port, self._http_server.port)]) | 144 self._ForwardPorts([(self._forwarder_device_port, self._http_server.port)]) |
145 | 145 |
146 def _RestartHttpServerForwarderIfNecessary(self): | 146 def _RestartHttpServerForwarderIfNecessary(self): |
147 """Restarts the forwarder if it's not open.""" | 147 """Restarts the forwarder if it's not open.""" |
148 # Checks to see if the http server port is being used. If not forwards the | 148 # Checks to see if the http server port is being used. If not forwards the |
149 # request. | 149 # request. |
150 # TODO(dtrainor): This is not always reliable because sometimes the port | 150 # TODO(dtrainor): This is not always reliable because sometimes the port |
151 # will be left open even after the forwarder has been killed. | 151 # will be left open even after the forwarder has been killed. |
152 return | |
benm (inactive)
2014/07/23 01:09:40
is this right?
mkosiba (inactive)
2014/07/24 16:08:28
accident. reverted.
| |
152 if not ports.IsDevicePortUsed(self.device, self._forwarder_device_port): | 153 if not ports.IsDevicePortUsed(self.device, self._forwarder_device_port): |
153 self._ForwardPortsForHttpServer() | 154 self._ForwardPortsForHttpServer() |
154 | 155 |
155 def ShutdownHelperToolsForTestSuite(self): | 156 def ShutdownHelperToolsForTestSuite(self): |
156 """Shuts down the server and the forwarder.""" | 157 """Shuts down the server and the forwarder.""" |
157 if self._http_server: | 158 if self._http_server: |
158 self._UnmapPorts([(self._forwarder_device_port, self._http_server.port)]) | 159 self._UnmapPorts([(self._forwarder_device_port, self._http_server.port)]) |
159 self._http_server.ShutdownHttpServer() | 160 self._http_server.ShutdownHttpServer() |
160 if self._spawning_server: | 161 if self._spawning_server: |
161 self._spawning_server.Stop() | 162 self._spawning_server.Stop() |
162 | 163 |
163 def CleanupSpawningServerState(self): | 164 def CleanupSpawningServerState(self): |
164 """Tells the spawning server to clean up any state. | 165 """Tells the spawning server to clean up any state. |
165 | 166 |
166 If the spawning server is reused for multiple tests, this should be called | 167 If the spawning server is reused for multiple tests, this should be called |
167 after each test to prevent tests affecting each other. | 168 after each test to prevent tests affecting each other. |
168 """ | 169 """ |
169 if self._spawning_server: | 170 if self._spawning_server: |
170 self._spawning_server.CleanupState() | 171 self._spawning_server.CleanupState() |
171 | 172 |
172 def LaunchChromeTestServerSpawner(self): | 173 def LaunchChromeTestServerSpawner(self): |
173 """Launches test server spawner.""" | 174 """Launches test server spawner.""" |
174 server_ready = False | 175 server_ready = False |
175 error_msgs = [] | 176 error_msgs = [] |
176 # TODO(pliard): deflake this function. The for loop should be removed as | 177 # TODO(pliard): deflake this function. The for loop should be removed as |
177 # well as IsHttpServerConnectable(). spawning_server.Start() should also | 178 # well as IsHttpServerConnectable(). spawning_server.Start() should also |
178 # block until the server is ready. | 179 # block until the server is ready. |
179 # Try 3 times to launch test spawner server. | 180 # Try 3 times to launch test spawner server. |
181 return | |
180 for _ in xrange(0, 3): | 182 for _ in xrange(0, 3): |
181 self.test_server_spawner_port = ports.AllocateTestServerPort() | 183 self.test_server_spawner_port = ports.AllocateTestServerPort() |
182 self._ForwardPorts( | 184 self._ForwardPorts( |
183 [(self.test_server_spawner_port, self.test_server_spawner_port)]) | 185 [(self.test_server_spawner_port, self.test_server_spawner_port)]) |
184 self._spawning_server = SpawningServer(self.test_server_spawner_port, | 186 self._spawning_server = SpawningServer(self.test_server_spawner_port, |
185 self.device, | 187 self.device, |
186 self.tool) | 188 self.tool) |
187 self._spawning_server.Start() | 189 self._spawning_server.Start() |
188 server_ready, error_msg = ports.IsHttpServerConnectable( | 190 server_ready, error_msg = ports.IsHttpServerConnectable( |
189 '127.0.0.1', self.test_server_spawner_port, path='/ping', | 191 '127.0.0.1', self.test_server_spawner_port, path='/ping', |
190 expected_read='ready') | 192 expected_read='ready') |
191 if server_ready: | 193 if server_ready: |
192 break | 194 break |
193 else: | 195 else: |
194 error_msgs.append(error_msg) | 196 error_msgs.append(error_msg) |
195 self._spawning_server.Stop() | 197 self._spawning_server.Stop() |
196 # Wait for 2 seconds then restart. | 198 # Wait for 2 seconds then restart. |
197 time.sleep(2) | 199 time.sleep(2) |
198 if not server_ready: | 200 if not server_ready: |
199 logging.error(';'.join(error_msgs)) | 201 logging.error(';'.join(error_msgs)) |
200 raise Exception('Can not start the test spawner server.') | 202 raise Exception('Can not start the test spawner server.') |
201 self._PushTestServerPortInfoToDevice() | 203 self._PushTestServerPortInfoToDevice() |
OLD | NEW |