Title: [100674] trunk/Tools
Revision
100674
Author
[email protected]
Date
2011-11-17 14:13:39 -0800 (Thu, 17 Nov 2011)

Log Message

new-run-webkit-tests is locale dependent
https://bugs.webkit.org/show_bug.cgi?id=68691

Reviewed by Adam Barth.

Make NRWT use a clean environment, just like ORWT did.

* Scripts/webkitpy/layout_tests/port/base.py:
* Scripts/webkitpy/layout_tests/port/chromium.py:
* Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
* Scripts/webkitpy/layout_tests/port/chromium_win.py:
* Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
* Scripts/webkitpy/layout_tests/port/efl.py:
* Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
* Scripts/webkitpy/layout_tests/port/mac.py:
* Scripts/webkitpy/layout_tests/port/qt.py:
* Scripts/webkitpy/layout_tests/port/qt_unittest.py:
* Scripts/webkitpy/layout_tests/port/webkit.py:
* Scripts/webkitpy/layout_tests/port/win.py:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (100673 => 100674)


--- trunk/Tools/ChangeLog	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/ChangeLog	2011-11-17 22:13:39 UTC (rev 100674)
@@ -1,3 +1,25 @@
+2011-11-17  Eric Seidel  <[email protected]>
+
+        new-run-webkit-tests is locale dependent
+        https://bugs.webkit.org/show_bug.cgi?id=68691
+
+        Reviewed by Adam Barth.
+
+        Make NRWT use a clean environment, just like ORWT did.
+
+        * Scripts/webkitpy/layout_tests/port/base.py:
+        * Scripts/webkitpy/layout_tests/port/chromium.py:
+        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
+        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
+        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
+        * Scripts/webkitpy/layout_tests/port/efl.py:
+        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
+        * Scripts/webkitpy/layout_tests/port/mac.py:
+        * Scripts/webkitpy/layout_tests/port/qt.py:
+        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
+        * Scripts/webkitpy/layout_tests/port/webkit.py:
+        * Scripts/webkitpy/layout_tests/port/win.py:
+
 2011-11-17  Dirk Pranke  <[email protected]>
 
         Chromium Mac 10.5 CG dbg bots are failing to run webkit_gpu_tests

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -648,14 +648,47 @@
         """Perform port-specific work at the beginning of a test run."""
         pass
 
+    # FIXME: os.environ access should be moved to onto a common/system class to be more easily mockable.
+    def _value_or_default_from_environ(self, name, default=None):
+        if name in os.environ:
+            return os.environ[name]
+        return default
+
+    def _copy_value_from_environ_if_set(self, clean_env, name):
+        if name in os.environ:
+            clean_env[name] = os.environ[name]
+
     def setup_environ_for_server(self, server_name=None):
-        """Perform port-specific work at the beginning of a server launch.
+        # We intentionally copy only a subset of os.environ when
+        # launching subprocesses to ensure consistent test results.
+        clean_env = {}
+        variables_to_copy = [
+            # For Linux:
+            'XAUTHORITY',
+            'HOME',
+            'LANG',
+            'LD_LIBRARY_PATH',
+            'DBUS_SESSION_BUS_ADDRESS',
 
-        Returns:
-           Operating-system's environment.
-        """
-        return os.environ.copy()
+            # Darwin:
+            'DYLD_LIBRARY_PATH',
+            'HOME',
 
+            # CYGWIN:
+            'HOMEDRIVE',
+            'HOMEPATH',
+            '_NT_SYMBOL_PATH',
+
+            # Windows:
+            'PATH',
+        ]
+        for variable in variables_to_copy:
+            self._copy_value_from_environ_if_set(clean_env, variable)
+
+        # For Linux:
+        clean_env['DISPLAY'] = self._value_or_default_from_environ('DISPLAY', ':1')
+        return clean_env
+
     def show_results_html_file(self, results_filename):
         """This routine should display the HTML file pointed at by
         results_filename in a users' browser."""

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -221,28 +221,22 @@
         """Returns the full path to path made by joining the top of the
         Chromium source tree and the list of path components in |*comps|."""
         if not self._chromium_base_dir:
-            abspath = self._filesystem.abspath(__file__)
-            offset = abspath.find('third_party')
+            chromium_module_path = self._filesystem.path_to_module(self.__module__)
+            offset = chromium_module_path.find('third_party')
             if offset == -1:
-                self._chromium_base_dir = self._filesystem.join(
-                    abspath[0:abspath.find('Tools')],
-                    'Source', 'WebKit', 'chromium')
+                self._chromium_base_dir = self._filesystem.join(chromium_module_path[0:chromium_module_path.find('Tools')], 'Source', 'WebKit', 'chromium')
             else:
-                self._chromium_base_dir = abspath[0:offset]
+                self._chromium_base_dir = chromium_module_path[0:offset]
         return self._filesystem.join(self._chromium_base_dir, *comps)
 
     def path_to_test_expectations_file(self):
-        return self.path_from_webkit_base('LayoutTests', 'platform',
-            'chromium', 'test_expectations.txt')
+        return self.path_from_webkit_base('LayoutTests', 'platform', 'chromium', 'test_expectations.txt')
 
     def default_results_directory(self):
         try:
-            return self.path_from_chromium_base('webkit',
-                self.get_option('configuration'),
-                'layout-test-results')
+            return self.path_from_chromium_base('webkit', self.get_option('configuration'), 'layout-test-results')
         except AssertionError:
-            return self._build_path(self.get_option('configuration'),
-                                    'layout-test-results')
+            return self._build_path(self.get_option('configuration'), 'layout-test-results')
 
     def setup_test_run(self):
         # Delete the disk cache if any to ensure a clean test run.

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -50,7 +50,7 @@
 
 class ChromiumDriverTest(unittest.TestCase):
     def setUp(self):
-        mock_port = Mock()
+        mock_port = Mock()  # FIXME: This should use a tighter mock.
         self.driver = chromium.ChromiumDriver(mock_port, worker_number=0, pixel_tests=True)
 
     def test_test_shell_command(self):
@@ -71,7 +71,7 @@
         self.assertEqual(did_crash, expected_crash)
 
     def test_write_command_and_read_line(self):
-        self.driver._proc = Mock()
+        self.driver._proc = Mock()  # FIXME: This should use a tighter mock.
         # Set up to read 3 lines before we get an IOError
         self.driver._proc.stdout = StringIO.StringIO("first\nsecond\nthird\n")
 
@@ -105,7 +105,7 @@
     def test_stop(self):
         self.pid = None
         self.wait_called = False
-        self.driver._proc = Mock()
+        self.driver._proc = Mock()  # FIXME: This should use a tighter mock.
         self.driver._proc.pid = 1
         self.driver._proc.stdin = StringIO.StringIO()
         self.driver._proc.stdout = StringIO.StringIO()
@@ -219,7 +219,8 @@
         pass
 
     class TestMacPort(chromium_mac.ChromiumMacPort):
-        def __init__(self, options):
+        def __init__(self, options=None):
+            options = options or MockOptions()
             chromium_mac.ChromiumMacPort.__init__(self, MockHost(), options=options)
 
         def default_configuration(self):
@@ -227,7 +228,8 @@
             return 'default'
 
     class TestLinuxPort(chromium_linux.ChromiumLinuxPort):
-        def __init__(self, options):
+        def __init__(self, options=None):
+            options = options or MockOptions()
             chromium_linux.ChromiumLinuxPort.__init__(self, MockHost(), options=options)
 
         def default_configuration(self):
@@ -235,7 +237,8 @@
             return 'default'
 
     class TestWinPort(chromium_win.ChromiumWinPort):
-        def __init__(self, options):
+        def __init__(self, options=None):
+            options = options or MockOptions()
             chromium_win.ChromiumWinPort.__init__(self, MockHost(), options=options)
 
         def default_configuration(self):
