Files
bongo/docs/release-testing-0.7.md
T
2026-07-26 17:26:37 +02:00

23 KiB

Bongo 0.7.0 release test matrix

This matrix is the release gate for the 0.7.0 tag. A feature is not treated as working merely because it builds, appears in documentation, or is listed in a protocol capability response.

Test-run rules

Three ordered passes are required. Use PASS, FAIL, or N/A: reason in every result cell; an empty cell is untested. N/A is allowed only for a genuinely optional deployment mode and never for a feature advertised by the tested configuration.

R1 is the implementation and repair pass. Test every row in order. When a row fails, fix it, add automated regression coverage where practical, reinstall, and repeat that row until it passes. Earlier R1 results remain useful; R1 is complete only after every row has produced at least one passing result.

R2 starts from the first row only after R1 is entirely green. Its purpose is to find regressions introduced while fixing later R1 rows. A failure is fixed and retested, then R2 continues. R3 starts only after R2 is entirely green and is the final complete regression pass. The 0.7.0 tag requires every applicable R3 row to pass.

Each result links to evidence recording the Git commit, package build, configuration checksum, compiler, machine, and date used for that individual test. Therefore fixes during R1 or R2 remain traceable without pretending the whole pass used one immutable source snapshot.

Pass Started Finished Evidence index Result
R1 implementation/repair 2026-07-19 R1 evidence In progress
R2 regression
R3 final regression

The disposable test domain, users, passwords, private keys, captured messages, and scanner samples must not be reused in production. Secret material belongs only in the pass evidence directory, which must not be committed.

Build, portability, and packages

ID Test R1 R2 R3
BLD-01 Clean GCC debug build with actionable warnings enabled PASS
BLD-02 Complete GCC CTest suite PASS
BLD-03 Clean Clang debug build with the same feature set PASS
BLD-04 Complete Clang CTest suite PASS
BLD-05 ASan and UBSan build plus unit and protocol sessions PASS
BLD-06 LeakSanitizer run over startup, delivery, access, and shutdown PASS
BLD-07 Separate ThreadSanitizer concurrency run PASS
BLD-08 32-bit x86 build and tests without pointer/size truncation PASS
BLD-09 ARMv5 build with the supported baseline toolchain PASS
BLD-10 ARMv7 hard-float build and tests PASS
BLD-11 AArch64 build and tests PASS
BLD-12 CPack binary packages install into a clean staging root PASS
BLD-13 CPack source archive has no -linux, VCS, build, or private files PASS
BLD-14 Gentoo live ebuild builds, tests, installs, and passes package QA PASS
BLD-15 Debian package builds and installs on the target Debian release PASS
BLD-16 /usr, /usr/local, lib/lib64, sysconf, state, and runtime paths follow FHS PASS
BLD-17 Install, upgrade, reinstall, and uninstall preserve/remove documented state PASS
BLD-18 Installed shared libraries have complete dependencies and valid SONAMEs PASS
BLD-19 Man pages, translations, Web assets, docs, units, and examples are installed PASS

Debian Trixie release bundle

The Gitea release workflow must not silently use an unpatched distribution Mailutils or an arbitrary system copy of libsrs2. It must fetch the source for both dependencies, apply the maintained Mailutils Sieve repair, and rebuild both as native Debian Trixie source and binary packages. In particular, the archived historical libsrs2 .deb files must never be copied into the release bundle. They are input references for compatibility testing only; the release packages must be newly produced from the archived libsrs2 source on Trixie. The workflow then installs those freshly built development packages before configuring Bongo and builds Bongo against those exact headers and libraries.

The Trixie release ZIP must contain the resulting Mailutils and libsrs2 binary packages as well as their complete Debian source-package artifacts (.dsc, upstream source archive, Debian patch archive, and .changes/.buildinfo where produced). BLD-15 fails if an old libsrs2 binary package is bundled, if either dependency was obtained only from the runner filesystem, if the Bongo link step resolves a different copy, or if any of these redistributable build inputs and outputs is absent from the ZIP.

Setup, configuration, and service lifecycle

