25 lines
940 B
Python
25 lines
940 B
Python
|
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
|