Padcontrole toetsen zonder op de omgeving te leunen
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 17m42s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 17m42s
De CI draait zelf in een container, dus `bereikbaar()` viel daar al bij `buiten_mount` uit voordat de schrijftest werd bereikt — de test slaagde alleen op een machine zonder /.dockerenv. - `_in_container()` afgesplitst, zodat de tests kiezen welke tak ze toetsen - de schrijftest zet dat expliciet uit - twee tests erbij voor de mountcontrole zelf, inclusief dat een gekoppelde /opt/serverup de map /opt/serverup-oud niet bereikbaar maakt Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
90e4160727
commit
1530df277d
2 changed files with 37 additions and 1 deletions
|
|
@ -48,6 +48,11 @@ def _mountpunten() -> list[str]:
|
|||
return punten
|
||||
|
||||
|
||||
def _in_container() -> bool:
|
||||
"""Draaien we in een container? Bepaalt of de mountcontrole zin heeft."""
|
||||
return Path("/.dockerenv").exists()
|
||||
|
||||
|
||||
def bereikbaar(pad: str) -> dict:
|
||||
"""Kan Server Up hier schrijven, en komt dat ook op de host terecht?
|
||||
|
||||
|
|
@ -61,7 +66,7 @@ def bereikbaar(pad: str) -> dict:
|
|||
|
||||
basis = (cfg.load().get("BASE_DIR") or cfg.DEFAULTS["BASE_DIR"]).rstrip("/")
|
||||
# Buiten een container (bij het ontwikkelen) is alles bereikbaar.
|
||||
in_container = Path("/.dockerenv").exists()
|
||||
in_container = _in_container()
|
||||
punten = _mountpunten() if in_container else []
|
||||
|
||||
binnen = any(schoon == m or schoon.startswith(m.rstrip("/") + "/")
|
||||
|
|
|
|||
|
|
@ -174,7 +174,14 @@ def test_relatief_pad_wordt_geweigerd(env):
|
|||
|
||||
|
||||
def test_onschrijfbaar_pad_wordt_gemeld(env, tmp_path, monkeypatch):
|
||||
"""Buiten een container komt de mountcontrole er niet aan te pas.
|
||||
|
||||
Dit expliciet zetten in plaats van op de omgeving vertrouwen: de CI draait
|
||||
zelf in een container, en daar sloeg deze test aan op `buiten_mount` zonder
|
||||
ooit bij de schrijftest te komen.
|
||||
"""
|
||||
from core import paden
|
||||
monkeypatch.setattr(paden, "_in_container", lambda: False)
|
||||
monkeypatch.setattr(Path, "mkdir",
|
||||
lambda *a, **k: (_ for _ in ()).throw(OSError("alleen-lezen")))
|
||||
uit = paden.bereikbaar(str(tmp_path / "kan-niet"))
|
||||
|
|
@ -182,6 +189,30 @@ def test_onschrijfbaar_pad_wordt_gemeld(env, tmp_path, monkeypatch):
|
|||
assert "alleen-lezen" in uit["detail"]
|
||||
|
||||
|
||||
def test_pad_buiten_de_mount_wordt_herkend(env, monkeypatch):
|
||||
"""In de container bestaat /srv wel als pad, maar wat je erheen schrijft
|
||||
belandt in de overlay en niet op de host. Dat moet je vóóraf horen."""
|
||||
from core import paden
|
||||
monkeypatch.setattr(paden, "_in_container", lambda: True)
|
||||
monkeypatch.setattr(paden, "_mountpunten", lambda: ["/opt/serverup", "/data"])
|
||||
|
||||
uit = paden.bereikbaar("/srv/serverup/appdata")
|
||||
assert not uit["ok"] and uit["reden"] == "buiten_mount"
|
||||
# De melding moet zeggen wát je in .env zet, niet alleen dát het misging.
|
||||
assert uit["voorstel_base"] == "/srv/serverup"
|
||||
|
||||
# Wat wél gekoppeld is, komt gewoon door de mountcontrole heen.
|
||||
assert paden.bereikbaar("/opt/serverup/appdata").get("reden") != "buiten_mount"
|
||||
|
||||
|
||||
def test_de_mount_wordt_niet_op_naam_verward(env, monkeypatch):
|
||||
"""`/opt/serverup` gekoppeld maakt `/opt/serverup-oud` niet bereikbaar."""
|
||||
from core import paden
|
||||
monkeypatch.setattr(paden, "_in_container", lambda: True)
|
||||
monkeypatch.setattr(paden, "_mountpunten", lambda: ["/opt/serverup"])
|
||||
assert paden.bereikbaar("/opt/serverup-oud")["reden"] == "buiten_mount"
|
||||
|
||||
|
||||
# ── Voortgang ────────────────────────────────────────────────────────────────
|
||||
|
||||
def test_voortgang_komt_door_de_api(client, env):
|
||||
|
|
|
|||
Loading…
Reference in a new issue