ID Test R1 R2 R3
CFG-01 Fresh curses setup with sane defaults and correctly placed prompts PASS
CFG-02 Setup is safe and idempotent when repeated PASS
CFG-03 bongo-admin config check, edit, sync, rollback, and manager reload PASS
CFG-04 Suffixless config, alias, SSL, DKIM, DMARC, and ACME directory layout PASS
CFG-05 One-shot migration recognises historical names and visibly moves old files PASS
CFG-06 Alias fragments support aliases only, domains only, or both PASS
CFG-07 Scanner editor preserves unrelated settings and restores on failure PASS
CFG-08 Reverse-proxy, HAProxy, direct HTTP, and direct HTTPS validation paths PASS
CFG-09 Self-signed GnuTLS certificate/key generation and permission checks PASS
CFG-10 Existing certificate/key validation and safe rejection of broken pairs PASS
CFG-11 DKIM/SPF/DMARC discovery, key import/generation, DNS hints, and task PASS
CFG-12 Manager start, reload, restart, clean stop, stale PID, and crash recovery PASS
CFG-13 Every agent starts as intended; permanent/effective privilege drops and supervisor exceptions are bounded PASS
CFG-14 tmpfiles creates runtime paths; package contains no runtime PID directories PASS
CFG-15 systemd ordering, hardening, scanner timer, and worker scheduling PASS
CFG-16 Timezone cache rebuild uses the installed checked-in snapshot PASS

Store and Queue

ID Test R1 R2 R3
STQ-01 New users receive independent stores and standard folders PASS
STQ-02 Local message survives Queue-to-Store delivery byte-for-byte PASS
STQ-03 Queue free-space calculation is correct on 32/64-bit and reserves space PASS
STQ-04 Full-disk and unreadable-spool failures defer safely without mail loss PASS
STQ-05 Retry, expiry, bounce, listing, hold/release, and deletion PASS
STQ-06 Concurrent delivery/read/move/delete/restart preserves integrity PASS
STQ-07 Backup/export and restore reproduce mail, metadata, contacts, calendars PASS
STQ-08 Invalid commands, oversized lines, and unauthorised access fail safely PASS
STQ-09 Per-user mail quota excludes contacts/calendars and atomically blocks concurrent growth PASS
STQ-10 Queue/SMTP and external collection map Store 5220 to quota-exceeded delivery without data loss PASS
STQ-11 Lowered/unlimited limits, large sizes, upgrade migration, backup and restore preserve quota state PASS
STQ-12 Bounded 128-KiB collector flood reaches a small test quota without exceeding it, duplicating mail, or deleting the first message that was not durably imported PASS

SMTP receive, submission, and delivery

