def test_start_with_unkillable_zombie_process(self): # Allow asserting about debug logs. self.set_logging_level(logging.DEBUG) self.host.filesystem.write_text_file('/log_file_dir/access_log', 'foo') self.host.filesystem.write_text_file('/log_file_dir/error_log', 'foo') self.host.filesystem.write_text_file('/tmp/pidfile', '7') server = WPTServe(self.port, '/log_file_dir') server._pid_file = '/tmp/pidfile' server._is_server_running_on_all_ports = lambda: True # Simulate a process that never gets killed. self.host.executive.check_running_pid = lambda _: True server.start() self.assertEqual(server._pid, 42) self.assertEqual(self.host.filesystem.files[server._pid_file], '42') # 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), 44) self.assertEqual(logs[:2], [ 'DEBUG: stale wptserve pid file, pid 7\n', 'DEBUG: pid 7 is running, killing it\n' ]) self.assertTrue(logs[-2].startswith('DEBUG: Starting wptserve server')) self.assertEqual(logs[-1], 'DEBUG: wptserve successfully started (pid = 42)\n')
def test_start_with_stale_pid(self): # Allow asserting about debug logs. self.set_logging_level(logging.DEBUG) self.host.filesystem.write_text_file('/log_file_dir/access_log', 'foo') self.host.filesystem.write_text_file('/log_file_dir/error_log', 'foo') self.host.filesystem.write_text_file('/tmp/pidfile', '7') server = WPTServe(self.port, '/log_file_dir') server._pid_file = '/tmp/pidfile' server._is_server_running_on_all_ports = lambda: True server.start() # PID file should be overwritten (MockProcess.pid == 42) self.assertEqual(server._pid, 42) self.assertEqual(self.host.filesystem.files[server._pid_file], '42') # Config file should exist. json.loads(self.port._filesystem.read_text_file(server._config_file)) logs = self.logMessages() self.assertEqual(len(logs), 5) self.assertEqual(logs[:2], [ 'DEBUG: stale wptserve pid file, pid 7\n', 'DEBUG: pid 7 is not running\n', ]) self.assertTrue(logs[-2].startswith('DEBUG: Starting wptserve server')) self.assertEqual(logs[-1], 'DEBUG: wptserve successfully started (pid = 42)\n')
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' ])