@@ -243,14 +246,10 @@
             return 'default'
 
     def test_path_to_image_diff(self):
-        mock_options = MockOptions()
-        port = ChromiumPortTest.TestLinuxPort(options=mock_options)
         # FIXME: These don't need to use endswith now that the port uses a MockFileSystem.
-        self.assertTrue(port._path_to_image_diff().endswith('/out/default/ImageDiff'))
-        port = ChromiumPortTest.TestMacPort(options=mock_options)
-        self.assertTrue(port._path_to_image_diff().endswith('/xcodebuild/default/ImageDiff'))
-        port = ChromiumPortTest.TestWinPort(options=mock_options)
-        self.assertTrue(port._path_to_image_diff().endswith('/default/ImageDiff.exe'))
+        self.assertTrue(ChromiumPortTest.TestLinuxPort()._path_to_image_diff().endswith('/out/default/ImageDiff'))
+        self.assertTrue(ChromiumPortTest.TestMacPort()._path_to_image_diff().endswith('/xcodebuild/default/ImageDiff'))
+        self.assertTrue(ChromiumPortTest.TestWinPort()._path_to_image_diff().endswith('/default/ImageDiff.exe'))
 
     def test_skipped_layout_tests(self):
         mock_options = MockOptions()
@@ -284,9 +283,7 @@
             def _path_to_image_diff(self):
                 return "/path/to/image_diff"
 
-        mock_options = MockOptions()
-        port = ChromiumPortTest.TestLinuxPort(mock_options)
-
+        port = ChromiumPortTest.TestLinuxPort()
         mock_image_diff = "MOCK Image Diff"
 
         def mock_run_command(args):
@@ -333,8 +330,7 @@
 
 class ChromiumPortLoggingTest(logtesting.LoggingTestCase):
     def test_check_sys_deps(self):
-        mock_options = MockOptions()
-        port = ChromiumPortTest.TestLinuxPort(options=mock_options)
+        port = ChromiumPortTest.TestLinuxPort()
 
         # Success
         port._executive = MockExecutive2(exit_code=0)
@@ -350,5 +346,6 @@
             'ERROR: \n',
             'ERROR: testing output failure\n'])
 
+
 if __name__ == '__main__':
     unittest.main()

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -29,6 +29,7 @@
 
 """Chromium Win implementation of the Port interface."""
 
+import os
 import logging
 import sys
 
@@ -98,13 +99,22 @@
 
 
     def setup_environ_for_server(self, server_name=None):
-        env = chromium.ChromiumPort.setup_environ_for_server(self)
+        env = chromium.ChromiumPort.setup_environ_for_server(self, server_name)
+
+        # FIXME: lighttpd depends on some environment variable we're not whitelisting.
+        # We should add the variable to an explicit whitelist in base.Port.
+        # FIXME: This is a temporary hack to get the cr-win bot online until
+        # someone from the cr-win port can take a look.
+        for key, value in os.environ.items():
+            if key not in env:
+                env[key] = value
+
         # Put the cygwin directory first in the path to find cygwin1.dll.
         env["PATH"] = "%s;%s" % (self.path_from_chromium_base("third_party", "cygwin", "bin"), env["PATH"])
         # Configure the cygwin directory so that pywebsocket finds proper
         # python executable to run cgi program.
         env["CYGWIN_PATH"] = self.path_from_chromium_base("third_party", "cygwin", "bin")
-        if (sys.platform in ("cygwin", "win32") and self.get_option('register_cygwin')):
+        if self.get_option('register_cygwin'):
             setup_mount = self.path_from_chromium_base("third_party", "cygwin", "setup_mount.bat")
             self._executive.run_command([setup_mount])  # Paths are all absolute, so this does not require a cwd.
         return env

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -47,36 +47,28 @@
 
     port_maker = chromium_win.ChromiumWinPort
 