ID Test R1 R2 R3
SMTP-01 Port 25 greeting, HELO, EHLO, NOOP, RSET, HELP, VRFY policy, QUIT PASS
SMTP-02 Port 587 STARTTLS submission with shared GSASL authentication PASS
SMTP-03 Port 465 implicit TLS submission PASS
SMTP-04 Trusted port 26 accepts only configured networks and applies limits PASS
SMTP-05 Internal sender/domain normalisation uses peer DNS/IP mapping safely PASS
SMTP-06 Local authenticated delivery from test1 to test2 PASS
SMTP-30 curl, swaks, Xeams, GNU Mailutils, and paced Telnet delivery over authenticated submission and unauthenticated port 25/26 PASS
SMTP-31 Unprivileged sendmail-compatible local submission without the Bongo system credential PASS
SMTP-32 Telnet activity resets the configured per-operation timeout; abandoned port 25/26 sessions close PASS
SMTP-33 Load threshold gives newly accepted inbound, trusted-device, and submission sessions the short stress timeout PASS
SMTP-07 Internet delivery prefers STARTTLS and follows opportunistic fallback PASS
SMTP-08 Required TLS and REQUIRETLS defer rather than downgrade PASS
SMTP-27 DANE takes precedence; MTA-STS enforce/testing/cache and MX wildcard policy
SMTP-09 Relayhost hostname, port, TLS, authentication, failure, and recovery
SMTP-10 Open-relay tests reject unauthenticated/untrusted third-party relay
SMTP-11 SIZE exact limit, over-limit, absent size, and disk-space responses
SMTP-12 PIPELINING ordering and error recovery
SMTP-13 8BITMIME remains byte-correct
SMTP-14 DSN RET, ENVID, NOTIFY, and ORCPT cases
SMTP-15 CHUNKING/bounded BDAT, including zero/last and malformed chunks
SMTP-16 BINARYMIME remains unadvertised and rejected
SMTP-17 SMTPUTF8 delivery and invalid UTF-8 rejection
SMTP-26 IDNA2008 domains use one canonical A-label in config, aliases, DNS lookup, SMTP and Web compose
SMTP-18 Recipient validation, multiple recipients, partial refusal, aliases
SMTP-19 Domain/address aliases, forwarding loops, and SRS forwarding
SMTP-20 LMTP client uses a disposable status-aware LMTP test daemon
SMTP-21 LMTP per-recipient 2xx, 4xx, 5xx, retry, and duplicate prevention
SMTP-22 XCLIENT/XFORWARD negotiation only to trusted destinations
SMTP-23 Fallback client-address header only for configured trusted peers
SMTP-24 Incoming PROXY v1/v2 only from configured proxy networks
SMTP-25 Malformed commands, long lines, floods, timeout, and disconnect
SMTP-28 TLSRPT preserves the exact DNS policy, aggregates completed UTC days, and emits valid RFC 8460 JSON
SMTP-29 TLSRPT gzip mail/HTTPS delivery, DKIM requirement, random delay, durable retry, expiry, and report-loop suppression

IMAP4rev2, IMAP4rev1, and legacy IMAP4

ID Test R1 R2 R3
IMAP-01 Capability list matches implemented rev2/rev1/legacy behaviour
IMAP-02 Port 143 STARTTLS, pre-TLS LOGINDISABLED, tagged NO for plaintext LOGIN, repeated STARTTLS rejection
IMAP-03 Port 993 TLS, LOGIN, SASL PLAIN, and SASL LOGIN
IMAP-04 CAPABILITY, NOOP, LOGOUT, ID, and NAMESPACE
IMAP-05 LIST, LSUB, extended LIST, LIST-STATUS, hierarchy quoting
IMAP-06 CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE
IMAP-07 SELECT, EXAMINE, STATUS/SIZE, CHECK, CLOSE, UNSELECT
IMAP-08 APPEND, LITERAL+, APPENDLIMIT, flags/date, oversized literals
IMAP-09 FETCH/UID FETCH body, headers, partials, flags, envelope, binary
IMAP-10 STORE/UID STORE add/remove/replace flags and silent variants
IMAP-11 COPY/UID COPY/MOVE/UID MOVE and UIDPLUS response codes
IMAP-12 EXPUNGE/UID EXPUNGE preserve sequence and UID semantics
IMAP-13 SEARCH/UID SEARCH sets, flags, dates, sizes, HEADER/SUBJECT/FROM/TO
IMAP-14 SEARCH BODY/TEXT/NOT/OR/CHARSET, ESEARCH RETURN, saved $ set
IMAP-15 IDLE notifications and DONE with concurrent delivery/disconnect
IMAP-16 ENABLE UTF8=ACCEPT and UTF-8 mailbox/message names
IMAP-17 SPECIAL-USE and CREATE-SPECIAL-USE folders
IMAP-18 Old-client plain IMAP4 subset without rev1/rev2 assumptions
IMAP-19 Invalid states, malformed sets/literals, oversized input, and STARTTLS plaintext-pipeline injection resistance
IMAP-20 Reconnect, simultaneous clients, restart, mailbox consistency
IMAP-21 RFC 9208 capability, GETQUOTA/GETQUOTAROOT, storage units and unknown mailbox handling
IMAP-22 DELETED-STORAGE and [OVERQUOTA] for APPEND/COPY/MOVE; no unadvertised QUOTASET

POP3 and ManageSieve

