Files
wehub-resource-sync 0418dc5cf9
CI / Python tests (3.10) (push) Has been cancelled
CI / Python tests (3.11) (push) Has been cancelled
CI / Python quality (push) Has been cancelled
CI / Frontend typecheck (push) Has been cancelled
Autopilot Pages / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:45:00 +08:00

84 lines
2.8 KiB
Python

"""Tests for swarm file-lock helpers."""
from __future__ import annotations
import builtins
from contextlib import contextmanager
from pathlib import Path
import pytest
from openharness.swarm import lockfile
from openharness.utils import file_lock
def test_exclusive_file_lock_creates_lock_file_on_posix(tmp_path: Path):
lock_path = tmp_path / "locks" / "mailbox.lock"
with lockfile.exclusive_file_lock(lock_path, platform_name="linux"):
assert lock_path.exists()
assert lock_path.exists()
def test_exclusive_file_lock_routes_windows_branch(monkeypatch, tmp_path: Path):
calls: list[Path] = []
@contextmanager
def _fake_windows_lock(lock_path: Path):
calls.append(lock_path)
yield
# The implementation lives in ``openharness.utils.file_lock``;
# ``openharness.swarm.lockfile`` re-exports it for backwards compatibility.
monkeypatch.setattr(file_lock, "_exclusive_windows_lock", _fake_windows_lock)
lock_path = tmp_path / "windows.lock"
with lockfile.exclusive_file_lock(lock_path, platform_name="windows"):
pass
assert calls == [lock_path]
def test_exclusive_file_lock_rejects_unknown_platform(tmp_path: Path):
with pytest.raises(lockfile.SwarmLockUnavailableError, match="not supported"):
with lockfile.exclusive_file_lock(tmp_path / "unknown.lock", platform_name="unknown"):
pass
def test_posix_lock_reports_unavailable_when_fcntl_missing(monkeypatch, tmp_path: Path):
real_import = builtins.__import__
def fake_import(name, *args, **kwargs):
if name == "fcntl":
raise ImportError("missing fcntl")
return real_import(name, *args, **kwargs)
monkeypatch.setattr(builtins, "__import__", fake_import)
with pytest.raises(lockfile.SwarmLockUnavailableError, match="fcntl not available"):
with file_lock._exclusive_posix_lock(tmp_path / "posix.lock"):
pass
def test_windows_lock_reports_unavailable_when_msvcrt_missing(monkeypatch, tmp_path: Path):
real_import = builtins.__import__
def fake_import(name, *args, **kwargs):
if name == "msvcrt":
raise ImportError("missing msvcrt")
return real_import(name, *args, **kwargs)
monkeypatch.setattr(builtins, "__import__", fake_import)
with pytest.raises(lockfile.SwarmLockUnavailableError, match="msvcrt not available"):
with file_lock._exclusive_windows_lock(tmp_path / "windows.lock"):
pass
def test_swarm_lockfile_shim_re_exports_public_api():
"""Existing callers importing from ``swarm.lockfile`` must keep working."""
assert lockfile.exclusive_file_lock is file_lock.exclusive_file_lock
assert lockfile.SwarmLockError is file_lock.SwarmLockError
assert lockfile.SwarmLockUnavailableError is file_lock.SwarmLockUnavailableError