mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-16 05:37:42 +00:00
Clean release snapshot
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
"""Tests for builtin diagnostic sloppak seeding into DLC."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def server_mod(tmp_path, monkeypatch, isolate_logging):
|
||||
monkeypatch.setenv("CONFIG_DIR", str(tmp_path))
|
||||
monkeypatch.delenv("DLC_DIR", raising=False)
|
||||
sys.modules.pop("server", None)
|
||||
mod = importlib.import_module("server")
|
||||
yield mod
|
||||
|
||||
|
||||
def test_seed_creates_builtin_diagnostic_sloppak(tmp_path, server_mod):
|
||||
"""First seed copies the bundled sloppak into diagnostics-builtin/."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
source = server_mod._slopsmith_server_root() / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][1]
|
||||
if not source.is_file():
|
||||
pytest.skip(f"source sloppak not present in checkout: {source}")
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
dest = dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][0]
|
||||
assert dest.is_file()
|
||||
assert dest.stat().st_size == source.stat().st_size
|
||||
|
||||
|
||||
def test_seed_is_idempotent_when_destination_exists(tmp_path, server_mod):
|
||||
"""Second seed leaves an up-to-date destination unchanged."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
source = server_mod._slopsmith_server_root() / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][1]
|
||||
if not source.is_file():
|
||||
pytest.skip(f"source sloppak not present in checkout: {source}")
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
dest = dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][0]
|
||||
first_mtime = dest.stat().st_mtime_ns
|
||||
first_size = dest.stat().st_size
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
assert dest.stat().st_mtime_ns == first_mtime
|
||||
assert dest.stat().st_size == first_size
|
||||
|
||||
|
||||
def test_seed_skips_when_destination_is_newer(tmp_path, server_mod):
|
||||
"""An existing newer destination is not overwritten."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
source = server_mod._slopsmith_server_root() / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][1]
|
||||
if not source.is_file():
|
||||
pytest.skip(f"source sloppak not present in checkout: {source}")
|
||||
dest_dir = dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR
|
||||
dest_dir.mkdir(parents=True)
|
||||
dest_name = server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][0]
|
||||
dest = dest_dir / dest_name
|
||||
dest.write_bytes(b"user-owned diagnostic copy")
|
||||
future = time.time() + 3600
|
||||
os.utime(dest, (future, future))
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
assert dest.read_bytes() == b"user-owned diagnostic copy"
|
||||
|
||||
|
||||
def test_seed_refuses_to_follow_symlink_destination(tmp_path, server_mod):
|
||||
"""A symlink at the destination is skipped, not written through."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
source = server_mod._slopsmith_server_root() / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][1]
|
||||
if not source.is_file():
|
||||
pytest.skip(f"source sloppak not present in checkout: {source}")
|
||||
|
||||
outside = tmp_path / "outside.txt"
|
||||
outside.write_bytes(b"do not overwrite me")
|
||||
dest_dir = dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR
|
||||
dest_dir.mkdir(parents=True)
|
||||
dest = dest_dir / server_mod._BUILTIN_DIAGNOSTIC_SOURCES[0][0]
|
||||
dest.symlink_to(outside)
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
# The symlink target must be untouched and the link left as-is.
|
||||
assert outside.read_bytes() == b"do not overwrite me"
|
||||
assert dest.is_symlink()
|
||||
|
||||
|
||||
def test_seed_refuses_symlinked_seed_directory(tmp_path, server_mod):
|
||||
"""A symlinked diagnostics-builtin directory is skipped entirely."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
outside_dir = tmp_path / "outside_dir"
|
||||
outside_dir.mkdir()
|
||||
(dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR).symlink_to(
|
||||
outside_dir, target_is_directory=True
|
||||
)
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
# Nothing was written through the directory symlink into the link target.
|
||||
assert list(outside_dir.iterdir()) == []
|
||||
|
||||
|
||||
def test_seed_missing_source_does_not_crash(tmp_path, server_mod, monkeypatch):
|
||||
"""Missing bundled source logs and returns without raising."""
|
||||
dlc = tmp_path / "dlc"
|
||||
dlc.mkdir()
|
||||
monkeypatch.setattr(
|
||||
server_mod,
|
||||
"_BUILTIN_DIAGNOSTIC_SOURCES",
|
||||
[("missing.sloppak", "docs/diagnostics/does-not-exist.sloppak")],
|
||||
)
|
||||
|
||||
server_mod._seed_builtin_diagnostic_sloppaks(dlc)
|
||||
|
||||
assert not (dlc / server_mod._BUILTIN_DIAGNOSTIC_SUBDIR / "missing.sloppak").exists()
|
||||
Reference in New Issue
Block a user