예제 #1
0
    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" )',
        ])
예제 #2
0
    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()
예제 #4
0
    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'))
예제 #7
0
 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'
         })
예제 #8
0
    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)
예제 #9
0
 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))
예제 #11
0
    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])
예제 #12
0
    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)