Real rsync runs over fake ssh and sshpass scripts that execute the remote side locally, covering --link-dest, removal, key file, password and --remote-sudo without a server.
53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
"""Shared fixtures for the simple_backup tests"""
|
|
|
|
import sys
|
|
from collections.abc import Callable, Iterator
|
|
from datetime import datetime, timedelta
|
|
|
|
import pytest
|
|
|
|
from simple_backup import simple_backup as sb
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def no_side_effects(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
"""Keep tests out of the systemd journal and the desktop notifications"""
|
|
|
|
if hasattr(sb, 'j_handler'):
|
|
sb.logger.removeHandler(sb.j_handler)
|
|
|
|
monkeypatch.setattr(sb, '_notify', lambda text: None)
|
|
|
|
|
|
@pytest.fixture
|
|
def fake_now(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
"""Give each backup a new timestamp, as real runs within the same second would collide"""
|
|
|
|
def times() -> Iterator[datetime]:
|
|
t = datetime(2026, 10, 14, 10, 0, 0)
|
|
|
|
while True:
|
|
yield t
|
|
t += timedelta(hours=1)
|
|
|
|
it = times()
|
|
|
|
class FakeDatetime:
|
|
@staticmethod
|
|
def now() -> datetime:
|
|
return next(it)
|
|
|
|
monkeypatch.setattr(sb, 'datetime', FakeDatetime)
|
|
|
|
|
|
@pytest.fixture
|
|
def run_cli(monkeypatch: pytest.MonkeyPatch) -> Callable[..., int]:
|
|
"""Run simple_backup() with the given command line arguments"""
|
|
|
|
def run(*argv: str) -> int:
|
|
monkeypatch.setattr(sys, 'argv', ['simple_backup', *argv])
|
|
|
|
return sb.simple_backup()
|
|
|
|
return run
|