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