Title: [228014] trunk/Tools
Revision
228014
Author
carlo...@webkit.org
Date
2018-02-02 09:25:24 -0800 (Fri, 02 Feb 2018)

Log Message

[GTK] WebDriver: tests step always times out in the bot
https://bugs.webkit.org/show_bug.cgi?id=182437

Reviewed by Carlos Alberto Lopez Perez.

The process itself is not timing out, but the buildbot step is. This is because we are leaking the Xvfb
processes. We should ensure that only one driver is executed and it's stopped before the process finishes.

* Scripts/run-webdriver-tests: Call teardown() after run().
* Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
(WebDriverSeleniumExecutor.__init__): Receive the env directly instead of the display driver.
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
(WebDriverTestRunner.__init__): Use the driver class directly instead of using the DriverProxy. Get the env from
the display driver once and pass it to the test runners.
(WebDriverTestRunner.teardown): Stop the display server.
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
(WebDriverTestRunnerSelenium.__init__): Receive the env directly instead of the display driver.
(WebDriverTestRunnerSelenium.collect_tests): Pass the env to the executor.
(WebDriverTestRunnerSelenium.run): Ditto.
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
(WebDriverTestRunnerW3C.__init__): Receive the env directly instead of the display driver.
(WebDriverTestRunnerW3C.run): Pass the env to the executor.
* Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
(WebDriverW3CExecutor.__init__): Receive the env directly instead of the display driver.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (228013 => 228014)


--- trunk/Tools/ChangeLog	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/ChangeLog	2018-02-02 17:25:24 UTC (rev 228014)
@@ -1,5 +1,32 @@
 2018-02-02  Carlos Garcia Campos  <cgar...@igalia.com>
 
+        [GTK] WebDriver: tests step always times out in the bot
+        https://bugs.webkit.org/show_bug.cgi?id=182437
+
+        Reviewed by Carlos Alberto Lopez Perez.
+
+        The process itself is not timing out, but the buildbot step is. This is because we are leaking the Xvfb
+        processes. We should ensure that only one driver is executed and it's stopped before the process finishes.
+
+        * Scripts/run-webdriver-tests: Call teardown() after run().
+        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py:
+        (WebDriverSeleniumExecutor.__init__): Receive the env directly instead of the display driver.
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
+        (WebDriverTestRunner.__init__): Use the driver class directly instead of using the DriverProxy. Get the env from
+        the display driver once and pass it to the test runners.
+        (WebDriverTestRunner.teardown): Stop the display server.
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py:
+        (WebDriverTestRunnerSelenium.__init__): Receive the env directly instead of the display driver.
+        (WebDriverTestRunnerSelenium.collect_tests): Pass the env to the executor.
+        (WebDriverTestRunnerSelenium.run): Ditto.
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
+        (WebDriverTestRunnerW3C.__init__): Receive the env directly instead of the display driver.
+        (WebDriverTestRunnerW3C.run): Pass the env to the executor.
+        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
+        (WebDriverW3CExecutor.__init__): Receive the env directly instead of the display driver.
+
+2018-02-02  Carlos Garcia Campos  <cgar...@igalia.com>
+
         Unreviewed, rolling out r227999.
 
         It didn't fix the problem

Modified: trunk/Tools/Scripts/run-webdriver-tests (228013 => 228014)


--- trunk/Tools/Scripts/run-webdriver-tests	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/run-webdriver-tests	2018-02-02 17:25:24 UTC (rev 228014)
@@ -77,6 +77,7 @@
 port._display_server = options.display_server
 runner = WebDriverTestRunner(port)
 runner.run(args)
+runner.teardown()
 retval = runner.process_results()
 
 if options.json_output is not None:

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py (228013 => 228014)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py	2018-02-02 17:25:24 UTC (rev 228014)
@@ -40,9 +40,9 @@
 
 class WebDriverSeleniumExecutor(object):
 
-    def __init__(self, driver, display_driver):
+    def __init__(self, driver, env):
         self._driver_name = driver.selenium_name()
-        self._env = display_driver._setup_environ_for_test()
+        self._env = env
         self._env.update(driver.browser_env())
 
         self._args = ['--driver=%s' % self._driver_name, '--driver-binary=%s' % driver.binary_path().encode()]

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py (228013 => 228014)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py	2018-02-02 17:25:24 UTC (rev 228014)
@@ -43,7 +43,7 @@
         _log.info('Test configuration: %s' % self._port.test_configuration())
         _log.info('Using display server %s' % (self._port._display_server))
 
