91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
"""Apps verwijderen: veilige dataretentie, volledige wisactie en symlinks."""
|
|
import time
|
|
|
|
from conftest import login
|
|
|
|
|
|
def _wacht(client, jid, timeout=5):
|
|
einde = time.time() + timeout
|
|
while time.time() < einde:
|
|
data = client.get(f"/api/jobs/{jid}").get_json() or {}
|
|
if data.get("status") in ("done", "error"):
|
|
return data
|
|
time.sleep(0.03)
|
|
return {}
|
|
|
|
|
|
def _stack(env, naam):
|
|
pad = env["lib"] / naam
|
|
pad.mkdir()
|
|
(pad / "compose.yaml").write_text(
|
|
"services:\n web:\n image: nginx\n", encoding="utf-8")
|
|
data = env["tmp"] / "appdata" / naam
|
|
data.mkdir(parents=True)
|
|
(data / "blijft.txt").write_text("data", encoding="utf-8")
|
|
return pad, data
|
|
|
|
|
|
def test_app_verwijderen_haalt_app_weg_en_bewaart_data(
|
|
client, env, monkeypatch):
|
|
from core import docker
|
|
csrf = login(client)
|
|
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
|
|
stack, data = _stack(env, "veilig")
|
|
volumes = []
|
|
monkeypatch.setattr(
|
|
docker, "compose_down",
|
|
lambda *a, **kw: volumes.append(kw.get("volumes")) or 0)
|
|
|
|
r = client.post("/api/stacks/veilig/remove", json={"mode": "full"},
|
|
headers={"X-CSRF-Token": csrf})
|
|
job = _wacht(client, r.get_json()["job_id"])
|
|
|
|
assert job["status"] == "done"
|
|
assert not stack.exists()
|
|
assert data.is_dir()
|
|
assert volumes == [False]
|
|
|
|
|
|
def test_app_en_data_verwijderen_wist_ook_volumes_en_appdata(
|
|
client, env, monkeypatch):
|
|
from core import docker
|
|
csrf = login(client)
|
|
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
|
|
stack, data = _stack(env, "alles")
|
|
volumes = []
|
|
monkeypatch.setattr(
|
|
docker, "compose_down",
|
|
lambda *a, **kw: volumes.append(kw.get("volumes")) or 0)
|
|
|
|
r = client.post("/api/stacks/alles/remove", json={"mode": "all"},
|
|
headers={"X-CSRF-Token": csrf})
|
|
job = _wacht(client, r.get_json()["job_id"])
|
|
|
|
assert job["status"] == "done"
|
|
assert not stack.exists()
|
|
assert not data.exists()
|
|
assert volumes == [True]
|
|
|
|
|
|
def test_overgenomen_app_verwijderen_haalt_alleen_symlink_weg(
|
|
client, env, monkeypatch):
|
|
from core import docker
|
|
csrf = login(client)
|
|
env["core"].patch({"BACKUP_BEFORE_REMOVE": False})
|
|
bron = env["tmp"] / "eigen-compose"
|
|
bron.mkdir()
|
|
(bron / "compose.yaml").write_text(
|
|
"services:\n web:\n image: nginx\n", encoding="utf-8")
|
|
link = env["lib"] / "overgenomen"
|
|
link.symlink_to(bron)
|
|
monkeypatch.setattr(docker, "compose_down", lambda *a, **kw: 0)
|
|
|
|
r = client.post("/api/stacks/overgenomen/remove",
|
|
json={"mode": "full"},
|
|
headers={"X-CSRF-Token": csrf})
|
|
assert r.status_code == 200, r.get_json()
|
|
job = _wacht(client, r.get_json()["job_id"])
|
|
|
|
assert job["status"] == "done"
|
|
assert not link.exists() and not link.is_symlink()
|
|
assert (bron / "compose.yaml").is_file()
|