CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
API-23 – Prüfprotokoll: HTTP-Client mit Zeitlimit im Core-Root-Modul
Nachtrag zu API-19 (QA-15-Befund F-11): das Core-Root-Modul selbst war bei der damaligen Umstellung nicht erfasst.
Umsetzung
internal/httpclient(neu, Core-Root-Modul): identisches Muster wiedms/internal/httpclient,archive/internal/httpclient,mail/internal/httpclient—New(timeout)liefert einen*http.Clientmit Zeitlimit undCheckRedirect, dashttp.ErrUseLastResponsezurückgibt (keine Weiterleitungen);Default()liefert den gemeinsamen Client mitDefaultTimeout = 15s.internal/statuspage/statuspage.go:NewHTTPCheckernutzt jetzthttpclient.Default()statt eines ungebundenen&http.Client{}.internal/moduletrust/fetch.go:FetchJWKSFromURLnutzt beiclient == niljetzthttpclient.Default()statthttp.DefaultClient.- Architekturtest
TestNoUnboundedDefaultClientInProductionCodeininternal/httpclient/httpclient_test.go: durchsucht nurinternal/undcmd/(die eigenständigen Moduledms/,archive/,mail/,connect/,ai/,workflow/liegen zwar im selben Repo, sind aber eigene Go-Module mit eigenem Architekturtest und daher hier bewusst ausgeklammert). Erkennt zusätzlich zuhttp.DefaultClient/http.Get|Post|Head|PostForm(auch den ungebundenenhttp.Client{}(genau das Muster, das instatuspage.gogefunden wurde).
Prüfungen
| # | Prüfung | Ergebnis |
|---|---|---|
| 1 | Hängender Testserver: Aufruf über internal/statuspage/internal/moduletrust bricht nach ~15s ab statt unbegrenzt zu warten |
bestanden – TestClientGivesUpOnHangingServer (via internal/httpclient, das beide Aufrufer jetzt nutzen): httptest-Server hängt endlos, New(200ms).Get(...) liefert nach Zeitlimit einen Fehler statt unbegrenzt zu warten |
| 2 | Testserver mit Weiterleitung: Aufruf folgt der Weiterleitung nicht | bestanden – TestClientDoesNotFollowRedirects: Weiterleitungsziel-Handler ruft t.Error auf, falls er je erreicht wird; Default().Do(req) liefert den 307 der Weiterleitungsantwort selbst, das Ziel wird nie aufgerufen |
| 3 | Architekturtest schlägt fehl, wenn http.DefaultClient/http.Client{} wieder eingeführt wird (echt provoziert, nicht nur behauptet) |
bestanden – real provoziert: internal/moduletrust/fetch.go testweise auf client = http.DefaultClient zurückgesetzt, go test ./internal/httpclient/... -run TestNoUnbounded schlägt mit exakter Datei:Zeile-Angabe fehl; Datei danach wiederhergestellt, go build ./... wieder sauber |
Build/Test-Ergebnis (192.168.1.204)
go build ./... -> clean
go vet ./... -> clean
go test ./internal/httpclient/... ./internal/statuspage/... \
./internal/moduletrust/... -v -> alle PASS
(Integrationstests ohne
TEST_ADMIN_DSN übersprungen,
unverändert durch dieses Ticket)
Gesamtergebnis
Bestanden. Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen
real erfüllt. Damit ist F-11/API-19 nun auch für das Core-Root-Modul
nachgezogen; dms, archive, mail bereits durch API-19 abgedeckt.