-        self._display_driver = self._port.create_driver(worker_number=0, no_timeout=True)._make_driver(pixel_tests=False)
+        self._display_driver = self._port._driver_class()(self._port, worker_number=0, pixel_tests=False, no_timeout=True)
         if not self._display_driver.check_driver(self._port):
             raise RuntimeError("Failed to check driver %s" % self._display_driver.__class__.__name__)
 
@@ -57,8 +57,12 @@
         build_type = 'Debug' if self._port.get_option('debug') else 'Release'
         self._expectations = TestExpectations(self._port.name(), expectations_file, build_type)
 
-        self._runners = [runner_cls(self._port, driver, self._display_driver, self._expectations) for runner_cls in self.RUNNER_CLASSES]
+        env = self._display_driver._setup_environ_for_test()
+        self._runners = [runner_cls(self._port, driver, env, self._expectations) for runner_cls in self.RUNNER_CLASSES]
 
+    def teardown(self):
+        self._display_driver.stop()
+
     def run(self, tests=[]):
         runner_tests = [runner.collect_tests(tests) for runner in self._runners]
         collected_count = sum([len(tests) for tests in runner_tests])

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py (228013 => 228014)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py	2018-02-02 17:25:24 UTC (rev 228014)
@@ -34,10 +34,10 @@
 
 class WebDriverTestRunnerSelenium(object):
 
-    def __init__(self, port, driver, display_driver, expectations):
+    def __init__(self, port, driver, env, expectations):
         self._port = port
         self._driver = driver
-        self._display_driver = display_driver
+        self._env = env
         self._expectations = expectations
         self._results = []
         self._tests_dir = WebKitFinder(self._port.host.filesystem).path_from_webkit_base('WebDriverTests')
@@ -48,7 +48,7 @@
 
         skipped = [os.path.join(self._tests_dir, test) for test in self._expectations.skipped_tests()]
         relative_tests_dir = os.path.join('imported', 'selenium', 'py', 'test')
-        executor = WebDriverSeleniumExecutor(self._driver, self._display_driver)
+        executor = WebDriverSeleniumExecutor(self._driver, self._env)
         # Collected tests are relative to test directory.
         base_dir = os.path.join(self._tests_dir, os.path.dirname(relative_tests_dir))
         collected_tests = [os.path.join(base_dir, test) for test in executor.collect(os.path.join(self._tests_dir, relative_tests_dir))]
@@ -69,7 +69,7 @@
         if self._driver.selenium_name() is None:
             return
 
-        executor = WebDriverSeleniumExecutor(self._driver, self._display_driver)
+        executor = WebDriverSeleniumExecutor(self._driver, self._env)
         timeout = self._port.get_option('timeout')
         for test in tests:
             test_name = os.path.relpath(test, self._tests_dir)

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py (228013 => 228014)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py	2018-02-02 17:25:24 UTC (rev 228014)
@@ -35,10 +35,10 @@
 
 class WebDriverTestRunnerW3C(object):
 
-    def __init__(self, port, driver, display_driver, expectations):
+    def __init__(self, port, driver, env, expectations):
         self._port = port
         self._driver = driver
-        self._display_driver = display_driver
+        self._env = env
         self._expectations = expectations
         self._results = []
         self._tests_dir = WebKitFinder(self._port.host.filesystem).path_from_webkit_base('WebDriverTests')
@@ -86,7 +86,7 @@
     def run(self, tests=[]):
         self._server.start()
 
-        executor = WebDriverW3CExecutor(self._driver, self._server, self._display_driver, self._port.get_option('timeout'), self._expectations)
+        executor = WebDriverW3CExecutor(self._driver, self._server, self._env, self._port.get_option('timeout'), self._expectations)
         executor.setup()
         need_restart = False
         try:

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py (228013 => 228014)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py	2018-02-02 17:20:12 UTC (rev 228013)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py	2018-02-02 17:25:24 UTC (rev 228014)
@@ -130,8 +130,8 @@
 class WebDriverW3CExecutor(WdspecExecutor):
     protocol_cls = WebKitDriverProtocol
 
-    def __init__(self, driver, server, display_driver, timeout, expectations):
-        WebKitDriverServer.test_env = display_driver._setup_environ_for_test()
+    def __init__(self, driver, server, env, timeout, expectations):
+        WebKitDriverServer.test_env = env
         WebKitDriverServer.test_env.update(driver.browser_env())
         server_config = {'host': server.host(), 'domains': {'': server.host()}, 'ports': {'http': [str(server.port())]}}
         WdspecExecutor.__init__(self, driver.browser_name(), server_config, driver.binary_path(), None, capabilities=driver.capabilities())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to