Chromium Code Reviews| 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 |