def test_start_cmd(self): # Fails on win - see https://bugs.webkit.org/show_bug.cgi?id=84726 if sys.platform in ('cygwin', 'win32'): return host = MockHost() test_port = test.TestPort(host) host.filesystem.write_text_file( "/mock-checkout/Tools/Scripts/webkitpy/layout_tests/servers/lighttpd.conf", "Mock Config\n") host.filesystem.write_text_file("/usr/lib/lighttpd/liblightcomp.dylib", "Mock dylib") server = Lighttpd(test_port, "/mock/output_dir", additional_dirs={ "/mock/one-additional-dir": "/mock-checkout/one-additional-dir", "/mock/another-additional-dir": "/mock-checkout/one-additional-dir" }) self.assertRaises(ServerError, server.start) config_file = host.filesystem.read_text_file( "/mock/output_dir/lighttpd.conf") self.assertEquals(re.findall(r"alias.url.+", config_file), [ 'alias.url = ( "/js-test-resources" => "/test.checkout/LayoutTests/fast/js/resources" )', 'alias.url += ( "/mock/one-additional-dir" => "/mock-checkout/one-additional-dir" )', 'alias.url += ( "/mock/another-additional-dir" => "/mock-checkout/one-additional-dir" )', 'alias.url += ( "/media-resources" => "/test.checkout/LayoutTests/media" )', ])
def test_win32_start_and_stop(self): host = MockHost() test_port = test.TestPort(host) test_port._path_to_crash_service = lambda: "/mock/crash_service" host.platform.is_win = lambda: True host.platform.is_cygwin = lambda: False server = CrashService(test_port, "/mock/crash_dumps_dir") server._check_that_all_ports_are_available = lambda: True server._is_server_running_on_all_ports = lambda: True server.start() self.assertNotEquals(host.executive.calls, []) def wait_for_action(action): if action(): return True return action() def mock_returns(return_values): def return_value_thunk(*args, **kwargs): return return_values.pop(0) return return_value_thunk host.executive.check_running_pid = mock_returns([True, False]) server._wait_for_action = wait_for_action server.stop() self.assertEqual(['taskkill.exe', '/f', '/t', '/pid', 42], host.executive.calls[1])
def test_win32_start_and_stop(self): host = MockHost() test_port = test.TestPort(host) host.filesystem.write_text_file( "/test.checkout/LayoutTests/http/conf/lighttpd.conf", "Mock Config\n") host.filesystem.write_text_file("/usr/lib/lighttpd/liblightcomp.dylib", "Mock dylib") host.platform.is_win = lambda: True host.platform.is_cygwin = lambda: False server = Lighttpd(test_port, "/mock/output_dir") server._check_that_all_ports_are_available = lambda: True server._is_server_running_on_all_ports = lambda: True server.start() self.assertNotEquals(host.executive.calls, []) def wait_for_action(action): if action(): return True return action() def mock_returns(return_values): def return_value_thunk(*args, **kwargs): return return_values.pop(0) return return_value_thunk host.executive.check_running_pid = mock_returns([True, False]) server._wait_for_action = wait_for_action server.stop()
def test_start_with_unkillable_zombie_process(self): # Allow asserting about debug logs. self.set_logging_level(logging.DEBUG) host = MockHost() test_port = test.TestPort(host) host.filesystem.write_text_file('/log_file_dir/access_log', 'foo') host.filesystem.write_text_file('/log_file_dir/error_log', 'foo') host.filesystem.write_text_file('/tmp/pidfile', '7') server = WPTServe(test_port, '/log_file_dir') server._pid_file = '/tmp/pidfile' server._spawn_process = lambda: 4 server._is_server_running_on_all_ports = lambda: True # Simulate a process that never gets killed. host.executive.check_running_pid = lambda _: True server.start() self.assertEqual(server._pid, 4) self.assertIsNone(host.filesystem.files[server._pid_file]) # In this case, we'll try to kill the process repeatedly, # then give up and just try to start a new process anyway. logs = self.logMessages() self.assertEqual(len(logs), 43) self.assertEqual(logs[:2], [ 'DEBUG: stale wptserve pid file, pid 7\n', 'DEBUG: pid 7 is running, killing it\n' ]) self.assertEqual(logs[-2:], [ 'DEBUG: all ports are available\n', 'DEBUG: wptserve successfully started (pid = 4)\n' ])
def test_start_cmd(self): # Fails on win - see https://bugs.webkit.org/show_bug.cgi?id=84726 if sys.platform in ('cygwin', 'win32'): return def fake_pid(_): host.filesystem.write_text_file('/tmp/WebKit/httpd.pid', '42') return True host = MockHost() host.executive = MockExecutive(should_log=True) test_port = test.TestPort(host) host.filesystem.write_text_file(test_port._path_to_apache_config_file(), '') server = LayoutTestApacheHttpd(test_port, "/mock/output_dir", number_of_servers=4) server._check_that_all_ports_are_available = lambda: True server._is_server_running_on_all_ports = lambda: True server._wait_for_action = fake_pid oc = OutputCapture() try: oc.capture_output() server.start() server.stop() finally: _, _, logs = oc.restore_output() self.assertTrue("StartServers 4" in logs) self.assertTrue("MinSpareServers 4" in logs) self.assertTrue("MaxSpareServers 4" in logs) self.assertTrue(host.filesystem.exists("/mock/output_dir/httpd.conf"))
def test_is_test_file(self): port = test.TestPort() fs = port._filesystem self.assertTrue(test_files._is_test_file(fs, '', 'foo.html')) self.assertTrue(test_files._is_test_file(fs, '', 'foo.shtml')) self.assertFalse(test_files._is_test_file(fs, '', 'foo.png')) self.assertFalse(test_files._is_test_file(fs, '', 'foo-expected.html')) self.assertFalse( test_files._is_test_file(fs, '', 'foo-expected-mismatch.html'))
def test_init_env(self): test_port = test.TestPort(MockHost()) server = WPTServe(test_port, '/foo') self.assertEqual( server._env, # pylint: disable=protected-access { 'MOCK_ENVIRON_COPY': '1', 'PATH': '/bin:/mock/bin', 'PYTHONPATH': '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty' })
def test_start_cmd(self): # Fails on win - see https://bugs.webkit.org/show_bug.cgi?id=84726 if sys.platform in ('cygwin', 'win32'): return host = MockHost() test_port = test.TestPort(host) test_port._path_to_crash_service = lambda: "/mock/crash_service" server = CrashService(test_port, "/mock/crash_dumps_dir") self.assertRaises(ServerError, server.start)
def test_init_start_cmd(self): test_port = test.TestPort(MockHost()) server = WPTServe(test_port, '/foo') self.assertEqual( server._start_cmd, # pylint: disable=protected-access [ 'python', '-u', '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/wpt', 'serve', '--config', '/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt.config.json', '--doc_root', '/test.checkout/LayoutTests/external/wpt' ])
def test_test_timings_trie(self): test_port = test.TestPort(MockHost()) individual_test_timings = [] individual_test_timings.append(json_results_generator.TestResult('foo/bar/baz.html', elapsed_time=1.2)) individual_test_timings.append(json_results_generator.TestResult('bar.html', elapsed_time=0.0001)) trie = json_results_generator.test_timings_trie(test_port, individual_test_timings) expected_trie = { 'bar.html': 0, 'foo': { 'bar': { 'baz.html': 1200, } } } self.assertEqual(json.dumps(trie), json.dumps(expected_trie))
def test_win32_start_and_stop(self): host = MockHost() test_port = test.TestPort(host) host.filesystem.write_text_file( "/mock-checkout/Tools/Scripts/webkitpy/layout_tests/servers/lighttpd.conf", "Mock Config\n") host.filesystem.write_text_file("/usr/lib/lighttpd/liblightcomp.dylib", "Mock dylib") host.platform.is_win = lambda: True host.platform.is_cygwin = lambda: False server = Lighttpd(test_port, "/mock/output_dir", additional_dirs={ "/mock/one-additional-dir": "/mock-checkout/one-additional-dir", "/mock/another-additional-dir": "/mock-checkout/one-additional-dir" }) server._check_that_all_ports_are_available = lambda: True server._is_server_running_on_all_ports = lambda: True server.start() self.assertNotEquals(host.executive.calls, []) def wait_for_action(action): if action(): return True return action() def mock_returns(return_values): def return_value_thunk(*args, **kwargs): return return_values.pop(0) return return_value_thunk host.executive.check_running_pid = mock_returns([True, False]) server._wait_for_action = wait_for_action server.stop() self.assertEqual(['taskkill.exe', '/f', '/t', '/pid', 42], host.executive.calls[1])
def test_corrupt_pid_file(self): # This tests that if the pid file is corrupt or invalid, # both start() and stop() deal with it correctly and delete the file. host = MockHost() test_port = test.TestPort(host) server = ServerBase(test_port, test_port.default_results_directory()) server._pid_file = '/tmp/pidfile' server._spawn_process = lambda: 4 server._is_server_running_on_all_ports = lambda: True host.filesystem.write_text_file(server._pid_file, 'foo') server.stop() self.assertEqual(host.filesystem.files[server._pid_file], None) host.filesystem.write_text_file(server._pid_file, 'foo') server.start() self.assertEqual(server._pid, 4) # Note that the pid file would not be None if _spawn_process() # was actually a real implementation. self.assertEqual(host.filesystem.files[server._pid_file], None)
def test_find_with_skipped_directories_2(self): port = test.TestPort() tests = test_files.find(port, ['userscripts/resources']) self.assertEqual(tests, set([]))
def test_find_with_skipped_directories(self): port = test.TestPort() tests = port.tests('userscripts') self.assertTrue('userscripts/resources/iframe.html' not in tests)
def test_find_glob(self): port = test.TestPort() tests = test_files.find(port, ['failures/expected/im*']) self.assertEqual(len(tests), 2)
def test_find_one_test(self): port = test.TestPort() tests = test_files.find(port, ['failures/expected/image.html']) self.assertEqual(len(tests), 1)
def test_find_no_paths_specified(self): port = test.TestPort() layout_tests_dir = port.layout_tests_dir() tests = test_files.find(port, []) self.assertNotEqual(len(tests), 0)