Changeset 217572 in webkit
- Timestamp:
- May 30, 2017 2:08:11 PM (7 years ago)
- Location:
- trunk/Tools
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r217571 r217572 1 2017-05-30 Jonathan Bedard <jbedard@apple.com> 2 3 webkitpy: Start servers before setting-up for testing 4 https://bugs.webkit.org/show_bug.cgi?id=172176 5 <rdar://problem/32225538> 6 7 Reviewed by Alexey Proskuryakov. 8 9 On-device testing requires that servers are started before ports set-up their 10 test environments. 11 12 * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py: 13 (LayoutTestRunner.__init__): Start servers when initializing LayoutTestRunner. 14 Servers are unconditionally stopped on exit. 15 (LayoutTestRunner.run_tests): Move the starting of servers to the initializer. The 16 Manager now stops servers. 17 (LayoutTestRunner.start_servers): Set flag to indicate servers are running. 18 (LayoutTestRunner.stop_servers): Check flag, only shutdown servers if they are shutdown. 19 * Scripts/webkitpy/layout_tests/controllers/manager.py: 20 (Manager.__init__): Delay construction of the test runner until we can determine 21 if servers need to be started. 22 (Manager.run): Determine if servers need to be started and construct the test runner. 23 Shut servers down when the test run is finished. 24 (Manager._run_tests): Move the determination of servers to run into Manager.run. 25 * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py: 26 (is_wpt_server_running): Server is not running if no config is found. 27 * Scripts/webkitpy/layout_tests/servers/websocket_server.py: 28 (PyWebSocket.is_running): Check if this WebSocket server is running. 29 * Scripts/webkitpy/port/base.py: 30 (Port.__init__): Define secure WebSocket server. 31 (Port.to.is_websocket_server_running): Check if WebSocket servers are defined. 32 1 33 2017-05-30 Daniel Bates <dabates@apple.com> 2 34 -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py
r217276 r217572 27 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 28 29 import atexit 29 30 import logging 30 31 import math … … 62 63 63 64 class LayoutTestRunner(object): 64 def __init__(self, options, port, printer, results_directory, test_is_slow_fn ):65 def __init__(self, options, port, printer, results_directory, test_is_slow_fn, needs_http=False, needs_websockets=False, needs_web_platform_test_server=False): 65 66 self._options = options 66 67 self._port = port … … 68 69 self._results_directory = results_directory 69 70 self._test_is_slow = test_is_slow_fn 71 self._needs_http = needs_http 72 self._needs_websockets = needs_websockets 73 self._needs_web_platform_test_server = needs_web_platform_test_server 74 70 75 self._sharder = Sharder(self._port.split_test) 71 76 self._filesystem = self._port.host.filesystem … … 73 78 self._expectations = None 74 79 self._test_inputs = [] 75 self._needs_http = None76 self._needs_websockets = None77 self._needs_web_platform_test_server = None78 80 self._retrying = False 79 81 self._current_run_results = None 82 83 if ((self._needs_http and self._options.http) or self._needs_web_platform_test_server) and self._port.get_option("start_http_servers_if_needed"): 84 self.start_servers() 85 atexit.register(lambda: self.stop_servers()) 80 86 81 87 def get_worker_count(self, test_inputs, child_process_count): … … 83 89 return min(child_process_count, len(all_shards)) 84 90 85 def run_tests(self, expectations, test_inputs, tests_to_skip, num_workers, needs_http, needs_websockets, needs_web_platform_test_server,retrying):91 def run_tests(self, expectations, test_inputs, tests_to_skip, num_workers, retrying): 86 92 self._expectations = expectations 87 93 self._test_inputs = test_inputs 88 self._needs_http = needs_http 89 self._needs_websockets = needs_websockets 90 self._needs_web_platform_test_server = needs_web_platform_test_server 94 91 95 self._retrying = retrying 92 96 … … 107 111 self._printer.write_update('Sharding tests ...') 108 112 all_shards = self._sharder.shard_tests(test_inputs, int(self._options.child_processes), self._options.fully_parallel) 109 110 if (self._needs_http and self._options.http) or self._needs_web_platform_test_server:111 if self._port.get_option("start_http_servers_if_needed"):112 self.start_servers()113 113 114 114 self._printer.print_workers_and_shards(num_workers, len(all_shards)) … … 132 132 _log.debug('%s("%s") raised, exiting' % (e.__class__.__name__, str(e))) 133 133 raise 134 finally:135 self.stop_servers()136 134 137 135 return run_results … … 190 188 191 189 def start_servers(self): 192 if self._needs_http :190 if self._needs_http and not self._port.is_http_server_running(): 193 191 self._printer.write_update('Starting HTTP server ...') 194 192 self._port.start_http_server() 195 if self._needs_websockets :193 if self._needs_websockets and not self._port.is_websocket_servers_running(): 196 194 self._printer.write_update('Starting WebSocket server ...') 197 195 self._port.start_websocket_server() 198 if self._needs_web_platform_test_server :196 if self._needs_web_platform_test_server and not self._port.is_wpt_server_running(): 199 197 self._printer.write_update('Starting Web Platform Test server ...') 200 198 self._port.start_web_platform_test_server() -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
r217003 r217572 86 86 self._results_directory = self._port.results_directory() 87 87 self._finder = LayoutTestFinder(self._port, self._options) 88 self._runner = LayoutTestRunner(self._options, self._port, self._printer, self._results_directory, self._test_is_slow)88 self._runner = None 89 89 90 90 test_options_json_path = self._port.path_from_webkit_base(self.LAYOUT_TESTS_DIRECTORY, "tests-options.json") … … 234 234 enabled_pixel_tests_in_retry = False 235 235 236 needs_http = any((self._is_http_test(test) and not self._needs_web_platform_test(test)) for test in tests_to_run) 237 needs_web_platform_test_server = any(self._needs_web_platform_test(test) for test in tests_to_run) 238 needs_websockets = any(self._is_websocket_test(test) for test in tests_to_run) 239 self._runner = LayoutTestRunner(self._options, self._port, self._printer, self._results_directory, self._test_is_slow, 240 needs_http=needs_http, needs_web_platform_test_server=needs_web_platform_test_server, needs_websockets=needs_websockets) 241 236 242 if default_device_tests: 237 243 _log.info('') … … 258 264 enabled_pixel_tests_in_retry |= device_enabled_pixel_tests_in_retry 259 265 266 self._runner.stop_servers() 260 267 end_time = time.time() 261 268 return self._end_test_run(start_time, end_time, initial_results, retry_results, enabled_pixel_tests_in_retry) … … 319 326 320 327 def _run_tests(self, tests_to_run, tests_to_skip, repeat_each, iterations, num_workers, retrying): 321 needs_http = any((self._is_http_test(test) and not self._needs_web_platform_test(test)) for test in tests_to_run)322 needs_web_platform_test_server = any(self._needs_web_platform_test(test) for test in tests_to_run)323 needs_websockets = any(self._is_websocket_test(test) for test in tests_to_run)324 325 328 test_inputs = self._get_test_inputs(tests_to_run, repeat_each, iterations) 326 329 327 return self._runner.run_tests(self._expectations, test_inputs, tests_to_skip, num_workers, needs_http, needs_websockets, needs_web_platform_test_server,retrying)330 return self._runner.run_tests(self._expectations, test_inputs, tests_to_skip, num_workers, retrying) 328 331 329 332 def _clean_up_run(self): -
trunk/Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py
r217276 r217572 58 58 def is_wpt_server_running(port_obj): 59 59 config = wpt_config_json(port_obj) 60 if not config: 61 return False 60 62 return http_server_base.HttpServerBase._is_running_on_port(config["ports"]["http"][0]) 61 63 -
trunk/Tools/Scripts/webkitpy/layout_tests/servers/websocket_server.py
r214558 r217572 30 30 """A class to help start/stop the PyWebSocket server used by layout tests.""" 31 31 32 import errno 32 33 import logging 33 34 import os 35 import socket 34 36 import sys 35 37 import time … … 57 59 """ 58 60 http_server.Lighttpd.__init__(self, port_obj, output_dir, 59 port= PyWebSocket.DEFAULT_WS_PORT,61 port=port, 60 62 root=root) 61 63 self._output_dir = output_dir … … 106 108 else: 107 109 self._log_prefix = _WS_LOG_NAME 110 111 def is_running(self): 112 s = socket.socket() 113 try: 114 s.connect(('localhost', self._port)) 115 except IOError, e: 116 if e.errno not in (errno.ECONNREFUSED, errno.ECONNRESET): 117 raise 118 return False 119 finally: 120 s.close() 121 return True 108 122 109 123 def ports_to_forward(self): -
trunk/Tools/Scripts/webkitpy/port/base.py
r217276 r217572 128 128 self._http_server = None 129 129 self._websocket_server = None 130 self._websocket_secure_server = None 130 131 self._web_platform_test_server = None 131 132 self._image_differ = None … … 974 975 return http_server_base.is_http_server_running() 975 976 977 def is_websocket_servers_running(self): 978 if self._websocket_secure_server and self._websocket_server: 979 return self._websocket_secure_server.is_running() and self._websocket_server.is_running() 980 elif self._websocket_server: 981 return self._websocket_server.is_running() 982 return False 983 976 984 def is_wpt_server_running(self): 977 985 return web_platform_test_server.is_wpt_server_running(self)
Note: See TracChangeset
for help on using the changeset viewer.