Title: [245826] trunk/Tools
Revision
245826
Author
[email protected]
Date
2019-05-28 14:55:50 -0700 (Tue, 28 May 2019)

Log Message

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'.

Modified Paths

Diff

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:
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to