Changeset 100674 in webkit


Ignore:
Timestamp:
Nov 17, 2011 2:13:39 PM (12 years ago)
Author:
eric@webkit.org
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:
Location:
trunk/Tools
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r100673 r100674  
     12011-11-17  Eric Seidel  <eric@webkit.org>
     2
     3        new-run-webkit-tests is locale dependent
     4        https://bugs.webkit.org/show_bug.cgi?id=68691
     5
     6        Reviewed by Adam Barth.
     7
     8        Make NRWT use a clean environment, just like ORWT did.
     9
     10        * Scripts/webkitpy/layout_tests/port/base.py:
     11        * Scripts/webkitpy/layout_tests/port/chromium.py:
     12        * Scripts/webkitpy/layout_tests/port/chromium_unittest.py:
     13        * Scripts/webkitpy/layout_tests/port/chromium_win.py:
     14        * Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py:
     15        * Scripts/webkitpy/layout_tests/port/efl.py:
     16        * Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py:
     17        * Scripts/webkitpy/layout_tests/port/mac.py:
     18        * Scripts/webkitpy/layout_tests/port/qt.py:
     19        * Scripts/webkitpy/layout_tests/port/qt_unittest.py:
     20        * Scripts/webkitpy/layout_tests/port/webkit.py:
     21        * Scripts/webkitpy/layout_tests/port/win.py:
     22
    1232011-11-17  Dirk Pranke  <dpranke@chromium.org>
    224
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py

    r100558 r100674  
    649649        pass
    650650
     651    # FIXME: os.environ access should be moved to onto a common/system class to be more easily mockable.
     652    def _value_or_default_from_environ(self, name, default=None):
     653        if name in os.environ:
     654            return os.environ[name]
     655        return default
     656
     657    def _copy_value_from_environ_if_set(self, clean_env, name):
     658        if name in os.environ:
     659            clean_env[name] = os.environ[name]
     660
    651661    def setup_environ_for_server(self, server_name=None):
    652         """Perform port-specific work at the beginning of a server launch.
    653 
    654         Returns:
    655            Operating-system's environment.
    656         """
    657         return os.environ.copy()
     662        # We intentionally copy only a subset of os.environ when
     663        # launching subprocesses to ensure consistent test results.
     664        clean_env = {}
     665        variables_to_copy = [
     666            # For Linux:
     667            'XAUTHORITY',
     668            'HOME',
     669            'LANG',
     670            'LD_LIBRARY_PATH',
     671            'DBUS_SESSION_BUS_ADDRESS',
     672
     673            # Darwin:
     674            'DYLD_LIBRARY_PATH',
     675            'HOME',
     676
     677            # CYGWIN:
     678            'HOMEDRIVE',
     679            'HOMEPATH',
     680            '_NT_SYMBOL_PATH',
     681
     682            # Windows:
     683            'PATH',
     684        ]
     685        for variable in variables_to_copy:
     686            self._copy_value_from_environ_if_set(clean_env, variable)
     687
     688        # For Linux:
     689        clean_env['DISPLAY'] = self._value_or_default_from_environ('DISPLAY', ':1')
     690        return clean_env
    658691
    659692    def show_results_html_file(self, results_filename):
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium.py

    r100657 r100674  
    222222        Chromium source tree and the list of path components in |*comps|."""
    223223        if not self._chromium_base_dir:
    224             abspath = self._filesystem.abspath(__file__)
    225             offset = abspath.find('third_party')
     224            chromium_module_path = self._filesystem.path_to_module(self.__module__)
     225            offset = chromium_module_path.find('third_party')
    226226            if offset == -1:
    227                 self._chromium_base_dir = self._filesystem.join(
    228                     abspath[0:abspath.find('Tools')],
    229                     'Source', 'WebKit', 'chromium')
     227                self._chromium_base_dir = self._filesystem.join(chromium_module_path[0:chromium_module_path.find('Tools')], 'Source', 'WebKit', 'chromium')
    230228            else:
    231                 self._chromium_base_dir = abspath[0:offset]
     229                self._chromium_base_dir = chromium_module_path[0:offset]
    232230        return self._filesystem.join(self._chromium_base_dir, *comps)
    233231
    234232    def path_to_test_expectations_file(self):
    235         return self.path_from_webkit_base('LayoutTests', 'platform',
    236             'chromium', 'test_expectations.txt')
     233        return self.path_from_webkit_base('LayoutTests', 'platform', 'chromium', 'test_expectations.txt')
    237234
    238235    def default_results_directory(self):
    239236        try:
    240             return self.path_from_chromium_base('webkit',
    241                 self.get_option('configuration'),
    242                 'layout-test-results')
     237            return self.path_from_chromium_base('webkit', self.get_option('configuration'), 'layout-test-results')
    243238        except AssertionError:
    244             return self._build_path(self.get_option('configuration'),
    245                                     'layout-test-results')
     239            return self._build_path(self.get_option('configuration'), 'layout-test-results')
    246240
    247241    def setup_test_run(self):
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py

    r100657 r100674  
    5151class ChromiumDriverTest(unittest.TestCase):
    5252    def setUp(self):
    53         mock_port = Mock()
     53        mock_port = Mock()  # FIXME: This should use a tighter mock.
    5454        self.driver = chromium.ChromiumDriver(mock_port, worker_number=0, pixel_tests=True)
    5555
     
    7272
    7373    def test_write_command_and_read_line(self):
    74         self.driver._proc = Mock()
     74        self.driver._proc = Mock()  # FIXME: This should use a tighter mock.
    7575        # Set up to read 3 lines before we get an IOError
    7676        self.driver._proc.stdout = StringIO.StringIO("first\nsecond\nthird\n")
     
    106106        self.pid = None
    107107        self.wait_called = False
    108         self.driver._proc = Mock()
     108        self.driver._proc = Mock()  # FIXME: This should use a tighter mock.
    109109        self.driver._proc.pid = 1
    110110        self.driver._proc.stdin = StringIO.StringIO()
     
    220220
    221221    class TestMacPort(chromium_mac.ChromiumMacPort):
    222         def __init__(self, options):
     222        def __init__(self, options=None):
     223            options = options or MockOptions()
    223224            chromium_mac.ChromiumMacPort.__init__(self, MockHost(), options=options)
    224225
     
    228229
    229230    class TestLinuxPort(chromium_linux.ChromiumLinuxPort):
    230         def __init__(self, options):
     231        def __init__(self, options=None):
     232            options = options or MockOptions()
    231233            chromium_linux.ChromiumLinuxPort.__init__(self, MockHost(), options=options)
    232234
     
    236238
    237239    class TestWinPort(chromium_win.ChromiumWinPort):
    238         def __init__(self, options):
     240        def __init__(self, options=None):
     241            options = options or MockOptions()
    239242            chromium_win.ChromiumWinPort.__init__(self, MockHost(), options=options)
    240243
     
    244247
    245248    def test_path_to_image_diff(self):
    246         mock_options = MockOptions()
    247         port = ChromiumPortTest.TestLinuxPort(options=mock_options)
    248249        # FIXME: These don't need to use endswith now that the port uses a MockFileSystem.
    249         self.assertTrue(port._path_to_image_diff().endswith('/out/default/ImageDiff'))
    250         port = ChromiumPortTest.TestMacPort(options=mock_options)
    251         self.assertTrue(port._path_to_image_diff().endswith('/xcodebuild/default/ImageDiff'))
    252         port = ChromiumPortTest.TestWinPort(options=mock_options)
    253         self.assertTrue(port._path_to_image_diff().endswith('/default/ImageDiff.exe'))
     250        self.assertTrue(ChromiumPortTest.TestLinuxPort()._path_to_image_diff().endswith('/out/default/ImageDiff'))
     251        self.assertTrue(ChromiumPortTest.TestMacPort()._path_to_image_diff().endswith('/xcodebuild/default/ImageDiff'))
     252        self.assertTrue(ChromiumPortTest.TestWinPort()._path_to_image_diff().endswith('/default/ImageDiff.exe'))
    254253
    255254    def test_skipped_layout_tests(self):
     
    285284                return "/path/to/image_diff"
    286285
    287         mock_options = MockOptions()
    288         port = ChromiumPortTest.TestLinuxPort(mock_options)
    289 
     286        port = ChromiumPortTest.TestLinuxPort()
    290287        mock_image_diff = "MOCK Image Diff"
    291288
     
    334331class ChromiumPortLoggingTest(logtesting.LoggingTestCase):
    335332    def test_check_sys_deps(self):
    336         mock_options = MockOptions()
    337         port = ChromiumPortTest.TestLinuxPort(options=mock_options)
     333        port = ChromiumPortTest.TestLinuxPort()
    338334
    339335        # Success
     
    351347            'ERROR: testing output failure\n'])
    352348
     349
    353350if __name__ == '__main__':
    354351    unittest.main()
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py

    r100421 r100674  
    3030"""Chromium Win implementation of the Port interface."""
    3131
     32import os
    3233import logging
    3334import sys
     
    99100
    100101    def setup_environ_for_server(self, server_name=None):
    101         env = chromium.ChromiumPort.setup_environ_for_server(self)
     102        env = chromium.ChromiumPort.setup_environ_for_server(self, server_name)
     103
     104        # FIXME: lighttpd depends on some environment variable we're not whitelisting.
     105        # We should add the variable to an explicit whitelist in base.Port.
     106        # FIXME: This is a temporary hack to get the cr-win bot online until
     107        # someone from the cr-win port can take a look.
     108        for key, value in os.environ.items():
     109            if key not in env:
     110                env[key] = value
     111
    102112        # Put the cygwin directory first in the path to find cygwin1.dll.
    103113        env["PATH"] = "%s;%s" % (self.path_from_chromium_base("third_party", "cygwin", "bin"), env["PATH"])
     
    105115        # python executable to run cgi program.
    106116        env["CYGWIN_PATH"] = self.path_from_chromium_base("third_party", "cygwin", "bin")
    107         if (sys.platform in ("cygwin", "win32") and self.get_option('register_cygwin')):
     117        if self.get_option('register_cygwin'):
    108118            setup_mount = self.path_from_chromium_base("third_party", "cygwin", "setup_mount.bat")
    109119            self._executive.run_command([setup_mount])  # Paths are all absolute, so this does not require a cwd.
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win_unittest.py

    r99791 r100674  
    4848    port_maker = chromium_win.ChromiumWinPort
    4949
    50     def _mock_path_from_chromium_base(self, *comps):
    51         return self._port._filesystem.join("/chromium/src", *comps)
    52 
    5350    def test_uses_apache(self):
    5451        self.assertFalse(self.make_port()._uses_apache())
     
    5653    def test_setup_environ_for_server(self):
    5754        port = self.make_port()
    58 
    5955        port._executive = MockExecutive(should_log=True)
    60         self._port = port
    61         port.path_from_chromium_base = self._mock_path_from_chromium_base
    6256        output = outputcapture.OutputCapture()
     57        # FIXME: This test should not use the real os.environ
    6358        orig_environ = os.environ.copy()
    6459        env = output.assert_outputs(self, port.setup_environ_for_server)
     
    6661        self.assertNotEqual(env["PATH"], os.environ["PATH"])
    6762
     63    def test_setup_environ_for_server_cygpath(self):
     64        port = self.make_port()
     65        env = port.setup_environ_for_server(port.driver_name())
     66        self.assertEquals(env['CYGWIN_PATH'], '/mock-checkout/Source/WebKit/chromium/third_party/cygwin/bin')
     67
    6868    def test_setup_environ_for_server_register_cygwin(self):
    6969        port = self.make_port(options=ChromiumWinTest.RegisterCygwinOption())
    70 
    7170        port._executive = MockExecutive(should_log=True)
    72         port.path_from_chromium_base = self._mock_path_from_chromium_base
    73         self._port = port
    74         setup_mount = self._mock_path_from_chromium_base("third_party", "cygwin", "setup_mount.bat")
    75         # FIXME: This is kinda lame, we only run setup_mount on win32 platforms, so we only expect the run_command output there.
    76         if sys.platform in ("win32", "cygwin"):
    77             expected_stderr = "MOCK run_command: %s, cwd=None\n" % [setup_mount]
    78         else:
    79             expected_stderr = ""
     71        expected_stderr = "MOCK run_command: ['/mock-checkout/Source/WebKit/chromium/third_party/cygwin/setup_mount.bat'], cwd=None\n"
    8072        output = outputcapture.OutputCapture()
    8173        output.assert_outputs(self, port.setup_environ_for_server, expected_stderr=expected_stderr)
     
    135127            '/mock-checkout/Source/WebKit/chromium/build/Debug/DumpRenderTree.exe',
    136128            port._path_to_driver('Debug'))
    137 
    138 
    139 if __name__ == '__main__':
    140     port_testcase.main()
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/efl.py

    r99773 r100674  
    4848        return "--efl"
    4949
    50     def setup_environ_for_server(self, server_name=None):
    51         return WebKitPort.setup_environ_for_server(self, server_name)
    52 
    5350    def _generate_all_test_configurations(self):
    5451        return [TestConfiguration(version=self._version, architecture='x86', build_type=build_type, graphics_type='cpu') for build_type in self.ALL_BUILD_TYPES]
     
    6057        return self._build_path('Programs', 'ImageDiff')
    6158
     59    # FIXME: I doubt EFL wants to override this method.
    6260    def check_build(self, needs_http):
    6361        return self._check_driver()
     
    6664        static_path = self._build_path('WebCore', 'libwebcore_efl.a')
    6765        dyn_path = self._build_path('WebCore', 'libwebcore_efl.so')
    68 
    6966        return static_path if self._filesystem.exists(static_path) else dyn_path
    7067
    7168    def _runtime_feature_list(self):
     69        # FIXME: EFL should detect runtime features like other webkit ports do.
    7270        return None
    7371
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py

    r99773 r100674  
    4747
    4848    def _verify_baseline_path(self, expected_path, port_name):
    49         port = google_chrome.GetGoogleChromePort(port_name=port_name, options=None, host=MockHost())
     49        port = google_chrome.GetGoogleChromePort(MockHost(), port_name=port_name)
    5050        path = port.baseline_search_path()[0]
    5151        self.assertEqual(expected_path, port._filesystem.basename(path))
    5252
    5353    def _verify_expectations_overrides(self, port_name):
    54         # FIXME: make this more robust when we have the Tree() abstraction.
     54        # FIXME: Make this more robust when we have the Tree() abstraction.
    5555        # we should be able to test for the files existing or not, and
    5656        # be able to control the contents better.
     57        # FIXME: What is the Tree() abstraction?
    5758
    5859        host = MockHost()
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/mac.py

    r100618 r100674  
    103103            if self.get_option('guard_malloc'):
    104104                env['DYLD_INSERT_LIBRARIES'] = '/usr/lib/libgmalloc.dylib'
     105        env['XML_CATALOG_FILES'] = ''  # work around missing /etc/catalog <rdar://problem/4292995>
    105106        return env
    106107
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py

    r99773 r100674  
    142142
    143143    def setup_environ_for_server(self, server_name=None):
    144         env = WebKitPort.setup_environ_for_server(self, server_name)
    145         env['QTWEBKIT_PLUGIN_PATH'] = self._build_path('lib/plugins')
    146         return env
     144        clean_env = WebKitPort.setup_environ_for_server(self, server_name)
     145        clean_env['QTWEBKIT_PLUGIN_PATH'] = self._build_path('lib/plugins')
     146        self._copy_value_from_environ_if_set(clean_env, 'QT_DRT_WEBVIEW_MODE')
     147        return clean_env
    147148
    148149    # FIXME: We should find a way to share this implmentation with Gtk,
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/qt_unittest.py

    r99781 r100674  
    8383        expected_stderr = "MOCK run_command: ['Tools/Scripts/run-launcher', '--release', '--qt', 'file://test.html'], cwd=/mock-checkout\n"
    8484        OutputCapture().assert_outputs(self, port.show_results_html_file, ["test.html"], expected_stderr=expected_stderr)
     85
     86    def test_setup_environ_for_server(self):
     87        port = self.make_port()
     88        env = port.setup_environ_for_server(port.driver_name())
     89        self.assertEquals(env['QTWEBKIT_PLUGIN_PATH'], 'MOCK output of child process/lib/plugins')
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/webkit.py

    r100494 r100674  
    221221        return (output_image, diff_percent)
    222222
     223    def setup_environ_for_server(self, server_name=None):
     224        clean_env = super(WebKitPort, self).setup_environ_for_server(server_name)
     225        self._copy_value_from_environ_if_set(clean_env, 'WEBKIT_TESTFONTS')
     226        return clean_env
     227
    223228    def default_results_directory(self):
    224229        # Results are store relative to the built products to make it easy
  • trunk/Tools/Scripts/webkitpy/layout_tests/port/win.py

    r99773 r100674  
    109109        return map(self._webkit_baseline_path, fallback_names)
    110110
     111    # This port may need to override setup_environ_for_server
     112    # to match behavior of setPathForRunningWebKitApp from ORWT.
     113    # $env->{PATH} = join(':', productDir(), dirname(installedSafariPath()), appleApplicationSupportPath(), $env->{PATH} || "");
     114
    111115    # FIXME: webkitperl/httpd.pm installs /usr/lib/apache/libphp4.dll on cycwin automatically
    112116    # as part of running old-run-webkit-tests.  That's bad design, but we may need some similar hack.
Note: See TracChangeset for help on using the changeset viewer.