Changeset 100674 in webkit
- Timestamp:
- Nov 17, 2011 2:13:39 PM (12 years ago)
- Location:
- trunk/Tools
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r100673 r100674 1 2011-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 1 23 2011-11-17 Dirk Pranke <dpranke@chromium.org> 2 24 -
trunk/Tools/Scripts/webkitpy/layout_tests/port/base.py
r100558 r100674 649 649 pass 650 650 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 651 661 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 658 691 659 692 def show_results_html_file(self, results_filename): -
trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium.py
r100657 r100674 222 222 Chromium source tree and the list of path components in |*comps|.""" 223 223 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') 226 226 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') 230 228 else: 231 self._chromium_base_dir = abspath[0:offset]229 self._chromium_base_dir = chromium_module_path[0:offset] 232 230 return self._filesystem.join(self._chromium_base_dir, *comps) 233 231 234 232 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') 237 234 238 235 def default_results_directory(self): 239 236 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') 243 238 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') 246 240 247 241 def setup_test_run(self): -
trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_unittest.py
r100657 r100674 51 51 class ChromiumDriverTest(unittest.TestCase): 52 52 def setUp(self): 53 mock_port = Mock() 53 mock_port = Mock() # FIXME: This should use a tighter mock. 54 54 self.driver = chromium.ChromiumDriver(mock_port, worker_number=0, pixel_tests=True) 55 55 … … 72 72 73 73 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. 75 75 # Set up to read 3 lines before we get an IOError 76 76 self.driver._proc.stdout = StringIO.StringIO("first\nsecond\nthird\n") … … 106 106 self.pid = None 107 107 self.wait_called = False 108 self.driver._proc = Mock() 108 self.driver._proc = Mock() # FIXME: This should use a tighter mock. 109 109 self.driver._proc.pid = 1 110 110 self.driver._proc.stdin = StringIO.StringIO() … … 220 220 221 221 class TestMacPort(chromium_mac.ChromiumMacPort): 222 def __init__(self, options): 222 def __init__(self, options=None): 223 options = options or MockOptions() 223 224 chromium_mac.ChromiumMacPort.__init__(self, MockHost(), options=options) 224 225 … … 228 229 229 230 class TestLinuxPort(chromium_linux.ChromiumLinuxPort): 230 def __init__(self, options): 231 def __init__(self, options=None): 232 options = options or MockOptions() 231 233 chromium_linux.ChromiumLinuxPort.__init__(self, MockHost(), options=options) 232 234 … … 236 238 237 239 class TestWinPort(chromium_win.ChromiumWinPort): 238 def __init__(self, options): 240 def __init__(self, options=None): 241 options = options or MockOptions() 239 242 chromium_win.ChromiumWinPort.__init__(self, MockHost(), options=options) 240 243 … … 244 247 245 248 def test_path_to_image_diff(self): 246 mock_options = MockOptions()247 port = ChromiumPortTest.TestLinuxPort(options=mock_options)248 249 # 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')) 254 253 255 254 def test_skipped_layout_tests(self): … … 285 284 return "/path/to/image_diff" 286 285 287 mock_options = MockOptions() 288 port = ChromiumPortTest.TestLinuxPort(mock_options) 289 286 port = ChromiumPortTest.TestLinuxPort() 290 287 mock_image_diff = "MOCK Image Diff" 291 288 … … 334 331 class ChromiumPortLoggingTest(logtesting.LoggingTestCase): 335 332 def test_check_sys_deps(self): 336 mock_options = MockOptions() 337 port = ChromiumPortTest.TestLinuxPort(options=mock_options) 333 port = ChromiumPortTest.TestLinuxPort() 338 334 339 335 # Success … … 351 347 'ERROR: testing output failure\n']) 352 348 349 353 350 if __name__ == '__main__': 354 351 unittest.main() -
trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_win.py
r100421 r100674 30 30 """Chromium Win implementation of the Port interface.""" 31 31 32 import os 32 33 import logging 33 34 import sys … … 99 100 100 101 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 102 112 # Put the cygwin directory first in the path to find cygwin1.dll. 103 113 env["PATH"] = "%s;%s" % (self.path_from_chromium_base("third_party", "cygwin", "bin"), env["PATH"]) … … 105 115 # python executable to run cgi program. 106 116 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'): 108 118 setup_mount = self.path_from_chromium_base("third_party", "cygwin", "setup_mount.bat") 109 119 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 48 48 port_maker = chromium_win.ChromiumWinPort 49 49 50 def _mock_path_from_chromium_base(self, *comps):51 return self._port._filesystem.join("/chromium/src", *comps)52 53 50 def test_uses_apache(self): 54 51 self.assertFalse(self.make_port()._uses_apache()) … … 56 53 def test_setup_environ_for_server(self): 57 54 port = self.make_port() 58 59 55 port._executive = MockExecutive(should_log=True) 60 self._port = port61 port.path_from_chromium_base = self._mock_path_from_chromium_base62 56 output = outputcapture.OutputCapture() 57 # FIXME: This test should not use the real os.environ 63 58 orig_environ = os.environ.copy() 64 59 env = output.assert_outputs(self, port.setup_environ_for_server) … … 66 61 self.assertNotEqual(env["PATH"], os.environ["PATH"]) 67 62 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 68 68 def test_setup_environ_for_server_register_cygwin(self): 69 69 port = self.make_port(options=ChromiumWinTest.RegisterCygwinOption()) 70 71 70 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" 80 72 output = outputcapture.OutputCapture() 81 73 output.assert_outputs(self, port.setup_environ_for_server, expected_stderr=expected_stderr) … … 135 127 '/mock-checkout/Source/WebKit/chromium/build/Debug/DumpRenderTree.exe', 136 128 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 48 48 return "--efl" 49 49 50 def setup_environ_for_server(self, server_name=None):51 return WebKitPort.setup_environ_for_server(self, server_name)52 53 50 def _generate_all_test_configurations(self): 54 51 return [TestConfiguration(version=self._version, architecture='x86', build_type=build_type, graphics_type='cpu') for build_type in self.ALL_BUILD_TYPES] … … 60 57 return self._build_path('Programs', 'ImageDiff') 61 58 59 # FIXME: I doubt EFL wants to override this method. 62 60 def check_build(self, needs_http): 63 61 return self._check_driver() … … 66 64 static_path = self._build_path('WebCore', 'libwebcore_efl.a') 67 65 dyn_path = self._build_path('WebCore', 'libwebcore_efl.so') 68 69 66 return static_path if self._filesystem.exists(static_path) else dyn_path 70 67 71 68 def _runtime_feature_list(self): 69 # FIXME: EFL should detect runtime features like other webkit ports do. 72 70 return None 73 71 -
trunk/Tools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py
r99773 r100674 47 47 48 48 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) 50 50 path = port.baseline_search_path()[0] 51 51 self.assertEqual(expected_path, port._filesystem.basename(path)) 52 52 53 53 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. 55 55 # we should be able to test for the files existing or not, and 56 56 # be able to control the contents better. 57 # FIXME: What is the Tree() abstraction? 57 58 58 59 host = MockHost() -
trunk/Tools/Scripts/webkitpy/layout_tests/port/mac.py
r100618 r100674 103 103 if self.get_option('guard_malloc'): 104 104 env['DYLD_INSERT_LIBRARIES'] = '/usr/lib/libgmalloc.dylib' 105 env['XML_CATALOG_FILES'] = '' # work around missing /etc/catalog <rdar://problem/4292995> 105 106 return env 106 107 -
trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py
r99773 r100674 142 142 143 143 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 147 148 148 149 # FIXME: We should find a way to share this implmentation with Gtk, -
trunk/Tools/Scripts/webkitpy/layout_tests/port/qt_unittest.py
r99781 r100674 83 83 expected_stderr = "MOCK run_command: ['Tools/Scripts/run-launcher', '--release', '--qt', 'file://test.html'], cwd=/mock-checkout\n" 84 84 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 221 221 return (output_image, diff_percent) 222 222 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 223 228 def default_results_directory(self): 224 229 # Results are store relative to the built products to make it easy -
trunk/Tools/Scripts/webkitpy/layout_tests/port/win.py
r99773 r100674 109 109 return map(self._webkit_baseline_path, fallback_names) 110 110 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 111 115 # FIXME: webkitperl/httpd.pm installs /usr/lib/apache/libphp4.dll on cycwin automatically 112 116 # 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.