De wachttests leunden op een curl die de CI niet heeft
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 15m55s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 15m55s
De runner draait in python:3.12-slim, zonder curl. Daar faalde elke poging en toetsten deze tests niet meer dan "curl ontbreekt". Ze krijgen nu een eigen curl-schilletje op $PATH, zodat ze overal vastleggen wat ze horen vast te leggen: welk adres het script opvraagt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
afda654983
commit
15213708a4
1 changed files with 38 additions and 5 deletions
|
|
@ -634,15 +634,48 @@ def test_het_controleadres_volgt_het_bind_adres(bind, verwacht, tmp_path):
|
||||||
assert uit.strip().splitlines()[-1] == verwacht, uit
|
assert uit.strip().splitlines()[-1] == verwacht, uit
|
||||||
|
|
||||||
|
|
||||||
def _sh(fragment, tmp_path):
|
def _sh(fragment, tmp_path, met_nep_curl=False):
|
||||||
"""Laadt install.sh en draait een fragment; geen terminal in het spel."""
|
"""Laadt install.sh en draait een fragment; geen terminal in het spel."""
|
||||||
|
import os
|
||||||
script = tmp_path / "frag.sh"
|
script = tmp_path / "frag.sh"
|
||||||
script.write_text(f"set --\nSU_INSTALL_ALLEEN_FUNCTIES=1 . {SCRIPT}\n{fragment}\n")
|
script.write_text(f"set --\nSU_INSTALL_ALLEEN_FUNCTIES=1 . {SCRIPT}\n{fragment}\n")
|
||||||
|
env = dict(os.environ)
|
||||||
|
if met_nep_curl:
|
||||||
|
env["PATH"] = f"{_nep_curl(tmp_path)}{os.pathsep}{env.get('PATH', '')}"
|
||||||
r = subprocess.run(["sh", str(script)], capture_output=True, text=True,
|
r = subprocess.run(["sh", str(script)], capture_output=True, text=True,
|
||||||
timeout=60, stdin=subprocess.DEVNULL)
|
timeout=60, stdin=subprocess.DEVNULL, env=env)
|
||||||
return r.stdout + r.stderr
|
return r.stdout + r.stderr
|
||||||
|
|
||||||
|
|
||||||
|
def _nep_curl(tmp_path):
|
||||||
|
"""Een map met een eigen `curl`, zodat deze tests overal hetzelfde doen.
|
||||||
|
|
||||||
|
De CI-runner draait in python:3.12-slim en heeft geen curl. Zonder dit
|
||||||
|
faalde elke poging daar en toetsten deze tests niets meer dan "curl
|
||||||
|
ontbreekt". Wat ze wél moeten toetsen is welk adres het script opvraagt, en
|
||||||
|
dat legt dit schilletje vast.
|
||||||
|
"""
|
||||||
|
bin_dir = tmp_path / "nepbin"
|
||||||
|
if bin_dir.exists():
|
||||||
|
return str(bin_dir)
|
||||||
|
bin_dir.mkdir()
|
||||||
|
shim = bin_dir / "curl"
|
||||||
|
shim.write_text(
|
||||||
|
"#!/usr/bin/env python3\n"
|
||||||
|
"import sys, urllib.request\n"
|
||||||
|
"url = next((a for a in sys.argv[1:] if a.startswith('http')), None)\n"
|
||||||
|
"if not url:\n"
|
||||||
|
" sys.exit(2)\n"
|
||||||
|
"try:\n"
|
||||||
|
" with urllib.request.urlopen(url, timeout=2) as r:\n"
|
||||||
|
" sys.stdout.write(r.read().decode('utf-8', 'replace'))\n"
|
||||||
|
"except Exception:\n"
|
||||||
|
" sys.exit(22)\n",
|
||||||
|
encoding="utf-8")
|
||||||
|
shim.chmod(0o755)
|
||||||
|
return str(bin_dir)
|
||||||
|
|
||||||
|
|
||||||
def _server(poort_uit, pad="/healthz", inhoud=b'{"version":"9.9.9"}'):
|
def _server(poort_uit, pad="/healthz", inhoud=b'{"version":"9.9.9"}'):
|
||||||
"""Een minimale HTTP-server op 127.0.0.1 die één pad kent."""
|
"""Een minimale HTTP-server op 127.0.0.1 die één pad kent."""
|
||||||
import http.server
|
import http.server
|
||||||
|
|
@ -674,7 +707,7 @@ def test_wachten_slaagt_zodra_de_server_antwoordt(tmp_path):
|
||||||
try:
|
try:
|
||||||
uit = _sh(f'DROOG=0; BIND="127.0.0.1"; POORT={poort[0]}; DOEL="{tmp_path}"\n'
|
uit = _sh(f'DROOG=0; BIND="127.0.0.1"; POORT={poort[0]}; DOEL="{tmp_path}"\n'
|
||||||
'SU_WACHT_POGINGEN=3 wacht_op_gereed && echo "UITKOMST=gereed"\n',
|
'SU_WACHT_POGINGEN=3 wacht_op_gereed && echo "UITKOMST=gereed"\n',
|
||||||
tmp_path)
|
tmp_path, met_nep_curl=True)
|
||||||
finally:
|
finally:
|
||||||
srv.shutdown()
|
srv.shutdown()
|
||||||
assert "UITKOMST=gereed" in uit, uit
|
assert "UITKOMST=gereed" in uit, uit
|
||||||
|
|
@ -689,7 +722,7 @@ def test_wachten_kijkt_naar_het_ingestelde_adres_niet_naar_loopback(tmp_path):
|
||||||
try:
|
try:
|
||||||
uit = _sh(f'DROOG=0; BIND="10.255.255.1"; POORT={poort[0]}; DOEL="{tmp_path}"\n'
|
uit = _sh(f'DROOG=0; BIND="10.255.255.1"; POORT={poort[0]}; DOEL="{tmp_path}"\n'
|
||||||
'SU_WACHT_POGINGEN=1 wacht_op_gereed || echo "UITKOMST=niet-gereed"\n',
|
'SU_WACHT_POGINGEN=1 wacht_op_gereed || echo "UITKOMST=niet-gereed"\n',
|
||||||
tmp_path)
|
tmp_path, met_nep_curl=True)
|
||||||
finally:
|
finally:
|
||||||
srv.shutdown()
|
srv.shutdown()
|
||||||
assert "UITKOMST=niet-gereed" in uit, uit
|
assert "UITKOMST=niet-gereed" in uit, uit
|
||||||
|
|
@ -699,7 +732,7 @@ def test_wachten_kijkt_naar_het_ingestelde_adres_niet_naar_loopback(tmp_path):
|
||||||
def test_wachten_faalt_als_er_niets_luistert(tmp_path):
|
def test_wachten_faalt_als_er_niets_luistert(tmp_path):
|
||||||
uit = _sh(f'DROOG=0; BIND="127.0.0.1"; POORT=1; DOEL="{tmp_path}"\n'
|
uit = _sh(f'DROOG=0; BIND="127.0.0.1"; POORT=1; DOEL="{tmp_path}"\n'
|
||||||
'SU_WACHT_POGINGEN=1 wacht_op_gereed || echo "UITKOMST=niet-gereed"\n',
|
'SU_WACHT_POGINGEN=1 wacht_op_gereed || echo "UITKOMST=niet-gereed"\n',
|
||||||
tmp_path)
|
tmp_path, met_nep_curl=True)
|
||||||
assert "UITKOMST=niet-gereed" in uit, uit
|
assert "UITKOMST=niet-gereed" in uit, uit
|
||||||
assert "logs --tail" in uit, "geen aanwijzing hoe je verder kijkt"
|
assert "logs --tail" in uit, "geen aanwijzing hoe je verder kijkt"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue