blob: ad3c736cb65fc4fbaa382ea79bd394ca5ffdba2c [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
from webkitpy.common.system.log_testing import LoggingTestCase
from webkitpy.common.host_mock import MockHost
from webkitpy.layout_tests.port import test
from webkitpy.layout_tests.servers.wptserve import WPTServe
class TestWPTServe(LoggingTestCase):
# pylint: disable=protected-access
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/serve',
'--config',
'/mock-checkout/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt.config.json',
'--doc_root',
'/test.checkout/LayoutTests/external/wpt'
])
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_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'
])