From 6cfcd564c0684c52618235e6366f4a81c02b9a5b Mon Sep 17 00:00:00 2001 From: historia Date: Tue, 1 Sep 2026 14:32:05 -0400 Subject: slop refactor/dedup --- app/tests/test_backends_servers.py | 41 +++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'app/tests/test_backends_servers.py') diff --git a/app/tests/test_backends_servers.py b/app/tests/test_backends_servers.py index ab05eed..61897d4 100644 --- a/app/tests/test_backends_servers.py +++ b/app/tests/test_backends_servers.py @@ -65,10 +65,45 @@ class StartTests(unittest.TestCase): ok = servers.start(self.spec) self.assertTrue(ok) mk.assert_called_once() - # Pid file written. + # Pid file written (first field is the pid; the optional second + # field is the start-time ownership token, absent on this platform). self.assertEqual( - (self.dir / "test-server.pid").read_text(encoding="utf-8"), - "4242") + (self.dir / "test-server.pid").read_text(encoding="utf-8") + .split()[0], "4242") + + def test_pid_file_records_a_start_time_token_where_available(self): + proc = MagicMock() + proc.pid = 5150 + proc.poll.return_value = None + with patch.object(servers, "LOG_DIR", self.dir), \ + patch("subprocess.Popen", return_value=proc), \ + patch.object(servers, "_process_start_token", + return_value="12345"), \ + patch("backends.common.server_running", + side_effect=[False, True]), \ + patch("time.sleep"): + self.assertTrue(servers.start(self.spec)) + fields = (self.dir / "test-server.pid") \ + .read_text(encoding="utf-8").split() + self.assertEqual(fields, ["5150", "12345"]) + + def test_recycled_pid_with_mismatched_token_is_not_ours(self): + # The pid is alive but its start time differs from the recorded + # token: an unrelated process now owns this pid, so manages/alive + # must report not-ours (and never kill it). + pid_file = self.dir / "test-server.pid" + pid_file.write_text("4242 111\n", encoding="utf-8") + with patch.object(servers, "LOG_DIR", self.dir), \ + patch.object(servers, "_pid_alive", return_value=True), \ + patch.object(servers, "_process_start_token", + return_value="999"): + self.assertFalse(servers.alive("test")) + self.assertFalse(servers.manages([self.spec])) + with patch.object(servers, "LOG_DIR", self.dir), \ + patch.object(servers, "_pid_alive", return_value=True), \ + patch.object(servers, "_process_start_token", + return_value="111"): + self.assertTrue(servers.alive("test")) def test_returns_false_when_process_exits_early(self): proc = MagicMock() -- cgit v1.2.3