Neues Paket mail/internal/ingestiontestgate, spiegelt das etablierte Muster aus mail/internal/qagate (QA-03) und mail/internal/importtestgate (IMP-09): ein echtes, ausführbares Gate statt einer nur behaupteten Prüfung. IngestionAndImportPackages listet alle 14 aus QA-02s eigener dependsOn-Liste folgenden Pakete (Protokoll-Server, Fehlerbehandlung/ Logging, Import-Pfade). RunTestSuites führt go test -count=1 -p 1 über alle 14 Pakete aus — -p 1 bewusst, da parallele Testbinaries sich bei den echten QA-07-Lasttests gegenseitig CPU-Kontingent wegnehmen und Latenz-Zielwerte durch reine Testhost-Überlastung verfehlen lassen (real beobachtet, mit -p 1 behoben). ScanForKnownErrorPointTests prüft automatisiert, dass die drei in Akzeptanzkriterium 2 namentlich geforderten Fehlerpunkte (Header-Injection, Anhang-Limit, UIDVALIDITY) je einen passenden Regressionstest im zuständigen Paket haben. Gate-Lauf gegen aktuellen Stand real ausgeführt und mit Zeitstempel dokumentiert: BESTANDEN, 14 Pakete grün, alle drei bekannten Fehlerpunkte abgedeckt. Scanner durch Negativtest bewiesen, dass er eine tatsächlich fehlende Abdeckung real erkennt statt immer "bestanden" zu melden. Pflichtprüfung 3 (Zweitperson bestätigt Gate-Ergebnis unabhängig) bleibt strukturell offen — eine einzelne Sitzung kann keine unabhängige zweite Person sein, im Prüfprotokoll dokumentiert (analog zu ING-10 und QA-04). go build/go vet/golangci-lint clean, gesamtes Mail-Modul regressionsfrei getestet.
102 lines
4.4 KiB
Markdown
102 lines
4.4 KiB
Markdown
# QA-02 — Prüfgate Ingestion & Import: Prüfprotokoll
|
||
|
||
Datum: 2026-09-01
|
||
Host: 192.168.1.131 (Build/Test/Lint), rsync + ssh
|
||
Paket: `mail/internal/ingestiontestgate` (neu)
|
||
|
||
## Umsetzung
|
||
|
||
Spiegelt das bereits etablierte Muster aus `mail/internal/qagate`
|
||
(QA-03) und `mail/internal/importtestgate` (IMP-09) — ein echtes,
|
||
ausführbares Prüfgate statt einer nur behaupteten Prüfung:
|
||
|
||
- `IngestionAndImportPackages`: alle 14 Pakete, die aus QA-02s eigener
|
||
`dependsOn`-Liste folgen (ING-10: IMAP/POP3/SMTP/MIME/Folder-State;
|
||
ING-07: protoguard; ING-08: protolog; IMP-04/IMP-09: imapimport;
|
||
IMP-05: hotfolder; IMP-06: virusscan; IMP-07: mailboxconfig; IMP-08:
|
||
syncalert; zugehörig: attachments, mailrules).
|
||
- `RunTestSuites`: führt `go test -count=1 -p 1` über alle 14 Pakete
|
||
aus (`-p 1`: nacheinander statt parallel — mehrere gleichzeitige
|
||
Testbinaries würden sich bei den echten QA-07-Lasttests in
|
||
imap/pop3/smtp gegenseitig CPU-Kontingent wegnehmen und so
|
||
Latenz-Zielwerte durch reine Testhost-Überlastung verfehlen lassen,
|
||
real beobachtet und behoben).
|
||
- `ScanForKnownErrorPointTests`: prüft für die drei in
|
||
Akzeptanzkriterium 2 namentlich geforderten Fehlerpunkte
|
||
(Header-Injection, Anhang-Limit, UIDVALIDITY), ob im jeweils
|
||
zuständigen Paket eine `_test.go`-Datei eine passende Testfunktion
|
||
enthält — automatisiert, nicht nur behauptet.
|
||
|
||
## Pflichtprüfung 1: Gate-Lauf gegen aktuellen Stand von ING-10/IMP-09 dokumentiert
|
||
|
||
`TestRun_RealGateAgainstCurrentIngestionImportState`
|
||
(`ingestiontestgate/gate_test.go`): echter Gate-Lauf gegen den
|
||
aktuellen Quelltext, Ergebnis:
|
||
|
||
```
|
||
# QA-02 Gate-Ergebnis: BESTANDEN
|
||
Zeitstempel (UTC): 2026-09-01T15:35:33Z
|
||
|
||
## Testsuiten (Ingestion & Import, 14 Pakete)
|
||
Bestanden: true
|
||
|
||
## Bekannte Fehlerpunkte — Regressionstest-Stichprobe
|
||
- Header-Injection: abgedeckt=true — TestHeaderWriter_RejectsControlCharsAndCRLFInSubjectAndDisplayName in internal/mailer/mailer_test.go
|
||
- Anhang-Limit: abgedeckt=true — TestParse_OversizedAttachmentRejectedNotMemoryExhausted in internal/mimeparse/mimeparse_test.go
|
||
- UIDVALIDITY: abgedeckt=true — TestRebuild_ChangesUIDValidityOnSimulatedFolderRebuild in internal/folderstate/store_test.go
|
||
```
|
||
|
||
Ergebnis: **BESTANDEN**, dokumentiert mit Zeitstempel.
|
||
|
||
## Pflichtprüfung 2: Stichprobe — mindestens ein Regressionstest je bekanntem Fehlerpunkt vorhanden
|
||
|
||
Durch Pflichtprüfung 1 automatisiert mitgeprüft. Ergänzt um zwei
|
||
eigenständige Bausteintests: `TestScanForKnownErrorPointTests_
|
||
RealPackagesAllCovered` (positiver Nachweis gegen den echten
|
||
Quelltext) und `TestScanForKnownErrorPointTests_DetectsMissingCoverage`
|
||
(Negativtest — beweist, dass der Scanner eine tatsächlich fehlende
|
||
Abdeckung auch real erkennt, nicht nur immer "bestanden" meldet).
|
||
|
||
Ergebnis: **BESTANDEN**.
|
||
|
||
## Pflichtprüfung 3: Zweite Person bestätigt Gate-Ergebnis unabhängig
|
||
|
||
**Nicht durchführbar durch diese Sitzung**, aus demselben strukturellen
|
||
Grund wie bereits bei ING-10 (Stichprobenreview) und QA-04
|
||
(API-Token-Prüfung) dokumentiert: eine einzelne KI-Sitzung kann keine
|
||
unabhängige ZWEITE Person sein, ohne den Zweck der Prüfung (echte
|
||
menschliche Gegenkontrolle) zu unterlaufen. **Offen — erfordert
|
||
Bestätigung durch den Nutzer oder eine weitere Person.** Grundlage für
|
||
dieses Review: der Gate-Bericht oben, reproduzierbar über
|
||
`go test ./internal/ingestiontestgate/... -run TestRun_RealGate` mit
|
||
gesetztem `TEST_TENANT_DSN`/`TEST_MANTICORE_URL`.
|
||
|
||
## Akzeptanzkriterien
|
||
|
||
1. **Gate prüft Testabdeckung und Bestehen aller Ingestion-/
|
||
Import-Testsuiten**: durch Pflichtprüfung 1 belegt.
|
||
2. **Gate prüft, dass bekannte Fehlerpunkte (Header-Injection,
|
||
Anhang-Limit, UIDVALIDITY) durch Tests abgedeckt sind**: durch
|
||
Pflichtprüfung 2 belegt.
|
||
3. **Gate-Ergebnis ist dokumentiert und nachvollziehbar mit
|
||
Zeitstempel**: `GateResult.Report()`, siehe Pflichtprüfung 1.
|
||
|
||
## Build/Vet/Lint/Test — Gesamtmodul
|
||
|
||
```
|
||
go build ./... → OK
|
||
go vet ./... → OK
|
||
golangci-lint run ./... → 0 issues
|
||
go test ./... -p 1 (TEST_TENANT_DSN, TEST_MANTICORE_URL, TEST_S3_ENDPOINT/TEST_S3_ACCESS_KEY/TEST_S3_SECRET_KEY gesetzt) → alle Pakete ok, inkl. neuem internal/ingestiontestgate
|
||
```
|
||
|
||
Keine Regression.
|
||
|
||
## Ergebnis
|
||
|
||
QA-02 erfüllt Akzeptanzkriterium 1–3 mit echten, ausgeführten
|
||
Nachweisen; Pflichtprüfung 3 (Zweitreview) bleibt strukturell offen,
|
||
siehe Abschnitt oben — analog zu ING-10 und QA-04 im Entscheidungs-
|
||
verlauf vermerkt. Freigeschaltet: QA-09 (zusammen mit QA-05/QA-06/
|
||
QA-08).
|