Modified: trunk/Tools/ChangeLog (245825 => 245826)
--- trunk/Tools/ChangeLog 2019-05-28 21:10:47 UTC (rev 245825)
+++ trunk/Tools/ChangeLog 2019-05-28 21:55:50 UTC (rev 245826)
@@ -1,3 +1,24 @@
+2019-05-25 Dewei Zhu <[email protected]>
+
+ Limit run-benchmark http server to specific interface.
+ https://bugs.webkit.org/show_bug.cgi?id=198247
+
+ Reviewed by Ryosuke Niwa.
+
+ Add '--interface' option to 'twisted_http_server.py'.
+ 'SimpleHTTPServerDriver' should specify interface for http server.
+ Update regex that determines http server port from 'lsof' output to support ipv6 address.
+
+ * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
+ Added '--interface' argument.
+ * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
+ Limited http server to a specific interfce.
+ Added '-P' option to 'lsof' invocation to inhibits the conversion of port numbers to port name so script won't
+ fail if it's listening on a 'well-known' port.
+ Abstracted '_check_http_server_is_running' to allow potential child class to have its own implementation.
+ (SimpleHTTPServerDriver.serve): Updated regex that determines http server port from 'lsof' output to support ipv6 address.
+ (SimpleHTTPServerDriver.kill_server): Added null check for 'self._server_process'.
+
2019-05-28 David Xiong <[email protected]>
webkitpy: Switch run-webkit-tests to tailspin
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py (245825 => 245826)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py 2019-05-28 21:10:47 UTC (rev 245825)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py 2019-05-28 21:55:50 UTC (rev 245826)
@@ -40,10 +40,11 @@
parser = argparse.ArgumentParser(description='python twisted_http_server.py web_root')
parser.add_argument('web_root')
parser.add_argument('--port', type=int, default=0)
+ parser.add_argument('--interface', default='')
args = parser.parse_args()
web_root = static.File(args.web_root)
serverControl = ServerControl()
web_root.putChild('shutdown', serverControl)
web_root.putChild('report', serverControl)
- reactor.listenTCP(args.port, server.Site(web_root))
+ reactor.listenTCP(args.port, server.Site(web_root), interface=args.interface)
reactor.run()
Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py (245825 => 245826)
--- trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py 2019-05-28 21:10:47 UTC (rev 245825)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py 2019-05-28 21:55:50 UTC (rev 245826)
@@ -30,7 +30,10 @@
def serve(self, web_root):
_log.info('Launching an http server')
http_server_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "http_server/twisted_http_server.py")
- self._server_process = subprocess.Popen(["python", http_server_path, web_root], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ interface_args = []
+ if self._ip:
+ interface_args.extend(['--interface', self._ip])
+ self._server_process = subprocess.Popen(["python", http_server_path, web_root] + interface_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
max_attempt = 5
interval = 0.5
@@ -51,8 +54,8 @@
except ImportError:
for attempt in xrange(max_attempt):
try:
- output = subprocess.check_output(['/usr/sbin/lsof', '-a', '-iTCP', '-sTCP:LISTEN', '-p', str(self._server_process.pid)])
- self._server_port = int(re.search('TCP \*:(\d+) \(LISTEN\)', output).group(1))
+ output = subprocess.check_output(['/usr/sbin/lsof', '-a', '-P', '-iTCP', '-sTCP:LISTEN', '-p', str(self._server_process.pid)])
+ self._server_port = int(re.search('TCP .*:(\d+) \(LISTEN\)', output).group(1))
if self._server_port:
_log.info('HTTP Server is serving at port: %d', self._server_port)
break
@@ -63,7 +66,10 @@
interval *= 2
else:
raise Exception("Cannot listen to server, max tries exceeded")
+ self._wait_for_http_server()
+ def _wait_for_http_server(self):
+ max_attempt = 5
# Wait for server to be up completely before exiting
for attempt in xrange(max_attempt):
try:
@@ -71,7 +77,7 @@
return
except Exception as error:
_log.info('Server not running yet: %s' % error)
- time.sleep(interval)
+ time.sleep(1)
raise Exception('Server not running, max tries exceeded: %s' % error)
def base_url(self):
@@ -84,6 +90,8 @@
def kill_server(self):
try:
+ if not self._server_process:
+ return
if self._server_process.poll() is None:
self._server_process.terminate()
except OSError as error: