from pathlib import Path from unittest.mock import MagicMock import pytest from croaker import pidfile @pytest.mark.parametrize( "pid,terminate,kill_result,broken", [ ("pid", False, None, False), # running proc, no terminate ("pid", True, True, False), # running proc, terminate ("pid", True, ProcessLookupError, True), # stale pid (None, None, None, False), # no running proc ], ) def test_pidfile(monkeypatch, pid, terminate, kill_result, broken): monkeypatch.setattr( pidfile._pidfile, "TimeoutPIDLockFile", MagicMock( **{ "return_value.read_pid.return_value": pid, } ), ) monkeypatch.setattr( pidfile.os, "kill", MagicMock(**{"side_effect": kill_result if type(kill_result) is Exception else [kill_result]}), ) ret = pidfile.pidfile(pidfile_path=Path("/dev/null"), terminate_if_running=terminate) assert ret.break_lock.called == broken