-    def _mock_path_from_chromium_base(self, *comps):
-        return self._port._filesystem.join("/chromium/src", *comps)
-
     def test_uses_apache(self):
         self.assertFalse(self.make_port()._uses_apache())
 
     def test_setup_environ_for_server(self):
         port = self.make_port()
-
         port._executive = MockExecutive(should_log=True)
-        self._port = port
-        port.path_from_chromium_base = self._mock_path_from_chromium_base
         output = outputcapture.OutputCapture()
+        # FIXME: This test should not use the real os.environ
         orig_environ = os.environ.copy()
         env = output.assert_outputs(self, port.setup_environ_for_server)
         self.assertEqual(orig_environ["PATH"], os.environ["PATH"])
         self.assertNotEqual(env["PATH"], os.environ["PATH"])
 
+    def test_setup_environ_for_server_cygpath(self):
+        port = self.make_port()
+        env = port.setup_environ_for_server(port.driver_name())
+        self.assertEquals(env['CYGWIN_PATH'], '/mock-checkout/Source/WebKit/chromium/third_party/cygwin/bin')
+
     def test_setup_environ_for_server_register_cygwin(self):
         port = self.make_port(options=ChromiumWinTest.RegisterCygwinOption())
-
         port._executive = MockExecutive(should_log=True)
-        port.path_from_chromium_base = self._mock_path_from_chromium_base
-        self._port = port
-        setup_mount = self._mock_path_from_chromium_base("third_party", "cygwin", "setup_mount.bat")
-        # FIXME: This is kinda lame, we only run setup_mount on win32 platforms, so we only expect the run_command output there.
-        if sys.platform in ("win32", "cygwin"):
-            expected_stderr = "MOCK run_command: %s, cwd=None\n" % [setup_mount]
-        else:
-            expected_stderr = ""
+        expected_stderr = "MOCK run_command: ['/mock-checkout/Source/WebKit/chromium/third_party/cygwin/setup_mount.bat'], cwd=None\n"
         output = outputcapture.OutputCapture()
         output.assert_outputs(self, port.setup_environ_for_server, expected_stderr=expected_stderr)
 
@@ -134,7 +126,3 @@
         self.assertEquals(
             '/mock-checkout/Source/WebKit/chromium/build/Debug/DumpRenderTree.exe',
             port._path_to_driver('Debug'))
-
-
-if __name__ == '__main__':
-    port_testcase.main()

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/efl.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/efl.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/efl.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -47,9 +47,6 @@
     def _port_flag_for_scripts(self):
         return "--efl"
 
-    def setup_environ_for_server(self, server_name=None):
-        return WebKitPort.setup_environ_for_server(self, server_name)
-
     def _generate_all_test_configurations(self):
         return [TestConfiguration(version=self._version, architecture='x86', build_type=build_type, graphics_type='cpu') for build_type in self.ALL_BUILD_TYPES]
 
@@ -59,16 +56,17 @@
     def _path_to_image_diff(self):
         return self._build_path('Programs', 'ImageDiff')
 
+    # FIXME: I doubt EFL wants to override this method.
     def check_build(self, needs_http):
         return self._check_driver()
 
     def _path_to_webcore_library(self):
         static_path = self._build_path('WebCore', 'libwebcore_efl.a')
         dyn_path = self._build_path('WebCore', 'libwebcore_efl.so')
-
         return static_path if self._filesystem.exists(static_path) else dyn_path
 
     def _runtime_feature_list(self):
+        # FIXME: EFL should detect runtime features like other webkit ports do.
         return None
 
     def show_results_html_file(self, results_filename):

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -46,14 +46,15 @@
         self._verify_baseline_path('google-chrome-win', 'google-chrome-win-vista')
 
     def _verify_baseline_path(self, expected_path, port_name):