ID Test R1 R2 R3
POP-01 Port 110 CAPA/STLS; credentials unavailable before TLS; buffered plaintext discarded
POP-02 Port 995 TLS with USER/PASS and shared GSASL mechanisms
POP-03 STAT, LIST, UIDL, RETR, TOP, and dot transparency
POP-04 DELE, RSET, NOOP, QUIT commit, and disconnect rollback
POP-05 UTF8, STLS rejection after UTF8, PIPELINING, response codes, malformed input, timeout
POP-06 Shared Store quota: DELE reserves space until QUIT, RSET/disconnect release none, committed delete frees space
SIEVE-01 Port 4190 greeting, STARTTLS, and GSASL authentication
SIEVE-02 CAPABILITY, HAVESPACE, PUT/CHECK/LIST/GETSCRIPT
SIEVE-03 SETACTIVE, RENAME, DELETE, LOGOUT, and persistence
SIEVE-04 fileinto, envelope, body, variables, vacation extensions
SIEVE-05 Invalid syntax, quota/size, duplicate names, traversal, auth

Authentication and identity

ID Test R1 R2 R3
AUTH-01 New Argon2id and successful PBKDF2/legacy upgrade
AUTH-02 Wrong password, disabled user, throttling, constant-time failure
AUTH-03 Optional TOTP enable/login/disable; field hidden when disabled
AUTH-04 Valid in-memory QR data never written or logged
AUTH-05 Recovery copy-all, one-time atomic use, regeneration
AUTH-06 App-password expiry/revocation/service/network scope
AUTH-07 App-password requirement cannot be enabled while TOTP is off
AUTH-08 Local/LDAP master password follows documented protocol policy
AUTH-09 LDAP/AD lookup, group provisioning, adoption, rejection
AUTH-10 LDAP StartTLS/LDAPS validation and secure bind-secret file
AUTH-11 LDAP outage cache only for outages and expires as configured
AUTH-12 Admin cache status/extend-all audits every user safely
AUTH-13 Rename, aliases, forced logout, and old-name warning task
AUTH-14 Client inventory records useful metadata without secrets

Mail authentication, filtering, antivirus, and antispam

ID Test R1 R2 R3
MAILAUTH-01 SPF pass/fail/softfail/neutral/none/temp/permerror
MAILAUTH-02 Incoming DKIM valid/invalid/multiple/modified/DNS error
MAILAUTH-03 DMARC alignment and none/quarantine/reject/temp policies
MAILAUTH-04 Forged Authentication-Results removed; local result added
MAILAUTH-05 Temporary key signs outbound; independent verification passes
MAILAUTH-06 Missing/unreadable/mismatched/rotated DKIM key safety
MAILAUTH-07 SRS encode/decode/tamper/expiry/bounce/loop handling
SCAN-01 ClamAV clean and EICAR paths
SCAN-02 SpamAssassin ham/spam and score/header handling
SCAN-03 External POP3 and IMAP collection traverse the same ClamAV, SpamAssassin, rules, and final Store quota path as SMTP mail
SCAN-04 Runtime-generated EICAR is rejected/quarantined according to policy and GTUBE receives the configured spam result; neither test silently bypasses a disabled/unreachable scanner
SCAN-03 Scanner unavailable/timeout/malformed/restart policy
SCAN-04 Official/KAM/Heinlein channels, signatures, lint, timer
SCAN-05 Worker detects ClamAV/SA data faults without SA-age false alarm
SCAN-06 Filters, mailing-list detection, folders, vacation, loop prevention
SCAN-07 Quarantine/task creation, ignore, retry, delete, audit

Web, DAV, and external accounts

ID Test R1 R2 R3
WEB-01 Classic login/assets render in current Firefox/Chromium
WEB-02 Login/logout/session/CSRF/cookies/brute-force limiting
WEB-03 Trusted proxy/header chain resists client-address spoofing
WEB-04 Folders/read/compose/reply/forward/attachments/move/delete
WEB-05 HTML sanitisation keeps safe images and blocks active tracking
WEB-06 Identities, external senders, signatures, SMTP selection
WEB-07 Filters/tasks/quarantine/external accounts/app passwords/2FA
WEB-08 English, German, and every installed gettext catalogue load
WEB-09 ICS file import and bounded public-HTTPS holiday subscription into personal/named calendars PASS
DAV-01 CalDAV discovery, CRUD, sync, ETag, and iCalendar
DAV-02 CardDAV discovery, CRUD, sync, ETag, and vCard
DAV-03 DAV master/app-password scope and TLS/proxy policy
EXT-01 Provider presets and manual configuration validation
EXT-02 Multiple LMTP-seeded POP3 source accounts per Bongo user, multiple messages, successful-store-before-delete, empty Cyrus sources
EXT-03 Multiple LMTP-seeded IMAP source accounts per Bongo user, multiple messages, per-account UID state, successful-store-before-delete, empty Cyrus sources
EXT-04 Multiple accounts and identities stay isolated per user
EXT-05 Matching external SMTP identity from Web and SMTP client
EXT-06 Collector TLS/failure/retry/deduplication/secret-safe logs

ACME, administration, observability, and security

ID Test R1 R2 R3
ACME-01 HTTP-01 order/challenge/renew/deploy/agent reload
ACME-02 DNS-01 nsupdate with TSIG and cleanup
ACME-03 DNS-01 Cloudflare and generic provider contract
ACME-04 Multi-domain/wildcard, CA retry limits, failure/rollback
ADM-01 Admin/config/queue/store tools, TUI, help, man pages agree
ADM-02 User/domain/alias/password/rename/config/scanner validation
ADM-03 Structured Web/SMTP/IMAP/POP3/Sieve auth-failure logs
ADM-04 Fail2ban matches failures and not successful logins
SEC-01 No secrets in argv, diagnostics, normal logs, Web responses
SEC-02 Safe modes for auth/TLS/DKIM/SRS/ACME/provider secrets
SEC-03 Secure TLS default; explicit legacy mode isolated/logged
SEC-04 Malformed corpus, limits, traversal, injection, smuggling
SEC-05 Connection/auth/message rate limits resist floods
SEC-06 Restarts during pipeline cause no loss or duplicates
SEC-07 Dependency/CVE/source review has no 0.7 blockers

Required integration fixtures

  • two disposable local users and at least two hosted/alias domains;
  • local DNS able to publish temporary SPF, DKIM, and DMARC records;
  • temporary GnuTLS certificates and a temporary OpenDKIM signing key;
  • ClamAV, SpamAssassin, EICAR, and deterministic ham/spam mail;
  • Xeams DevNull SMTP for captured outbound relay messages;
  • the loopback-only smtp4dev fixture in contrib/testing, providing authenticated STARTTLS and implicit-TLS provider submission plus a capture API for relayhost and external-identity tests;
  • the loopback-only Cyrus fixture in contrib/testing, providing real IMAP, POP3, and LMTP delivery for external collection and forwarding tests;
  • a status-aware LMTP fault fixture which records envelope/message and can return per-recipient 2xx, 4xx, and 5xx responses;
  • disposable LDAP/AD-compatible and ACME/DNS challenge fixtures;
  • old and current client probes, including a basic legacy IMAP4 path.

DevNull and LMTP captures are checked for exact envelope, headers, body, DKIM signature, SRS address, client metadata, and duplicate or missing deliveries. Merely receiving a TCP connection is not a pass.

Web test delivery safety

The automated HTTP-level web suite replaces the queue submission function with an in-process fake, so it cannot send mail outside the test process. Live web mail tests may use only recipients in the configured local test domain. Before using any non-local recipient, configure Bongo's relay host to the Xeams DevNull SMTP listener and verify that direct Internet delivery is disabled. The DevNull capture must then be inspected for the envelope recipients (including Bcc) and for absence of a Bcc message header.

The web release matrix covers session login/logout, optional TOTP, mail folder listing/opening/submission, contact and calendar create/list/update/delete, filters, tasks, external accounts, sender identities and signatures, server administration, and CalDAV/CardDAV CRUD and discovery.