-        port = google_chrome.GetGoogleChromePort(port_name=port_name, options=None, host=MockHost())
+        port = google_chrome.GetGoogleChromePort(MockHost(), port_name=port_name)
         path = port.baseline_search_path()[0]
         self.assertEqual(expected_path, port._filesystem.basename(path))
 
     def _verify_expectations_overrides(self, port_name):
-        # FIXME: make this more robust when we have the Tree() abstraction.
+        # FIXME: Make this more robust when we have the Tree() abstraction.
         # we should be able to test for the files existing or not, and
         # be able to control the contents better.
+        # FIXME: What is the Tree() abstraction?
 
         host = MockHost()
         chromium_port = host.port_factory.get("chromium-cg-mac")

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/mac.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/mac.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/mac.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -102,6 +102,7 @@
                 env['MallocStackLogging'] = '1'
             if self.get_option('guard_malloc'):
                 env['DYLD_INSERT_LIBRARIES'] = '/usr/lib/libgmalloc.dylib'
+        env['XML_CATALOG_FILES'] = ''  # work around missing /etc/catalog <rdar://problem/4292995>
         return env
 
     # Belongs on a Platform object.

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -141,9 +141,10 @@
         return None
 
     def setup_environ_for_server(self, server_name=None):
-        env = WebKitPort.setup_environ_for_server(self, server_name)
-        env['QTWEBKIT_PLUGIN_PATH'] = self._build_path('lib/plugins')
-        return env
+        clean_env = WebKitPort.setup_environ_for_server(self, server_name)
+        clean_env['QTWEBKIT_PLUGIN_PATH'] = self._build_path('lib/plugins')
+        self._copy_value_from_environ_if_set(clean_env, 'QT_DRT_WEBVIEW_MODE')
+        return clean_env
 
     # FIXME: We should find a way to share this implmentation with Gtk,
     # or teach run-launcher how to call run-safari and move this down to WebKitPort.

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/qt_unittest.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/qt_unittest.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/qt_unittest.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -82,3 +82,8 @@
         port._executive = MockExecutive(should_log=True)
         expected_stderr = "MOCK run_command: ['Tools/Scripts/run-launcher', '--release', '--qt', 'file://test.html'], cwd=/mock-checkout\n"
         OutputCapture().assert_outputs(self, port.show_results_html_file, ["test.html"], expected_stderr=expected_stderr)
+
+    def test_setup_environ_for_server(self):
+        port = self.make_port()
+        env = port.setup_environ_for_server(port.driver_name())
+        self.assertEquals(env['QTWEBKIT_PLUGIN_PATH'], 'MOCK output of child process/lib/plugins')

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/webkit.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/webkit.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/webkit.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -220,6 +220,11 @@
 
         return (output_image, diff_percent)
 
+    def setup_environ_for_server(self, server_name=None):
+        clean_env = super(WebKitPort, self).setup_environ_for_server(server_name)
+        self._copy_value_from_environ_if_set(clean_env, 'WEBKIT_TESTFONTS')
+        return clean_env
+
     def default_results_directory(self):
         # Results are store relative to the built products to make it easy
         # to have multiple copies of webkit checked out and built.

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/win.py (100673 => 100674)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/win.py	2011-11-17 22:08:10 UTC (rev 100673)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/win.py	2011-11-17 22:13:39 UTC (rev 100674)
@@ -108,6 +108,10 @@
         fallback_names.extend(['mac-lion', 'mac'])
         return map(self._webkit_baseline_path, fallback_names)
 
+    # This port may need to override setup_environ_for_server
+    # to match behavior of setPathForRunningWebKitApp from ORWT.
+    # $env->{PATH} = join(':', productDir(), dirname(installedSafariPath()), appleApplicationSupportPath(), $env->{PATH} || "");
+
     # FIXME: webkitperl/httpd.pm installs /usr/lib/apache/libphp4.dll on cycwin automatically
     # as part of running old-run-webkit-tests.  That's bad design, but we may need some similar hack.
     # We might use setup_environ_for_server for such a hack (or modify apache_http_server.py).
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to